Ë
    Dü´j÷>  ã                   óð  — U d Z ddlmZ ddlmZmZ ddlmZ dede	e
eef   fd„Zdede	e
eef   fd„Zdede	e
eef   fd	„Zdede	e
eef   fd
„Zdede	e
eef   fd„Zdede	e
eef   fd„Zdede	e
eef   fd„Zdede	e
eef   fd„Zdede	e
eef   fd„ZeeeeeeeedœZeeeege	e
eef   f   f   ed<   dededede	e
eef   dz  fd„Zdededede
fd„Z	 ddededededz  de
f
d„Zdedededefd„Zy)a™  Stage 2b: Multi-byte structural probing.

Computes how well byte patterns in the data match the expected multi-byte
structure for a given encoding.  Used after byte-validity filtering (Stage 2a)
to further rank multi-byte encoding candidates.

Note: ``from __future__ import annotations`` is intentionally omitted because
this module is compiled with mypyc, which does not support PEP 563 string
annotations.
é    )ÚCallable)Ú
HIGH_BYTESÚPipelineContext)ÚEncodingInfoÚdataÚreturnc                 ó’  — d}d}d}t        «       }d}t        | «      }||k  rŒ| |   }d|cxk  rdk  sn d|cxk  rdk  rdn na|dz  }|dz   |k  rN| |dz      }d|cxk  rdk  sn d	|cxk  rd
k  r.n n+|dz  }|j                  |«       |dz  }|dkD  r|dz  }|dz  }Œ€|dz  }n|dz  }||k  rŒŒ|dkD  r||z  nd}	|	|t        |«      fS )z°Single-pass Shift_JIS structural analysis.

    Lead bytes: 0x81-0x9F, 0xE0-0xEF
    Trail bytes: 0x40-0x7E, 0x80-0xFC

    Returns (pair_ratio, mb_bytes, lead_diversity).
    r   é�   éŸ   éà   éï   é   é@   é~   é€   éü   é   é   ç        ©ÚsetÚlenÚadd©
r   Ú
lead_countÚvalid_countÚmbÚleadsÚiÚlengthÚbÚtrailÚratios
             úY/root/workspace/ytshorts/venv/lib/python3.12/site-packages/chardet/pipeline/structural.pyÚ_analyze_shift_jisr%      s  € ð €JØ€KØ	
€BÜ“e€EØ	€AÜ�‹Y€FØ
ˆfŠ*Ø�‰GˆØ�AÔ˜Ô 4¨1Ô#4°Õ#4Ø˜!‰OˆJØ�1‰u�vŠ~Ø˜Q ™U™�Ø˜EÔ) TÔ)¨t°uÔ/DÀÕ/DØ 1Ñ$�KØ—I‘I˜a”Là˜!‘G�BØ˜t’|Ø˜a™˜Ø˜‘F�AØØ�‰F‰Aà�‰FˆAð# ˆf‹*ð$ )3°QªˆK˜*Ò$¸C€EØ�"”c˜%“jÐ Ð ó    c                 ó’  — d}d}d}t        «       }d}t        | «      }||k  rŒ| |   }d|cxk  rdk  sn d|cxk  rdk  rdn na|dz  }|dz   |k  rN| |dz      }d|cxk  rdk  sn d	|cxk  rdk  r.n n+|dz  }|j                  |«       |dz  }|d
kD  r|dz  }|dz  }Œ€|dz  }n|dz  }||k  rŒŒ|dkD  r||z  nd}	|	|t        |«      fS )aB  Single-pass CP932 structural analysis.

    Lead bytes: 0x81-0x9F, 0xE0-0xFC
    Trail bytes: 0x40-0x7E, 0x80-0xFC

    Extends Shift_JIS by raising the lead byte ceiling from 0xEF to 0xFC,
    covering IBM vendor-defined characters (NEC-selected, IBM extensions).

    Returns (pair_ratio, mb_bytes, lead_diversity).
    r   r
   r   r   r   r   r   r   r   r   r   r   r   r   s
             r$   Ú_analyze_cp932r(   E   s  € ð €JØ€KØ	
€BÜ“e€EØ	€AÜ�‹Y€FØ
ˆfŠ*Ø�‰GˆØ�AÔ˜Ô 4¨1Ô#4°Õ#4Ø˜!‰OˆJØ�1‰u�vŠ~Ø˜Q ™U™�Ø˜EÔ) TÔ)¨t°uÔ/DÀÕ/DØ 1Ñ$�KØ—I‘I˜a”Là˜!‘G�BØ˜t’|Ø˜a™˜Ø˜‘F�AØØ�‰F‰Aà�‰FˆAð# ˆf‹*ð$ )3°QªˆK˜*Ò$¸C€EØ�"”c˜%“jÐ Ð r&   c                 ó¨  — d}d}d}t        «       }d}t        | «      }||k  �r| |   }|dk(  rH|dz  }|dz   |k  r5d| |dz      cxk  rdk  r$n n!|dz  }|j                  |«       |dz  }|dz  }ŒR|dz  }n½|dk(  r\|dz  }|dz   |k  rId| |dz      cxk  rdk  r8n n5d| |dz      cxk  rdk  r$n n!|dz  }|j                  |«       |d	z  }|d	z  }Œ³|dz  }n\d|cxk  rdk  rLn nI|dz  }|dz   |k  r6d| |dz      cxk  rdk  r%n n"|dz  }|j                  |«       |dz  }|dz  }�Œ
|dz  }n|dz  }||k  r�Œ|dkD  r||z  nd
}||t        |«      fS )zóSingle-pass EUC-JP structural analysis.

    Two-byte: Lead 0xA1-0xFE, Trail 0xA1-0xFE
    SS2 (half-width katakana): 0x8E + 0xA1-0xDF
    SS3 (JIS X 0212): 0x8F + 0xA1-0xFE + 0xA1-0xFE

    Returns (pair_ratio, mb_bytes, lead_diversity).
    r   éŽ   r   é¡   éß   r   é�   éþ   é   r   r   ©	r   r   r   r   r   r   r    r!   r#   s	            r$   Ú_analyze_euc_jpr1   n   s³  € ð €JØ€KØ	
€BÜ“e€EØ	€AÜ�‹Y€FØ
ˆf‹*Ø�‰GˆØ�Š9à˜!‰OˆJØ�1‰u�vŠ~ $¨$¨q°1©u©+Ô"=¸Õ"=Ø˜qÑ �Ø—	‘	˜!”Ø�a‘�Ø�Q‘�ØØ�‰F‰AØ�$ŠYà˜!‰OˆJà�A‘˜’Ø˜D  Q¡™KÔ/¨4Õ/Ø˜D  Q¡™KÔ/¨4Õ/à˜qÑ �Ø—	‘	˜!”Ø�a‘�Ø�Q‘�ØØ�‰F‰AØ�QÔ˜$ÕØ˜!‰OˆJØ�1‰u�vŠ~ $¨$¨q°1©u©+Ô"=¸Õ"=Ø˜qÑ �Ø—	‘	˜!”Ø�a‘�Ø�Q‘�ÙØ�‰F‰Aà�‰FˆAðI ˆfŒ*ðJ )3°QªˆK˜*Ò$¸C€EØ�"”c˜%“jÐ Ð r&   c                 óF  — d}d}d}t        «       }d}t        | «      }||k  rf| |   }d|cxk  rdk  rKn nH|dz  }|dz   |k  r5d| |dz      cxk  rdk  r$n n!|dz  }|j                  |«       |dz  }|dz  }ŒZ|dz  }n|dz  }||k  rŒf|dkD  r||z  nd}||t        |«      fS )z†Single-pass EUC-KR structural analysis.

    Lead 0xA1-0xFE; Trail 0xA1-0xFE

    Returns (pair_ratio, mb_bytes, lead_diversity).
    r   r+   r.   r   r   r   r   r0   s	            r$   Ú_analyze_euc_krr3   ¨   s×   € ð €JØ€KØ	
€BÜ“e€EØ	€AÜ�‹Y€FØ
ˆfŠ*Ø�‰GˆØ�1Ô˜ÕØ˜!‰OˆJØ�1‰u�vŠ~ $¨$¨q°1©u©+Ô"=¸Õ"=Ø˜qÑ �Ø—	‘	˜!”Ø�a‘�Ø�Q‘�ØØ�‰F‰Aà�‰FˆAð ˆf‹*ð )3°QªˆK˜*Ò$¸C€EØ�"”c˜%“jÐ Ð r&   c                 ó¬  — d}d}d}t        «       }d}t        | «      }||k  r™| |   }d|cxk  rdk  sn d|cxk  rdk  rqn nn|dz  }|dz   |k  r[| |dz      }d|cxk  rdk  sn d	|cxk  rd
k  sn d|cxk  rdk  r.n n+|dz  }|j                  |«       |dz  }|dkD  r|dz  }|dz  }Œ�|dz  }n|dz  }||k  rŒ™|dkD  r||z  nd}	|	|t        |«      fS )at  Single-pass CP949 (Unified Hangul Code) structural analysis.

    Lead bytes: 0x81-0xC8, 0xCA-0xFD
    Trail bytes: 0x41-0x5A, 0x61-0x7A, 0x81-0xFE

    Extends EUC-KR by lowering the lead byte floor from 0xA1 to 0x81 and
    adding ASCII letter trail ranges plus 0x81-0xA0.  0xC9 is not a valid
    UHC lead byte.

    Returns (pair_ratio, mb_bytes, lead_diversity).
    r   r
   éÈ   éÊ   éý   r   éA   éZ   éa   éz   r.   r   r   r   r   r   s
             r$   Ú_analyze_cp949r<   È   s  € ð €JØ€KØ	
€BÜ“e€EØ	€AÜ�‹Y€FØ
ˆfŠ*Ø�‰GˆØ�AÔ˜Ô 4¨1Ô#4°Õ#4Ø˜!‰OˆJØ�1‰u�vŠ~Ø˜Q ™U™�à˜UÔ* dÔ*Ø Ô-¨Ô-Ø Ô-¨Õ-à 1Ñ$�KØ—I‘I˜a”Là˜!‘G�BØ˜t’|Ø˜a™˜Ø˜‘F�AØØ�‰F‰Aà�‰FˆAð+ ˆf‹*ð, )3°QªˆK˜*Ò$¸C€EØ�"”c˜%“jÐ Ð r&   c                 ó,  — d}d}d}t        «       }d}t        | «      }||k  rÙ| |   }d|cxk  rdk  r¾n n»|dz  }|dz   |k  r]d| |dz      cxk  rdk  rLn nId| |dz      cxk  rdk  r8n n5d| |dz      cxk  rdk  r$n n!|dz  }|j                  |«       |dz  }|d	z  }Œ‚d
|cxk  rdk  r@n n=|dz   |k  r5d
| |dz      cxk  rdk  r$n n!|dz  }|j                  |«       |dz  }|dz  }ŒÍ|dz  }n|dz  }||k  rŒÙ|dkD  r||z  nd}||t        |«      fS )aÕ  Single-pass GB18030 / GB2312 structural analysis.

    Only counts strict GB2312 2-byte pairs (lead 0xA1-0xF7, trail 0xA1-0xFE)
    and GB18030 4-byte sequences.  The broader GBK extension range
    (lead 0x81-0xFE, trail 0x40-0x7E / 0x80-0xFE) is intentionally excluded
    because it is so permissive that unrelated single-byte data (EBCDIC, DOS
    codepages, etc.) can score 1.0, leading to false positives.

    Returns (pair_ratio, mb_bytes, lead_diversity).
    r   r
   r.   r   r/   é0   é9   r   é   r+   é÷   r   r   r0   s	            r$   Ú_analyze_gb18030rB   ö   sY  € ð €JØ€KØ	
€BÜ“e€EØ	€AÜ�‹Y€FØ
ˆfŠ*Ø�‰GˆØ�1Ô˜ÕØ˜!‰OˆJð �A‘˜’Ø˜D  Q¡™KÔ/¨4Õ/Ø˜D  Q¡™KÔ/¨4Õ/Ø˜D  Q¡™KÔ/¨4Õ/à˜qÑ �Ø—	‘	˜!”Ø�a‘�Ø�Q‘�Øà�qÔ ˜DÕ  Q¨¡U¨V¢^¸ÀÀQÈÁUÁÔ8SÈtÕ8SØ˜qÑ �Ø—	‘	˜!”Ø�a‘�Ø�Q‘�ØØ�‰F‰Aà�‰FˆAð3 ˆf‹*ð4 )3°QªˆK˜*Ò$¸C€EØ�"”c˜%“jÐ Ð r&   c                 óx  — d}d}d}t        «       }d}t        | «      }||k  r| |   }d|cxk  rdk  rdn na|dz  }|dz   |k  rN| |dz      }d|cxk  rdk  sn d|cxk  rdk  r.n n+|dz  }|j                  |«       |dz  }|dkD  r|dz  }|d	z  }Œs|dz  }n|dz  }||k  rŒ|dkD  r||z  nd
}	|	|t        |«      fS )z�Single-pass Big5 structural analysis.

    Lead 0xA1-0xF9; Trail 0x40-0x7E, 0xA1-0xFE

    Returns (pair_ratio, mb_bytes, lead_diversity).
    r   r+   éù   r   r   r   r.   r   r   r   r   r   s
             r$   Ú_analyze_big5rE   '  sù   € ð €JØ€KØ	
€BÜ“e€EØ	€AÜ�‹Y€FØ
ˆfŠ*Ø�‰GˆØ�1Ô˜ÕØ˜!‰OˆJØ�1‰u�vŠ~Ø˜Q ™U™�Ø˜EÔ) TÔ)¨t°uÔ/DÀÕ/DØ 1Ñ$�KØ—I‘I˜a”Là˜!‘G�BØ˜t’|Ø˜a™˜Ø˜‘F�AØØ�‰F‰Aà�‰FˆAð# ˆf‹*ð$ )3°QªˆK˜*Ò$¸C€EØ�"”c˜%“jÐ Ð r&   c                 óx  — d}d}d}t        «       }d}t        | «      }||k  r| |   }d|cxk  rdk  rdn na|dz  }|dz   |k  rN| |dz      }d|cxk  rdk  sn d|cxk  rdk  r.n n+|dz  }|j                  |«       |dz  }|dkD  r|dz  }|d	z  }Œs|dz  }n|dz  }||k  rŒ|dkD  r||z  nd
}	|	|t        |«      fS )aW  Single-pass Big5-HKSCS structural analysis.

    Lead bytes: 0x87-0xFE
    Trail bytes: 0x40-0x7E, 0xA1-0xFE

    Extends Big5 by lowering the lead byte floor from 0xA1 to 0x87 and
    raising the ceiling from 0xF9 to 0xFE.  0x7F and 0x80-0xA0 are not
    valid Big5/HKSCS trail bytes.

    Returns (pair_ratio, mb_bytes, lead_diversity).
    r   é‡   r.   r   r   r   r+   r   r   r   r   r   s
             r$   Ú_analyze_big5hkscsrH   L  sù   € ð €JØ€KØ	
€BÜ“e€EØ	€AÜ�‹Y€FØ
ˆfŠ*Ø�‰GˆØ�1Ô˜ÕØ˜!‰OˆJØ�1‰u�vŠ~Ø˜Q ™U™�Ø˜EÔ) TÔ)¨t°uÔ/DÀÕ/DØ 1Ñ$�KØ—I‘I˜a”Là˜!‘G�BØ˜t’|Ø˜a™˜Ø˜‘F�AØØ�‰F‰Aà�‰FˆAð# ˆf‹*ð$ )3°QªˆK˜*Ò$¸C€EØ�"”c˜%“jÐ Ð r&   c                 ó¶  — d}d}d}t        «       }d}t        | «      }||k  rž| |   }d|cxk  rdk  sn d|cxk  rdk  sn d|cxk  rdk  rin nf|dz  }|dz   |k  rS| |dz      }d	|cxk  rd
k  sn d|cxk  rdk  r3n n0|dz  }|j                  |«       |dkD  r|dz  }|dkD  r|dz  }|dz  }Œ’|dz  }n|dz  }||k  rŒž|dkD  r||z  nd}	|	|t        |«      fS )z«Single-pass Johab structural analysis.

    Lead: 0x84-0xD3, 0xD8-0xDE, 0xE0-0xF9
    Trail: 0x31-0x7E, 0x91-0xFE

    Returns (pair_ratio, mb_bytes, lead_diversity).
    r   é„   éÓ   éØ   éÞ   r   rD   r   é1   r   é‘   r.   r   r   r   r   r   s
             r$   Ú_analyze_johabrP   v  s  € ð €JØ€KØ	
€BÜ“e€EØ	€AÜ�‹Y€FØ
ˆfŠ*Ø�‰GˆØ�AÔ˜Ô 4¨1Ô#4°Ô#4¸$À!Ô:KÀtÕ:KØ˜!‰OˆJØ�1‰u�vŠ~Ø˜Q ™U™�Ø˜EÔ) TÔ)¨t°uÔ/DÀÕ/DØ 1Ñ$�KØ—I‘I˜a”LØ˜4’xØ˜a™˜Ø˜t’|Ø˜a™˜Ø˜‘F�AØØ�‰F‰Aà�‰FˆAð# ˆf‹*ð$ )3°QªˆK˜*Ò$¸C€EØ�"”c˜%“jÐ Ð r&   )Úshift_jis_2004Úcp932Úeuc_jis_2004Úeuc_krÚcp949Úgb18030Ú	big5hkscsÚjohabÚ
_ANALYZERSÚnameÚctxNc                 ó¢   — |j                   j                  |«      }|�|S t        j                  |«      }|€y || «      }||j                   |<   |S )z/Return cached analysis or compute and cache it.N)Úanalysis_cacheÚgetrY   )r   rZ   r[   ÚcachedÚanalyzerÚresults         r$   Ú_get_analysisrb   ¬  sZ   € ð ×Ñ×#Ñ# DÓ)€FØÐØˆÜ�~‰~˜dÓ#€HØÐØÙ�d‹^€FØ%€C×Ñ�tÑØ€Mr&   Úencoding_infoc                 ó^   — | r|j                   syt        | |j                  |«      }|€y|d   S )a•  Return 0.0--1.0 indicating how well *data* matches the encoding's structure.

    For single-byte encodings, always returns 0.0.  For empty data, always
    returns 0.0.

    :param data: The raw byte data to analyze.
    :param encoding_info: Metadata for the encoding to probe.
    :param ctx: Pipeline context for caching analysis results.
    :returns: A structural fit score between 0.0 and 1.0.
    r   r   ©Úis_multibyterb   rZ   ©r   rc   r[   ra   s       r$   Úcompute_structural_scorerh   À  s8   € ñ �}×1Ò1Øä˜4 ×!3Ñ!3°SÓ9€FØ€~Øà�!‰9Ðr&   Únon_ascii_countc                 óÒ   — | r|j                   syt        | |j                  |«      }|€y|d   }|�|n*t        | «      t        | j	                  dt
        «      «      z
  }|dk(  ry||z  S )av  Ratio of non-ASCII bytes that participate in valid multi-byte sequences.

    Genuine CJK text has nearly all non-ASCII bytes paired into valid
    multi-byte sequences (coverage close to 1.0), while Latin text with
    scattered high bytes has many orphan bytes (coverage well below 1.0).

    :param data: The raw byte data to analyze.
    :param encoding_info: Metadata for the encoding to probe.
    :param ctx: Pipeline context for caching analysis results.
    :param non_ascii_count: Pre-computed count of non-ASCII bytes, or ``None``
        to compute from *data*.
    :returns: A coverage ratio between 0.0 and 1.0.
    r   Nr   r   )rf   rb   rZ   r   Ú	translater   )r   rc   r[   ri   ra   Úmb_bytesÚ	non_asciis          r$   Úcompute_multibyte_byte_coveragern   ×  s|   € ñ& �}×1Ò1Øä˜4 ×!3Ñ!3°SÓ9€FØ€~Øà�a‰y€Hð Ð&ñ 	ä�‹Yœ˜TŸ^™^¨D´*Ó=Ó>Ñ>ð ð
 �A‚~Øà�iÑÐr&   c                 ó^   — | r|j                   syt        | |j                  |«      }|€y|d   S )aá  Count distinct lead byte values in valid multi-byte pairs.

    Genuine CJK text uses lead bytes from across the encoding's full
    repertoire.  European text falsely matching a CJK structural scorer
    clusters lead bytes in a narrow band.

    :param data: The raw byte data to analyze.
    :param encoding_info: Metadata for the encoding to probe.
    :param ctx: Pipeline context for caching analysis results.
    :returns: The number of distinct lead byte values found.
    r   é   r   re   rg   s       r$   Úcompute_lead_byte_diversityrq   þ  s8   € ñ �}×1Ò1ØÜ˜4 ×!3Ñ!3°SÓ9€FØ€~ØØ�!‰9Ðr&   )N)Ú__doc__Úcollections.abcr   Úchardet.pipeliner   r   Úchardet.registryr   ÚbytesÚtupleÚfloatÚintr%   r(   r1   r3   r<   rB   rE   rH   rP   rY   ÚdictÚstrÚ__annotations__rb   rh   rn   rq   © r&   r$   ú<module>r~      sD  ðò	õ %ç 8Ý )ð #!Ø
ð#!à
ˆ5�#�sˆ?Ñó#!ðL&!Ø
ð&!à
ˆ5�#�sˆ?Ñó&!ðR7!Ø
ð7!à
ˆ5�#�sˆ?Ñó7!ðt!Ø
ð!à
ˆ5�#�sˆ?Ñó!ð@+!Ø
ð+!à
ˆ5�#�sˆ?Ñó+!ð\.!Ø
ð.!à
ˆ5�#�sˆ?Ñó.!ðb"!Ø
ð"!à
ˆ5�#�sˆ?Ñó"!ðJ'!Ø
ð'!à
ˆ5�#�sˆ?Ñó'!ðT#!Ø
ð#!à
ˆ5�#�sˆ?Ñó#!ðV )ØØ#ØØØØ#Øñ	D€
ˆD��h ˜w¨¨e°S¸#¨oÑ(>Ð>Ñ?Ð?Ñ@ó 	ðØ
ðØðØ!0ðà
ˆ5�#�sˆ?Ñ˜dÑ"óð(Ø
ðØ ,ðØ3Bðà
óð6 #'ñ	$ Ø
ð$ àð$ ð 
ð$ ð ˜4‘Zð	$ ð
 ó$ ðNØ
ðØ ,ðØ3Bðàôr&   