
    `i\                       % S SK Jr  S SKrS SKJr  S SKJr  \R                  S:  a  S SKJ	r	  O S SK
J	r	  SS	KJrJrJrJrJrJrJrJrJrJr  SS
KJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&  \\-  \-  \-  \-  r'S\(S'    " S S5      r)\	 " S S\)5      5       r*\	 " S S\)5      5       r+\	 " S S\)5      5       r,\	 " S S\)5      5       r-\	 " S S\)5      5       r.\	 " S S\)5      5       r/\	 " S S\)5      5       r0\	 " S S\)5      5       r1\	 " S S \)5      5       r2\" S!S"9      S)S# j5       r3\4" S$ \)Rk                  5        5       5      r6S%\(S&'   \" S'S"9 S*       S+S( jj5       r7g! \ a    S r	 GNBf = f),    )annotationsN)	lru_cache)	getLogger)      )finalc                    U $ N )clss    SC:\Users\13-19\Desktop\python_web\travel\Lib\site-packages\charset_normalizer/md.pyr   r      s    J       )
COMMON_SAFE_ASCII_CHARACTERSTRACEUNICODE_SECONDARY_RANGE_KEYWORD_ACCENTUATED_CJK_HANGUL	_HIRAGANA	_KATAKANA_LATIN_THAI)_character_flagsis_accentuated	is_arabicis_arabic_isolated_formis_case_variableis_cjkis_emoticonis_latinis_punctuationis_separator	is_symbolis_unprintableremove_accentunicode_rangeis_cjk_uncommonint_GLYPH_MASKc                  N    \ rS rSrSrSrS	S jrS
S jrSS jr\	SS j5       r
Srg)MessDetectorPlugin4   zm
Base abstract class used for mess detection plugins.
All detectors MUST extend and implement given methods.
r   c                    [         e)z0
Determine if given character should be fed in.
NotImplementedErrorself	characters     r   eligibleMessDetectorPlugin.eligible<   
     "!r   c                    [         e)zq
The main routine to be executed upon character.
Insert the logic in witch the text would be considered chaotic.
r/   r1   s     r   feedMessDetectorPlugin.feedB   s
    
 "!r   c                    [         e)z2
Permit to reset the plugin to the initial state.
r/   r2   s    r   resetMessDetectorPlugin.resetI   r6   r   c                    [         e)zm
Compute the chaos ratio based on what your feed() has seen.
Must NOT be lower than 0.; No restriction gt 0.
r/   r;   s    r   ratioMessDetectorPlugin.ratioO   s
     "!r   Nr3   strreturnboolr3   rB   rC   NonerC   rF   rC   float)__name__
__module____qualname____firstlineno____doc__	__slots__r4   r8   r<   propertyr?   __static_attributes__r   r   r   r,   r,   4   s1    
 I""" " "r   r,   c                  T    \ rS rSrSrS
S jrSS jrSS jrS
S jr\	SS j5       r
Srg	) TooManySymbolOrPunctuationPluginX   _punctuation_count_symbol_count_character_count_last_printable_char_frenzy_symbol_in_wordc                J    SU l         SU l        SU l        S U l        SU l        g Nr   FrU   r;   s    r   __init__)TooManySymbolOrPunctuationPlugin.__init__b   s*    '("#%&04!,1#r   c                "    UR                  5       $ r
   isprintabler1   s     r   r4   )TooManySymbolOrPunctuationPlugin.eligiblej       $$&&r   c                L   U =R                   S-  sl         XR                  :w  az  U[        ;  ap  [        U5      (       a  U =R                  S-  sl        OJUR                  5       (       d5  [        U5      (       a%  [        U5      (       d  U =R                  S-  sl        Xl        g )Nr      )	rX   rY   r   r"   rV   isdigitr$   r    rW   r1   s     r   r8   %TooManySymbolOrPunctuationPlugin.feedm   s    " 222!==i((''1,'%%''i((#I..""a'"$-!r   c                .    SU l         SU l        SU l        g Nr   )rV   rX   rW   r;   s    r   r<   &TooManySymbolOrPunctuationPlugin.reset   s    "# !r   c                    U R                   S:X  a  gU R                  U R                  -   U R                   -  nUS:  a  U$ S$ )Nr           333333?)rX   rV   rW   )r2   ratio_of_punctuations     r   r?   &TooManySymbolOrPunctuationPlugin.ratio   sO      A% ##d&8&88!!'" (<s'B#KKr   )rX   rZ   rY   rV   rW   NrG   rA   rE   rH   rJ   rK   rL   rM   rO   r]   r4   r8   r<   rP   r?   rQ   r   r   r   rS   rS   X   s3    I2'.$
 L Lr   rS   c                  T    \ rS rSrSrS
S jrSS jrSS jrS
S jr\	SS j5       r
Srg	)TooManyAccentuatedPlugin   rX   _accentuated_countc                     SU l         SU l        g ri   rt   r;   s    r   r]   !TooManyAccentuatedPlugin.__init__   s    %&'(r   c                "    UR                  5       $ r
   )isalphar1   s     r   r4   !TooManyAccentuatedPlugin.eligible   s      ""r   c                z    U =R                   S-  sl         [        U5      (       a  U =R                  S-  sl        g g Nr   )rX   r   ru   r1   s     r   r8   TooManyAccentuatedPlugin.feed   s4    ")$$##q(# %r   c                     SU l         SU l        g ri   rt   r;   s    r   r<   TooManyAccentuatedPlugin.reset   s     !"#r   c                j    U R                   S:  a  gU R                  U R                   -  nUS:  a  U$ S$ )Nr   rl   gffffff?rt   )r2   ratio_of_accentuations     r   r?   TooManyAccentuatedPlugin.ratio   s=      1$'+'>'>AVAV'V(=(E$N3Nr   )ru   rX   NrG   rA   rE   rH   rp   r   r   r   rr   rr      s1    :I)#)$ O Or   rr   c                  T    \ rS rSrSrS
S jrSS jrSS jrS
S jr\	SS j5       r
Srg	)UnprintablePlugin   _unprintable_countrX   c                     SU l         SU l        g ri   r   r;   s    r   r]   UnprintablePlugin.__init__   s    '(%&r   c                    gNTr   r1   s     r   r4   UnprintablePlugin.eligible       r   c                x    [        U5      (       a  U =R                  S-  sl        U =R                  S-  sl        g r|   )r%   r   rX   r1   s     r   r8   UnprintablePlugin.feed   s/    )$$##q(#"r   c                    SU l         g ri   )r   r;   s    r   r<   UnprintablePlugin.reset   s
    "#r   c                \    U R                   S:X  a  gU R                  S-  U R                   -  $ )Nr   rl   r   rX   r   r;   s    r   r?   UnprintablePlugin.ratio   s/      A%''!+t/D/DDDr   r   NrG   rA   rE   rH   rp   r   r   r   r   r      s1    :I'#
$ E Er   r   c                  T    \ rS rSrSrS
S jrSS jrSS jrS
S jr\	SS j5       r
Srg	)SuspiciousDuplicateAccentPlugin   _successive_countrX   _last_latin_character_last_was_accentuatedc                <    SU l         SU l        S U l        SU l        g r\   r   r;   s    r   r]   (SuspiciousDuplicateAccentPlugin.__init__   s"    &'%&15"+0"r   c                F    UR                  5       =(       a    [        U5      $ r
   )ry   r!   r1   s     r   r4   (SuspiciousDuplicateAccentPlugin.eligible   s      ":x	'::r   c                   U =R                   S-  sl         [        U5      nU R                  b  U(       a  U R                  (       a  UR	                  5       (       a4  U R                  R	                  5       (       a  U =R
                  S-  sl        [        U5      [        U R                  5      :X  a  U =R
                  S-  sl        Xl        X l        g r|   )rX   r   r   r   isupperr   r&   )r2   r3   current_accentuateds      r   r8   $SuspiciousDuplicateAccentPlugin.feed   s    "$29$=&&2#**  ""t'A'A'I'I'K'K&&!+&Y'=9S9S+TT&&!+&%."%8"r   c                <    SU l         SU l        S U l        SU l        g r\   r   r;   s    r   r<   %SuspiciousDuplicateAccentPlugin.reset   s"    !" !%)"%*"r   c                \    U R                   S:X  a  gU R                  S-  U R                   -  $ )Nr   rl   re   )rX   r   r;   s    r   r?   %SuspiciousDuplicateAccentPlugin.ratio   s/      A%&&*d.C.CCCr   )rX   r   r   r   NrG   rA   rE   rH   rp   r   r   r   r   r      s3    I1;9 + D Dr   r   c                  T    \ rS rSrSrS
S jrSS jrSS jrS
S jr\	SS j5       r
Srg	)SuspiciousRange   "_suspicious_successive_range_countrX   _last_printable_seen_last_printable_rangec                <    SU l         SU l        S U l        S U l        g ri   r   r;   s    r   r]   SuspiciousRange.__init__  s"    78/%&04!15"r   c                "    UR                  5       $ r
   r`   r1   s     r   r4   SuspiciousRange.eligible	  rc   r   c                   U =R                   S-  sl         UR                  5       (       d  [        U5      (       d
  U[        ;   a  S U l        S U l        g U R                  c  Xl        [        U5      U l        g U R
                  n[        U5      n[        X#5      (       a  U =R                  S-  sl        Xl        X0l        g r|   )	rX   isspacer"   r   r   r   r'    is_suspiciously_successive_ranger   )r2   r3   unicode_range_aunicode_range_bs       r   r8   SuspiciousRange.feed  s    " i((88(,D%)-D&$$,(1%)6y)AD&&*&@&@&3I&>+OMM33q83$-!%4"r   c                <    SU l         SU l        S U l        S U l        g ri   )rX   r   r   r   r;   s    r   r<   SuspiciousRange.reset&  s"     !23/$(!%)"r   c                `    U R                   S::  a  gU R                  S-  U R                   -  nU$ )N   rl   re   )rX   r   )r2   ratio_of_suspicious_range_usages     r   r?   SuspiciousRange.ratio,  s<      B& 33a7!!2"' /.r   )rX   r   r   r   NrG   rA   rE   rH   rp   r   r   r   r   r      s1    I6'54* / /r   r   c                  T    \ rS rSrSrS
S jrSS jrSS jrS
S jr\	SS j5       r
Srg	)SuperWeirdWordPlugini8  _word_count_bad_word_count_foreign_long_count_is_current_word_bad_foreign_long_watchrX   _bad_character_count_buffer_length_buffer_last_char_buffer_last_char_accentuated_buffer_accent_count_buffer_glyph_count_buffer_upper_countc                    SU l         SU l        SU l        SU l        SU l        SU l        SU l        SU l        S U l        SU l	        SU l
        SU l        SU l        g r\   r   r;   s    r   r]   SuperWeirdWordPlugin.__init__J  sj     !$%() */!). %&)*!#$-138*)*!() () r   c                    gr   r   r1   s     r   r4   SuperWeirdWordPlugin.eligible\  r   r   c                   UR                  5       (       a  U =R                  S-  sl        Xl        UR                  5       (       a  U =R                  S-  sl        [        U5      n[        U[        -  5      nX0l        U(       a  U =R                  S-  sl	        U R                  (       d*  U[        -  (       a  U(       a  U[        -  (       d  SU l
        U[        -  (       a  U =R                  S-  sl        g U R                  (       d  g UR                  5       (       d!  [        U5      (       d  [!        U5      (       Ga  U R                  (       Ga  U =R"                  S-  sl        U R                  nU =R$                  U-  sl        US:  a  U R                  U-  S:  a  SU l        OU R                  (       aL  U R                  R                  5       (       a-  U R                  U:w  a  U =R(                  S-  sl        SU l        O,U R                  S:X  a  SU l        U =R(                  S-  sl        US:  a\  U R                  (       aK  U R                  S:  =(       a    U R                  U-  S:*  nU(       d  U =R(                  S-  sl        SU l        U R&                  (       a1  U =R*                  S-  sl        U =R,                  U-  sl        SU l        SU l
        SU l        S U l        SU l        SU l	        SU l        SU l        g US	;  aQ  UR/                  5       (       d;  [1        U5      (       a*  SU l        U =R                  S-  sl        Xl        SU l        g g g g )
Nr   T         ?   r   rm   F>   -<=>_|~)ry   r   r   r   r   r   rD   r   r   r   r   r   r*   r   r   r"   r#   r   rX   r   r   r   r   rf   r$   )r2   r3   flagschar_accentuatedbuffer_lengthprobable_camel_caseds         r   r8   SuperWeirdWordPlugin.feed_  s   1$%."  ""((A-())4E%)%,*>%?1A.))Q.),,&.-=,+/({"((A-("">)#<#<Y@W@W!!!!!%!4!4M!!]2!!,,}<C04D- 66..668800MA,,1,04D---204D-,,1,"t'?'?,,q0 H00=@CG %
 ,,,1,04D-(($$)$))]:),1)',D$"#D%)D"16D.()D%'(D$'(D$@@%%'')$$(,D%1$%."16D. % ( Ar   c                    SU l         S U l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l	        SU l
        SU l        SU l        g r\   )r   r   r   r   r   r   r   rX   r   r   r   r   r   r;   s    r   r<   SuperWeirdWordPlugin.reset  sj    !%-2*$)!#(   !$%!#$ $%!#$ #$ r   c                v    U R                   S::  a  U R                  S:X  a  gU R                  U R                  -  $ )N
   r   rl   )r   r   r   rX   r;   s    r   r?   SuperWeirdWordPlugin.ratio  s7    r!d&>&>!&C((4+@+@@@r   )r   r   r   r   r   r   r   r   rX   r   r   r   r   NrG   rA   rE   rH   rp   r   r   r   r   r   8  s5    I *$N7`% A Ar   r   c                  X    \ rS rSrSrSrS
S jrSS jrSS jrS
S jr	\
SS j5       rSrg	)CjkUncommonPlugini  z4
Detect messy CJK text that probably means nothing.
rX   _uncommon_countc                     SU l         SU l        g ri   r   r;   s    r   r]   CjkUncommonPlugin.__init__  s    %&$%r   c                    [        U5      $ r
   )r   r1   s     r   r4   CjkUncommonPlugin.eligible  s    i  r   c                z    U =R                   S-  sl         [        U5      (       a  U =R                  S-  sl        g g r|   )rX   r(   r   r1   s     r   r8   CjkUncommonPlugin.feed  s7    "9%%  A%  &r   c                     SU l         SU l        g ri   r   r;   s    r   r<   CjkUncommonPlugin.reset  s     ! r   c                p    U R                   S:  a  gU R                  U R                   -  nUS:  a  US-  $ S$ )Nr   rl   r   r   r   )r2   uncommon_form_usages     r   r?   CjkUncommonPlugin.ratio  sD      1$%)%9%9D<Q<Q%Q ,?+D"R'M#Mr   NrG   rA   rE   rH   )rJ   rK   rL   rM   rN   rO   r]   r4   r8   r<   rP   r?   rQ   r   r   r   r   r     s8     8I&!! N Nr   r   c                  T    \ rS rSrSrS
S jrSS jrSS jrS
S jr\	SS j5       r
Srg	)ArchaicUpperLowerPlugini  _buf_character_count_since_last_sep_successive_upper_lower_count#_successive_upper_lower_count_finalrX   _last_alpha_seen_current_ascii_onlyc                f    SU l         SU l        SU l        SU l        SU l        S U l        SU l        g )NFr   Tr   r;   s    r   r]    ArchaicUpperLowerPlugin.__init__  s9    	45,23*890%&,0)- r   c                    gr   r   r1   s     r   r4    ArchaicUpperLowerPlugin.eligible  r   r   c                   UR                  5       =(       a    [        U5      nU(       + nU(       a  U R                  S:  a  U R                  S::  aE  UR                  5       (       d0  U R                  (       d  U =R
                  U R                  -  sl        SU l        SU l        S U l        SU l        U =R                  S-  sl	        SU l        g U R                  (       a  UR                  5       (       d  SU l        U R                  b  UR                  5       (       a  U R                  R                  5       (       d4  UR                  5       (       aU  U R                  R                  5       (       a6  U R                  (       a  U =R                  S-  sl        SU l        OSU l        OSU l        U =R                  S-  sl	        U =R                  S-  sl        Xl        g )Nr   @   Fr   Tre   )ry   r   r   rf   r   r   r   r   r   rX   isasciir   islower)r2   r3   is_concerned	chunk_seps       r   r8   ArchaicUpperLowerPlugin.feed  sv   &..0P5Ei5P**	==A44:!))++0088668 23D.34D0$(D!DI!!Q&!'+D$##I,=,=,?,?',D$  ,!!##(=(=(E(E(G(G!!##(=(=(E(E(G(G9966!;6 %DI $DI!	",,1, )r   c                f    SU l         SU l        SU l        SU l        S U l        SU l        SU l        g )Nr   FT)rX   r   r   r   r   r   r   r;   s    r   r<   ArchaicUpperLowerPlugin.reset2  s9     !/0,-.*340 $	#' r   c                V    U R                   S:X  a  gU R                  U R                   -  $ )Nr   rl   )rX   r   r;   s    r   r?   ArchaicUpperLowerPlugin.ratio;  s*      A%77$:O:OOOr   )r   rX   r   r   r   r   r   NrG   rA   rE   rH   rp   r   r   r   r   r     s4    I.(*T( P Pr   r   c                  T    \ rS rSrSrS	S jrS	S jrS
S jrSS jr\	SS j5       r
Srg)ArabicIsolatedFormPluginiC  rX   _isolated_form_countc                     SU l         SU l        g ri   r  r;   s    r   r]   !ArabicIsolatedFormPlugin.__init__G  s    %&)*!r   c                     SU l         SU l        g ri   r  r;   s    r   r<   ArabicIsolatedFormPlugin.resetK  s     !$%!r   c                    [        U5      $ r
   )r   r1   s     r   r4   !ArabicIsolatedFormPlugin.eligibleO  s    ##r   c                z    U =R                   S-  sl         [        U5      (       a  U =R                  S-  sl        g g r|   )rX   r   r  r1   s     r   r8   ArabicIsolatedFormPlugin.feedR  s4    ""9--%%*% .r   c                Z    U R                   S:  a  gU R                  U R                   -  nU$ )Nr   rl   r  )r2   isolated_form_usages     r   r?   ArabicIsolatedFormPlugin.ratioX  s0      1$%)%>%>AVAV%V""r   NrG   rA   rE   rH   )rJ   rK   rL   rM   rO   r]   r<   r4   r8   rP   r?   rQ   r   r   r   r  r  C  s/    <I+&$+ # #r   r     )maxsizec                .   U b  Uc  gX:X  a  gSU ;   a  SU;   a  gSU ;   d  SU;   a  gSU ;   d  SU;   a  SU ;   d  SU;   a  gU R                  S5      UR                  S5      p2U H  nU[        ;   a  M  XC;   d  M    g   U S;   US;   peU(       d  U(       a  SU ;   d  SU;   a  gU(       a  U(       a  gS	U ;   d  S	U;   a  SU ;   d  SU;   a  gU S
:X  d  US
:X  a  gSU ;   d  SU;   d  U S;   a-  US;   a'  SU ;   d  SU;   a  gSU ;   d  SU;   a  gU S
:X  d  US
:X  a  gg)zY
Determine if two Unicode range seen next to each other can be considered as suspicious.
TFLatin	Emoticons	Combining )HiraganaKatakanaCJKHangulzBasic Latin)r%  r$  PunctuationForms)splitr   )r   r   keywords_range_akeywords_range_belrange_a_jp_charsrange_b_jp_charss          r   r   r   b  sw    /"9)/!g&@o%)G 	?"g&@&+*H 	c"c" '
 00!	  	
	

 	33 ' 	, E_$<,?"h/&AO#u'?m+-/O 	 E_$<3377O+}/Oo%O)Cm+-/Or   c              #  $   #    U  H  ov   M     g 7fr
   r   ).0md_classs     r   	<genexpr>r3    s      @@H@s   z$tuple[type[MessDetectorPlugin], ...]_DETECTOR_CLASSESi   c           	     B   [          Vs/ s H	  o3" 5       PM     nn[        U 5      nUS:  a  SnOUS:  a  SnOSn[        SXV5       H[  nXXv-     H5  nU H,  n	U	R                  U5      (       d  M  U	R	                  U5        M.     M7     [        S U 5       5      n
X:  d  M[    OF   U H,  n	U	R                  S5      (       d  M  U	R	                  S5        M.     [        S	 U 5       5      n
U(       a  [        S
5      nUR                  [        SU SU
 SU 35        US:  a8  UR                  [        SU SS  35        UR                  [        SU SS  35        U H2  nUR                  [        UR                   SUR                   35        M4     [        U
S5      $ s  snf )zo
Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier.
i      r  r     r   c              3  8   #    U  H  oR                   v   M     g 7fr
   r?   r1  dts     r   r3  mess_ratio.<locals>.<genexpr>       ;2hh   
c              3  8   #    U  H  oR                   v   M     g 7fr
   r9  r:  s     r   r3  r<    r=  r>  charset_normalizerzIMess-detector extended-analysis start. intermediary_mean_mess_ratio_calc=z mean_mess_ratio=z maximum_threshold=   zStarting with: NzEnding with: iz: r   )r4  lenranger4   r8   sumr   logr   	__class__r?   round)decoded_sequencemaximum_thresholddebugr2  	detectorsseq_lenstepblock_startr3   detectormean_mess_ratiologgerr;  s                r   
mess_ratiorS    s    GX*XFW(8:FWI*X '(G}	4Q.)8JKI%$$Y//MM), & L
 ;;;/ / "H  &&d# " ;;;/0

1156GGX Y!!2 35	
 R<JJu0@"0E/FGHJJu.>su.E-FGHBJJub
;<  !$$] +Ys   F)r   
str | Noner   rT  rC   rD   )g?F)rI  rB   rJ  rI   rK  rD   rC   rI   )8
__future__r   sys	functoolsr   loggingr   version_infotypingr   typing_extensionsImportErrorconstantr   r   r   r   r   r   r   r   r   r   utilsr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r*   __annotations__r,   rS   rr   r   r   r   r   r   r   r  r   tuple__subclasses__r4  rS  r   r   r   <module>rb     sQ   " 
  v+      & '>I-	9EAS A!" !"H 4L'9 4L 4Ln O1 O O: E* E E4 -D&8 -D -D` :/( :/ :/z JA- JA JAZ "N* "N "NJ SP0 SP SPl #1 # #< 4FF2<F	F FT ;@ @/>>@@ ; 7 
 4IN5%5%.35%BF5%
5% 5%O  	s   E, ,	E98E9