o
    ­}”eiR  ã                   @   sL  d dl Z d dlmZ d dlmZmZmZmZmZ ddl	m
Z
mZmZmZ ddl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mZ e   d
¡Z!e  "¡ Z#e# $e  %d¡¡ 									d(dee&e'f de(de(de)deee*  deee*  de+de+de)de+defdd„Z,									d(dede(de(de)deee*  deee*  de+de+de)de+defd d!„Z-									d(d"ee*e&ef de(de(de)deee*  deee*  de+de+de)de+defd#d$„Z.									d)d%eee*ee&f de(de(de)deee*  deee*  de+de+de)de+de+fd&d'„Z/dS )*é    N)ÚPathLike)ÚBinaryIOÚListÚOptionalÚSetÚUnioné   )Úcoherence_ratioÚencoding_languagesÚmb_encoding_languagesÚmerge_coherence_ratios)ÚIANA_SUPPORTEDÚTOO_BIG_SEQUENCEÚTOO_SMALL_SEQUENCEÚTRACE)Ú
mess_ratio)ÚCharsetMatchÚCharsetMatches)Úany_specified_encodingÚcut_sequence_chunksÚ	iana_nameÚidentify_sig_or_bomÚis_cp_similarÚis_multi_byte_encodingÚshould_strip_sig_or_bomZcharset_normalizerz)%(asctime)s | %(levelname)s | %(message)sé   é   çš™™™™™É?TFçš™™™™™¹?Ú	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rGt d¡ |r;t t	¡ t 
|
p9tj¡ tt| dddg dƒgƒS |dur]t td	d
 |¡¡ dd„ |D ƒ}ng }|durut tdd
 |¡¡ dd„ |D ƒ}ng }||| krŠt td|||¡ d}|}|dkrš|| |k ršt|| ƒ}t| ƒtk }t| ƒtk}|r²t td |¡¡ n|r½t td |¡¡ g }|rÅt| ƒnd}|dur×| |¡ t td|¡ tƒ }g }g }d}d}d}tƒ }t| ƒ\}}|du�r| |¡ t tdt|ƒ|¡ | d¡ d|v�r| d¡ |t D �]ß}|�r!||v�r!�q|�r+||v �r+�q||v �r2�q| |¡ d}||k}|�oCt|ƒ}|dv �rU|�sUt td|¡ �q|dv �rf|�sft td|¡ �qzt|ƒ}W n t t!f�y€   t td|¡ Y �qw z9|�r¦|du �r¦t"|du �r˜| dtdƒ… n	| t|ƒtdƒ… |d� nt"|du �r®| n| t|ƒd… |d�}W n+ t#t$f�yå } zt |t$ƒ�sÕt td|t"|ƒ¡ | |¡ W Y d}~�qd}~ww d}|D ]} t%|| ƒ�röd} n�qê|�rt td|| ¡ �qt&|�sdnt|ƒ|t|| ƒƒ}!|�o#|du�o#t|ƒ|k }"|"�r.t td |¡ tt|!ƒd! ƒ}#t'|#d"ƒ}#d}$d}%g }&g }'zLt(| ||!||||||ƒ	D ]=}(|& |(¡ |' t)|(||du �oodt|ƒ  k�omd"kn  ƒ¡ |'d# |k�r}|$d7 }$|$|#k�sŠ|�rŒ|du �rŒ n�qPW n! t#�y° } zt td$|t"|ƒ¡ |#}$d}%W Y d}~nd}~ww |%�sí|�rí|�síz| td%ƒd… j*|d&d'� W n# t#�yì } zt td(|t"|ƒ¡ | |¡ W Y d}~�qd}~ww |'�røt+|'ƒt|'ƒ nd})|)|k�s|$|#k�rC| |¡ t td)||$t,|)d* d+d,�¡ |	�rA|dd|fv �rA|%�sAt| ||dg |ƒ}*||k�r7|*}n
|dk�r?|*}n|*}�qt td-|t,|)d* d+d,�¡ |�sYt-|ƒ}+nt.|ƒ}+|+�rlt td. |t"|+ƒ¡¡ g },|dk�rŒ|&D ]}(t/|(||+�r‚d/ |+¡ndƒ}-|, |-¡ �qut0|,ƒ}.|.�r�t td0 |.|¡¡ | t| ||)||.|ƒ¡ ||ddfv �rÒ|)d1k �rÒt d2|¡ |�rÉt t	¡ t 
|
¡ t|| gƒ  S ||k�rót d3|¡ |�rêt t	¡ t 
|
¡ t|| gƒ  S �qt|ƒdk�rM|�s|�s|�rt td4¡ |�rt d5|j1¡ | |¡ n2|�r#|du �s5|�r0|�r0|j2|j2k�s5|du�r@t d6¡ | |¡ n|�rMt d7¡ | |¡ |�r_t d8| 3¡ j1t|ƒd ¡ nt d9¡ |�rqt t	¡ t 
|
¡ |S ):af  
    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.
    z4Expected object of type bytes or bytearray, got: {0}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   ó   g | ]}t |d ƒ‘qS ©F©r   ©Ú.0Úcp© r2   ú_/Users/abhinavbhinder/Documents/map/venv/lib/python3.10/site-packages/charset_normalizer/api.pyÚ
<listcomp>[   ó    zfrom_bytes.<locals>.<listcomp>zacp_exclusion is set. use this flag for debugging purpose. limited list of encoding excluded : %s.c                 S   r,   r-   r.   r/   r2   r2   r3   r4   f   r5   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 ({}) byte(s).zIUsing lazy str decoding because the payload is quite large, ({}) byte(s).z@Detected declarative mark in sequence. Priority +1 given for %s.zIDetected a SIG or BOM mark on first %i byte(s). Priority +1 given for %s.Úascii>   Úutf_32Úutf_16z\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.z2Encoding %s does not provide an IncrementalDecoderg    €„A)Úencodingz9Code page %s does not fit given bytes sequence at ALL. %sTzW%s is deemed too similar to code page %s and was consider unsuited already. Continuing!zpCode 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. %sg     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   é   )Úndigitsz=%s passed initial chaos probing. Mean measured chaos is %f %%z&{} should target any language(s) of {}ú,z We detected language {} using {}r   z.Encoding detection: %s is most likely the one.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.)4Ú
isinstanceÚ	bytearrayÚbytesÚ	TypeErrorÚformatÚtypeÚloggerÚlevelÚ
addHandlerÚexplain_handlerÚsetLevelr   ÚlenÚdebugÚremoveHandlerÚloggingÚWARNINGr   r   ÚlogÚjoinÚintr   r   r   ÚappendÚsetr   r   Úaddr   r   ÚModuleNotFoundErrorÚImportErrorÚstrÚUnicodeDecodeErrorÚLookupErrorr   ÚrangeÚmaxr   r   ÚdecodeÚsumÚroundr
   r   r	   r   r:   ÚfingerprintÚbest)/r   r    r!   r"   r#   r$   r%   r&   r'   r(   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fallback_asciiZfallback_u8Zfallback_specifiedÚresultsZsig_encodingZsig_payloadZencoding_ianaZdecoded_payloadZbom_or_sig_availableZstrip_sig_or_bomZis_multi_byte_decoderÚeZsimilar_soft_failure_testZencoding_soft_failedZ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chunk_languagesZcd_ratios_mergedr2   r2   r3   Ú
from_bytes!   sø  ÿÿ



üüûÿþÿþÿ
ý

ü




ÿýýýúÿüÿü€ü
€÷þü
ýÿ
ýü
÷
&ýÿ
ÿÿ€ÿü€öÿþýü
€ø

ú
ÿþýÿ

ü
ÿþ
ýÿþúÿÿþÿ


ý

÷þþÿÿýü
ûù
	


ý


rj   Úfpc
           
      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.
    )rj   Úread)
rk   r    r!   r"   r#   r$   r%   r&   r'   r(   r2   r2   r3   Úfrom_fpö  s   örm   Úpathc
                 C   sH   t | dƒ�}
t|
|||||||||	ƒ
W  d  ƒ S 1 sw   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)Úopenrm   )rn   r    r!   r"   r#   r$   r%   r&   r'   r(   rk   r2   r2   r3   Ú	from_path  s   ö$ÿrq   Úfp_or_path_or_payloadc
                 C   s‚   t | ttfƒrt| |||||||||	d�
}
|
 S t | ttfƒr0t| |||||||||	d�
}
|
 S 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%   r&   r'   r(   )rD   r\   r   rq   rF   rE   rj   rm   )rr   r    r!   r"   r#   r$   r%   r&   r'   r(   Zguessesr2   r2   r3   Ú	is_binary3  s\   ö-ßþþöóörs   )	r   r   r   NNTFr   T)	r   r   r   NNTFr   F)0rR   Úosr   Útypingr   r   r   r   r   Zcdr	   r
   r   r   Zconstantr   r   r   r   Zmdr   Úmodelsr   r   Úutilsr   r   r   r   r   r   r   Ú	getLoggerrJ   ÚStreamHandlerrM   ÚsetFormatterÚ	FormatterrF   rE   rV   Úfloatr\   Úboolrj   rm   rq   rs   r2   r2   r2   r3   Ú<module>   s    $
ÿö
ÿþýü
û
úùø	÷
ö
õ   Zöÿþýü
û
úùø	÷
ö
õ öÿþýü
û
úùø	÷
ö
õ!öÿþýü
û
úùø	÷
öõ