o
    e                      @   s`   d dl mZmZmZmZmZ ddlmZ ddlm	Z	m
Z
mZ G dd deZG dd deZd	S )
    )DictList
NamedTupleOptionalUnion   )CharSetProber)CharacterCategoryProbingStateSequenceLikelihoodc                   @   s^   e Zd ZU eed< eed< eeef ed< eeeeef f ed< eed< eed< eed< dS )	SingleByteCharSetModelcharset_namelanguagechar_to_order_maplanguage_modeltypical_positive_ratiokeep_ascii_lettersZalphabetN)	__name__
__module____qualname__str__annotations__r   intfloatbool r   r   7lib/python3.10/site-packages/chardet/sbcharsetprober.pyr   #   s   
 r   c                	       s   e Zd ZdZdZdZdZ		ddeded	e	e
 d
df fddZd fddZed
e	e fddZed
e	e fddZdeeef d
efddZd
efddZ  ZS )SingleByteCharSetProber@   i   gffffff?g?FNmodelis_reversedname_proberreturnc                    sL   t    || _|| _|| _d| _g | _d| _d| _d| _	d| _
|   d S N   r   )super__init___model	_reversed_name_prober_last_order_seq_counters_total_seqs_total_char_control_char
_freq_charreset)selfr   r    r!   	__class__r   r   r&   3   s   
z SingleByteCharSetProber.__init__c                    s<   t    d| _dgt  | _d| _d| _d| _d| _	d S r#   )
r%   r0   r*   r   Zget_num_categoriesr+   r,   r-   r.   r/   r1   r2   r   r   r0   G   s   

zSingleByteCharSetProber.resetc                 C      | j r| j jS | jjS N)r)   r   r'   r4   r   r   r   r   R      z$SingleByteCharSetProber.charset_namec                 C   r5   r6   )r)   r   r'   r4   r   r   r   r   X   r7   z SingleByteCharSetProber.languagebyte_strc           	      C   sR  | j js
| |}n| |}|s| jS | j j}| j j}|D ]L}||tj	}|tj
k r3|  jd7  _|| jk rg|  jd7  _| j| jk rg|  jd7  _| jsW|| j | }n|| | j }| j|  d7  < || _q| j j}| jtjkr| j| jkr|  }|| jkr| jd|| tj| _| jS || jk r| jd||| j tj| _| jS )Nr   z$%s confidence = %s, we have a winnerz8%s confidence = %s, below negative shortcut threshold %s)r'   r   Zfilter_international_wordsZremove_xml_tagsstater   r   getr	   Z	UNDEFINEDZCONTROLr-   SAMPLE_SIZEr/   r*   r,   r(   r+   r   r
   Z	DETECTINGSB_ENOUGH_REL_THRESHOLDget_confidencePOSITIVE_SHORTCUT_THRESHOLDloggerdebugZFOUND_ITZ_stateNEGATIVE_SHORTCUT_THRESHOLDZNOT_ME)	r1   r8   r   r   charZorderZlm_catr   Z
confidencer   r   r   feed^   sN   





zSingleByteCharSetProber.feedc                 C   sn   d}| j dkr5| jtj d| jtj   | j  | jj }|| j| j  | j }|| j	 | j }|dkr5d}|S )Ng{Gz?r   g      ?g      ?gGz?)
r,   r+   r   ZPOSITIVEZLIKELYr'   r   r-   r.   r/   )r1   rr   r   r   r=      s   

z&SingleByteCharSetProber.get_confidence)FN)r"   N)r   r   r   r;   r<   r>   rA   r   r   r   r   r&   r0   propertyr   r   r   r   bytes	bytearrayr
   rC   r   r=   __classcell__r   r   r2   r   r   -   s.    2r   N)typingr   r   r   r   r   Zcharsetproberr   Zenumsr	   r
   r   r   r   r   r   r   r   <module>   s
   
