L i/ddlmZddlZddlZddlZddlmZddlmZddl m Z ddl m Z ddl mZddlmZd d lmZmZmZmZmZmZmZe e d+d Ze e d,d Ze e d-dZe e d+dZe e d+dZe e d+dZe e d+dZe e d+dZ e e d+dZ!e e d+dZ"e e d+dZ#e e d+dZ$e e d+dZ%e e d+dZ&e e d+dZ'e e d+dZ(e e d+dZ)e e*e d.dZ+e e d+dZ,d/d0dZ-e d d1d!Z.d2d"Z/d3d#Z0d4d5d$Z1d6d%Z2d7d&Z3d'ejhd(f d8d)Z5 d9 d:d*Z6y);) annotationsN)IncrementalDecoder)aliases) lru_cache)findall) Generator)MultibyteIncrementalDecoder)ENCODING_MARKSIANA_SUPPORTED_SIMILARRE_POSSIBLE_ENCODING_INDICATIONUNICODE_RANGES_COMBINEDUNICODE_SECONDARY_RANGE_KEYWORDUTF8_MAXIMAL_ALLOCATIONCOMMON_CJK_CHARACTERS)maxsizec tj|}d|vxs(d|vxs"d|vxsd|vxsd|vxsd|vxs d|vxsd |vS#t$rYywxYw) NFz WITH GRAVEz WITH ACUTEz WITH CEDILLAzWITH DIAERESISzWITH CIRCUMFLEXz WITH TILDEz WITH MACRONzWITH RING ABOVE unicodedataname ValueError character descriptions ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/charset_normalizer/utils.pyis_accentuatedrs&++I6   # , ; & , [ ( , { * ,  +  , ; &  , K '  ,  +  sA AActj|}|s|S|jd}tt |ddS)N r)r decompositionsplitchrint)r decomposedcodess r remove_accentr&-sA!// :J !'',E s58R !!cbt|}tjD] \}}||vs |cSy)zK Retrieve the Unicode range official name from a single character. N)ordritems)r character_ord range_name ord_ranges r unicode_ranger.8s= YM!8!>!>!@ I I %  r'cT tj|}d|vS#t$rYywxYw)NFLATINrrs ris_latinr1Fs8&++I6  k !!   ''cZtj|}d|vryt|}|yd|vS)NPTF Punctuationrcategoryr.rcharacter_categorycharacter_ranges ris_punctuationr;Os=)229=   "/ ":O O ++r'cptj|}d|vsd|vryt|}|yd|vxr|dk7S)NSNTFFormsLor6r8s r is_symbolrA^sP)229=   C+=$="/ ":O o % D*<*DDr'c2t|}|yd|vxsd|vS)NF Emoticons Pictographs)r.)rr:s r is_emoticonrEms*"/ ":O / ) M]o-MMr'cj|js|dvrytj|}d|vxs|dvS)N>|+<>TZ>PcPdPo)isspacerr7)rr9s r is_separatorrPwsBi+AA)229= $ $ P(:>P(PPr'cD|j|jk7SN)islowerisupperrs ris_case_variablerVs    )"3"3"5 55r'cT tj|}d|vS#t$rYywxYw)NFCJKrrcharacter_names ris_cjkr[s8$)))4 N "" r2cT tj|}d|vS#t$rYywxYw)NFHIRAGANArrYs r is_hiraganar^8$)))4  '' r2cT tj|}d|vS#t$rYywxYw)NFKATAKANArrYs r is_katakanarbr_r2cT tj|}d|vS#t$rYywxYw)NFHANGULrrYs r is_hangulre8$)))4 ~ %% r2cT tj|}d|vS#t$rYywxYw)NFTHAIrrYs ris_thairis8$)))4 ^ ## r2cT tj|}d|vS#t$rYywxYw)NFARABICrrYs r is_arabicrlrfr2c` tj|}d|vxrd|vS#t$rYywxYw)NFrkz ISOLATED FORMrrYs ris_arabic_isolated_formrnsB$)))4 ~ % K/^*KK s ! --c|tvSrR)rrUs ris_cjk_uncommonrps 1 11r'c4tfdtDS)Nc3&K|]}|v ywrR).0keywordr,s r z-is_unicode_range_secondary..sTw*$Ts)anyr)r,s`ris_unicode_range_secondaryrxs T4ST TTr'cj|jduxr |jduxr |dk7xr|dk7S)NFu)rO isprintablerUs ris_unprintabler|sL u$ "  ! ! #u , "   "  ! r'c rt|tstt|}t t |dt ||jdd}t|dk(ry|D]T}|jjdd}tjD]\}}||k(r|ccS||k(s|ccSVy)zW Extract using ASCII-only decoder any specified encoding in the first n-bytes. Nasciiignoreerrorsr-_) isinstancebytes TypeErrorlenrr mindecodelowerreplacerr*)sequence search_zoneseq_lenresultsspecified_encodingencoding_alias encoding_ianas rany_specified_encodingrs h &x=G ',3w ,-44WX4NG  7|q% %/557??SI .5]]_ % )NM!33$$ 22$$  % % r'cn|dvxs0ttjd|jtS)zQ Verify is a specific encoding is a multi byte one based on it IANA name > utf_7utf_8utf_16utf_32 utf_16_be utf_16_le utf_32_be utf_32_le utf_8_sig encodings.) issubclass importlib import_modulerr )rs ris_multi_byte_encodingrsC     *TF 34GG#  r'ctD]>}t|}t|tr|g}|D]}|j|s||fccS@y)z9 Identify and extract SIG/BOM in given sequence. )Nr')r rr startswith)r iana_encodingmarksmarks ridentify_sig_or_bomrs[ (+ %3M%B eU #GE +D""4($d** + + r'c |dvS)N>rrrs)rs rshould_strip_sig_or_bomr(s  4 44r'c|jjdd}tjD]\}}|||fvs |cS|rt d|d|S)zIReturns the Python normalized encoding name (Not the IANA official name).rrzUnable to retrieve IANA for '')rrrr*r)cp_namestrictrrs r iana_namer,shmmo%%c3/G *1!% ~}5 5 !8 CDD Nr'ctt|s t|rytjd|j}tjd|j}|d}|d}d}t dD]7}t |g}|j ||j |k(s3|dz }9|dz S) Ngrrrrr )rrrrrangerr) iana_name_a iana_name_b decoder_a decoder_bid_aid_bcharacter_match_counti to_be_decodeds r cp_similarityr=sk*.D[.Q''*[M(BCVVI''*[M(BCVVI(9D(9D!" 3Z'$aSz ;;} %])C C !Q & !' !3 &&r'c,|tvxr |t|vS)z Determine if two code page are at least 80% similar. IANA_SUPPORTED_SIMILAR dict was generated using the function cp_similarity. )r )rrs r is_cp_similarrQs% -- ? 1+> >r'charset_normalizerz)%(asctime)s | %(levelname)s | %(message)sctj|}|j|tj}|j tj ||j |yrR)logging getLoggersetLevel StreamHandler setFormatter Formatter addHandler)rlevel format_stringloggerhandlers rset_logging_handlerr\sU   t $F OOE##%G **=9: gr'c #K|r|dur|D]} || | |z} | sy| y|D]} | |z} | t|dzkDr|| | |z} |r |dur|| z} | j||rdnd} |r[| dkDrVt|d} |rH| d| |vrAt| | dz d D].}||| } |r |dur|| z} | j|d} | d| |vs.n| yw) NFrrrrr)rrrr) sequencesroffsets chunk_sizebom_or_sig_availablestrip_sig_or_bom sig_payloadis_multi_byte_decoderdecoded_payloadrchunk chunk_end cut_sequencechunk_partial_size_chkjs rcut_sequence_chunksrisK0E9 A#AJ7EK   # AJI3y>A--$QZ8L#(8E(A*\9  ''#8xh(E%Q.1*b.A&$556oM"1a!eR0 "'09'= /4D4M+6+EL , 3 3M( 3 S !8"89_L! "KG# s B>C  C )rstrreturnbool)rrrr)rrr str | None)r,rrr)i )rrrr#rr)rrrr)rrrztuple[str | None, bytes])rrrr)T)rrrrrr)rrrrrfloat)rrrrrr)rrrr#rrrNonerR)rrrrrrrr#rrrrrrrrrrrzGenerator[str, None, None])7 __future__rrrrcodecsrencodings.aliasesr functoolsrrertypingr_multibytecodecr constantr r r rrrrrr&r.r1r;rArErPrVr[r^rbrerirlrnrprrxr|rrrrrrrINFOrrrsr'rrs "%% *+," *+"," *+ ,  *+"," *+ ,, , *+ E, E *+N,N *+Q,Q *+6,6 *+#,# *+(,( *+(,( *+&,& *+$,$ *+&,& *+L,L *+2,2 3./0U1U *+,@ 3($5"'(%D       ,#'5555 5  5  55 5 5 5r'