
    j*7                    ^   U d dl mZ 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mZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% dTdZ&dUdZ'dVdZ( e)d  ej*                    D                       Z+de,d<   d e+D             Z-de,d<   dWdZ.dUdZ/dUdZ0dUdZ1dUdZ2dUdZ3dUdZ4dUdZ5dUd Z6dUd!Z7dUd"Z8dUd#Z9dUd$Z:dUd%Z;dUd&Z<dXd(Z=dUd)Z>	 dYdZd.Z? e
d/          d[d1            Z@d\d3ZAd]d5ZBd^d_d9ZCd`d=ZDdad>ZEd?ejF        d@fdbdDZG	 	 dcdddSZHdS )e    )annotationsN)bisect_right)IncrementalDecoder)	lru_cache)	Generator   )ENCODING_MARKSIANA_SUPPORTED_SIMILARRE_POSSIBLE_ENCODING_INDICATIONUNICODE_RANGES_COMBINED_SECONDARY_RANGE_NAMESCOMMON_CJK_CHARACTERS_LATIN_CJK_HANGUL	_KATAKANA	_HIRAGANA_HALFWIDTH_KATAKANA_THAI_ARABIC_ARABIC_ISOLATED_FORM	_LIGATURE_SUPERSCRIPT_SENTENCE_OPEN_PUNCTUATION_ACCENT_KEYWORDS_ACCENTUATED_KNOWN_MB_DECODERS_KNOWN_MB_CLASSES_IANA_NAMES_MULTIBYTE_SEARCH_RADIUS	characterstrreturnintc                   	 t          j        |           }n# t          $ r Y dS w xY wd}d|v r
|t          z  }d|v r
|t          z  }d|v r
|t
          z  }d|v r|t          z  }d|v r
|t          z  }d|v r
|t          z  }d|v r
|t          z  }d	|v r|t          z  }d
|v r
|t          z  }d|v s|                    d          r
|t          z  }d|v r
|t          z  }|dv r
|t          z  }t           D ]}||v r|t"          z  } n|S )zRCompute all name-based classification flags with a single unicodedata.name() call.r   LATINCJKHANGULKATAKANA	HALFWIDTHHIRAGANATHAIARABICzISOLATED FORMLIGATUREz	LETTER AESUPERSCRIPT>   INVERTED QUESTION MARKINVERTED EXCLAMATION MARK)unicodedataname
ValueErrorr   r   r   r   r   r   r   r   r   endswithr   r   r   r   r   )r!   descflagskws       b/workspace/show-city-briefing-agent/.venv/lib/python3.11/site-packages/charset_normalizer/utils.py_character_flagsr:   '   s}   $Y//   qq E$}}4T$((ET~~4d""**ETT]];77FFF++  ::\!EE  Ls    
%%boolc                J    t          t          |           t          z            S N)r;   r:   r   r!   s    r9   is_accentuatedr?   Q   s     ++l:;;;    c                    t          j        |           }|s| S |                    d          }t          t	          |d         d                    S )N r      )r2   decompositionsplitchrr$   )r!   
decomposedcodess      r9   remove_accentrI   U   sO    !/	::J !'',,Es58R  !!!r@   c              #  :   K   | ]\  }}|j         |j        |fV  d S r=   )startstop).0r3   	ord_ranges      r9   	<genexpr>rO   a   sE       < <i _ind+< < < < < <r@   zlist[tuple[int, int, str]]_UNICODE_RANGES_SORTEDc                    g | ]
}|d          S )r    )rM   es     r9   
<listcomp>rT   e   s    #I#I#IQAaD#I#I#Ir@   z	list[int]_UNICODE_RANGE_STARTS
str | Nonec                    t          |           }|dk     rdS |dk     rdS t          t          |          dz
  }|dk    rt          |         \  }}}||k     r|S dS )zK
    Retrieve the Unicode range official name from a single character.
        zControl character   zBasic Latinr   r   N)ordr   rU   rP   )r!   character_ordidxrK   rL   r3   s         r9   unicode_ranger]   h   sv     YMr""s} ,m
<
<q
@C
axx237tT4K4r@   c                J    t          t          |           t          z            S r=   )r;   r:   r   r>   s    r9   is_latinr_   }   s     ++f4555r@   c                d    t          j        |           }d|v rdS t          |           }|dS d|v S )NPTFPunctuationr2   categoryr]   r!   character_categorycharacter_ranges      r9   is_punctuationrh      sG    )29==
   t"/	":":OuO++r@   c                x    t          j        |           }d|v sd|v rdS t          |           }|dS d|v o|dk    S )NSNTFFormsLorc   re   s      r9   	is_symbolrn      s]    )29==
   C+=$=$=t"/	":":Ouo%D*<*DDr@   c                8    t          |           }|dS d|v pd|v S )NF	EmoticonsPictographs)r]   )r!   rg   s     r9   is_emoticonrr      s/    "/	":":Ou/)M]o-MMr@   c                n    |                                  s| dv rdS t          j        |           }d|v p|dv S )N>      ｜+<>TZ>   PcPdPo)isspacer2   rd   )r!   rf   s     r9   is_separatorr}      sO     i+AAAt)29==$$P(:>P(PPr@   c                V    |                                  |                                 k    S r=   )islowerisupperr>   s    r9   is_case_variabler      s%    )"3"3"5"555r@   c                J    t          t          |           t          z            S r=   )r;   r:   r   r>   s    r9   is_cjkr      s     ++d2333r@   c                J    t          t          |           t          z            S r=   )r;   r:   r   r>   s    r9   is_hiraganar           ++i7888r@   c                J    t          t          |           t          z            S r=   )r;   r:   r   r>   s    r9   is_katakanar      r   r@   c                J    t          t          |           t          z            S r=   )r;   r:   r   r>   s    r9   	is_hangulr           ++g5666r@   c                J    t          t          |           t          z            S r=   )r;   r:   r   r>   s    r9   is_thair      s     ++e3444r@   c                J    t          t          |           t          z            S r=   )r;   r:   r   r>   s    r9   	is_arabicr      r   r@   c                J    t          t          |           t          z            S r=   )r;   r:   r   r>   s    r9   is_arabic_isolated_formr      s     ++.CCDDDr@   c                    | t           vS r=   )r   r>   s    r9   is_cjk_uncommonr      s    111r@   
range_namec                    | t           v S r=   )r   )r   s    r9   is_unicode_range_secondaryr      s    ///r@   c                n    |                                   o |                                  o| dk    o| dk    S )Nu   ﻿)r|   isprintabler>   s    r9   is_unprintabler      sL     	"%%'''	"	" !	r@       sequencebytes | bytearraysearch_zonec                   t          | t          t          f          st          t	          |           }| dt          ||                   }|                                }d|vrd|vrdS |                    dd          }t          j	        |          D ]W}|
                    d                                                              dd	          }t          j        |          }||c S XdS )
zW
    Extract using ASCII-only decoder any specified encoding in the first n-bytes.
    Ns   codings   charsetasciiignoreerrorsr   -_)
isinstancebytes	bytearray	TypeErrorlenminlowerdecoder   finditergroupreplacer   get)	r   r   seq_lensearch_byteslowered_bytesdecoded_zonematchspecified_encodingencoding_ianas	            r9   any_specified_encodingr      s     h	 233 x==G 7c';7778L &&((M%%*M*I*It$++GH+EEL09,GG ! !"[[^^1133;;CEE#(:;;$     % 4r@   )maxsizer3   c                    | t           v rdS t          D ]J}	 t          j        |                              |            n# t
          t          t          f$ r Y Dw xY w dS dS )zQ
    Verify is a specific encoding is a multi byte one based on it IANA name
    TF)r   r   	importlibimport_modulegetcodecImportErrorAttributeErrorLookupError)r3   providers     r9   is_multi_byte_encodingr      s    
 !!!t &  	#H--66t<<<<^[9 	 	 	H	tt5s   '>AAtuple[str | None, bytes]c                    t           D ]I}t           |         }t          |t                    r|g}|D ]}|                     |          r||fc c S  JdS )z9
    Identify and extract SIG/BOM in given sequence.
    )Nr@   )r	   r   r   
startswith)r   iana_encodingmarksmarks       r9   identify_sig_or_bomr     s    
 ( + +%3M%BeU## 	GE 	+ 	+D""4(( +$d******+	+ 9r@   r   c                
    | dvS )N>   utf_16utf_32rR   )r   s    r9   should_strip_sig_or_bomr   (  s     444r@   Tcp_namestrictc                    |                                                      dd          } t          j        |           }||S |rt	          d|  d          | S )zIReturns the Python normalized encoding name (Not the IANA official name).r   r   NzUnable to retrieve IANA for '')r   r   r   r   r4   )r   r   r   s      r9   	iana_namer   ,  sb    mmoo%%c3//GOG,,M  ECCCCDDDNr@   iana_name_aiana_name_bfloatc                   t          |           st          |          rdS t          j        d|            j        }t          j        d|           j        } |d          } |d          }d}t	          d          D ]C}t          |g          }|                    |          |                    |          k    r|dz  }D|dz  S )Ng        z
encodings.r   r   r      r   )r   r   r   r   ranger   r   )	r   r   	decoder_a	decoder_bid_aid_bcharacter_match_countito_be_decodeds	            r9   cp_similarityr   :  s    k** .D[.Q.Q s'(B[(B(BCCVI'(B[(B(BCCVI(y999D(y999D!"3ZZ ' '$aSzz;;}%%])C)CCC!Q&! 3&&r@   c                2    | 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   s     r9   is_cp_similarr   N  s%     	-- 	?1+>>r@   charset_normalizerz)%(asctime)s | %(levelname)s | %(message)slevelformat_stringNonec                    t          j        |           }|                    |           t          j                    }|                    t          j        |                     |                    |           d S r=   )logging	getLoggersetLevelStreamHandlersetFormatter	Formatter
addHandler)r3   r   r   loggerhandlers        r9   set_logging_handlerr   Y  sm    
 t$$F
OOE#%%G*=99:::
gr@   F	sequencesr   offsetsr   
chunk_sizebom_or_sig_availablestrip_sig_or_bomsig_payloadr   is_multi_byte_decoderdecoded_payloaddeferred_decodingGenerator[str, None, None]c
              #    K   |rX|                     d          rCt          |          }
t          |           }|D ] }||
z  |z  }||||z            }|s d S |V  !d S |r|s|D ]}||||z            }|s d S |V  d S |	rF|s| n| t          |          d          }|D ]&}||||z            }|s d S t          ||          V  'd S |D ]@}||z   }|t          |           dz   k    r| |||z            }|r|s||z   }|                    ||rdnd          }|r|dk    rt	          |d          }|d |         }d}|rot          |          }
||
z  t          |           z  }t          d|t          z
            }t	          |
|t          z             }|                    |||          dk    }|rU|sS||vrOt          ||d	z
  d
          D ]:}| ||         }|r|s||z   }|                    |d          }|d |         |v r n;|V  Bd S )Niso2022_   r   r   r   r   rC   F   )	r   r   r"   r   r   maxr    findr   )r   r   r   r   r   r   r   r   r   r   decoded_lengthsequence_lengthr   decoded_offsetchunk
base_bytescut_sequence	chunk_endchunk_partial_size_chkchunk_prefixfound_nearbyexpected_offsetsearch_start
search_endjs                            r9   cut_sequence_chunksr  f  sn       Q=33J?? Q_--i.. 	 	A/?BN#N^j5P$PQE KKKK	 	 
 H!6 H 	 	A#AJ$67E KKKK		 	
 
 B .PII9S=M=M=O=O3P 	  	3 	3A%a!j.&89L lM222222		3 	3  2	 2	AJI3y>>A---$QZ%78L# :,< :*\9 ''#8Fxxh (  E % "Q.1*b.A.A&$%<&<%<=$" 
%(%9%9N&'.&8C	NN&JO#&q/<T*T#U#UL!$&:R(R" "J (,,\<TT ! $"(" %O;;"1a!eR00 	" 	"'09'=/ F8H F+6+EL , 3 3M( 3 S S !8"8!89_LL!E M KKKKe2	 2	r@   )r!   r"   r#   r$   )r!   r"   r#   r;   )r!   r"   r#   r"   )r!   r"   r#   rV   )r   r"   r#   r;   )r   )r   r   r   r$   r#   rV   )r3   r"   r#   r;   )r   r   r#   r   )r   r"   r#   r;   )T)r   r"   r   r;   r#   r"   )r   r"   r   r"   r#   r   )r   r"   r   r"   r#   r;   )r3   r"   r   r$   r   r"   r#   r   )NF)r   r   r   r"   r   r   r   r$   r   r;   r   r;   r   r   r   r;   r   rV   r   r;   r#   r   )I
__future__r   r   r   r2   bisectr   codecsr   	functoolsr   typingr   constantr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r:   r?   rI   sorteditemsrP   __annotations__rU   r]   r_   rh   rn   rr   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   INFOr   r  rR   r@   r9   <module>r     s   " " " " " " "                % % % % % %                                                               8' ' ' 'T< < < <" " " " 6<V < <828::< < < 6 6      $J#I2H#I#I#I  I I I I   *6 6 6 6, , , ,E E E EN N N NQ Q Q Q6 6 6 64 4 4 49 9 9 99 9 9 97 7 7 75 5 5 57 7 7 7E E E E2 2 2 20 0 0 0    59    8 4   0   $5 5 5 5    ' ' ' '(    %D
 
 
 
 
, #'#^ ^ ^ ^ ^ ^ ^r@   