§
    |ØjY4  ã                   óØ   — U d Z ddlZddlmZmZmZ dZdZdZdZ	dZ
d	Zd
ZdZdez   Zeed<   dededefd„Zdededz  fd„Zdededz  fd„Zdededz  fd„Zdedefd„Zddededefd„ZdS )a«  Stage 1a+: UTF-16/UTF-32 detection for data without BOM.

This stage runs after BOM detection but before binary detection.
UTF-16 and UTF-32 encoded text contains characteristic null-byte patterns
that would otherwise cause binary detection to reject the data.

Note: ``from __future__ import annotations`` is intentionally omitted because
this module is compiled with mypyc, which does not support PEP 563 string
annotations.
é    N)ÚASCII_TEXT_BYTESÚDETERMINISTIC_CONFIDENCEÚDetectionResulti   é   é
   g¸…ëQ¸ž?ç      à?gš™™™™™©?gffffffæ?g      è?ó    Ú_NULL_SEPARATOR_ALLOWEDÚdataÚ	null_fracÚreturnc                 óT   — |t           k    rdS |                      dt          ¦  «         S )u‹  Return True if the data looks like ASCII with null byte separators.

    :param data: The raw byte sample to examine.
    :param null_frac: The positional null fraction for this UTF-16 candidate
        (i.e. fraction of null bytes in even positions for BE, or odd positions
        for LE) â€” not the total null fraction across all bytes.

    Checks two conditions:
    1. The positional null fraction is below ``_NULL_SEPARATOR_MAX_FRACTION``
    2. Every non-null byte is printable ASCII or common whitespace

    When both conditions are met, the nulls are likely field separators
    (e.g. ``find -print0``), not UTF-16 encoding artifacts.
    FN)Ú_NULL_SEPARATOR_MAX_FRACTIONÚ	translater
   )r   r   s     ú�/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/chardet/pipeline/utf1632.pyÚ_is_null_separator_patternr   F   s-   € ð Õ0Ò0Ð0ØˆuØ�~Š~˜dÕ$;Ñ<Ô<Ð<Ð<ó    c                 ó˜   — | dt           …         }t          |¦  «        t          k     rdS t          |¦  «        }|�|S t	          |¦  «        S )a  Detect UTF-32 or UTF-16 encoding from null-byte patterns.

    UTF-32 is checked before UTF-16 since UTF-32 patterns are more specific.

    :param data: The raw byte data to examine.
    :returns: A :class:`DetectionResult` if a strong pattern is found, or ``None``.
    N)Ú_SAMPLE_SIZEÚlenÚ_MIN_BYTES_UTF16Ú_check_utf32Ú_check_utf16)r   ÚsampleÚresults      r   Údetect_utf1632_patternsr   Z   sS   € ð �-•<�-Ô €Få
ˆ6�{„{Õ%Ò%Ð%Øˆtõ ˜&Ñ!Ô!€FØÐØˆõ ˜ÑÔÐr   c           	      ó¬  ‡ — t          ‰ ¦  «        t          ‰ ¦  «        dz  z
  }|t          k     rdS ‰ d|…         Š |dz  }t          ˆ fd„t          dt          ‰ ¦  «        d¦  «        D ¦   «         ¦  «        }t          ˆ fd„t          dt          ‰ ¦  «        d¦  «        D ¦   «         ¦  «        }||k    rV||z  dk    rM	 ‰                      d¦  «        }t          |¦  «        rt          dt          d¬¦  «        S n# t          $ r Y nw xY wt          ˆ fd	„t          d
t          ‰ ¦  «        d¦  «        D ¦   «         ¦  «        }t          ˆ fd„t          dt          ‰ ¦  «        d¦  «        D ¦   «         ¦  «        }||k    rV||z  dk    rM	 ‰                      d¦  «        }t          |¦  «        rt          dt          d¬¦  «        S n# t          $ r Y nw xY wdS )a’  Check for UTF-32 encoding based on 4-byte unit structure.

    For valid Unicode (U+0000 to U+10FFFF = 0x0010FFFF):
    - UTF-32-BE: the first byte of each 4-byte unit is always 0x00
    - UTF-32-LE: the last byte of each 4-byte unit is always 0x00

    For BMP characters (U+0000 to U+FFFF), additionally:
    - UTF-32-BE: the second byte is also 0x00
    - UTF-32-LE: the third byte is also 0x00
    é   Nc              3   ó4   •K  — | ]}‰|         d k    ¯dV — ŒdS ©r   é   N© ©Ú.0Úir   s     €r   ú	<genexpr>z_check_utf32.<locals>.<genexpr>„   ó+   øè è € ÐJÐJ˜a¸TÀ!¼WÈº\¸\˜¸\¸\¸\¸\ÐJÐJr   r   c              3   ó:   •K  — | ]}‰|d z            dk    ¯d V — ŒdS )r!   r   Nr"   r#   s     €r   r&   z_check_utf32.<locals>.<genexpr>†   s5   øè è € ÐOÐO˜q¸dÀ1ÀqÁ5¼kÈQÒ>NÐ>N˜Ð>NÐ>NÐ>NÐ>NÐOÐOr   r   z	utf-32-be©ÚencodingÚ
confidenceÚlanguagec              3   ó4   •K  — | ]}‰|         d k    ¯dV — ŒdS r    r"   r#   s     €r   r&   z_check_utf32.<locals>.<genexpr>•   s+   øè è € ÐIÐI˜Q¸DÀ¼GÀqºL¸L�q¸L¸L¸L¸LÐIÐIr   é   c              3   ó4   •K  — | ]}‰|         d k    ¯dV — ŒdS r    r"   r#   s     €r   r&   z_check_utf32.<locals>.<genexpr>—   r'   r   é   z	utf-32-le)	r   Ú_MIN_BYTES_UTF32ÚsumÚrangeÚdecodeÚ_looks_like_textr   r   ÚUnicodeDecodeError)r   Útrimmed_lenÚ	num_unitsÚbe_first_nullÚbe_second_nullÚtextÚle_last_nullÚle_third_nulls   `       r   r   r   p   s1  ø€ õ �d‘)”)�s 4™yœy¨1™}Ñ-€KØÕ%Ò%Ð%ØˆtØ���Ô€Dà˜qÑ €Iõ ÐJÐJÐJÐJ¥5¨­C°©I¬I°qÑ#9Ô#9ÐJÑJÔJÑJÔJ€MåÐOÐOÐOÐO¥E¨!­S°©Y¬Y¸Ñ$:Ô$:ÐOÑOÔOÑOÔO€Nà˜	Ò!Ð! n°yÑ&@À3Ò&FÐ&Fð		Ø—;’;˜{Ñ+Ô+ˆDÝ Ñ%Ô%ð Ý&Ø(Ý7Ø!ðñ ô ð ðøõ "ð 	ð 	ð 	ØˆDð	øøøõ ÐIÐIÐIÐI¥%¨­3¨t©9¬9°aÑ"8Ô"8ÐIÑIÔIÑIÔI€LåÐJÐJÐJÐJ¥5¨­C°©I¬I°qÑ#9Ô#9ÐJÑJÔJÑJÔJ€Mà�yÒ Ð  ]°YÑ%>ÀÒ%DÐ%Dð		Ø—;’;˜{Ñ+Ô+ˆDÝ Ñ%Ô%ð Ý&Ø(Ý7Ø!ðñ ô ð ðøõ "ð 	ð 	ð 	ØˆDð	øøøð ˆ4s$   Â>:C: Ã:
DÄDÆ:G Ç
GÇGc                 ó¨  ‡ — t          t          ‰ ¦  «        t          ¦  «        }||dz  z  }|t          k     rdS |dz  }t	          ˆ fd„t          d|d¦  «        D ¦   «         ¦  «        }t	          ˆ fd„t          d|d¦  «        D ¦   «         ¦  «        }||z  }||z  }|t          k    ot          ‰ d|…         |¦  «         }|t          k    ot          ‰ d|…         |¦  «         }|s|sdS d||fd||fg}	||k    r|	                     ¦   «          d}
d	}d
}d}d
}|	D ]y\  }}}	 ‰ d|…          	                    |¦  «        }n# t          $ r Y Œ1w xY w|rd}t          |¦  «        sŒI|dz  }t          |¦  «        }|||dk    rt          ndz   k    r|}|}
|}Œz|
€dS |r|dk    p
|t          k    }n|o
|t          k    }|rt          |
t           d¬¦  «        S dS )a  Check for UTF-16 via null-byte patterns in alternating positions.

    UTF-16 encodes each BMP character as two bytes.  For characters whose
    code-point high byte is 0x00 (Latin, digits, basic punctuation, many
    control structures), one of the two bytes in each unit will be a null.
    Even for non-Latin scripts (Arabic, CJK, Cyrillic, etc.) a significant
    fraction of code units still contain at least one null byte.

    Non-UTF-16 single-byte encodings never contain null bytes, so even a
    small null-byte fraction in alternating positions is a strong signal.

    The null pattern only establishes that the data is UTF-16-like.  Byte
    order is always chosen by decoding both ways and comparing text-quality
    scores, with the null signal breaking near-ties (see below).
    r0   Nc              3   ó4   •K  — | ]}‰|         d k    ¯dV — ŒdS r    r"   r#   s     €r   r&   z_check_utf16.<locals>.<genexpr>À   ó+   øè è € ÐKÐK˜a¸dÀ1¼gÈºl¸l˜¸l¸l¸l¸lÐKÐKr   r   c              3   ó4   •K  — | ]}‰|         d k    ¯dV — ŒdS r    r"   r#   s     €r   r&   z_check_utf16.<locals>.<genexpr>Â   r@   r   r!   z	utf-16-lez	utf-16-beg       ÀFTg        r)   )Úminr   r   r   r2   r3   Ú_UTF16_MIN_NULL_FRACTIONr   Úreverser4   r6   r5   Ú_text_qualityÚ_QUALITY_TIE_MARGINÚ_MIN_TEXT_QUALITYr   r   )r   Ú
sample_lenr8   Úbe_null_countÚle_null_countÚbe_fracÚle_fracÚle_qualifiedÚbe_qualifiedÚsidesÚbest_encodingÚbest_qualityÚbest_qualifiedÚviableÚqualified_side_decodedr*   Ú_fracÚ	qualifiedr;   ÚqualityÚaccepteds   `                    r   r   r   ¨   sŸ  ø€ õ  •S˜‘Y”Y¥Ñ-Ô-€JØ�*˜q‘.Ñ €JØÕ$Ò$Ð$Øˆtà˜a‘€Iõ ÐKÐKÐKÐK¥5¨¨J¸Ñ#:Ô#:ÐKÑKÔKÑKÔK€MåÐKÐKÐKÐK¥5¨¨J¸Ñ#:Ô#:ÐKÑKÔKÑKÔK€Mà˜iÑ'€GØ˜iÑ'€Gð 	Õ+Ò+ð 	GÝ*¨4°°°Ô+<¸gÑFÔFÐFð ð
 	Õ+Ò+ð 	GÝ*¨4°°°Ô+<¸gÑFÔFÐFð ð
 ð ˜Lð Øˆtð ˜7 LÐ1°KÀÈ,Ð3WÐX€EØ�ÒÐØ�Š‰Œˆà $€MØ€LØ€NØ€FØ"Ðà&+ð 'ð 'Ñ"ˆ�%˜ð	Ø˜˜˜Ô$×+Ò+¨HÑ5Ô5ˆDˆDøÝ!ð 	ð 	ð 	ØˆHð	øøøàð 	*Ø%)Ð"Ý Ñ%Ô%ð 	ØØ�!‰ˆÝ Ñ%Ô%ˆØ�\¸FÀQºJ¸JÕ%8Ð%8ÈCÑPÒPÐPØ"ˆLØ$ˆMØ&ˆNøàÐØˆtàð Pð ˜Q’;ÐC ,Õ2CÒ"Cˆˆð *ÐO¨lÕ>OÒ.OˆØð 
ÝØ"Ý/Øð
ñ 
ô 
ð 	
ð ˆ4s   Ä!D?Ä?
EÅEr;   c                 ó†   — | sdS | dd…         }t          d„ |D ¦   «         ¦  «        }|t          |¦  «        z  t          k    S )z9Quick check: is decoded text mostly printable characters.FNéô  c              3   óJ   K  — | ]}|                      ¦   «         s|d v ¯dV — ŒdS )ú
	r!   N)Úisprintable)r$   Úcs     r   r&   z#_looks_like_text.<locals>.<genexpr>  s3   è è € ÐJÐJ˜!¨¯ª©¬ÐJ¸AÀ¸M¸M�A¸M¸M¸M¸MÐJÐJr   )r2   r   Ú_MIN_PRINTABLE_FRACTION)r;   r   Ú	printables      r   r5   r5     sO   € àð ØˆuØ�$�3�$ŒZ€FÝÐJÐJ˜vÐJÑJÔJÑJÔJ€IØ•s˜6‘{”{Ñ"Õ%<Ò<Ð<r   rZ   Úlimitc                 ó¶  — | d|…         }t          |¦  «        }|dk    rdS d}d}d}d}d}|D ]s}	t          j        |	¦  «        }
|
d         dk    r|dz  }t          |	¦  «        dk     r|dz  }Œ@|
d         dk    r|dz  }ŒR|
dk    s|	d	v r|dz  }Œb|
d         d
k    r|dz  }Œt||z  dk    rdS ||z  dk    rdS ||z  }|||z  dz  z  }|dk    r|dk    r|dz  }|S )uØ  Score how much *text* looks like real human-readable content.

    Returns a score in the range [-1.0, ~1.6).  Higher values indicate
    more natural text.  The practical maximum is 1.5 for all-ASCII-letter
    input (1.6 approaches as sample size grows with all ASCII letters plus
    whitespace).  A score of -1.0 means the content is almost certainly not
    valid text (too many control characters or combining marks).

    Scoring factors:

    * Base score: ratio of Unicode letters (category ``L*``) to sample length.
    * ASCII bonus: additional 0.5x weight for ASCII letters.  This is the
      primary signal for disambiguating endianness â€” correct decoding of
      Latin-heavy text produces ASCII letters, wrong decoding produces CJK.
    * Space bonus: +0.1 when the sample contains at least one whitespace
      character and is longer than 20 characters.
    * Rejection: returns -1.0 if >10% control characters or >20% combining
      marks (category ``M*``).
    Nr   g      ð¿ÚLr!   é€   ÚMÚZsr\   ÚCgš™™™™™¹?gš™™™™™É?r   é   )r   ÚunicodedataÚcategoryÚord)r;   ra   r   ÚnÚlettersÚmarksÚspacesÚcontrolsÚascii_lettersr^   ÚcatÚscores               r   rE   rE     sA  € ð( �&�5�&Œ\€FÝˆF‰Œ€AØˆA‚v€vØˆtà€GØ€EØ€FØ€HØ€Màð ð ˆÝÔ" 1Ñ%Ô%ˆØˆqŒ6�SŠ=ˆ=Ø�q‰LˆGÝ�1‰vŒv˜Š|ˆ|Ø Ñ"�øØ�ŒV�sŠ]ˆ]Ø�Q‰JˆEˆEØ�DŠ[ˆ[˜A ˜M˜MØ�a‰KˆFˆFØ�ŒV�sŠ]ˆ]Ø˜‰MˆHøð �!�|�cÒÐØˆtØˆq�y�3‚€Øˆtà�a‰K€Eà	ˆm˜aÑ 3Ñ&Ñ&€Eàˆ2‚v€v�&˜1’*�*Ø�‰ˆà€Lr   )rZ   )Ú__doc__ri   Úchardet.pipeliner   r   r   r   r1   r   rC   rG   rF   r_   r   r
   ÚbytesÚ__annotations__ÚfloatÚboolr   r   r   r   Ústrr5   ÚintrE   r"   r   r   ú<module>r|      s–  ðð	ð 	ð 	ð Ð Ð Ð à XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ Xð €ð Ð ØÐ ð  Ð ð Ð ð Ð ð Ð ð"  $Ð ð ")Ð+;Ñ!;Ð ˜Ð ;Ð ;Ñ ;ð= Uð =°uð =Àð =ð =ð =ð =ð(  %ð  ¨O¸dÑ,Bð  ð  ð  ð  ð,5�uð 5 °4Ñ!7ð 5ð 5ð 5ð 5ðpd�uð d °4Ñ!7ð dð dð dð dðN=˜3ð = 4ð =ð =ð =ð =ð9ð 9˜ð 9 Cð 9°%ð 9ð 9ð 9ð 9ð 9ð 9r   