a
    &ñ»jd�  ã                   @  sx  U d dl mZ d dlZd dlmZ d dlmZ d dlmZ ddl	m
Z
mZmZmZ ddlmZmZmZmZmZ dd	lmZ dd
lmZmZ ddlmZmZmZmZmZmZ e  d¡Z!e "¡ Z#e# $e %d¡¡ e&edd„ d�Z'de(d< d.ddddddddddddœd d!„Z)d/d"ddddddddddd#œd$d%„Z*d0d&ddddddddddd'œd(d)„Z+d1d*ddddddddddd+œd,d-„Z,dS )2é    )ÚannotationsN)Ú	lru_cache)ÚPathLike)ÚBinaryIOé   )Úcoherence_ratioÚencoding_languagesÚmb_encoding_languagesÚmerge_coherence_ratios)ÚIANA_SUPPORTEDÚIANA_SUPPORTED_SIMILARÚTOO_BIG_SEQUENCEÚTOO_SMALL_SEQUENCEÚTRACE)Ú
mess_ratio)ÚCharsetMatchÚCharsetMatches)Úany_specified_encodingÚcut_sequence_chunksÚ	iana_nameÚidentify_sig_or_bomÚis_multi_byte_encodingÚshould_strip_sig_or_bomZcharset_normalizerz)%(asctime)s | %(levelname)s | %(message)sc                 C  s
   t | ƒ S ©N)r   ©Úencoding© r   ú<E:\soccer\ml_env\Lib\site-packages\charset_normalizer/api.pyÚ<lambda>.   ó    r   )Úkeyz	list[str]ÚIANA_SUPPORTED_MB_FIRSTé   é   çš™™™™™É?TFçš™™™™™¹?zbytes | bytearrayÚintÚfloatzlist[str] | NoneÚboolr   )Ú	sequencesÚstepsÚ
chunk_sizeÚ	thresholdÚcp_isolationÚcp_exclusionÚpreemptive_behaviourÚexplainÚlanguage_thresholdÚenable_fallbackÚreturnc
           <      C  sò  t | ttfƒs td t| ƒ¡ƒ‚|r>tj}
t t	¡ t 
t¡ t| ƒ}|dkrˆt d¡ |rpt t	¡ t 
|
¡ tt| dddg dƒgƒS |dur´t td	d
 |¡¡ dd„ |D ƒ}ng }|durät tdd
 |¡¡ dd„ |D ƒ}ng }||| k�rt td|||¡ d}|}|dk�r4|| |k �r4t|| ƒ}t| ƒtk }t| ƒtk}|�rbt td|¡ n|�rvt td|¡ g }|�rˆt| ƒnd}|du�r®| |¡ t td|¡ tƒ }g }g }tƒ }tdd�tƒ}tdd�tƒ}d}tƒ }d}d}d}d}d}d}tƒ }tƒ }t| ƒ\} }!| du�rB| d| ¡ t tdt|!ƒ| ¡ | d¡ d|v�r`| d¡ |t D �	]Š}"|�r‚|"|v�r‚�qh|�r–|"|v �r–�qh|"|v �r¤�qh| |"¡ d}#| |"k}$|$�oÆt |"ƒ}%|"dv �rê|$�sêt td|"¡ �qh|"dv �r|$�st td|"¡ �qh|"|v �r(t td|"¡ �qhzt!|"ƒ}&W n, t"t#f�y`   t td|"¡ Y �qhY n0 |�rª|&�s|tt$|"ƒƒ}'ntt%|"ƒƒ}'|' &|¡�sªt td|"|'|¡ �qh|�rÖ|&�sÖ||k�rÖt td|"||¡ �qh|�rô|&�sôt td |"¡ �qh|& �o | }(zª|�rD|&�sDt'|%�s(| dtd!ƒ… n| t|!ƒtd!ƒ… |"d"� nf|(�sª|"d#k�rˆ|$�rˆt'| |"d"�}#|#�rª|#d d$k�rª|#dd… }#n"t'|%�s”| n| t|!ƒd… |"d"�}#W nb t(t)f�y }) zDt |)t)ƒ�sât td%|"t'|)ƒ¡ | |"¡ W Y d})~)�qhW Y d})~)n
d})~)0 0 t*|$�sdnt|!ƒ|t|| ƒƒ}*|&�oL|#du�oLt|#ƒ|k }+|+�rbt td&|"¡ tt|*ƒd' ƒ},t+|,d(ƒ},d}-d}.g }/g }0z”t,| |"|*||$|%|!|&|#|(ƒ
D ]t}1|/ |1¡ |0 ||1||�oâdt|ƒ  k�oÞd(kn  ƒ¡ |0d) |k�rþ|-d7 }-|-|,k�s|$�r¨|%�s¨ �q�q¨W nx t(t)f�y˜ }) zZ|(�rht td%|"t'|)ƒ¡ | |"¡ W Y d})~)�qht td*|"t'|)ƒ¡ |,}-d+}.W Y d})~)n
d})~)0 0 |0�r°t-|0ƒt|0ƒ nd}2|.�sL|�rL|&�sL|2|k �rL|-|,k �rLz| td,ƒd… j.|"d-d.� W nR t(�yJ }) z8t td/|"t'|)ƒ¡ | |"¡ W Y d})~)�qhW Y d})~)n
d})~)0 0 |2|k�s`|-|,k�rf| |"¡ |"t/v �r‚| 0t/|" ¡ t td0|"|-t1|2d1 d2d3�¡ |	�rh|"dd|d4d5fv �rh|.�sh|#du �r(z&t'|%�sØ| n| t|!ƒd… |"d"�}#W n, t(t)f�y   t td6|"¡ Y �qhY n0 |�r(d}#t| |"||$g |#|d7�}3|"|k�rN|3}n|"dk�r^|3}n|3}�qh|(�rêz&t'|%�sz| n| t|!ƒd… |"d"�}#W nV t(t)f�yè }) z8t td%|"t'|)ƒ¡ | |"¡ W Y d})~)�qhW Y d})~)n
d})~)0 0 t td8|"t1|2d1 d2d3�¡ |&�	st$|"ƒ}4nt%|"ƒ}4|4�	r4t td9|"|4¡ g }5|"dk�	rx|4�	rRd: |4¡nd}6|/D ]}1||1||6ƒ}7|5 |7¡ �	qZt2|5ƒ}8|8�	r–t td;|8|"¡ t| |"|2|$|8|�	r¸|"|ddfv �	r¼|#nd|d7�}9| |9¡ |�	rî|&�	sî|2d<k �	rî|d7 }|"|ddfv �
rR|2d=k �
rR|2dk�
rHt d>|9j3¡ |�
r:t t	¡ t 
|
¡ t|9gƒ  S | |9¡ t|ƒ�
rÐ|du �
sp||v �
rÐd|v �
rÐd|v �
rÐ| 4¡ }:|:du�
sšJ ‚t d>|:j3¡ |�
rÂt t	¡ t 
|
¡ t|:gƒ  S |�s:|&�s:|8�
røt+d?d@„ |8D ƒddA�nd};|;dBk�r:d|v �r:d|v �r:d+}| 0|4¡ t tdC|"|2|;¡ |�s°|&�r°|+�r°|#du�r°t|#ƒ|dD k �r°|"dEv�r°d|v �r°d|v �r°d+}t tdF|"|2t|#ƒ|t|#ƒ| d1 ¡ |"| k�rht dG|"¡ |�ràt t	¡ t 
|
¡ t||" gƒ  S �qht|ƒdk�r¦|�s|�s|�r"t tdH¡ |�rBt dI|j3¡ | |¡ nd|�rR|du �sv|�rl|�rl|j5|j5k�sv|du�rŒt dJ¡ | |¡ n|�r¦t dK¡ | |¡ |�rÊt dL| 4¡ j3t|ƒd ¡ n
t dM¡ |�rît t	¡ t 
|
¡ |S )Naf  
    Given a raw bytes sequence, return the best possibles charset usable to render str objects.
    If there is no results, it is a strong indicator that the source is binary/not text.
    By default, the process will extract 5 blocks of 512o each to assess the mess and coherence of a given sequence.
    And will give up a particular code page after 20% of measured mess. Those criteria are customizable at will.

    The preemptive behavior DOES NOT replace the traditional detection workflow, it prioritize a particular code page
    but never take it for granted. Can improve the performance.

    You may want to focus your attention to some code page or/and not others, use cp_isolation and cp_exclusion for that
    purpose.

    This function will strip the SIG in the payload/sequence every time except on UTF-16, UTF-32.
    By default the library does not setup any handler other than the NullHandler, if you choose to set the 'explain'
    toggle to True it will alter the logger configuration to add a StreamHandler that is suitable for debugging.
    Custom logging format and handler can be set manually.
    z3Expected object of type bytes or bytearray, got: {}r   z<Encoding detection on empty bytes, assuming utf_8 intention.Úutf_8g        FÚ Nz`cp_isolation is set. use this flag for debugging purpose. limited list of encoding allowed : %s.z, c                 S  s   g | ]}t |d ƒ‘qS ©F©r   ©Ú.0Úcpr   r   r   Ú
<listcomp>l   r   zfrom_bytes.<locals>.<listcomp>zacp_exclusion is set. use this flag for debugging purpose. limited list of encoding excluded : %s.c                 S  s   g | ]}t |d ƒ‘qS r6   r7   r8   r   r   r   r;   w   r   z^override steps (%i) and chunk_size (%i) as content does not fit (%i byte(s) given) parameters.r   z>Trying to detect encoding from a tiny portion of (%i) byte(s).zIUsing lazy str decoding because the payload is quite large, (%i) byte(s).z@Detected declarative mark in sequence. Priority +1 given for %s.)Úmaxsizeé   zIDetected a SIG or BOM mark on first %i byte(s). Priority +1 given for %s.Úascii>   Úutf_16Úutf_32z\Encoding %s won't be tested as-is because it require a BOM. Will try some sub-encoder LE/BE.>   Úutf_7zREncoding %s won't be tested as-is because detection is unreliable without BOM/SIG.zY%s is deemed too similar to a code page that was already considered unsuited. Continuing!z2Encoding %s does not provide an IncrementalDecoderzbSkipping %s: definitive match already found, this encoding targets different languages (%s vs %s).zXSkipping %s: already accumulated %d same-family results after definitive match (cap=%d).zCSkipping single-byte %s: multi-byte definitive match already found.g    €„Ar   rA   u   ï»¿z9Code page %s does not fit given bytes sequence at ALL. %szpCode page %s is a multi byte encoding table and it appear that at least one character was encoded using n-bytes.é   é   éÿÿÿÿzaLazyStr Loading: After MD chunk decode, code page %s does not fit given bytes sequence at ALL. %sTg     jè@Ústrict)Úerrorsz^LazyStr Loading: After final lookup, code page %s does not fit given bytes sequence at ALL. %szc%s was excluded because of initial chaos probing. Gave up %i time(s). Computed mean chaos is %f %%.éd   é   )Úndigitsr?   r@   z>%s does not decode the whole payload: fallback entry withheld.)Zpreemptive_declarationz=%s passed initial chaos probing. Mean measured chaos is %f %%z&%s should target any language(s) of %sú,z We detected language %s using %sg{®Gáz”?r%   z.Encoding detection: %s is most likely the one.c                 s  s   | ]\}}|V  qd S r   r   )r9   Ú_Úvr   r   r   Ú	<genexpr>À  r   zfrom_bytes.<locals>.<genexpr>)Údefaultg      à?zyDefinitive match found: %s (chaos=%.3f, coherence=%.2f). Encodings targeting different language families will be skipped.g\�Âõ(\ï?>	   Ú	utf_32_beÚ	utf_16_beÚ	utf_32_leÚ	utf_16_ler@   Z	utf_8_sigr4   rA   r?   zjMulti-byte definitive match: %s (chaos=%.3f, decoded=%d/%d=%.1f%%). Single-byte encodings will be skipped.zoEncoding detection: %s is most likely the one as we detected a BOM or SIG within the beginning of the sequence.zONothing got out of the detection process. Using ASCII/UTF-8/Specified fallback.z7Encoding detection: %s will be used as a fallback matchz:Encoding detection: utf_8 will be used as a fallback matchz:Encoding detection: ascii will be used as a fallback matchz]Encoding detection: Found %s as plausible (best-candidate) for content. With %i alternatives.z=Encoding detection: Unable to determine any suitable charset.)6Ú
isinstanceÚ	bytearrayÚbytesÚ	TypeErrorÚformatÚtypeÚloggerÚlevelÚ
addHandlerÚexplain_handlerÚsetLevelr   ÚlenÚdebugÚremoveHandlerr   r   ÚlogÚjoinr&   r   r   r   ÚappendÚsetr   r   r   r   Úinsertr!   Úaddr   r   ÚModuleNotFoundErrorÚImportErrorr   r	   ÚintersectionÚstrÚUnicodeDecodeErrorÚLookupErrorÚrangeÚmaxr   ÚsumÚdecoder   ÚupdateÚroundr
   r   ÚbestÚfingerprint)<r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   Zprevious_logger_levelÚlengthZis_too_small_sequenceZis_too_large_sequenceZprioritized_encodingsZspecified_encodingZtestedZtested_but_hard_failureZtested_but_soft_failureZsoft_failure_skipZcached_mess_ratioZcached_coherence_ratioZdefinitive_match_foundZdefinitive_target_languagesZ post_definitive_sb_success_countZPOST_DEFINITIVE_SB_CAPZmb_definitive_match_foundZfallback_asciiZfallback_u8Zfallback_specifiedÚresultsZearly_stop_resultsZsig_encodingZsig_payloadZencoding_ianaZdecoded_payloadZbom_or_sig_availableZstrip_sig_or_bomZis_multi_byte_decoderZenc_languagesZdeferred_decodingÚeZr_Zmulti_byte_bonusZmax_chunk_gave_upZearly_stop_countZlazy_str_hard_failureZ	md_chunksZ	md_ratiosÚchunkZmean_mess_ratioZfallback_entryZtarget_languagesZ	cd_ratiosZlg_inclusionZchunk_languagesZcd_ratios_mergedZcurrent_matchZprobable_resultZbest_coherencer   r   r   Ú
from_bytes2   sP   ÿÿ




üüûýýÿ

ý	

ü




ÿýý
ýýûÿþýûý	ÿÿúþÿú
ü
$
ýÿ
ýü
ö
"ýÿ
ÿÿþü
üÿþýüûü
$

ú
ÿÿþü

ÿú
ýù	

ÿú
ü
$ü
ü
ÿýüþýò
ÿþýÿþ
þ


ÿþþýüþ

	ÿý
ûÿþýüûÿúîíù

ý

þþÿÿýü
ûù	



ý


ry   r   )Úfpr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   c
           
      C  s   t |  ¡ |||||||||	ƒ
S )z†
    Same thing than the function from_bytes but using a file pointer that is already ready.
    Will not close the file pointer.
    )ry   Úread)
rz   r*   r+   r,   r-   r.   r/   r0   r1   r2   r   r   r   Úfrom_fp*  s    ör|   zstr | bytes | PathLike)Úpathr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   c
                 C  sH   t | dƒ�*}
t|
|||||||||	ƒ
W  d  ƒ S 1 s:0    Y  dS )z•
    Same thing than the function from_bytes but with one extra step. Opening and reading given file path in binary mode.
    Can raise IOError.
    ÚrbN)Úopenr|   )r}   r*   r+   r,   r-   r.   r/   r0   r1   r2   rz   r   r   r   Ú	from_pathH  s    ör€   z!PathLike | str | BinaryIO | bytes)Úfp_or_path_or_payloadr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   c
                 C  sz   t | ttfƒr,t| |||||||||	d�
}
nHt | ttfƒrXt| |||||||||	d�
}
nt| |||||||||	d�
}
|
 S )a)  
    Detect if the given input (file, bytes, or path) points to a binary file. aka. not a string.
    Based on the same main heuristic algorithms and default kwargs at the sole exception that fallbacks match
    are disabled to be stricter around ASCII-compatible but unlikely to be a string.
    )	r*   r+   r,   r-   r.   r/   r0   r1   r2   )rS   rj   r   r€   rU   rT   ry   r|   )r�   r*   r+   r,   r-   r.   r/   r0   r1   r2   Zguessesr   r   r   Ú	is_binaryg  sX    öþþöör‚   )	r"   r#   r$   NNTFr%   T)	r"   r#   r$   NNTFr%   T)	r"   r#   r$   NNTFr%   T)	r"   r#   r$   NNTFr%   F)-Ú
__future__r   ÚloggingÚ	functoolsr   Úosr   Útypingr   Úcdr   r   r	   r
   Zconstantr   r   r   r   r   Úmdr   Úmodelsr   r   Úutilsr   r   r   r   r   r   Ú	getLoggerrY   ÚStreamHandlerr\   ÚsetFormatterÚ	FormatterÚsortedr!   Ú__annotations__ry   r|   r€   r‚   r   r   r   r   Ú<module>   s~    	
ÿÿ         ö$                ö$          ö$!         ö