+
     hN  c                  s   ^ RI Ht ^ RIHt ^ RIHt ^RIHtHtH	t	 ^RI
HtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHt  ! R R4      t ! R R	]4      t ! R
 R]4      t ! R R]4      t  ! R R]4      t! ! R R]4      t" ! R R]4      t# ! R R]4      t$ ! R R]4      t% ! R R]4      t&]! RR7      R R l4       t']! RR7      R"R R  ll4       t(R!# )#    )annotations)	lru_cache)	getLogger)COMMON_SAFE_ASCII_CHARACTERSTRACEUNICODE_SECONDARY_RANGE_KEYWORD)is_accentuated	is_arabicis_arabic_isolated_formis_case_variableis_cjkis_emoticon	is_hangulis_hiraganais_katakanais_latinis_punctuationis_separator	is_symbolis_thaiis_unprintableremove_accentunicode_rangeis_cjk_uncommonc                  sT    ] tR t^!tRtR R ltR R ltR R lt]R R	 l4       t	R
t
R# )MessDetectorPluginzm
Base abstract class used for mess detection plugins.
All detectors MUST extend and implement given methods.
c                    V ^8  d   QhRRRR/#    	characterstrreturnbool Zformat   ":/usr/lib/python3.14/site-packages/charset_normalizer/md.py__annotate__MessDetectorPlugin.__annotate__'   s     " "# "$ "    c                    \         h)z0
Determine if given character should be fed in.
ZNotImplementedErrorselfr      &&r$   eligibleZMessDetectorPlugin.eligible'   
     "!r'   c               r   r   r   r   r   Noner!   r"   r#   r$   r%   r&   -   s     " "c "d "r'   c                r(   )zq
The main routine to be executed upon character.
Insert the logic in witch the text would be considered chaotic.
r)   r*   r,   r$   feedZMessDetectorPlugin.feed-   s
    
 "!r'   c                   V ^8  d   QhRR/# r   r   r0   r!   r"   r#   r$   r%   r&   4   s     " "t "r'   c                r(   )z2
Permit to reset the plugin to the initial state.
r)   r+      &r$   resetZMessDetectorPlugin.reset4   r.   r'   c               r2   r   r   floatr!   r"   r#   r$   r%   r&   ;   s     " "u "r'   c                r(   )zm
Compute the chaos ratio based on what your feed() has seen.
Must NOT be lower than 0.; No restriction gt 0.
r)   r4   r5   r$   ratioZMessDetectorPlugin.ratio:   s
     "!r'   r!   N)__name__
__module____qualname____firstlineno____doc__r-   r1   r6   propertyr9   __static_attributes__r!   r'   r$   r   r   !   s*    
""" " "r'   r   c                  s\    ] tR t^CtR R ltR R ltR R ltR R lt]R	 R
 l4       t	Rt
R# ) TooManySymbolOrPunctuationPluginc               r2   r3   r!   r"   r#   r$   r%   -TooManySymbolOrPunctuationPlugin.__annotate__D   s     2 2$ 2r'   c                	sL    ^ V n         ^ V n        ^ V n        RV n        RV n        R# )r    NF)_punctuation_count_symbol_count_character_count_last_printable_char_frenzy_symbol_in_wordr4   r5   r$   __init__Z)TooManySymbolOrPunctuationPlugin.__init__D   s*    '("#%&04!,1#r'   c               r   r   r!   r"   r#   r$   r%   rB   L        ' '# '$ 'r'   c                	"    VP                  4       # NZisprintabler*   r,   r$   r-   Z)TooManySymbolOrPunctuationPlugin.eligibleL       $$&&r'   c               r   r/   r!   r"   r#   r$   r%   rB   O   s     . .c .d .r'   c                	sj   V ;P                   ^,          un         WP                  8w  d   V\        9  dy   \        V4      '       d   V ;P                  ^,          un        MMVP                  4       RJ d:   \        V4      '       d)   \        V4      RJ d   V ;P                  ^,          un        Wn        R# )   FN)	rE   rF   r   r   rC   isdigitr   r   rD   r*   r,   r$   r1   Z%TooManySymbolOrPunctuationPlugin.feedO   s    " 222!==i((''1,'!!#u,i((	*e3""a'"$-!r'   c               r2   r3   r!   r"   r#   r$   r%   rB   a   s      t r'   c                	s0    ^ V n         ^ V n        ^ V n        R# r    N)rC   rE   rD   r4   r5   r$   r6   Z&TooManySymbolOrPunctuationPlugin.reseta   s    "# !r'   c               r2   r7   r!   r"   r#   r$   r%   rB   g   s     L Lu Lr'   c                	s    V P                   ^ 8X  d   R# V P                  V P                  ,           V P                   ,          pVR8  d   V# R# )r            333333?)rE   rC   rD   )r+   Zratio_of_punctuation   & r$   r9   Z&TooManySymbolOrPunctuationPlugin.ratiof   sO      A% ##d&8&88!!'" (<s'B#KKr'   )rE   rG   rF   rC   rD   Nr:   r;   r<   r=   rH   r-   r1   r6   r?   r9   r@   r!   r'   r$   rA   rA   C   s,    2'.$
 L Lr'   rA   c                  s\    ] tR t^rtR R ltR R ltR R ltR R lt]R	 R
 l4       t	Rt
R# )TooManyAccentuatedPluginc               r2   r3   r!   r"   r#   r$   r%   %TooManyAccentuatedPlugin.__annotate__s   s     ) )$ )r'   c                	"    ^ V n         ^ V n        R# rP   rE   _accentuated_countr4   r5   r$   rH   Z!TooManyAccentuatedPlugin.__init__s   s    %&'(r'   c               r   r   r!   r"   r#   r$   r%   rV   w   s     # ## #$ #r'   c                	rJ   rK   )isalphar*   r,   r$   r-   Z!TooManyAccentuatedPlugin.eligiblew   s      ""r'   c               r   r/   r!   r"   r#   r$   r%   rV   z   s     ) )c )d )r'   c                	    V ;P                   ^,          un         \        V4      '       d   V ;P                  ^,          un        R# R# rN   N)rE   r   rY   r*   r,   r$   r1   ZTooManyAccentuatedPlugin.feedz   s4    ")$$##q(# %r'   c               r2   r3   r!   r"   r#   r$   r%   rV      s     $ $t $r'   c                	rW   rP   rX   r4   r5   r$   r6   ZTooManyAccentuatedPlugin.reset   s     !"#r'   c               r2   r7   r!   r"   r#   r$   r%   rV      s     O Ou Or'   c                	sx    V P                   ^8  d   R# V P                  V P                   ,          pVR8  d   V# R# )   rQ   gffffff?rX   )r+   Zratio_of_accentuationrS   r$   r9   ZTooManyAccentuatedPlugin.ratio   s=      1$'+'>'>AVAV'V(=(E$N3Nr'   )rY   rE   NrT   r!   r'   r$   rU   rU   r   s,    )#)$ O Or'   rU   c                  s\    ] tR t^tR R ltR R ltR R ltR R lt]R	 R
 l4       t	Rt
R# )UnprintablePluginc               r2   r3   r!   r"   r#   r$   r%   UnprintablePlugin.__annotate__   s     ' '$ 'r'   c                	rW   rP   )_unprintable_countrE   r4   r5   r$   rH   ZUnprintablePlugin.__init__   s    '(%&r'   c               r   r   r!   r"   r#   r$   r%   r_            # $ r'   c                	    R # Tr!   r*   r,   r$   r-   ZUnprintablePlugin.eligible       r'   c               r   r/   r!   r"   r#   r$   r%   r_      s     # #c #d #r'   c                	s    \        V4      '       d   V ;P                  ^,          un        V ;P                  ^,          un        R# r\   )r   r`   rE   r*   r,   r$   r1   ZUnprintablePlugin.feed   s/    )$$##q(#"r'   c               r2   r3   r!   r"   r#   r$   r%   r_      s     $ $t $r'   c                	s    ^ V n         R# rP   )r`   r4   r5   r$   r6   ZUnprintablePlugin.reset   s
    "#r'   c               r2   r7   r!   r"   r#   r$   r%   r_      s     E Eu Er'   c                	sp    V P                   ^ 8X  d   R# V P                  ^,          V P                   ,          # r    rQ   rE   r`   r4   r5   r$   r9   ZUnprintablePlugin.ratio   s/      A%''!+t/D/DDDr'   rf   NrT   r!   r'   r$   r^   r^      s,    '#
$ E Er'   r^   c                  s\    ] tR t^tR R ltR R ltR R ltR R lt]R	 R
 l4       t	Rt
R# )SuspiciousDuplicateAccentPluginc               r2   r3   r!   r"   r#   r$   r%   ,SuspiciousDuplicateAccentPlugin.__annotate__   s     6 6$ 6r'   c                	0    ^ V n         ^ V n        RV n        R# rP   _successive_countrE   _last_latin_characterr4   r5   r$   rH   Z(SuspiciousDuplicateAccentPlugin.__init__   s    &'%&15"r'   c               r   r   r!   r"   r#   r$   r%   rh      s     ; ;# ;$ ;r'   c                	sH    VP                  4       ;'       d    \        V4      # rK   )rZ   r   r*   r,   r$   r-   Z(SuspiciousDuplicateAccentPlugin.eligible   s      "::x	'::r'   c               r   r/   r!   r"   r#   r$   r%   rh      s     / /c /d /r'   c                	s   V ;P                   ^,          un         V P                  e   \        V4      '       d   \        V P                  4      '       d   VP                  4       '       d:   V P                  P                  4       '       d   V ;P                  ^,          un        \        V4      \        V P                  4      8X  d   V ;P                  ^,          un        Wn        R# r\   )rE   rl   r   isupperrk   r   r*   r,   r$   r1   Z$SuspiciousDuplicateAccentPlugin.feed   s    "&&2y))t99::  ""t'A'A'I'I'K'K&&!+&Y'=9S9S+TT&&!+&%."r'   c               r2   r3   r!   r"   r#   r$   r%   rh      s     * *t *r'   c                	ri   rP   rj   r4   r5   r$   r6   Z%SuspiciousDuplicateAccentPlugin.reset   s    !" !%)"r'   c               r2   r7   r!   r"   r#   r$   r%   rh      s     D Du Dr'   c                	sp    V P                   ^ 8X  d   R# V P                  ^,          V P                   ,          # re   )rE   rk   r4   r5   r$   r9   Z%SuspiciousDuplicateAccentPlugin.ratio   s/      A%&&*d.C.CCCr'   )rE   rl   rk   NrT   r!   r'   r$   rg   rg      s,    6;/*
 D Dr'   rg   c                  s\    ] tR t^tR R ltR R ltR R ltR R lt]R	 R
 l4       t	Rt
R# )SuspiciousRangec               r2   r3   r!   r"   r#   r$   r%   SuspiciousRange.__annotate__   s     5 5$ 5r'   c                	ri   rP   )"_suspicious_successive_range_countrE   _last_printable_seenr4   r5   r$   rH   ZSuspiciousRange.__init__   s    78/%&04!r'   c               r   r   r!   r"   r#   r$   r%   ro      rI   r'   c                	rJ   rK   rL   r*   r,   r$   r-   ZSuspiciousRange.eligible   rM   r'   c               r   r/   r!   r"   r#   r$   r%   ro      s     . .c .d .r'   c                	sz   V ;P                   ^,          un         VP                  4       '       g   \        V4      '       g   V\        9   d
   RV n        R# V P                  f	   Wn        R# \        V P                  4      p\        V4      p\        W#4      '       d   V ;P                  ^,          un        Wn        R# r\   )rE   isspacer   r   rq   r    is_suspiciously_successive_rangerp   )r+   r   unicode_range_aunicode_range_b   &&  r$   r1   ZSuspiciousRange.feed   s    " i((88(,D%$$,(1%&3D4M4M&N&3I&>+OMM33q83$-!r'   c               r2   r3   r!   r"   r#   r$   r%   ro      s     ) )t )r'   c                	ri   rP   )rE   rp   rq   r4   r5   r$   r6   ZSuspiciousRange.reset   s     !23/$(!r'   c               r2   r7   r!   r"   r#   r$   r%   ro      s     / /u /r'   c                	st    V P                   ^8:  d   R# V P                  ^,          V P                   ,          pV# )i   rQ   )rE   rp   )r+   Zratio_of_suspicious_range_usagerS   r$   r9   ZSuspiciousRange.ratio   s<      B& 33a7!!2"' /.r'   )rE   rq   rp   NrT   r!   r'   r$   rn   rn      s*    5
'..)
 / /r'   rn   c                  s\    ] tR t^tR R ltR R ltR R ltR R lt]R	 R
 l4       t	Rt
R# )SuperWeirdWordPluginc               r2   r3   r!   r"   r#   r$   r%   !SuperWeirdWordPlugin.__annotate__   s     * *$ *r'   c                	s    ^ V n         ^ V n        ^ V n        RV n        RV n        ^ V n        ^ V n        RV n        ^ V n        ^ V n	        R# )r    F N)
_word_count_bad_word_count_foreign_long_count_is_current_word_bad_foreign_long_watchrE   _bad_character_count_buffer_buffer_accent_count_buffer_glyph_countr4   r5   r$   rH   ZSuperWeirdWordPlugin.__init__   sQ     !$%() */!). %&)*!)*!() r'   c               r   r   r!   r"   r#   r$   r%   rx     ra   r'   c                	rb   rc   r!   r*   r,   r$   r-   ZSuperWeirdWordPlugin.eligible  rd   r'   c               r   r/   r!   r"   r#   r$   r%   rx     s     O& O&c O&d O&r'   c                	s	   VP                  4       '       Ed6   V ;P                  V,          un        \        V4      '       d   V ;P                  ^,          un        V P                  RJ ds   \        V4      RJ g   \        V4      '       dS   \        V4      RJ dD   \        V4      RJ d5   \        V4      RJ d&   \        V4      RJ d   \        V4      RJ d   RV n        \        V4      '       gE   \        V4      '       g4   \        V4      '       g#   \        V4      '       g   \        V4      '       d   V ;P                  ^,          un        R# V P                  '       g   R# VP                  4       '       g$   \        V4      '       g   \        V4      '       Ed   V P                  '       Ed   V ;P                  ^,          un        \!        V P                  4      pV ;P"                  V,          un        V^8  Ed   V P                  V,          R8  d	   RV n        M\        V P                  R,          4      '       d   V P                  R,          P'                  4       '       dn   \(        ;QJ d&    R V P                   4       F  '       d   K   RM	  RM! R V P                   4       4      RJ d"   V ;P*                  ^,          un        RV n        M1V P                  ^8X  d!   RV n        V ;P*                  ^,          un        V^8  d   V P                  '       d   \-        V P                  \/        ^ V4      4       UUu. uF  w  r4VP'                  4       '       g   K  VNK!  	  pppRpV'       d   \!        V4      V,          R8:  d   RpV'       g!   V ;P*                  ^,          un        RV n        V P$                  '       dM   V ;P0                  ^,          un        V ;P2                  \!        V P                  4      ,          un        RV n        RV n        RV n        ^ V n        ^ V n        R# VR	9  dL   VP5                  4       RJ d6   \7        V4      '       d#   RV n        V ;P                  V,          un        R# R# R# R# u uppi )
rN   FTN      ?c              3  s@   "   T F  qP                  4       x  K  	  R # 5irK   )rm   ).0_rS   r$   	<genexpr>Z,SuperWeirdWordPlugin.feed.<locals>.<genexpr>8  s     >AIIKKs   rR   ry   i>   Z-Z<Z=Z>r   Z|Z~)rZ   r   r   r   r~   r   r   r   r   r   r   r   rr   r   r   rz   lenrE   r}   rm   Zallr|   zipranger{   r   rO   r   )r+   r   Zbuffer_lengthZcZiZcamel_case_dstZprobable_camel_cased   &&     r$   r1   ZSuperWeirdWordPlugin.feed  sX   LLI%Li(())Q.)((E1i(E1^I5N5N9%.i(E1	*e3	*e3I&%/+/(y!!Y''y))y))9%%((A-(|||>)#<#<Y@W@Wlll!!$T\\!2M!!]2!!,,}<C04D- #4<<#344R(0022>>>>>%G,,1,04D---204D-,,1,"t'?'?'? !$DLL%=2I J" Jyy{ A J  "
 .3$!s>':]'Jc'Q+/(+,,1,04D-((($$)$))S->>),1)',D$DL()D%'(D$@@!!#u,)$$(,D%LLI%L % - A1"s   ?RRc               r2   r3   r!   r"   r#   r$   r%   rx   _  s     % %t %r'   c                	sv    R V n         RV n        RV n        ^ V n        ^ V n        ^ V n        ^ V n        ^ V n        R# )ry   FN)r   r}   r~   r{   rz   rE   r   r|   r4   r5   r$   r6   ZSuperWeirdWordPlugin.reset_  sA    $)!#(   !$%!#$ r'   c               r2   r7   r!   r"   r#   r$   r%   rx   j  s     A Au Ar'   c                	s    V P                   ^
8:  d   V P                  ^ 8X  d   R# V P                  V P                  ,          # )i
   rQ   )rz   r|   r   rE   r4   r5   r$   r9   ZSuperWeirdWordPlugin.ratioi  s7    r!d&>&>!&C((4+@+@@@r'   )
r   r{   r   r   r   rE   r|   r~   r}   rz   NrT   r!   r'   r$   rw   rw      s.    *O&b% A Ar'   rw   c                  s`    ] tR tRtRtR R ltR R ltR R ltR	 R
 lt]	R R l4       t
RtR# )CjkUncommonPluginiq  z4
Detect messy CJK text that probably means nothing.
c               r2   r3   r!   r"   r#   r$   r%   CjkUncommonPlugin.__annotate__v  s     & &$ &r'   c                	rW   rP   rE   _uncommon_countr4   r5   r$   rH   ZCjkUncommonPlugin.__init__v  s    %&$%r'   c               r   r   r!   r"   r#   r$   r%   r   z  s     ! !# !$ !r'   c                	    \        V4      # rK   )r   r*   r,   r$   r-   ZCjkUncommonPlugin.eligiblez  s    i  r'   c               r   r/   r!   r"   r#   r$   r%   r   }  s      c d r'   c                	r[   r\   )rE   r   r   r*   r,   r$   r1   ZCjkUncommonPlugin.feed}  s7    "9%%  A%  &r'   c               r2   r3   r!   r"   r#   r$   r%   r     s     ! !t !r'   c                	rW   rP   r   r4   r5   r$   r6   ZCjkUncommonPlugin.reset  s     ! r'   c               r2   r7   r!   r"   r#   r$   r%   r     s     N Nu Nr'   c                	s    V P                   ^8  d   R# V P                  V P                   ,          pVR8  d
   V^
,          # R# )r]   rQ   r   r   )r+   Zuncommon_form_usagerS   r$   r9   ZCjkUncommonPlugin.ratio  sD      1$%)%9%9D<Q<Q%Q ,?+D"R'M#Mr'   r   N)r:   r;   r<   r=   r>   rH   r-   r1   r6   r?   r9   r@   r!   r'   r$   r   r   q  s1    &!! N Nr'   r   c                  \    ] tR tRtR R ltR R ltR R ltR R	 lt]R
 R l4       t	Rt
R# )ArchaicUpperLowerPlugini  c               r2   r3   r!   r"   r#   r$   r%   $ArchaicUpperLowerPlugin.__annotate__  s     . .$ .r'   c                	sh    R V n         ^ V n        ^ V n        ^ V n        ^ V n        RV n        RV n        R# FNT)_buf_character_count_since_last_sep_successive_upper_lower_count#_successive_upper_lower_count_finalrE   _last_alpha_seen_current_ascii_onlyr4   r5   r$   rH   Z ArchaicUpperLowerPlugin.__init__  s9    	45,23*890%&,0)- r'   c               r   r   r!   r"   r#   r$   r%   r     ra   r'   c                	rb   rc   r!   r*   r,   r$   r-   Z ArchaicUpperLowerPlugin.eligible  rd   r'   c               r   r/   r!   r"   r#   r$   r%   r     s     (* (*c (*d (*r'   c                	s   VP                  4       ;'       d    \        V4      pVR J pV'       d   V P                  ^ 8  d   V P                  ^@8:  dH   VP                  4       R J d4   V P                  R J d$   V ;P
                  V P                  ,          un        ^ V n        ^ V n        RV n        R V n        V ;P                  ^,          un	        RV n        R# V P                  RJ d   VP                  4       R J d   R V n        V P                  e   VP                  4       '       d!   V P                  P                  4       '       g7   VP                  4       '       dZ   V P                  P                  4       '       d:   V P                  RJ d"   V ;P                  ^,          un        R V n        MRV n        MR V n        V ;P                  ^,          un	        V ;P                  ^,          un        Wn        R# r   )rZ   r
   r   rO   r   r   r   r   r   rE   Zisasciirm   Zislower)r+   r   Zis_concernedZ	chunk_seprv   r$   r1   ZArchaicUpperLowerPlugin.feed  s    ((*JJ/?	/J E)	==A44:%%'50,,588668 23D.34D0$(D!DI!!Q&!'+D$##t+	0A0A0Cu0L',D$  ,!!##(=(=(E(E(G(G!!##(=(=(E(E(G(G99$66!;6 %DI $DI!	",,1, )r'   c               r2   r3   r!   r"   r#   r$   r%   r     s     ( (t (r'   c                	sh    ^ V n         ^ V n        ^ V n        ^ V n        RV n        RV n        RV n        R# )r    NFT)rE   r   r   r   r   r   r   r4   r5   r$   r6   ZArchaicUpperLowerPlugin.reset  s9     !/0,-.*340 $	#' r'   c               r2   r7   r!   r"   r#   r$   r%   r     s     P Pu Pr'   c                	sb    V P                   ^ 8X  d   R# V P                  V P                   ,          # re   )rE   r   r4   r5   r$   r9   ZArchaicUpperLowerPlugin.ratio  s*      A%77$:O:OOOr'   )r   rE   r   r   r   r   r   NrT   r!   r'   r$   r   r     s-    .(*T( P Pr'   r   c                  r   )ArabicIsolatedFormPlugini  c               r2   r3   r!   r"   r#   r$   r%   %ArabicIsolatedFormPlugin.__annotate__  s     + +$ +r'   c                	rW   rP   rE   _isolated_form_countr4   r5   r$   rH   Z!ArabicIsolatedFormPlugin.__init__  s    %&)*!r'   c               r2   r3   r!   r"   r#   r$   r%   r     s     & &t &r'   c                	rW   rP   r   r4   r5   r$   r6   ZArabicIsolatedFormPlugin.reset  s     !$%!r'   c               r   r   r!   r"   r#   r$   r%   r     s     $ $# $$ $r'   c                	r   rK   )r   r*   r,   r$   r-   Z!ArabicIsolatedFormPlugin.eligible  s    ##r'   c               r   r/   r!   r"   r#   r$   r%   r     s     + +c +d +r'   c                	r[   r\   )rE   r	   r   r*   r,   r$   r1   ZArabicIsolatedFormPlugin.feed  s4    ""9--%%*% .r'   c               r2   r7   r!   r"   r#   r$   r%   r     s     # #u #r'   c                	sf    V P                   ^8  d   R# V P                  V P                   ,          pV# )r]   rQ   r   )r+   Zisolated_form_usagerS   r$   r9   ZArabicIsolatedFormPlugin.ratio  s0      1$%)%>%>AVAV%V""r'   r   N)r:   r;   r<   r=   rH   r6   r-   r1   r?   r9   r@   r!   r'   r$   r   r     s*    +&$+ # #r'   r      )Zmaxsizec               s$    V ^8  d   QhRRRRRR/# )r   rt   z
str | Noneru   r   r    r!   r"   r#   r$   r%   r%     s)     F FF2<F	Fr'   c                s   V e   Vf   R# W8X  d   R# RV 9   d
   RV9   d   R# RV 9   g   RV9   d   R# RV 9   g   RV9   d   RV 9   g   RV9   d   R# V P                  R4      VP                  R4      r2V F  pV\        9   d   K  WC9   g   K   R# 	  V R9   VR9   reV'       g	   V'       d   RV 9   g   RV9   d   R# V'       d   V'       d   R# RV 9   g   RV9   d!   RV 9   g   RV9   d   R# V R	8X  g   VR	8X  d   R# RV 9   g   RV9   g   V R9   d8   VR9   d1   R
V 9   g   R
V9   d   R# RV 9   g   RV9   d   R# V R	8X  g   VR	8X  d   R# R# )zY
Determine if two Unicode range seen next to each other can be considered as suspicious.
TFZLatinZ	EmoticonsZ	CombiningZ ZCJKZHangulzBasic LatinZPunctuationZForms)HiraganaKatakana)r   r   )Zsplitr   )rt   ru   Zkeywords_range_aZkeywords_range_bZelZrange_a_jp_charsZrange_b_jp_charsr   r$   rs   rs     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'   i   c               s(    V ^8  d   QhRRRRRRRR/# )r   decoded_sequencer   maximum_thresholdr8   debugr    r   r!   r"   r#   r$   r%   r%   G  s,     4% 4%4%.34%BF4%
4%r'   c           	     s\   \         P                  4        Uu. uF	  q3! 4       NK  	  pp\        V 4      ^,           pRpVR8  d   ^ pMVR8:  d   ^@pM^p\        V R,           \	        V4      4       Fu  w  rV F-  p
V
P                  V4      '       g   K  V
P                  V4       K/  	  V	^ 8  d   W,          ^ 8X  g   W^,
          8X  g   K[  \        R V 4       4      pWa8  g   Ku   M	  V'       d   \        R4      pVP                  \        RV RV R	V 24       \        V 4      ^8  d=   VP                  \        R
V R,           24       VP                  \        RV RR  24       V F2  pVP                  \        VP                   RVP                   24       K4  	  \        V^4      # u upi )zo
Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier.
rQ   i   r   Z
c              3  s8   "   T F  qP                   x  K  	  R # 5irK   )r9   )r   dtrS   r$   r   Zmess_ratio.<locals>.<genexpr>e  s     !?Yr((Ys   Zcharset_normalizerzIMess-detector extended-analysis start. intermediary_mean_mess_ratio_calc=z mean_mess_ratio=z maximum_threshold=zStarting with: :Ni   NzEnding with: Nz: i)r   Z__subclasses__r   r   r   r-   r1   Zsumr   Zlogr   Z	__class__r9   Zround)r   r   r   Zmd_classZ	detectorsZlengthZmean_mess_ratioZ!intermediary_mean_mess_ratio_calcr   ZindexZdetectorZloggerr   s   &&&          r$   
mess_ratior   F  s    $6#D#D#F+#Fx
#F  + &'!+F O|13)	4,.),/) 04 7vG	!H  ++i( "
 AI%CqHqj !!?Y!??O3 H /0

11R0SSdetdu v!!2 35	
  2%JJu0@0E/FGHJJu.>su.E-FGHBJJub
;<  !$$[+s   F)N)g?F))Z
__future__r   Z	functoolsr   Zloggingr   Zconstantr   r   r   Zutilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rA   rU   r^   rg   rn   rw   r   r   r   rs   r   r!   r'   r$   <module>r      s    "   
    ," "D,L'9 ,L^O1 O6E* E0"D&8 "DJ./( ./bsA- sAl N*  NFIP0 IPX#1 #8 4F FR 44% 4%r'   