+
    iN                       ^ 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                  T    ] 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 )formats   "[/Users/ahmad/.openclaw/workspace/venv/lib/python3.14/site-packages/charset_normalizer/md.py__annotate__MessDetectorPlugin.__annotate__'   s     " "# "$ "    c                    \         h)z0
Determine if given character should be fed in.
NotImplementedErrorselfr    s   &&r&   eligibleMessDetectorPlugin.eligible'   
     "!r)   c                    V ^8  d   QhRRRR/# r   r    r!   r"   Noner$   )r%   s   "r&   r'   r(   -   s     " "c "d "r)   c                    \         h)zq
The main routine to be executed upon character.
Insert the logic in witch the text would be considered chaotic.
r+   r-   s   &&r&   feedMessDetectorPlugin.feed-   s
    
 "!r)   c                   V ^8  d   QhRR/# r   r"   r4   r$   )r%   s   "r&   r'   r(   4   s     " "t "r)   c                    \         h)z2
Permit to reset the plugin to the initial state.
r+   r.   s   &r&   resetMessDetectorPlugin.reset4   r1   r)   c                   V ^8  d   QhRR/# r   r"   floatr$   )r%   s   "r&   r'   r(   ;   s     " "u "r)   c                    \         h)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.ratio:   s
     "!r)   r$   N)__name__
__module____qualname____firstlineno____doc__r/   r6   r<   propertyrB   __static_attributes__r$   r)   r&   r   r   !   s*    
""" " "r)   r   c                  \    ] 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                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   -TooManySymbolOrPunctuationPlugin.__annotate__D   s     2 2$ 2r)   c                	L    ^ 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_wordr;   s   &r&   __init__)TooManySymbolOrPunctuationPlugin.__init__D   s*    '("#%&04!,1#r)   c                    V ^8  d   QhRRRR/# r   r$   )r%   s   "r&   r'   rN   L        ' '# '$ 'r)   c                	"    VP                  4       # Nisprintabler-   s   &&r&   r/   )TooManySymbolOrPunctuationPlugin.eligibleL       $$&&r)   c                    V ^8  d   QhRRRR/# r3   r$   )r%   s   "r&   r'   rN   O   s     . .c .d .r)   c                	j   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)	rR   rS   r   r   rP   isdigitr   r   rQ   r-   s   &&r&   r6   %TooManySymbolOrPunctuationPlugin.feedO   s    " 222!==i((''1,'!!#u,i((	*e3""a'"$-!r)   c                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   rN   a   s      t r)   c                	0    ^ V n         ^ V n        ^ V n        R# r   N)rP   rR   rQ   r;   s   &r&   r<   &TooManySymbolOrPunctuationPlugin.reseta   s    "# !r)   c                   V ^8  d   QhRR/# r?   r$   )r%   s   "r&   r'   rN   g   s     L Lu Lr)   c                	    V P                   ^ 8X  d   R# V P                  V P                  ,           V P                   ,          pVR8  d   V# R# )r           333333?)rR   rP   rQ   )r.   ratio_of_punctuations   & r&   rB   &TooManySymbolOrPunctuationPlugin.ratiof   sO      A% ##d&8&88!!'" (<s'B#KKr)   )rR   rT   rS   rP   rQ   NrD   rE   rF   rG   rU   r/   r6   r<   rI   rB   rJ   r$   r)   r&   rL   rL   C   s,    2'.$
 L Lr)   rL   c                  \    ] 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                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   %TooManyAccentuatedPlugin.__annotate__s   s     ) )$ )r)   c                	"    ^ V n         ^ V n        R# rf   rR   _accentuated_countr;   s   &r&   rU   !TooManyAccentuatedPlugin.__init__s   s    %&'(r)   c                    V ^8  d   QhRRRR/# r   r$   )r%   s   "r&   r'   rr   w   s     # ## #$ #r)   c                	"    VP                  4       # rZ   )isalphar-   s   &&r&   r/   !TooManyAccentuatedPlugin.eligiblew   s      ""r)   c                    V ^8  d   QhRRRR/# r3   r$   )r%   s   "r&   r'   rr   z   s     ) )c )d )r)   c                	    V ;P                   ^,          un         \        V4      '       d   V ;P                  ^,          un        R# R# ra   N)rR   r	   ru   r-   s   &&r&   r6   TooManyAccentuatedPlugin.feedz   s4    ")$$##q(# %r)   c                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   rr      s     $ $t $r)   c                	"    ^ V n         ^ V n        R# rf   rt   r;   s   &r&   r<   TooManyAccentuatedPlugin.reset   s     !"#r)   c                   V ^8  d   QhRR/# r?   r$   )r%   s   "r&   r'   rr      s     O Ou Or)   c                	x    V P                   ^8  d   R# V P                  V P                   ,          pVR8  d   V# R# )   rj   gffffff?rt   )r.   ratio_of_accentuations   & r&   rB   TooManyAccentuatedPlugin.ratio   s=      1$'+'>'>AVAV'V(=(E$N3Nr)   )ru   rR   Nrn   r$   r)   r&   rp   rp   r   s,    )#)$ O Or)   rp   c                  \    ] 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                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   UnprintablePlugin.__annotate__   s     ' '$ 'r)   c                	"    ^ V n         ^ V n        R# rf   )_unprintable_countrR   r;   s   &r&   rU   UnprintablePlugin.__init__   s    '(%&r)   c                    V ^8  d   QhRRRR/# r   r$   )r%   s   "r&   r'   r            # $ r)   c                	    R # Tr$   r-   s   &&r&   r/   UnprintablePlugin.eligible       r)   c                    V ^8  d   QhRRRR/# r3   r$   )r%   s   "r&   r'   r      s     # #c #d #r)   c                	    \        V4      '       d   V ;P                  ^,          un        V ;P                  ^,          un        R# r}   )r   r   rR   r-   s   &&r&   r6   UnprintablePlugin.feed   s/    )$$##q(#"r)   c                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   r      s     $ $t $r)   c                	    ^ V n         R# rf   )r   r;   s   &r&   r<   UnprintablePlugin.reset   s
    "#r)   c                   V ^8  d   QhRR/# r?   r$   )r%   s   "r&   r'   r      s     E Eu Er)   c                	p    V P                   ^ 8X  d   R# V P                  ^,          V P                   ,          # r   rj   rR   r   r;   s   &r&   rB   UnprintablePlugin.ratio   s/      A%''!+t/D/DDDr)   r   Nrn   r$   r)   r&   r   r      s,    '#
$ E Er)   r   c                  \    ] 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                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   ,SuspiciousDuplicateAccentPlugin.__annotate__   s     6 6$ 6r)   c                	0    ^ V n         ^ V n        RV n        R# rf   _successive_countrR   _last_latin_characterr;   s   &r&   rU   (SuspiciousDuplicateAccentPlugin.__init__   s    &'%&15"r)   c                    V ^8  d   QhRRRR/# r   r$   )r%   s   "r&   r'   r      s     ; ;# ;$ ;r)   c                	H    VP                  4       ;'       d    \        V4      # rZ   )ry   r   r-   s   &&r&   r/   (SuspiciousDuplicateAccentPlugin.eligible   s      "::x	'::r)   c                    V ^8  d   QhRRRR/# r3   r$   )r%   s   "r&   r'   r      s     / /c /d /r)   c                	   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}   )rR   r   r	   isupperr   r   r-   s   &&r&   r6   $SuspiciousDuplicateAccentPlugin.feed   s    "&&2y))t99::  ""t'A'A'I'I'K'K&&!+&Y'=9S9S+TT&&!+&%."r)   c                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   r      s     * *t *r)   c                	0    ^ V n         ^ V n        RV n        R# rf   r   r;   s   &r&   r<   %SuspiciousDuplicateAccentPlugin.reset   s    !" !%)"r)   c                   V ^8  d   QhRR/# r?   r$   )r%   s   "r&   r'   r      s     D Du Dr)   c                	p    V P                   ^ 8X  d   R# V P                  ^,          V P                   ,          # r   )rR   r   r;   s   &r&   rB   %SuspiciousDuplicateAccentPlugin.ratio   s/      A%&&*d.C.CCCr)   )rR   r   r   Nrn   r$   r)   r&   r   r      s,    6;/*
 D Dr)   r   c                  \    ] 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                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   SuspiciousRange.__annotate__   s     5 5$ 5r)   c                	0    ^ V n         ^ V n        RV n        R# rf   )"_suspicious_successive_range_countrR   _last_printable_seenr;   s   &r&   rU   SuspiciousRange.__init__   s    78/%&04!r)   c                    V ^8  d   QhRRRR/# r   r$   )r%   s   "r&   r'   r      rX   r)   c                	"    VP                  4       # rZ   r[   r-   s   &&r&   r/   SuspiciousRange.eligible   r^   r)   c                    V ^8  d   QhRRRR/# r3   r$   )r%   s   "r&   r'   r      s     . .c .d .r)   c                	z   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}   )rR   isspacer   r   r   r    is_suspiciously_successive_ranger   )r.   r    unicode_range_aunicode_range_bs   &&  r&   r6   SuspiciousRange.feed   s    " i((88(,D%$$,(1%&3D4M4M&N&3I&>+OMM33q83$-!r)   c                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   r      s     ) )t )r)   c                	0    ^ V n         ^ V n        RV n        R# rf   )rR   r   r   r;   s   &r&   r<   SuspiciousRange.reset   s     !23/$(!r)   c                   V ^8  d   QhRR/# r?   r$   )r%   s   "r&   r'   r      s     / /u /r)   c                	t    V P                   ^8:  d   R# V P                  ^,          V P                   ,          pV# )   rj   )rR   r   )r.   ratio_of_suspicious_range_usages   & r&   rB   SuspiciousRange.ratio   s<      B& 33a7!!2"' /.r)   )rR   r   r   Nrn   r$   r)   r&   r   r      s*    5
'..)
 / /r)   r   c                  \    ] 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                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   !SuperWeirdWordPlugin.__annotate__   s     * *$ *r)   c                	    ^ 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_watchrR   _bad_character_count_buffer_buffer_accent_count_buffer_glyph_countr;   s   &r&   rU   SuperWeirdWordPlugin.__init__   sQ     !$%() */!). %&)*!)*!() r)   c                    V ^8  d   QhRRRR/# r   r$   )r%   s   "r&   r'   r     r   r)   c                	    R # r   r$   r-   s   &&r&   r/   SuperWeirdWordPlugin.eligible  r   r)   c                    V ^8  d   QhRRRR/# r3   r$   )r%   s   "r&   r'   r     s     O& O&c O&d O&r)   c                		   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 )
ra   FTN      ?c              3  @   "   T F  qP                  4       x  K  	  R # 5irZ   )r   ).0_s   & r&   	<genexpr>,SuperWeirdWordPlugin.feed.<locals>.<genexpr>8  s     >AIIKKs   rk   r   >   -<=>r   |~)ry   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   lenrR   r   r   allr   zipranger   r   rb   r   )r.   r    buffer_lengthcicamel_case_dstprobable_camel_caseds   &&     r&   r6   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                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   r   _  s     % %t %r)   c                	v    R V n         RV n        RV n        ^ V n        ^ V n        ^ V n        ^ V n        ^ V n        R# )r   FN)r   r   r   r   r   rR   r   r   r;   s   &r&   r<   SuperWeirdWordPlugin.reset_  sA    $)!#(   !$%!#$ r)   c                   V ^8  d   QhRR/# r?   r$   )r%   s   "r&   r'   r   j  s     A Au Ar)   c                	    V P                   ^
8:  d   V P                  ^ 8X  d   R# V P                  V P                  ,          # )
   rj   )r   r   r   rR   r;   s   &r&   rB   SuperWeirdWordPlugin.ratioi  s7    r!d&>&>!&C((4+@+@@@r)   )
r   r   r   r   r   rR   r   r   r   r   Nrn   r$   r)   r&   r   r      s.    *O&b% A Ar)   r   c                  `    ] 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                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   CjkUncommonPlugin.__annotate__v  s     & &$ &r)   c                	"    ^ V n         ^ V n        R# rf   rR   _uncommon_countr;   s   &r&   rU   CjkUncommonPlugin.__init__v  s    %&$%r)   c                    V ^8  d   QhRRRR/# r   r$   )r%   s   "r&   r'   r  z  s     ! !# !$ !r)   c                	    \        V4      # rZ   )r   r-   s   &&r&   r/   CjkUncommonPlugin.eligiblez  s    i  r)   c                    V ^8  d   QhRRRR/# r3   r$   )r%   s   "r&   r'   r  }  s      c d r)   c                	    V ;P                   ^,          un         \        V4      '       d   V ;P                  ^,          un        R# R# r}   )rR   r   r  r-   s   &&r&   r6   CjkUncommonPlugin.feed}  s7    "9%%  A%  &r)   c                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   r    s     ! !t !r)   c                	"    ^ V n         ^ V n        R# rf   r  r;   s   &r&   r<   CjkUncommonPlugin.reset  s     ! r)   c                   V ^8  d   QhRR/# r?   r$   )r%   s   "r&   r'   r    s     N Nu Nr)   c                	    V P                   ^8  d   R# V P                  V P                   ,          pVR8  d
   V^
,          # R# )r   rj   r   r  )r.   uncommon_form_usages   & r&   rB   CjkUncommonPlugin.ratio  sD      1$%)%9%9D<Q<Q%Q ,?+D"R'M#Mr)   r  N)rD   rE   rF   rG   rH   rU   r/   r6   r<   rI   rB   rJ   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                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   $ArchaicUpperLowerPlugin.__annotate__  s     . .$ .r)   c                	h    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_finalrR   _last_alpha_seen_current_ascii_onlyr;   s   &r&   rU    ArchaicUpperLowerPlugin.__init__  s9    	45,23*890%&,0)- r)   c                    V ^8  d   QhRRRR/# r   r$   )r%   s   "r&   r'   r    r   r)   c                	    R # r   r$   r-   s   &&r&   r/    ArchaicUpperLowerPlugin.eligible  r   r)   c                    V ^8  d   QhRRRR/# r3   r$   )r%   s   "r&   r'   r    s     (* (*c (*d (*r)   c                	   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  )ry   r   r  rb   r"  r   r  r!  r  rR   isasciir   islower)r.   r    is_concerned	chunk_seps   &&  r&   r6   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                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   r    s     ( (t (r)   c                	h    ^ V n         ^ V n        ^ V n        ^ V n        RV n        RV n        RV n        R# )r   NFT)rR   r  r  r   r!  r  r"  r;   s   &r&   r<   ArchaicUpperLowerPlugin.reset  s9     !/0,-.*340 $	#' r)   c                   V ^8  d   QhRR/# r?   r$   )r%   s   "r&   r'   r    s     P Pu Pr)   c                	b    V P                   ^ 8X  d   R# V P                  V P                   ,          # r   )rR   r   r;   s   &r&   rB   ArchaicUpperLowerPlugin.ratio  s*      A%77$:O:OOOr)   )r  rR   r  r"  r!  r  r   Nrn   r$   r)   r&   r  r    s-    .(*T( P P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# )ArabicIsolatedFormPlugini  c                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   %ArabicIsolatedFormPlugin.__annotate__  s     + +$ +r)   c                	"    ^ V n         ^ V n        R# rf   rR   _isolated_form_countr;   s   &r&   rU   !ArabicIsolatedFormPlugin.__init__  s    %&)*!r)   c                   V ^8  d   QhRR/# r9   r$   )r%   s   "r&   r'   r7    s     & &t &r)   c                	"    ^ V n         ^ V n        R# rf   r9  r;   s   &r&   r<   ArabicIsolatedFormPlugin.reset  s     !$%!r)   c                    V ^8  d   QhRRRR/# r   r$   )r%   s   "r&   r'   r7    s     $ $# $$ $r)   c                	    \        V4      # rZ   )r
   r-   s   &&r&   r/   !ArabicIsolatedFormPlugin.eligible  s    ##r)   c                    V ^8  d   QhRRRR/# r3   r$   )r%   s   "r&   r'   r7    s     + +c +d +r)   c                	    V ;P                   ^,          un         \        V4      '       d   V ;P                  ^,          un        R# R# r}   )rR   r   r:  r-   s   &&r&   r6   ArabicIsolatedFormPlugin.feed  s4    ""9--%%*% .r)   c                   V ^8  d   QhRR/# r?   r$   )r%   s   "r&   r'   r7    s     # #u #r)   c                	f    V P                   ^8  d   R# V P                  V P                   ,          pV# )r   rj   r9  )r.   isolated_form_usages   & r&   rB   ArabicIsolatedFormPlugin.ratio  s0      1$%)%>%>AVAV%V""r)   r9  N)rD   rE   rF   rG   rU   r<   r/   r6   rI   rB   rJ   r$   r)   r&   r5  r5    s*    +&$+ # #r)   r5     )maxsizec               $    V ^8  d   QhRRRRRR/# )r   r   z
str | Noner   r"   r#   r$   )r%   s   "r&   r'   r'     s)     F FF2<F	Fr)   c                   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.
TFLatin	Emoticons	Combining CJKHangulzBasic LatinPunctuationForms)HiraganaKatakana)rV  rU  )splitr   )r   r   keywords_range_akeywords_range_belrange_a_jp_charsrange_b_jp_charss   &&     r&   r   r     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               (    V ^8  d   QhRRRRRRRR/# )r   decoded_sequencer!   maximum_thresholdr@   debugr#   r"   r$   )r%   s   "r&   r'   r'   G  s,     4% 4%4%.34%BF4%
4%r)   c           	     \   \         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.
rj   i   rI  
c              3  8   "   T F  qP                   x  K  	  R # 5irZ   )rB   )r   dts   & r&   r   mess_ratio.<locals>.<genexpr>e  s     !?Yr((Ys   charset_normalizerzIMess-detector extended-analysis start. intermediary_mean_mess_ratio_calc=z mean_mess_ratio=z maximum_threshold=zStarting with: :N   NzEnding with: Nz: i)r   __subclasses__r   r   r   r/   r6   sumr   logr   	__class__rB   round)r^  r_  r`  md_class	detectorslengthmean_mess_ratio!intermediary_mean_mess_ratio_calcr    indexdetectorloggerrd  s   &&&          r&   
mess_ratioru  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))
__future__r   	functoolsr   loggingr   constantr   r   r   utilsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rL   rp   r   r   r   r   r  r  r5  r   ru  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)   