
    j                       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j         d          Z! ej"                    Z#e#$                     ej%        d                      e&ed           Z'de(d<   	 	 	 	 	 	 	 	 	 d3d4d)Z)	 	 	 	 	 	 	 	 	 d3d5d,Z*	 	 	 	 	 	 	 	 	 d3d6d/Z+	 	 	 	 	 	 	 	 	 d7d8d2Z,dS )9    )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_bomcharset_normalizerz)%(asctime)s | %(levelname)s | %(message)sc                "    t          |            S N)r   encodings    `/workspace/show-city-briefing-agent/.venv/lib/python3.11/site-packages/charset_normalizer/api.py<lambda>r    .   s    -CH-M-M)M     )keyz	list[str]IANA_SUPPORTED_MB_FIRST      皙?TF皙?	sequencesbytes | bytearraystepsint
chunk_size	thresholdfloatcp_isolationlist[str] | Nonecp_exclusionpreemptive_behaviourboolexplainlanguage_thresholdenable_fallbackreturnr   c
                    t          | t          t          f          s/t          d                    t          |                               |rJt          j        }
t                              t                     t          
                    t                     t          |           }|dk    rwt                              d           |r9t                              t                     t          
                    |
           t          t!          | dddg d          g          S |At                              t          d	d
                    |                     d |D             }ng }|At                              t          dd
                    |                     d |D             }ng }|||z  k    r't                              t          d|||           d}|}|dk    r||z  |k     rt'          ||z            }t          |           t(          k     }t          |           t*          k    }|r"t                              t          d|           n#|r!t                              t          d|           g }|rt-          |           nd}|6|                    |           t                              t          d|           t1                      }g }g }t1                      } t3          d          t4                    } t3          d          t6                    }d}t1                      }d}d}d}d}d}d}t                      }t                      }t9          |           \  } }!| E|                    d|            t                              t          dt          |!          |            |                    d           d|vr|                    d           |t<          z   D ]}"|r|"|vr
|r|"|v r|"|v r|                    |"           d}#| |"k    }$|$otA          |"          }%|"dv r$|$s"t                              t          d|"           l|"dv r$|$s"t                              t          d|"           |"|v r"t                              t          d|"           	 tC          |"          }&n8# tD          tF          f$ r$ t                              t          d|"           Y w xY w|ru|&st1          tI          |"                    }'nt1          tK          |"                    }'|'&                    |          s%t                              t          d|"|'|           z|r-|&s+||k    r%t                              t          d|"||           |r%|&s#t                              t          d|"           |& o| }(	 |rO|&sMtO          |%s| dt'          d                    n#| t          |!          t'          d                    |"!           n^|(s\|"d"k    r,|$r*tO          | |"!          }#|#r|#d         d#k    r
|#dd         }#n*tO          |%s| n| t          |!          d         |"!          }#nx# tP          tR          f$ rd})t          |)tR                    s/t                              t          d$|"tO          |)                     |                    |"           Y d})~)d})~)ww xY wtU          |$sdnt          |!          |t'          ||z                      }*|&o|#duot          |#          |k     }+|+r!t                              t          d%|"           t'          t          |*          d&z            },tW          |,d'          },d}-d}.g }/g }0	 tY          | |"|*||$|%|!|&|#|(
  
        D ]q}1|/                    |1           |0                     ||1||odt          |          cxk    od'k    nc                      |0d(         |k    r|-dz  }-|-|,k    s|$r|%s nrn# tP          tR          f$ r})|(rJt                              t          d$|"tO          |)                     |                    |"           Y d})~)t                              t          d)|"tO          |)                     |,}-d*}.Y d})~)nd})~)ww xY w|0rt[          |0          t          |0          z  nd}2|.s|r|&s|2|k     r|-|,k     r	 | t'          d+          d         .                    |"d,-           n\# tP          $ rO})t                              t          d.|"tO          |)                     |                    |"           Y d})~)d})~)ww xY w|2|k    s|-|,k    r|                    |"           |"t^          v r |0                    t^          |"                    t                              t          d/|"|-tc          |2d0z  d12                     |	r|"dd|d3d4fv r|.s|#i	 tO          |%s| n| t          |!          d         |"!          }#n9# tP          tR          f$ r% t                              t          d5|"           Y |w xY w|rd}#t!          | |"||$g |#|6          }3|"|k    r|3}n|"dk    r|3}n|3}|(r	 tO          |%s| n| t          |!          d         |"!          }#nc# tP          tR          f$ rO})t                              t          d$|"tO          |)                     |                    |"           Y d})~)9d})~)ww xY wt                              t          d7|"tc          |2d0z  d12                     |&stI          |"          }4ntK          |"          }4|4r"t                              t          d8|"|4           g }5|"dk    r@|4rd9                    |4          nd}6|/D ]$}1 ||1||6          }7|5                    |7           %te          |5          }8|8r"t                              t          d:|8|"           t!          | |"|2|$|8|r|"|ddfv r|#nd|6          }9|                    |9           |r|&s|2d;k     r|dz  }|"|ddfv r|2d<k     r|2dk    rmt                              d=|9j3                   |r9t                              t                     t          
                    |
           t          |9g          c S |                    |9           t          |          r|||v rd|v rd|v r|4                                }:|:J t                              d=|:j3                   |r9t                              t                     t          
                    |
           t          |:g          c S |si|&sg|8rtW          d> |8D             d?          nd};|;d@k    rBd|v r>d|v r:d*}|0                    |4           t                              t          dA|"|2|;           |so|&rm|+rk|#it          |#          |dBz  k     rS|"dCvrOd|v rKd|v rGd*}t                              t          dD|"|2t          |#          |t          |#          |z  d0z             |"| k    rnt                              dE|"           |r9t                              t                     t          
                    |
           t          ||"         g          c S t          |          dk    r|s|s|r t                              t          dF           |r6t                              dG|j3                   |                    |           n{|r||r|r|j5        |j5        k    s|0t                              dH           |                    |           n1|r/t                              dI           |                    |           |rDt                              dJ|4                                j3        t          |          dz
             nt                              dK           |r9t                              t                     t          
                    |
           |S )Laf  
    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                .    g | ]}t          |d           S Fr   .0cps     r   
<listcomp>zfrom_bytes.<locals>.<listcomp>l   "    DDD	"e,,DDDr!   zacp_exclusion is set. use this flag for debugging purpose. limited list of encoding excluded : %s.c                .    g | ]}t          |d           S r<   r=   r>   s     r   rA   zfrom_bytes.<locals>.<listcomp>w   rB   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   rI   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      )ndigitsrG   rH   z>%s does not decode the whole payload: fallback entry withheld.)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{Gz?r'   z.Encoding detection: %s is most likely the one.c              3      K   | ]	\  }}|V  
d S r    )r?   _vs      r   	<genexpr>zfrom_bytes.<locals>.<genexpr>  s&      4441aQ444444r!   )defaultg      ?zyDefinitive match found: %s (chaos=%.3f, coherence=%.2f). Encodings targeting different language families will be skipped.g\(\?>	   rI   r9   rG   rH   	utf_16_be	utf_16_le	utf_32_be	utf_32_le	utf_8_sigzjMulti-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/   r1   r2   r4   r5   r6   previous_logger_levellengthis_too_small_sequenceis_too_large_sequenceprioritized_encodingsspecified_encodingtestedtested_but_hard_failuretested_but_soft_failuresoft_failure_skipcached_mess_ratiocached_coherence_ratiodefinitive_match_founddefinitive_target_languages post_definitive_sb_success_countPOST_DEFINITIVE_SB_CAPmb_definitive_match_found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enc_languagesdeferred_decodinge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lg_inclusionchunk_languagescd_ratios_mergedcurrent_matchprobable_resultbest_coherences<                                                               r   
from_bytesr   2   s   < i)U!344 
AHHY 
 
 	
  %+\/***i..F{{STTT 	3  111OO1222|IwUBPRSSTUUU

5IIl##		
 	
 	
 ED|DDD

6IIl##		
 	
 	
 ED|DDD*u$%%

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

L	
 	
 	
 	

 
 


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

N	
 	
 	
 uuF)+)+"%%% 0	$///
;;4Yt444_EE $),/EE -.$"# ',*.N'+K.2,..G)7)9)9 3I > >L+$$Q555

W		
 	
 	
   )))+++$$W---.1HH V< V< 	M== 	M\99F""

=!!!&*%1]%B!5 "
:Q;
 ;
 0009M0JJn  
 I%%.B%JJd  
  ---JJk  
 	*@*O*O!!#[1 	 	 	JJD  
 H	 " 	( J #$6}$E$E F F #$9-$H$H I I --.IJJ 

x!!/    #	)	 14JJJJJj0&   
 % 	-B 	JJU  
  &%C.C*C 	*	$ -B   0E	+CII+..&s;'7'7#d))'CD*     '  !G++0D+&)!!.' ' 'O ' >?1+=+I+I*9!""*=&) $4?II!*3{+;+;+=+=!>!.' ' 'O #K0 		 		 		a-- 

O!FF	   $**=999HHHH		 )?AAs;/?/?
 
 " .t+.O$$v- 	  	JJ-	   "%SWWq[!1!1 1155 ! %!		5	),$ %!      '''  %%!?A\):):$?$?$?$?a$?$?$?$?    R=I--$)$$(999( :1A : E
 	) 	) 	) !  

O!FF	   (..}===JJsA	    1$(!!!!!!/	)2 EN!VY#i..!@!@SV
 &	%	 *	  )++ #444
#d))++&--mH-MMMM%   

t!FF	   (..}=== i''+;?P+P+P#**=999 666!(()?)NOOOJJ0 o+Q777    -1!W&8(HMN N-N #*!*- (8!C		%.s;/?/?/A/A%B%2+ + + /< ! ! !

!\)  
 !! - /*.!-!(#+=" " " !$666)7&&"g--%3NN"0K 	"%  0;		&s;'7'7'9'9:*# # # '4   

O!FF	   (..}=== 	

K/C'333		
 	
 	
 % 	D*<]*K*K4]CC 	JJ8 	   	 G## /?H)***D  # 2 2"8"8& # #   11111)<< 	JJ2 	   %  . %);Wg(NNN  
 #5
 
 
" 	}%%% #	2)	2  $&&,1, 0'7CCC#%% #%%D!*    ;((999OO$9:::%}o66666%%m444 "##	5#+/AV/K/K6!!6!!05577O"...LL@(    7$$_555 5666!?"344444 & 	.C 	 $44#3444cBBBB 
 $$F):):w&?P?P)-&+223CDDD

 P!#"   *	%	 !	  +O$$v}44
  6!!6!!(,%JJ|O$$O$$v-3   L((LL1  
  7$$_555 5666!7=#9":;;;;; ) 7||q 	. 	,> 	JJa  
  	+LLI"+   NN-....	++3 4 # 4  +~/III'LLUVVVNN;'''' 	+LLUVVVNN>*** VkLLNN#LL1	
 	
 	
 	
 	TUUU /_----...Ns   #R332S('S(?B/Y//[$ A[[$B
`b2)Ab-53b--b2+,d
e1"Ae,,e1*h//2i%$i%*kl&Al!!l&fpr   c
                V    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.
    )r   read)
r   r*   r,   r-   r/   r1   r2   r4   r5   r6   s
             r   from_fpr   *  s<      
		  r!   pathstr | bytes | PathLikec
                    t          | d          5 }
t          |
|||||||||	
  
        cddd           S # 1 swxY 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)openr   )r   r*   r,   r-   r/   r1   r2   r4   r5   r6   r   s              r   	from_pathr   H  s      
dD		 
R 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   6::fp_or_path_or_payload!PathLike | str | BinaryIO | bytesc
                   t          | t          t          f          rt          | |||||||||	
  
        }
nOt          | t          t
          f          rt          | |||||||||	
  
        }
nt          | |||||||||	
  
        }
|
 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/   r1   r2   r4   r5   r6   )r_   rv   r   r   ra   r`   r   r   )r   r*   r,   r-   r/   r1   r2   r4   r5   r6   guessess              r   	is_binaryr   g  s    " '#x99 ,
!!%%!51+
 
 
 
	

 
 
 !!%%!51+
 
 
 !!%%!51+
 
 
 ;r!   )	r$   r%   r&   NNTFr'   T)r(   r)   r*   r+   r,   r+   r-   r.   r/   r0   r1   r0   r2   r3   r4   r3   r5   r.   r6   r3   r7   r   )r   r   r*   r+   r,   r+   r-   r.   r/   r0   r1   r0   r2   r3   r4   r3   r5   r.   r6   r3   r7   r   )r   r   r*   r+   r,   r+   r-   r.   r/   r0   r1   r0   r2   r3   r4   r3   r5   r.   r6   r3   r7   r   )	r$   r%   r&   NNTFr'   F)r   r   r*   r+   r,   r+   r-   r.   r/   r0   r1   r0   r2   r3   r4   r3   r5   r.   r6   r3   r7   r3   )-
__future__r   logging	functoolsr   osr   typingr   cdr   r	   r
   r   constantr   r   r   r   r   mdr   modelsr   r   utilsr   r   r   r   r   r   	getLoggerre   StreamHandlerrh   setFormatter	Formattersortedr#   __annotations__r   r   r   r   rU   r!   r   <module>r      s   " " " " " " "                                                  0 0 0 0 0 0 0 0                
	/	0	0'''))   GABB   &,VMM& & &      %)%)!% # u u u u ut %)%)!% #     @ %)%)!% # 
 
 
 
 
B %)%)!% #!? ? ? ? ? ? ?r!   