
    hYX                    P   S SK Jr  S SKrS SKJr  S SKJr  SSKJrJ	r	J
r
Jr  SSKJrJrJrJr  SSKJr  SS	KJrJr  SS
KJrJrJrJrJrJrJr  \R<                  " S5      r\R@                  " 5       r!\!RE                  \RF                  " S5      5                 S                     SS jjr$         S                     SS jjr%         S                     SS jjr&         S                     SS jjr'g)    )annotationsN)PathLike)BinaryIO   )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_bomcharset_normalizerz)%(asctime)s | %(levelname)s | %(message)sc
                j   [        U [        [        45      (       d#  [        SR	                  [        U 5      5      5      eU(       aB  [        R                  n
[        R                  [        5        [        R                  [        5        [        U 5      nUS:X  a{  [        R                  S5        U(       aE  [        R                  [        5        [        R                  W
=(       d    [        R                   5        [#        [%        U SSS/ S5      /5      $ UbG  [        R'                  [        S	S
R)                  U5      5        U Vs/ s H  n[+        US5      PM     nnO/ nUbG  [        R'                  [        SS
R)                  U5      5        U Vs/ s H  n[+        US5      PM     nnO/ nXU-  ::  a!  [        R'                  [        SUUU5        SnUnUS:  a  X-  U:  a  [-        X-  5      n[        U 5      [.        :  n[        U 5      [0        :  nU(       a*  [        R'                  [        SR	                  U5      5        O0U(       a)  [        R'                  [        SR	                  U5      5        / nU(       a  [3        U 5      OSnUb,  UR5                  U5        [        R'                  [        SU5        [7        5       n/ n/ nSnSnSn[#        5       n[#        5       n[9        U 5      u  nnUb6  UR5                  U5        [        R'                  [        S[        U5      U5        UR5                  S5        SU;  a  UR5                  S5        U[:        -    GH  nU(       a  UU;  a  M  U(       a  UU;   a  M"  UU;   a  M*  UR=                  U5        SnUU:H  nU=(       a    [?        U5      nUS;   a$  U(       d  [        R'                  [        SU5        M  US;   a$  U(       d  [        R'                  [        SU5        M   [A        U5      n U(       a8  USL a3  [G        USL a  U S[-        S5       OU [        U5      [-        S5       US9  O[G        USL a  U OU [        U5      S US9n Sn!U H  n"[M        UU"5      (       d  M  Sn!  O   U!(       a  [        R'                  [        SUW"5        GMZ  [O        U(       d  SO
[        U5      U[-        X-  5      5      n#U=(       a    USL=(       a    [        U5      U:  n$U$(       a  [        R'                  [        SU5        [-        [        U#5      S-  5      n%[Q        U%S5      n%Sn&Sn'/ n(/ n) [S        U UU#UUUUUU5	       H{  n*U(R5                  U*5        U)R5                  [U        U*UUSL =(       a    S[        U5      s=:*  =(       a    S:*  Os  5      5        U)S    U:  a  U&S-  n&U&U%:  d  U(       d  Mt  USL d  M{    O    U'(       d+  U(       a$  U(       d   U [-        S"5      S RW                  US#S$9  U)(       a  [Y        U)5      [        U)5      -  OSn+U+U:  d  U&U%:  av  UR5                  U5        [        R'                  [        S&UU&[[        U+S'-  S(S)95        U	(       a3  USSU4;   a*  U'(       d#  [%        U UUS/ UUS*9n,UU:X  a  U,nOUS:X  a  U,nOU,nGM[  [        R'                  [        S+U[[        U+S'-  S(S)95        U(       d  []        U5      n-O[_        U5      n-U-(       a3  [        R'                  [        S,R	                  U[G        U-5      5      5        / n.US:w  a?  U( H9  n*[a        U*UU-(       a  S-R)                  U-5      OS5      n/U.R5                  U/5        M;     [c        U.5      n0U0(       a*  [        R'                  [        S.R	                  U0U5      5        [%        U UU+UU0USL d	  UUSS4;   a  UOSUS*9n1UR5                  U15        UUSS4;   a  U+S/:  az  U+S:X  ac  [        R                  S0U1Rd                  5        U(       a.  [        R                  [        5        [        R                  W
5        [#        U1/5      s  $ UR5                  U15        [        U5      (       a  Ub  UU;   a  SU;   ay  SU;   as  URg                  5       n2[        R                  S0U2Rd                  5        U(       a.  [        R                  [        5        [        R                  W
5        [#        U2/5      s  $ UU:X  d  GM  [        R                  S1U5        U(       a.  [        R                  [        5        [        R                  W
5        [#        UU   /5      s  $    [        U5      S:X  a  U(       d  U(       d  U(       a  [        R'                  [        S25        U(       a2  [        R                  S3URd                  5        UR5                  U5        OU(       a  Ub+  U(       a!  U(       a  URh                  URh                  :w  d  Ub'  [        R                  S45        UR5                  U5        O-U(       a&  [        R                  S55        UR5                  U5        U(       a<  [        R                  S6URg                  5       Rd                  [        U5      S-
  5        O[        R                  S75        U(       a.  [        R                  [        5        [        R                  W
5        U$ s  snf s  snf ! [B        [D        4 a     [        R'                  [        SU5         GM  f = f! [H        [J        4 aW  n [        U [J        5      (       d%  [        R'                  [        SU[G        U 5      5        UR5                  U5         Sn A GMC  Sn A ff = f! [H         a4  n [        R'                  [        S!U[G        U 5      5        U%n&Sn' Sn A GNSn A ff = f! [H         aB  n [        R'                  [        S%U[G        U 5      5        UR5                  U5         Sn A GM  Sn A ff = f)8a2  
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, zacp_exclusion is set. use this flag for debugging purpose. limited list of encoding excluded : %s.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_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.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      )ndigits)preemptive_declarationz=%s passed initial chaos probing. Mean measured chaos is %f %%z&{} should target any language(s) of {},z We detected language {} using {}皙?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.)5
isinstance	bytearraybytes	TypeErrorformattypeloggerlevel
addHandlerexplain_handlersetLevelr   lendebugremoveHandlerloggingWARNINGr   r   logjoinr   intr   r   r   appendsetr   r   addr   r   ModuleNotFoundErrorImportErrorstrUnicodeDecodeErrorLookupErrorr   rangemaxr   r   decodesumroundr   r	   r   r
   r!   bestfingerprint)3	sequencessteps
chunk_size	thresholdcp_isolationcp_exclusionpreemptive_behaviourexplainlanguage_thresholdenable_fallbackprevious_logger_levellengthcpis_too_small_sequenceis_too_large_sequenceprioritized_encodingsspecified_encodingtestedtested_but_hard_failuretested_but_soft_failurefallback_asciifallback_u8fallback_specifiedresultsearly_stop_resultssig_encodingsig_payloadencoding_ianadecoded_payloadbom_or_sig_availablestrip_sig_or_bomis_multi_byte_decoderesimilar_soft_failure_testencoding_soft_failedr_multi_byte_bonusmax_chunk_gave_upearly_stop_countlazy_str_hard_failure	md_chunks	md_ratioschunkmean_mess_ratiofallback_entrytarget_languages	cd_ratioschunk_languagescd_ratios_mergedcurrent_matchprobable_results3                                                      H/var/www/html/env/lib/python3.13/site-packages/charset_normalizer/api.py
from_bytesr   !   sU   < i)U!344AHHY
 	
 %+\\/*i.F{ST  1OO1DW__E|IwUBPRSTUU

5IIl#		
 8DD|	"e,|D

6IIl#		
 8DD|	"e,|Du$%

l	
 
qyV^j0(
"%i.3E"E"%i.4D"D

LSS	
 


W^^	
 (* .By)t  %$$%78

N	
 uF)+)+*.N'+K.2,.G)7)9 3I >L+$$\2

W		
   )++$$W-.?M=M\9F"

=!&*%1]%B!5 "
:Q;
 009MJJn
 I%.BJJd
 	*@*O!	$)>%)G ,u4 "+CI.&s;'7#d)D* #& ,u4 "&s;'7'9:*#& +0!$; ],@AA,0) %<
 %JJi$	 )As;/?
 " .t+.O$v- 	 JJ-	 "%SWq[!1 115 ! %!		'	),$ %
   '  !4GA\1B,G,Ga,G R=I-$)$$(99((-=-F7
V &%)
#d)+&--mH-M ENY#i.!@SVi'+;?P+P#**=9JJ0 o+Q7  !gw8J%KK-!-!#+=" !$66)7&"g-%3N"0K

K/C'3		
 %*<]*K4]CJJ8??!3'7#8 	 G#""1&2BCHH-.#   1 # 2)<JJ299$m %  *U2$);Wg(NN  
 #5
" 	}% 0'7CC#% #%D!** ((9OO$9:%}o66%%m4 "###+/AV/K6!6!,>,C,C,EOLL@(( $$_5 56!?"344L(LL1
 $$_5 56!7=#9":;;}	 @@
 7|q.,>JJa
 LLI"++ NN-.^3"++~/I/II'LLUVNN;'LLUVNN>*kLLN##L1	
 	TU_--.NE E Eb $[1 	JJD
 	6 #K0 		a--

O!F	 $**=9		l 
	) JJsA	  1$(!
	)* & 

t!F	 (..}=s   k>ll>l;l;Bn%n%n%n%7o&+l87l8;n"Ann"%
o#/)oo#&
p206p--p2c
                F    [        U R                  5       UUUUUUUUU	5
      $ )zz
Same thing than the function from_bytes but using a file pointer that is already ready.
Will not close the file pointer.
)r   read)
fprP   rQ   rR   rS   rT   rU   rV   rW   rX   s
             r   from_fpr      s5      
	     c
                x    [        U S5       n
[        U
UUUUUUUUU	5
      sSSS5        $ ! , (       d  f       g= f)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   )pathrP   rQ   rR   rS   rT   rU   rV   rW   rX   r   s              r   	from_pathr   >  sB      
dD	R 
 
		s   +
9c
                   [        U [        [        45      (       a  [        U UUUUUUUUU	S9
n
U
(       + $ [        U [        [
        45      (       a  [        U UUUUUUUUU	S9
n
U
(       + $ [        U UUUUUUUUU	S9
n
U
(       + $ )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.
)	rP   rQ   rR   rS   rT   rU   rV   rW   rX   )r-   rE   r   r   r/   r.   r   r   )fp_or_path_or_payloadrP   rQ   rR   rS   rT   rU   rV   rW   rX   guessess              r   	is_binaryr   ]  s    " '#x99!!%%!51+
Z ;C 
	

 
 !!%%!51+
4 ; !!%%!51+
 ;r   )	      皙?NNTFr,   T)rO   zbytes | bytearrayrP   r?   rQ   r?   rR   floatrS   list[str] | NonerT   r   rU   boolrV   r   rW   r   rX   r   returnr   )r   r   rP   r?   rQ   r?   rR   r   rS   r   rT   r   rU   r   rV   r   rW   r   rX   r   r   r   )r   zstr | bytes | PathLikerP   r?   rQ   r?   rR   r   rS   r   rT   r   rU   r   rV   r   rW   r   rX   r   r   r   )	r   r   r   NNTFr,   F)r   z!PathLike | str | BinaryIO | bytesrP   r?   rQ   r?   rR   r   rS   r   rT   r   rU   r   rV   r   rW   r   rX   r   r   r   )(
__future__r   r;   osr   typingr   cdr   r   r	   r
   constantr   r   r   r   mdr   modelsr   r   utilsr   r   r   r   r   r   r   	getLoggerr3   StreamHandlerr6   setFormatter	Formatterr   r   r   r    r   r   <module>r      s   "     R Q  0   
		/	0'')   AB %)%)!% # | || | 	|
 #| #| | | | | |B %)%)!% #   	
 # #     @ %)%)!% # 

 

 
 	

 #
 #
 
 
 
 
 
B %)%)!% #!?<?? ? 	?
 #? #? ? ? ? ? 
?r   