o
    ­}”ev.  ã                   @   sÂ  d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZmZmZ d dlmZ dd	lmZmZmZmZmZmZ eed
�dedefdd„ƒZeed
�dedefdd„ƒZeed
�dedee fdd„ƒZeed
�dedefdd„ƒZ eed
�dedefdd„ƒZ!eed
�dedefdd„ƒZ"eed
�dedefdd„ƒZ#eed
�dedefdd„ƒZ$eed
�dedefdd„ƒZ%eed
�dedefdd „ƒZ&eed
�dedefd!d"„ƒZ'eed
�dedefd#d$„ƒZ(eed
�dedefd%d&„ƒZ)eed
�dedefd'd(„ƒZ*eed
�dedefd)d*„ƒZ+eed
�dedefd+d,„ƒZ,ee-eƒd
�d-edefd.d/„ƒZ.eed
�dedefd0d1„ƒZ/d_d3e0d4e1dee fd5d6„Z2ed7d
�d8edefd9d:„ƒZ3d3e0deee e0f fd;d<„Z4d=edefd>d?„Z5d`dAedBedefdCdD„Z6dEedee fdFdG„Z7dHedIede8fdJdK„Z9dHedIedefdLdM„Z:dNej;dOfd8edPe1dQeddfdRdS„Z<	dadTe0dUedVe=dWe1dXedYedZe0d[ed\ee deeddf fd]d^„Z>dS )bé    N)ÚIncrementalDecoder)Úaliases)Ú	lru_cache)Úfindall)Ú	GeneratorÚListÚOptionalÚSetÚTupleÚUnion)ÚMultibyteIncrementalDecoderé   )ÚENCODING_MARKSÚIANA_SUPPORTED_SIMILARÚRE_POSSIBLE_ENCODING_INDICATIONÚUNICODE_RANGES_COMBINEDÚUNICODE_SECONDARY_RANGE_KEYWORDÚUTF8_MAXIMAL_ALLOCATION)ÚmaxsizeÚ	characterÚreturnc                 C   sd   zt  | ¡}W n
 ty   Y dS w d|v p1d|v p1d|v p1d|v p1d|v p1d|v p1d|v p1d	|v S )
NFz
WITH GRAVEz
WITH ACUTEzWITH CEDILLAzWITH DIAERESISzWITH CIRCUMFLEXz
WITH TILDEzWITH MACRONzWITH RING ABOVE©ÚunicodedataÚnameÚ
ValueError©r   Údescription© r   úa/Users/abhinavbhinder/Documents/map/venv/lib/python3.10/site-packages/charset_normalizer/utils.pyÚis_accentuated   s(   ÿÿþýüûúør   c                 C   s.   t  | ¡}|s	| S | d¡}tt|d dƒƒS )Nú r   é   )r   ÚdecompositionÚsplitÚchrÚint)r   Z
decomposedÚcodesr   r   r   Úremove_accent(   s
   

r'   c                 C   s.   t | ƒ}t ¡ D ]\}}||v r|  S qdS )zK
    Retrieve the Unicode range official name from a single character.
    N)Úordr   Úitems)r   Zcharacter_ordÚ
range_nameZ	ord_ranger   r   r   Úunicode_range3   s   ÿr+   c                 C   ó*   z
t  | ¡}W d|v S  ty   Y dS w )NFZLATINr   r   r   r   r   Úis_latinA   s   þÿr-   c                 C   s2   t  | ¡}d|v rdS t| ƒ}|d u rdS d|v S )NÚPTFZPunctuation©r   Úcategoryr+   ©r   Úcharacter_categoryÚcharacter_ranger   r   r   Úis_punctuationJ   s   
r4   c                 C   sB   t  | ¡}d|v sd|v rdS t| ƒ}|d u rdS d|v o |dkS )NÚSÚNTFZFormsZLor/   r1   r   r   r   Ú	is_symbolY   s   
r7   c                 C   s$   t | ƒ}|d u r
dS d|v pd|v S )NFZ	EmoticonsZPictographs)r+   )r   r3   r   r   r   Úis_emoticonh   s   r8   c                 C   s.   |   ¡ s| dv r
dS t | ¡}d|v p|dv S )N>   ú<ú>u   ï½œú+TÚZ>   ZPoZPdZPc)Úisspacer   r0   )r   r2   r   r   r   Úis_separatorr   s   
r>   c                 C   s   |   ¡ |  ¡ kS ©N)ÚislowerÚisupper©r   r   r   r   Úis_case_variable|   s   rC   c                 C   r,   )NFÚCJKr   ©r   Zcharacter_namer   r   r   Úis_cjk�   ó   ýÿrF   c                 C   r,   )NFZHIRAGANAr   rE   r   r   r   Úis_hiragana‹   rG   rH   c                 C   r,   )NFZKATAKANAr   rE   r   r   r   Úis_katakana•   rG   rI   c                 C   r,   )NFZHANGULr   rE   r   r   r   Ú	is_hangulŸ   rG   rJ   c                 C   r,   )NFZTHAIr   rE   r   r   r   Úis_thai©   rG   rK   c                 C   r,   )NFÚARABICr   rE   r   r   r   Ú	is_arabic³   rG   rM   c                 C   s4   zt  | ¡}W n
 ty   Y dS w d|v od|v S )NFrL   zISOLATED FORMr   rE   r   r   r   Úis_arabic_isolated_form½   s   ÿrN   r*   c                    s   t ‡ fdd„tD ƒƒS )Nc                 3   s   � | ]}|ˆ v V  qd S r?   r   )Ú.0Úkeyword©r*   r   r   Ú	<genexpr>É   s   € z-is_unicode_range_secondary.<locals>.<genexpr>)Úanyr   rQ   r   rQ   r   Úis_unicode_range_secondaryÇ   s   rT   c                 C   s(   |   ¡ du o|  ¡ du o| dko| dkS )NFúu   ï»¿)r=   ÚisprintablerB   r   r   r   Úis_unprintableÌ   s   
ÿþürW   é    ÚsequenceÚsearch_zonec                 C   s    t | tƒst‚t| ƒ}tt| dt||ƒ… jddd�ƒ}t|ƒdkr$dS |D ]'}| ¡  	dd¡}t
 ¡ D ]\}}||krB|    S ||krL|    S q4q&dS )zW
    Extract using ASCII-only decoder any specified encoding in the first n-bytes.
    NÚasciiÚignore©Úerrorsr   ú-Ú_)Ú
isinstanceÚbytesÚ	TypeErrorÚlenr   r   ÚminÚdecodeÚlowerÚreplacer   r)   )rY   rZ   Zseq_lenÚresultsZspecified_encodingÚencoding_aliasÚencoding_ianar   r   r   Úany_specified_encoding×   s&   
þÿýrl   é€   r   c                 C   s    | dv pt t d | ¡¡jtƒS )zQ
    Verify is a specific encoding is a multi byte one based on it IANA name
    >	   Úutf_32Ú	utf_32_leÚutf_16Ú	utf_16_beÚutf_7Z	utf_8_sigÚ	utf_16_leÚ	utf_32_beÚutf_8úencodings.{})Ú
issubclassÚ	importlibÚimport_moduleÚformatr   r   )r   r   r   r   Úis_multi_byte_encoding÷   s   
þör{   c                 C   sJ   t D ] }t | }t|tƒr|g}|D ]}|  |¡r!||f    S qqdS )z9
    Identify and extract SIG/BOM in given sequence.
    )Nó    )r   ra   rb   Ú
startswith)rY   Úiana_encodingZmarksÚmarkr   r   r   Úidentify_sig_or_bom  s   

ÿÿr€   r~   c                 C   s   | dvS )N>   rn   rp   r   )r~   r   r   r   Úshould_strip_sig_or_bom  s   r�   TÚcp_nameÚstrictc                 C   sL   |   ¡  dd¡} t ¡ D ]\}}| ||fv r|  S q|r$td | ¡ƒ‚| S )Nr_   r`   z Unable to retrieve IANA for '{}')rg   rh   r   r)   r   rz   )r‚   rƒ   rj   rk   r   r   r   Ú	iana_name"  s   ÿr„   Údecoded_sequencec                 C   s4   t ƒ }| D ]}t|ƒ}|d u rq| |¡ qt|ƒS r?   )Úsetr+   ÚaddÚlist)r…   Úrangesr   r3   r   r   r   Ú
range_scan2  s   rŠ   Úiana_name_aÚiana_name_bc           	      C   sŒ   t | ƒst |ƒr
dS t d | ¡¡j}t d |¡¡j}|dd�}|dd�}d}tdƒD ]}t|gƒ}| |¡| |¡krA|d7 }q,|d S )	Ng        rv   r\   r]   r   éÿ   r   éþ   )r{   rx   ry   rz   r   Úrangerb   rf   )	r‹   rŒ   Z	decoder_aZ	decoder_bZid_aZid_bZcharacter_match_countÚiZto_be_decodedr   r   r   Úcp_similarity@  s*   ÿþÿþ


€r‘   c                 C   s   | t v o	|t |  v S )zŽ
    Determine if two code page are at least 80% similar. IANA_SUPPORTED_SIMILAR dict was generated using
    the function cp_similarity.
    )r   )r‹   rŒ   r   r   r   Úis_cp_similarX  s   
þr’   Zcharset_normalizerz)%(asctime)s | %(levelname)s | %(message)sÚlevelÚformat_stringc                 C   s:   t  | ¡}| |¡ t  ¡ }| t  |¡¡ | |¡ d S r?   )ÚloggingÚ	getLoggerÚsetLevelÚStreamHandlerÚsetFormatterÚ	FormatterÚ
addHandler)r   r“   r”   ÚloggerÚhandlerr   r   r   Úset_logging_handlerc  s
   

rž   Ú	sequencesrk   ÚoffsetsÚ
chunk_sizeÚbom_or_sig_availableÚstrip_sig_or_bomÚsig_payloadÚis_multi_byte_decoderÚdecoded_payloadc	                 c   s&  � |r|du r|D ]}	||	|	| … }
|
s d S |
V  q	d S |D ]p}	|	| }|t | ƒd kr/q | |	|	| … }|rA|du rA|| }|j||rHdndd�}
|r�|	dkr�t|dƒ}|r�|
d |… |vr�t|	|	d d	ƒD ]#}| ||… }|r{|du r{|| }|j|dd�}
|
d |… |v rŒ nqi|
V  q d S )
NFé   r\   rƒ   r]   r   r!   é   éÿÿÿÿ)rd   rf   re   r�   )rŸ   rk   r    r¡   r¢   r£   r¤   r¥   r¦   r�   ÚchunkZ	chunk_endZcut_sequenceZchunk_partial_size_chkÚjr   r   r   Úcut_sequence_chunksp  sF   €ü
þ
ÿþÿÝr¬   )rX   )Tr?   )?rx   r•   r   Úcodecsr   Zencodings.aliasesr   Ú	functoolsr   Úrer   Útypingr   r   r   r	   r
   r   Z_multibytecodecr   Zconstantr   r   r   r   r   r   ÚstrÚboolr   r'   r+   r-   r4   r7   r8   r>   rC   rF   rH   rI   rJ   rK   rM   rN   rd   rT   rW   rb   r%   rl   r{   r€   r�   r„   rŠ   Úfloatr‘   r’   ÚINFOrž   r�   r¬   r   r   r   r   Ú<module>   s²      

									
 ýÿþý
ü÷ÿþýüûúùø	÷
ö