U
    hâËd;Z ã                   @   sX  d dl Z d dlZd dlZd dlmZ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 d dlmZmZmZmZmZmZ d dlmZmZ d dlmZm Z  d dl!m"Z"m#Z#m$Z$m%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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZO d dlPmQZQ dZRejSjTZUeejVƒG dd„ de
jƒƒZWeejVddƒ eejVddƒ eejVddƒ eejVddƒ eejVddƒ eejXƒG dd„ deƒƒZYdd„ ZZd d!„ Z[eej\ej]ƒd"d#„ ƒZ^eej]ƒd$d%„ ƒZ_eejVƒd&d'„ ƒZ`eejVƒd(d)„ ƒZad*d+„ Zbed,d-„ ƒZced.d/„ ƒZded0d1„ ƒZeed2d3„ ƒZfe�d>d4d5„ƒZged6d7�d8d9„ ƒZhd:d;„ Zied<d=„ ƒZjed>d?„ ƒZked@dA„ ƒZled6d7�dBdC„ ƒZmedDdE„ ƒZnedFdG„ ƒZoedHdI„ ƒZped6d7�dJdK„ ƒZqedLdM„ ƒZredNdO„ ƒZseetƒdPdQ„ ƒZueejvƒdRdS„ ƒZweejxƒdTdU„ ƒZyeejzƒdVdW„ ƒZ{eej|ƒdXdY„ ƒZ}eej~ƒdZd[„ ƒZeej€ƒd\d]„ ƒZ�eej‚ƒd^d_„ ƒZƒd`da„ Z„dbdc„ Z…eddde„ ƒZ†edfdg„ ƒZ‡edhdi„ ƒZˆedjdk„ ƒZ‰dldm„ ZŠeeŠeˆƒƒZ‹eeŠe‰ƒƒZŒeejVdnƒ�d?dodp„ƒZ�eejVdqƒ�d@drds„ƒZŽeejVdtƒ�dAdudv„ƒZ�eejVdwƒ�dBdxdy„ƒZ�eejVdzƒd{d|„ ƒZ‘eejVd}ƒ�dCd~d„ƒZ’eejVd€ƒd�d‚„ ƒZ“edƒd„„ ƒZ”eejVd…ƒ�dDd†d‡„ƒZ•eejVdˆƒ�dEd‰dŠ„ƒZ–eejVd‹ƒ�dFd�dŽ„ƒZ—eejVd�ƒ�dGd‘d’„ƒZ˜d“d”„ Z™ee™e8ƒƒZšee™e9ƒƒZ›eejVd•ƒ�dHd–d—„ƒZœeejVd˜ƒ�dIdšd›„ƒZ�dœd�„ ZžeejVdžƒežd6ƒƒ eejVdŸƒežd ƒƒ d¡d¢„ ZŸeeŸeAƒƒZ eeŸe@ƒƒZ¡eejVd£ƒ�dJd¤d¥„ƒZ¢ed¦d§„ ƒZ£eejVd¨ƒd©dª„ ƒZ¤eejVd«ƒd¬d­„ ƒZ¥ed®d¯„ ƒZ¦ed°d±„ ƒZ§d²d³„ Z¨d´dµ„ Z©eejVd¶ƒ�dKd·d¸„ƒZªeejVd¹ƒ�dLdºd»„ƒZ«eejVd¼ƒ�dMd½d¾„ƒZ¬e�dNd¿dÀ„ƒZ­edÁdÂ„ ƒZ®edÃdÄ„ ƒZ¯edÅdÆ„ ƒZ°ed6d7�dÇdÈ„ ƒZ±edÉdÊ„ ƒZ²eej³ƒdËdÌ„ ƒZ´eejµƒeej¶ƒdÍdÎ„ ƒƒZ·edÏdÐ„ ƒZ¸eej¹ƒdÑdÒ„ ƒZºeej»ƒdÓdÔ„ ƒZ¼eejVdÕƒ�dOdÖd×„ƒZ½dØdÙ„ Z¾eejVdÚƒe¾eMeKƒƒ edÛdÜ„ ƒZ¿eejVdÝƒe¾e2e¿ƒƒ dÞdß„ ZÀedàdÜ„ ƒZÁeeÀeEeFeÁƒƒZÂeeÀe?e>eDƒƒZÃeejVdáƒdâdã„ ƒZÄeejVdäƒdådæ„ ƒZÅeejVdçƒdèdé„ ƒZÆeejVdêƒdëdì„ ƒZÇeejVdíƒdîdï„ ƒZÈ�dPdðdñ„ZÉeejVdòƒeÉe8ƒƒ eejVdóƒeÉeLƒƒ eejVdôƒeÉeNƒƒ eejVdõƒeÉeOƒƒ eejVdöƒeÉe7d6ƒƒ d÷dø„ ZÊedùdú„ ƒZËedûdü„ ƒZÌdýdþ„ ZÍeeÍd6ƒƒZÎeeÍd ƒƒZÏdÿ�d „ ZÐeeÐe/ƒƒZÑeeÐe0ƒƒZÒeejV�dƒ�d�d„ ƒZÓeejV�dƒ�d�d„ ƒZÔe�d�d„ ƒZÕe�d	�d
„ ƒZÖeejV�dƒ�d�d„ ƒZ×e�d�d„ ƒZØe�d�d„ ƒZÙeejV�dƒ�d�d„ ƒZÚe�d�d„ ƒZÛe�d�d„ ƒZÜeejV�dƒ�d�d„ ƒZÝe�d�d„ ƒZÞe�d�d„ ƒZßeejV�d ƒ�d!�d"„ ƒZàeeáƒ�d#�d$„ ƒZâe�d%�d&„ ƒZã�d'eR Zäe�d(�d)„ ƒZåeeæƒ�d*�d+„ ƒZçeejV�d,ƒ�d-�d.„ ƒZèeejV�d/ƒ�d0�d1„ ƒZéeejê�d,ƒ�d2�d3„ ƒZëeejê�d/ƒ�d4�d5„ ƒZìeejí�d/ƒeejí�d,ƒ�d6�d7„ ƒƒZîe�d8ejVƒ�d9�d:„ ƒZïe�d;ejXƒeejðƒ�d<�d=„ ƒƒZñdS (Q  é    N)ÚIntTypeÚConstant)Úis_nonelike)
ÚmodelsÚregister_modelÚmake_attribute_wrapperÚunboxÚboxÚNativeValueÚoverloadÚoverload_methodÚ	intrinsicÚregister_jitable)Úlower_constantÚ
lower_castÚlower_builtinÚiternext_implÚimpl_ret_new_refÚRefType)Úregister_defaultÚStructModel)ÚtypesÚcgutils)ÚPY_UNICODE_1BYTE_KINDÚPY_UNICODE_2BYTE_KINDÚPY_UNICODE_4BYTE_KINDÚPY_UNICODE_WCHAR_KIND)Ú	c_helpers)Ú
_Py_hash_t)Úmemcpy_region)ÚTypingError)!Ú_Py_TOUPPERÚ_Py_TOLOWERÚ_Py_UCS4Ú_Py_ISALNUMÚ_PyUnicode_ToUpperFullÚ_PyUnicode_ToLowerFullÚ_PyUnicode_ToFoldedFullÚ_PyUnicode_ToTitleFullÚ_PyUnicode_IsPrintableÚ_PyUnicode_IsSpaceÚ_Py_ISSPACEÚ_PyUnicode_IsXidStartÚ_PyUnicode_IsXidContinueÚ_PyUnicode_IsCasedÚ_PyUnicode_IsCaseIgnorableÚ_PyUnicode_IsUppercaseÚ_PyUnicode_IsLowercaseÚ_PyUnicode_IsLineBreakÚ_Py_ISLINEBREAKÚ_Py_ISLINEFEEDÚ_Py_ISCARRIAGERETURNÚ_PyUnicode_IsTitlecaseÚ_Py_ISLOWERÚ_Py_ISUPPERÚ_Py_TABÚ_Py_LINEFEEDÚ_Py_CARRIAGE_RETURNÚ	_Py_SPACEÚ_PyUnicode_IsAlphaÚ_PyUnicode_IsNumericÚ_Py_ISALPHAÚ_PyUnicode_IsDigitÚ_PyUnicode_IsDecimalDigit)Úslicingéÿÿ c                   @   s   e Zd Zdd„ ZdS )ÚUnicodeModelc              	   C   sV   dt jfdt jfdt jfdt jfdtfdt  t j¡fdt jfg}tj	 
| |||¡ d S )NÚdataÚlengthÚkindÚis_asciiÚhashÚmeminfoÚparent)r   ÚvoidptrÚintpÚint32Úuint32r   ZMemInfoPointerZpyobjectr   r   Ú__init__©ÚselfZdmmZfe_typeÚmembers© rT   úN/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/cpython/unicode.pyrP   O   s    ø
zUnicodeModel.__init__N)Ú__name__Ú
__module__Ú__qualname__rP   rT   rT   rT   rU   rD   M   s   rD   rE   Ú_datarF   Ú_lengthrG   Ú_kindrH   Ú	_is_asciirI   Ú_hashc                       s   e Zd Z‡ fdd„Z‡  ZS )ÚUnicodeIteratorModelc                    s2   dt  t j¡fd|jfg}tt| ƒ |||¡ d S )NÚindexrE   )r   ZEphemeralPointerÚuintprE   Úsuperr^   rP   rQ   ©Ú	__class__rT   rU   rP   f   s    ÿzUnicodeIteratorModel.__init__)rV   rW   rX   rP   Ú__classcell__rT   rT   rb   rU   r^   d   s   r^   c                 C   sê   ddl m}m}m}m}m}m}m}m}m	}	 t
d }
|||||ƒ||ƒ||ƒ||ƒƒ}||
ƒ}|ƒ }|ƒ }|ƒ }|ƒ }|| |	|ƒ|	|ƒ|	|ƒ|	|ƒƒ}|dkr¦tdƒ‚|j}|j}|j}|d t|ƒ }||  |¡}t|ƒ||||jfS )ztGet string data from a python string for use at compile-time to embed
    the string data into the LLVM module.
    r   )	Ú	CFUNCTYPEÚc_void_pÚc_intÚc_uintÚ	c_ssize_tÚc_ubyteÚ	py_objectÚPOINTERÚbyrefZextract_unicodeNz1cannot extract unicode data from the given stringé   )Úctypesre   rf   rg   rh   ri   rj   rk   rl   rm   r   Ú
ValueErrorÚvalueÚ_kind_to_byte_widthZfrom_addressÚbytes)Úobjre   rf   rg   rh   ri   rj   rk   rl   rm   Zextract_unicode_fnÚprotoÚfnrF   rG   rH   ÚhashvrE   ÚnbytesÚoutrT   rT   rU   Úcompile_time_get_string_datan   s(    , ÿ rz   c                 C   sz   t |ƒ\}}}}}|j}	|  |	|¡}
t |¡| |ƒ}|
|_|j |¡|_|j |¡|_|j	 |¡|_	|j
 d¡|_
| ¡ S )zf
    Get string data by `compile_time_get_string_data()` and return a
    unicode_type LLVM value
    éÿÿÿÿ)rz   ÚmoduleZinsert_const_bytesr   Úcreate_struct_proxyrE   rF   ÚtyperG   rH   rI   Ú	_getvalue)ÚcontextÚbuilderÚtypZliteral_stringZ	databytesrF   rG   rH   rw   ÚmodÚgvÚuni_strrT   rT   rU   Úmake_string_from_constantŠ   s    ÿr†   c                 C   s   t | |||jƒS ©N)r†   Zliteral_value)r€   r�   ZfromtyZtotyÚvalrT   rT   rU   Úcast_from_literalž   s       ÿr‰   c                 C   s   t | |||ƒS r‡   )r†   )r€   r�   r‚   ZpyvalrT   rT   rU   Úconstant_unicode§   s    rŠ   c                 C   s„   |j  |¡\}}}}}}t | ¡|j|jƒ}	||	_||	_||	_||	_	||	_
|j  ||¡|	_||	_t |j|j  ¡ ¡}
t|	 ¡ |
d�S )zE
    Convert a unicode str object to a native unicode structure.
    )Úis_error)ÚpyapiZstring_as_string_size_and_kindr   r}   r€   r�   rE   rF   rG   rH   rI   Znrt_meminfo_new_from_pyobjectrJ   rK   Zis_not_nullZerr_occurredr
   r   )r‚   rt   ÚcÚokrE   rF   rG   rH   rw   r…   r‹   rT   rT   rU   Úunbox_unicode_str¯   s    
ÿþr�   c                 C   sR   t  | ¡|j|j|d�}|j |j|j|j¡}|j 	|¡ |jj
 |j| |¡ |S )z@
    Convert a native unicode structure to a unicode string
    ©rq   )r   r}   r€   r�   rŒ   Zstring_from_kind_and_datarG   rE   rF   Zobject_hashÚnrtZdecref)r‚   rˆ   r�   r…   ÚresrT   rT   rU   Úbox_unicode_strÆ   s      ÿr“   c                    s   ‡ fdd„}|S )Nc                    s@   |\}}|  |tˆ ƒ ¡ ¡}| | ||g¡¡}| |tdƒ¡S ©Né    )Úbitcastr   Ú
as_pointerÚloadÚgepZzext)r€   r�   Ú	signatureÚargsrE   ÚidxÚptrÚch©ÚbitsizerT   rU   ÚcodegenÚ   s    z#make_deref_codegen.<locals>.codegenrT   ©r    r¡   rT   rŸ   rU   Úmake_deref_codegenÙ   s    r£   c                 C   s   t  t jt j¡}|tdƒfS ©Né   ©r   rO   rL   rM   r£   ©Ú	typingctxrE   ÚoffsetÚsigrT   rT   rU   Úderef_uint8ã   s    r«   c                 C   s   t  t jt j¡}|tdƒfS ©Né   r¦   r§   rT   rT   rU   Úderef_uint16é   s    r®   c                 C   s   t  t jt j¡}|tdƒfS r”   r¦   r§   rT   rT   rU   Úderef_uint32ï   s    r¯   c                 C   s(   dd„ }t  t jt jt jt j¡}||fS )z�make empty string with data buffer of size alloc_bytes.

    Must set length and kind values for string after it is returned
    c              	   S   s˜   |\}}}}t  tj¡}|| |ƒ}	| || |t|jdƒ¡¡}
| j 	||
¡|	_
||	_||	_||	_|  td¡|	_| j ||	j
¡|	_t  |	jj¡|	_|	 ¡ S )Nrn   r{   )r   r}   r   Úunicode_typeÚmulÚaddr   r~   r‘   Zmeminfo_allocrJ   rG   rH   rF   Úget_constantr   rI   Zmeminfo_datarE   Úget_null_valuerK   r   )r€   r�   rš   r›   Zkind_valZchar_bytes_valZ
length_valZis_ascii_valZuni_str_ctorr…   Z
nbytes_valrT   rT   rU   Údetailsû   s     

ÿÿz_malloc_string.<locals>.details)r   r°   rN   rM   rO   )r¨   rG   Z
char_bytesrF   rH   rµ   rª   rT   rT   rU   Ú_malloc_stringõ   s    r¶   c                 C   s,   t | ƒ}t| |||ƒ}t||t d¡ƒ |S ©Nr   )rr   r¶   Ú_set_code_pointÚnprO   )rG   rF   rH   Ú
char_widthÚsrT   rT   rU   Ú_empty_string  s    r¼   F)Z_nrtc                 C   sJ   | j tkrt| j|ƒS | j tkr,t| j|ƒS | j tkrBt| j|ƒS dS d S r·   )r[   r   r«   rY   r   r®   r   r¯   )ÚaÚirT   rT   rU   Ú_get_code_point  s    


r¿   c                    s   ‡ fdd„}|S )Nc                    sT   |\}}}ˆ dk r"|  |tˆ ƒ¡}| |tˆ ƒ ¡ ¡}| || ||g¡¡ |  ¡ S r”   )Útruncr   r–   r—   Ústorer™   Zget_dummy_value)r€   r�   rš   r›   rE   rœ   rž   r�   rŸ   rT   rU   r¡   .  s    
z!make_set_codegen.<locals>.codegenrT   r¢   rT   rŸ   rU   Úmake_set_codegen-  s    rÂ   c                 C   s    t  t jt jt j¡}|tdƒfS r¤   ©r   ÚvoidrL   Zint64rO   rÂ   ©r¨   rE   rœ   rž   rª   rT   rT   rU   Ú	set_uint89  s    rÆ   c                 C   s    t  t jt jt j¡}|tdƒfS r¬   rÃ   rÅ   rT   rT   rU   Ú
set_uint16?  s    rÇ   c                 C   s    t  t jt jt j¡}|tdƒfS r”   rÃ   rÅ   rT   rT   rU   Ú
set_uint32E  s    rÈ   c                 C   sZ   | j tkrt| j||ƒ n<| j tkr4t| j||ƒ n"| j tkrNt| j||ƒ ntdƒ‚d S )Nz4Unexpected unicode representation in _set_code_point)	r[   r   rÆ   rY   r   rÇ   r   rÈ   ÚAssertionError)r½   r¾   rž   rT   rT   rU   r¸   K  s    


ÿr¸   c                 C   sV   | t ks|t krtdƒ‚| tkr$|S | tkr>|tkr8|S | S n| tkrJ| S tdƒ‚d S )Nú!PY_UNICODE_WCHAR_KIND unsupportedz/Unexpected unicode representation in _pick_kind)r   rÉ   r   r   r   )Zkind1Zkind2rT   rT   rU   Ú
_pick_kind^  s    rË   c                 C   s$   | dkr|dkrt  d¡S t  d¡S ©Nrn   r   )r   rO   )Z	is_ascii1Z	is_ascii2rT   rT   rU   Ú_pick_asciip  s    
rÍ   c                 C   sB   | t krdS | tkrdS | tkr$dS | tkr6tdƒ‚ntdƒ‚d S )Nrn   é   é   rÊ   z'Unexpected unicode encoding encountered)r   r   r   r   rÉ   )rG   rT   rT   rU   rr   w  s    
rr   c                 C   sz   |dkrdS || | j krdS || |j kr0dS t|ƒD ]<}t| || ƒ}t||| ƒ}||k rf dS ||kr8 dS q8dS )Nr   r{   rn   )rZ   Úranger¿   )r½   Za_offsetÚbZb_offsetÚnr¾   Za_chrZb_chrrT   rT   rU   Ú_cmp_region…  s    rÓ   c                 C   s8   | dk rt S | dk rtS d}| |kr0d}t|ƒ‚tS dS )zK
    Compute the minimum unicode kind needed to hold a given codepoint
    é   i   rC   z;Invalid codepoint. Found value greater than Unicode maximumN)r   r   rp   r   )ÚcpZMAX_UNICODEÚmsgrT   rT   rU   Ú_codepoint_to_kind™  s    r×   c                 C   s   | dk S )z;
    Returns true if a codepoint is in the ASCII range
    é€   rT   )rž   rT   rT   rU   Ú_codepoint_is_ascii«  s    rÙ   c                 C   s   t | tjƒrdd„ }|S d S )Nc                 S   s   | j S r‡   )rZ   ©r»   rT   rT   rU   Úlen_impl¹  s    zunicode_len.<locals>.len_impl©Ú
isinstancer   ÚUnicodeType)r»   rÛ   rT   rT   rU   Úunicode_len¶  s    rß   c                 C   s�   | j r|j sd S t| tjƒr$| j}n| }t|tjƒr<|j}n|}tjtjtjf}t||ƒ}t||ƒ}|rx|rxdd„ }|S ||A rŒdd„ }|S d S )Nc                 S   sd   | d k}|d k}|s|r(|r$|r$dS dS t | ƒ} t |ƒ}t| ƒt|ƒkrLdS t| d|dt| ƒƒdkS )NTFr   )ÚstrÚlenrÓ   )r½   rÑ   Za_noneZb_nonerT   rT   rU   Úeq_implÎ  s    zunicode_eq.<locals>.eq_implc                 S   s   dS ©NFrT   ©r½   rÑ   rT   rT   rU   râ   à  s    )Úis_internalrÝ   r   ÚOptionalr~   rÞ   ÚStringLiteralÚUnicodeCharSeq)r½   rÑ   Zcheck_aZcheck_bÚacceptÚ	a_unicodeÚ	b_unicoderâ   rT   rT   rU   Ú
unicode_eq¾  s"    

rì   c                 C   s`   | j r|j sd S tjtjtjf}t| |ƒ}t||ƒ}|rH|rHdd„ }|S ||A r\dd„ }|S d S )Nc                 S   s
   | |k S r‡   rT   rä   rT   rT   rU   Úne_implí  s    zunicode_ne.<locals>.ne_implc                 S   s   dS )NTrT   rä   rT   rT   rU   râ   ò  s    zunicode_ne.<locals>.eq_impl)rå   r   rÞ   rç   rè   rÝ   )r½   rÑ   ré   rê   rë   rí   râ   rT   rT   rU   Ú
unicode_neå  s    

rî   c                 C   s<   t | tjtjfƒ}t |tjtjfƒ}|r8|r8dd„ }|S d S )Nc                 S   sJ   t t| ƒt|ƒƒ}t| d|d|ƒ}|dkr.dS |dkrFt| ƒt|ƒk S dS )Nr   r{   TF©Úminrá   rÓ   ©r½   rÑ   ZminlenZeqcoderT   rT   rU   Últ_implü  s    zunicode_lt.<locals>.lt_impl©rÝ   r   rÞ   rç   )r½   rÑ   rê   rë   rò   rT   rT   rU   Ú
unicode_lt÷  s
    rô   c                 C   s<   t | tjtjfƒ}t |tjtjfƒ}|r8|r8dd„ }|S d S )Nc                 S   sJ   t t| ƒt|ƒƒ}t| d|d|ƒ}|dkr.dS |dkrFt| ƒt|ƒkS dS )Nr   rn   TFrï   rñ   rT   rT   rU   Úgt_impl  s    zunicode_gt.<locals>.gt_implró   )r½   rÑ   rê   rë   rõ   rT   rT   rU   Ú
unicode_gt  s
    rö   c                 C   s<   t | tjtjfƒ}t |tjtjfƒ}|r8|r8dd„ }|S d S )Nc                 S   s
   | |k S r‡   rT   rä   rT   rT   rU   Úle_impl  s    zunicode_le.<locals>.le_implró   )r½   rÑ   rê   rë   r÷   rT   rT   rU   Ú
unicode_le  s
    rø   c                 C   s<   t | tjtjfƒ}t |tjtjfƒ}|r8|r8dd„ }|S d S )Nc                 S   s
   | |k  S r‡   rT   rä   rT   rT   rU   Úge_impl&  s    zunicode_ge.<locals>.ge_implró   )r½   rÑ   rê   rë   rù   rT   rT   rU   Ú
unicode_ge!  s
    rú   c                 C   s(   t | tjƒr$t |tjƒr$dd„ }|S d S )Nc                 S   s   t | |ƒdkS )Nr{   )Ú_findrä   rT   rT   rU   Úcontains_impl.  s    z'unicode_contains.<locals>.contains_implrÜ   )r½   rÑ   rü   rT   rT   rU   Úunicode_contains+  s    rý   c                 C   s^   | }t | tjƒr| j}nt | tjƒr*| j}tjtjf}|dk	rZt ||ƒsZtd 	||| ¡ƒ‚dS )zƒCheck object belongs to one of specific types
    ty: type
        Type of the object
    name: str
        Name of the object
    Nú"{}" must be {}, not {})
rÝ   r   ÚOmittedrq   ræ   r~   ÚIntegerÚNoneTyper    Úformat)ÚtyÚnameÚthetyÚacceptedrT   rT   rU   Úunicode_idx_check_type4  s    r  c                 C   s(   t | tjƒs$d |tj| ¡}t|ƒ‚dS )z$Check object belongs to unicode typerþ   N)rÝ   r   rÞ   r  r    )r  r  rÖ   rT   rT   rU   Úunicode_sub_check_typeH  s    r  c                 C   s   | d|t d @ > O } | S ©Nrn   ©Ú_BLOOM_WIDTH©Úmaskrž   rT   rT   rU   Ú
_bloom_addQ  s    r  c                 C   s   | d|t d @ > @ S r	  r
  r  rT   rT   rU   Ú_bloom_checkW  s    r  c                 C   sP  t |ƒ}|dkr|S |d  }}t||ƒ}t d¡}t||ƒ}	t|ƒD ],}
t||
ƒ}t|	|ƒ}	||krF||
 d }qF|}
|
|| k�rLt| ||
 ƒ}||k�rd}||k rÖt| |
| ƒ}t||ƒ}||krÌqÖ|d7 }q¢||krâ|
S t| ||
 d ƒ}t|	|ƒdk�r|
|7 }
n|
|7 }
n*t| ||
 d ƒ}t|	|ƒdk�rB|
|7 }
|
d7 }
qxdS )zLeft finder.r   rn   r{   )rá   r¿   r   rM   r  rÐ   r  )rE   ÚsubstrÚstartÚendÚmÚgapÚmlastÚlastÚzeror  r¾   rž   ÚjÚhaystack_chÚ	needle_chrT   rT   rU   Ú_default_find]  sD    










r  c                 C   sR  t |ƒ}|dkr|S |d  }}t|dƒ}td|ƒ}|}	|	dkrnt||	ƒ}
t||
ƒ}|
|krd|	d }|	d8 }	q8|| }	|	|k�rNt| |	ƒ}
|
|k�r|}|dkrÌt| |	| ƒ}t||ƒ}||krÂqÌ|d8 }q˜|dkrØ|	S t| |	d ƒ}
|	|k�r
t||
ƒdk�r
|	|8 }	n|	|8 }	n0t| |	d ƒ}
|	|k�rDt||
ƒdk�rD|	|8 }	|	d8 }	qvdS )zRight finder.r   rn   r{   )rá   r¿   r  r  )rE   r  r  r  r  Úskipr  Zmfirstr  r¾   rž   r  r  r  rT   rT   rU   Ú_default_rfindŒ  sF    












r  c                    s   d‡ fdd„	}|S )z%Generate finder either left or right.Nc                    sV   t | ƒ}t |ƒ}|d krd}|d kr(|}t|||ƒ\}}|| |k rHdS ˆ | |||ƒS )Nr   r{   )rá   Ú_adjust_indices)rE   r  r  r  rF   Ú
sub_length©Ú	find_funcrT   rU   Úimpl¿  s    zgenerate_finder.<locals>.impl)NNrT   )r!  r"  rT   r   rU   Úgenerate_finder½  s    r#  Úfindc                 C   s<   t |tjƒrddd„}|S t|dƒ t|dƒ t|dƒ tS )zImplements str.find()Nc                 S   s   |   t|ƒ¡S r‡   )r$  rà   ©rE   r  r  r  rT   rT   rU   Ú	find_implØ  s    zunicode_find.<locals>.find_implr  r  r  )NN)rÝ   r   rè   r  r  rû   )rE   r  r  r  r&  rT   rT   rU   Úunicode_findÔ  s    



r'  Úrfindc                 C   s<   t |tjƒrddd„}|S t|dƒ t|dƒ t|dƒ tS )zImplements str.rfind()Nc                 S   s   |   t|ƒ¡S r‡   )r(  rà   r%  rT   rT   rU   Ú
rfind_implç  s    z!unicode_rfind.<locals>.rfind_implr  r  r  )NN)rÝ   r   rè   r  r  Ú_rfind)rE   r  r  r  r)  rT   rT   rU   Úunicode_rfindã  s    



r+  Úrindexc                 C   s,   t |dƒ t |dƒ t|dƒ ddd„}|S )zImplements str.rindex()r  r  ÚsubNc                 S   s"   |   |||¡}|dk rtdƒ‚|S ©Nr   zsubstring not found)r(  rp   ©r»   r-  r  r  ÚresultrT   rT   rU   Úrindex_implú  s    z#unicode_rindex.<locals>.rindex_impl)NN©r  r  )r»   r-  r  r  r1  rT   rT   rU   Úunicode_rindexó  s
    



r3  r_   c                 C   s,   t |dƒ t |dƒ t|dƒ ddd„}|S )zImplements str.index()r  r  r-  Nc                 S   s"   |   |||¡}|dk rtdƒ‚|S r.  )r$  rp   r/  rT   rT   rU   Ú
index_impl  s    z!unicode_index.<locals>.index_impl)NNr2  )r»   r-  r  r  r4  rT   rT   rU   Úunicode_index  s
    



r5  Ú	partitionc                 C   sj   |}t |tjƒr|j}nt |tjƒr*|j}tjtjf}|dk	r^t ||ƒs^d d||¡}t	|ƒ‚dd„ }|S )zImplements str.partition()Nrþ   Úsepc                 S   s�   t |ƒ}t| jd| jƒ}t|ƒ}| j|jk s8t| ƒ|k rB| ||fS |dkrRtdƒ‚|  |¡}|dk rn| ||fS | d|… || || t| ƒ… fS ©Nr   úempty separator)rà   r¼   r[   r\   rá   rp   r$  ©rE   r7  Z	empty_strÚ
sep_lengthÚposrT   rT   rU   r"  '  s    


zunicode_partition.<locals>.impl©
rÝ   r   rÿ   rq   ræ   r~   rÞ   rè   r  r    ©rE   r7  r  r  rÖ   r"  rT   rT   rU   Úunicode_partition  s    r?  Úcountc                 C   sD   t |ƒ t |ƒ t|tjƒr*ddd„}|S d}t| t|ƒ¡ƒ‚d S )Nc                 S   s²   d}t | ƒ}t |ƒ}t||dƒ}t|||ƒ}|| dk s@||krDdS | ||… } t | ƒ}d| }}|dkrr|d S || |kr®| ||| … |kr¤|d7 }||7 }qr|d7 }qr|S ©Nr   rn   )rá   Ú_normalize_slice_idx_count)Úsrcr-  r  r  r@  Zsrc_lenZsub_lenrT   rT   rU   Ú
count_implB  s$    


z!unicode_count.<locals>.count_implz+The substring must be a UnicodeType, not {})NN)Ú_count_args_types_checkrÝ   r   rÞ   r    r  r~   )rC  r-  r  r  rD  Ú	error_msgrT   rT   rU   Úunicode_count;  s    
rG  Ú
rpartitionc                 C   sj   |}t |tjƒr|j}nt |tjƒr*|j}tjtjf}|dk	r^t ||ƒs^d d||¡}t	|ƒ‚dd„ }|S )zImplements str.rpartition()Nrþ   r7  c                 S   s�   t |ƒ}t| jd| jƒ}t|ƒ}| j|jk s8t| ƒ|k rB||| fS |dkrRtdƒ‚|  |¡}|dk rn||| fS | d|… || || t| ƒ… fS r8  )rà   r¼   r[   r\   rá   rp   r(  r:  rT   rT   rU   r"  p  s    


z unicode_rpartition.<locals>.implr=  r>  rT   rT   rU   Úunicode_rpartition`  s    rI  c                 C   sL   || kr| }|dk r(|| 7 }|dk r(d}|dk rD|| 7 }|dk rDd}||fS r·   rT   )rF   r  r  rT   rT   rU   r  …  s    r  Ú
startswithc                 C   s    t |ƒst|tjƒstdƒ‚t |ƒs8t|tjƒs8tdƒ‚t|tjƒr`t|jtjƒr`d
dd„}|S t|tjƒrzddd„}|S t|tjƒr”ddd„}|S td	ƒ‚d S )Nz:When specified, the arg 'start' must be an Integer or Nonez8When specified, the arg 'end' must be an Integer or Nonec                 S   s"   |D ]}|   |||¡r dS qdS ©NTF)rJ  )r»   Úprefixr  r  ÚitemrT   rT   rU   Ústartswith_tuple_impl¢  s    z1unicode_startswith.<locals>.startswith_tuple_implc                 S   s   |   t|ƒ||¡S r‡   )rJ  rà   )r»   rL  r  r  rT   rT   rU   Ústartswith_char_seq_impl«  s    z4unicode_startswith.<locals>.startswith_char_seq_implc                 S   sv   t | ƒt |ƒ }}|d krd}|d kr*|}t|||ƒ\}}|| |k rJdS |dkrVdS | ||… }t|d|d|ƒdkS ©Nr   FT©rá   r  rÓ   )r»   rL  r  r  rF   Zprefix_lengthZs_slicerT   rT   rU   Ústartswith_unicode_impl±  s    z3unicode_startswith.<locals>.startswith_unicode_implz9The arg 'prefix' should be a string or a tuple of strings)NN)NN)NN)	r   rÝ   r   r   r    ÚUniTupleÚdtyperÞ   rè   )r»   rL  r  r  rN  rO  rR  rT   rT   rU   Úunicode_startswith•  s,    ÿÿÿ


ÿrU  Úendswithc                 C   s¤   |d ks&t |tjtjtjfƒs&tdƒ‚|d ksLt |tjtjtjfƒsLtdƒ‚t |tjtjfƒrlddd„}|S t |tjƒr†ddd„}|S t |tj	ƒr ddd„}|S d S )	Nz!The arg must be a Integer or Nonec                 S   s&   |D ]}|   |||¡dkr dS qdS rK  )rV  )r»   r  r  r  rM  rT   rT   rU   Úendswith_impl×  s    z'unicode_endswith.<locals>.endswith_implc                 S   s€   t | ƒ}t |ƒ}|d krd}|d kr(|}t|||ƒ\}}|| |k rHdS |dkrTdS | ||… } t | ƒ| }t| ||d|ƒdkS rP  rQ  )r»   r  r  r  rF   r  r©   rT   rT   rU   rW  à  s    c                 S   s   |   t|ƒ||¡S r‡   )rV  rà   )r»   r  r  r  rT   rT   rU   rW  ö  s    )NN)NN)NN)
rÝ   r   rÿ   r   r  r    ÚTuplerS  rÞ   rè   )r»   r  r  r  rW  rT   rT   rU   Úunicode_endswithÊ  s&    þþ


rY  Ú
expandtabsr¥   c                 C   sd   |}t |tjƒr|j}nt |tjƒr*|j}tjtf}|dk	rVt ||ƒsVtd 	||¡ƒ‚ddd„}|S )zImplements str.expandtabs()Nz"tabsize" must be {}, not {}r¥   c                 S   sf  t | ƒ}d }}d}t|ƒD ]Œ}t| |ƒ}|tkrrd}|dkr¨|||  }|tj| kr`tdƒ‚||7 }||7 }q|tjd krˆtdƒ‚|d7 }|d7 }|ttfkrd}q|s²| S t	| j
|| jƒ}	d }}t|ƒD ]Ž}t| |ƒ}|tk�r4|dk�r`|||  }||7 }t||| ƒD ]}
t|	|
tƒ �q||7 }qÒ|d7 }t|	||ƒ |d7 }|ttfkrÒd}qÒ|	S )Nr   FTznew string is too longrn   )rá   rÐ   r¿   r9   ÚsysÚmaxsizeÚOverflowErrorr:   r;   r¼   r[   r\   r¸   r<   )rE   ÚtabsizerF   r  Zline_posÚfoundr¾   Ú
code_pointÚincrr’   rœ   rT   rT   rU   Úexpandtabs_impl  sL    





z+unicode_expandtabs.<locals>.expandtabs_impl)r¥   )
rÝ   r   rÿ   rq   ræ   r~   r   Úintr    r  )rE   r^  r  r  rb  rT   rT   rU   Úunicode_expandtabsü  s    

ÿ
.rd  Úsplitr{   c                 C   sŒ   |dks"t |tjtjtjfƒs"d S t |tjƒr<d	dd„}|S t |tjƒrVd
dd„}|S |d kszt |tjƒszt|ddƒd krˆddd„}|S d S )Nr{   c                 S   s   | j t|ƒ|d�S )N)Úmaxsplit)re  rà   )r½   r7  rf  rT   rT   rU   Ú
split_implE  s    z!unicode_split.<locals>.split_implc           
      S   sþ   t | ƒ}t |ƒ}|dkr tdƒ‚g }d}d}|dkr~|dkr~t|dƒ}t|ƒD ],}t| |ƒ|krN| | ||… ¡ |d }qNnbd}	||k rà|dksš|	|k ràt| ||d|ƒdkrÖ| | ||… ¡ ||7 }|}|	d7 }	q‚|d7 }q‚||krú| | |d … ¡ |S )Nr   r9  rn   r{   )rá   rp   r¿   rÐ   ÚappendrÓ   )
r½   r7  rf  Úa_lenÚsep_lenÚpartsr  rœ   Zsep_code_pointÚsplit_countrT   rT   rU   rg  J  s4    
ÿ

rq   Fc                 S   sª   t | ƒ}g }d}d}d}d}t|ƒD ]b}t| |ƒ}	t|	ƒ}
|rN|
rDq†|}d}q$|
sTq$| | ||… ¡ d}|d7 }|dkr$||kr$ qˆq$||kr¦|s¦| | |d … ¡ |S )Nr   TFrn   r{   )rá   rÐ   r¿   r*   rh  )r½   r7  rf  ri  rk  r  rœ   rl  Zin_whitespace_blockr`  Zis_whitespacerT   rT   rU   Úsplit_whitespace_implo  s0    
z,unicode_split.<locals>.split_whitespace_impl)Nr{   )Nr{   )Nr{   )	rÝ   r   rÿ   r   ZIntegerLiteralrè   rÞ   r  Úgetattr)r½   r7  rf  rg  rm  rT   rT   rU   Úunicode_split=  s"    ÿÿ

"ÿ
 ro  c                    s   d‡ fdd„	}|S )z@Generate whitespace rsplit func based on either ascii or unicodeNr{   c                    s  |dk rt j}g }t| ƒd }|dkr¬|dkrLt| |ƒ}ˆ |ƒsBqL|d8 }q&|dk rVq¬|}|d8 }|dkrˆt| |ƒ}ˆ |ƒr~qˆ|d8 }qb| | |d |d … ¡ |d8 }q|dkrø|dkrÚt| |ƒ}ˆ |ƒsÐqÚ|d8 }q´|dkrø| | d|d … ¡ |d d d… S ©Nr   rn   r{   )r[  r\  rá   r¿   rh  )rE   r7  rf  r0  r¾   r`  r  ©Úisspace_funcrT   rU   Úrsplit_whitespace_impl•  s<    






z?generate_rsplit_whitespace_impl.<locals>.rsplit_whitespace_impl)Nr{   rT   )rr  rs  rT   rq  rU   Úgenerate_rsplit_whitespace_impl’  s    &rt  Úrsplitc                 C   sh   dd„ }||dt jt jt jfƒ ||dt jtfƒ |dksLt|t jt jfƒrZddd„}|S dd	d
„}|S )zImplements str.unicode_rsplit()c                 S   sR   | }t | tjƒr| j}nt | tjƒr*| j}|dk	rNt ||ƒsNtd ||| ¡ƒ‚dS )z.Check object belongs to one of specified typesNrþ   )rÝ   r   rÿ   rq   ræ   r~   r    r  )r  r  r  r  rT   rT   rU   Ú_unicode_rsplit_check_typeÉ  s    ÿz2unicode_rsplit.<locals>._unicode_rsplit_check_typer7  rf  Nr{   c                 S   s   | j rt| ||ƒS t| ||ƒS r‡   )r\   Úascii_rsplit_whitespace_implÚunicode_rsplit_whitespace_impl)rE   r7  rf  rT   rT   rU   rs  Þ  s    z.unicode_rsplit.<locals>.rsplit_whitespace_implc                 S   sÞ   t |ƒ}| j|jk s$t| ƒt|ƒk r*| gS dd„ }|dk r@tj}t|ƒ}|dkrXtdƒ‚|dkrl|| ||ƒS g }t| ƒ}|dkr¾| j|d|d�}|dk ršq¾| | || |… ¡ |}|d8 }qx| | d|… ¡ |d d d… S )Nc                 S   s¤   g }t |dƒ}t| ƒd  }}|dkrx|dkrxt | |ƒ}||krn| | |d |d … ¡ |d  }}|d8 }|d8 }q|dkr–| | d|d … ¡ |d d d… S rp  )r¿   rá   rh  )rE   rž   rf  r0  Zch_code_pointr¾   r  Zdata_code_pointrT   rT   rU   Ú_rsplit_charë  s    


z9unicode_rsplit.<locals>.rsplit_impl.<locals>._rsplit_charr   r9  rn   )r  r  r{   )rà   r[   rá   r[  r\  rp   r(  rh  )rE   r7  rf  ry  r;  r0  r  r<  rT   rT   rU   Úrsplit_implå  s,    
z#unicode_rsplit.<locals>.rsplit_impl)Nr{   )Nr{   )r   rÞ   rè   r  r   rc  rÝ   rÿ   )rE   r7  rf  rv  rs  rz  rT   rT   rU   Úunicode_rsplitÅ  s    
þ

/r{  Úcenterú c                 C   s^   t |tjƒstdƒ‚t |tjƒr.ddd„}|S |dksPt |tjtjfƒsPtdƒ‚ddd„}|S )	NúThe width must be an Integerr}  c                 S   s   |   |t|ƒ¡S r‡   )r|  rà   ©ÚstringÚwidthÚfillcharrT   rT   rU   Úcenter_impl  s    z#unicode_center.<locals>.center_implú"The fillchar must be a UnicodeTypec           	      S   s€   t | ƒ}t |ƒ}|dkr tdƒ‚||kr,| S || }|d ||@ d@  }|| }|| }||krl||  | S ||  ||  S d S )Nrn   ú5The fill character must be exactly one character longrÎ   ©rá   rp   )	r€  r�  r‚  Ústr_lenÚfillchar_lenZ	allmarginZlmarginZrmarginZl_stringrT   rT   rU   rƒ  %  s    )r}  )r}  ©rÝ   r   r   r    rè   rÿ   rÞ   )r€  r�  r‚  rƒ  rT   rT   rU   Úunicode_center  s    
ÿ
rŠ  c                    s   d‡ fdd„	}|S )Nr}  c                    st   t |tjƒstdƒ‚t |tjƒr@ˆ r2d
dd„}|S ddd„}|S |dksbt |tjtjfƒsbtdƒ‚d‡ fdd	„	}|S )Nr~  r}  c                 S   s   |   |t|ƒ¡S r‡   )Úljustrà   r  rT   rT   rU   Ú
ljust_implD  s    z<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.ljust_implc                 S   s   |   |t|ƒ¡S r‡   )Úrjustrà   r  rT   rT   rU   Ú
rjust_implH  s    z<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.rjust_implr„  c                    sP   t | ƒ}t |ƒ}|dkr tdƒ‚||kr,| S |||  }ˆ rD| | S ||  S d S )Nrn   r…  r†  )r€  r�  r‚  r‡  rˆ  Únewstr©ÚSTRING_FIRSTrT   rU   r"  P  s    z6gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.impl)r}  )r}  )r}  r‰  )r€  r�  r‚  rŒ  rŽ  r"  r�  rT   rU   Úunicode_Xjust>  s    

ÿz(gen_unicode_Xjust.<locals>.unicode_Xjust)r}  rT   )r‘  r’  rT   r�  rU   Úgen_unicode_Xjust=  s    %r“  r�  r‹  Tc                    s   ‡ fdd„}|S )zDGenerate splitlines performer based on ascii or unicode line breaks.c           
         s¶   t | ƒ}g }d }}||k r²||k rBt| |ƒ}ˆ |ƒr8qB|d7 }q|}||k rš|d |k rŠt| |ƒ}t| |d ƒ}	t|ƒrŠt|	ƒrŠ|d7 }|d7 }|rš|}| | ||… ¡ |}q|S rA  )rá   r¿   r5   r4   rh  )
rE   ÚkeependsrF   r0  r¾   r  r`  ÚeolZcur_cpZnext_cp©Úis_line_break_funcrT   rU   r"  l  s,    


z&generate_splitlines_func.<locals>.implrT   )r—  r"  rT   r–  rU   Úgenerate_splitlines_funcj  s    r˜  Ú
splitlinesc                 C   sl   |}t |tjƒr|j}nt |tjƒr*|j}tjttjt	f}|dk	r^t ||ƒs^t
d d||¡ƒ‚ddd„}|S )zImplements str.splitlines()Nrþ   r”  Fc                 S   s   | j rt| |ƒS t| |ƒS r‡   )r\   Ú_ascii_splitlinesÚ_unicode_splitlines)rE   r”  rT   rT   rU   Úsplitlines_impl£  s    
z+unicode_splitlines.<locals>.splitlines_impl)F)rÝ   r   rÿ   rq   ræ   r~   r   rc  ÚBooleanÚboolr    r  )rE   r”  r  r  rœ  rT   rT   rU   Úunicode_splitlines“  s    ÿ
rŸ  c                 C   sæ   t |ƒ}|dkrdS t | ƒ}|d | }| j}| j}|D ](}|t |ƒ7 }t||jƒ}t||jƒ}q8t|||ƒ}|d }	t|d|	dt |	ƒƒ t |	ƒ}
td|ƒD ]D}t||
| d|ƒ |
|7 }
|| }	t||
|	dt |	ƒƒ |
t |	ƒ7 }
qœ|S )Nr   Ú rn   )rá   r[   r\   rË   rÍ   r¼   Ú_strncpyrÐ   )r7  rk  Z	parts_lenrj  rF   rG   rH   Úpr0  ÚpartÚ
dst_offsetrœ   rT   rT   rU   Ú	join_list¬  s,    r¥  Újoinc                 C   sv   t |tjƒrBt |jtjƒr&dd„ }|S t |jtjƒrrdd„ }|S n0t |tjƒrZdd„ }|S t |tjƒrrdd„ }|S d S )Nc                 S   s
   t | |ƒS r‡   ©r¥  )r7  rk  rT   rT   rU   Újoin_list_implÑ  s    z$unicode_join.<locals>.join_list_implc                 S   s   dd„ |D ƒ}t | |ƒS )Nc                 S   s   g | ]}t |ƒ‘qS rT   ©rà   ©Ú.0r¢  rT   rT   rU   Ú
<listcomp>Ö  s     z8unicode_join.<locals>.join_list_impl.<locals>.<listcomp>r§  )r7  rk  Ú_partsrT   rT   rU   r¨  Õ  s    c                 S   s   dd„ |D ƒ}|   |¡S )Nc                 S   s   g | ]}|‘qS rT   rT   rª  rT   rT   rU   r¬  Ý  s     z8unicode_join.<locals>.join_iter_impl.<locals>.<listcomp>)r¦  ©r7  rk  Z
parts_listrT   rT   rU   Újoin_iter_implÜ  s    z$unicode_join.<locals>.join_iter_implc                    s$   ‡ fdd„t tˆ ƒƒD ƒ}t| |ƒS )Nc                    s   g | ]}ˆ | ‘qS rT   rT   )r«  r¾   ©rk  rT   rU   r¬  ã  s     z7unicode_join.<locals>.join_str_impl.<locals>.<listcomp>)rÐ   rá   r¥  r®  rT   r°  rU   Újoin_str_implâ  s    z#unicode_join.<locals>.join_str_impl)rÝ   r   ÚListrT  rÞ   rè   ZIterableType)r7  rk  r¨  r¯  r±  rT   rT   rU   Úunicode_joinÌ  s    r³  Úzfillc                 C   s    t |tjƒstdƒ‚dd„ }|S )Nz<width> must be an Integerc                 S   sZ   t | ƒ}||kr| S |r | d nd}d||  }|dkrN|| | dd …  }n||  }|S )Nr   r   Ú0)ú+ú-rn   ©rá   )r€  r�  r‡  Ú
first_charÚpaddingr�  rT   rT   rU   Ú
zfill_implí  s    z!unicode_zfill.<locals>.zfill_impl)rÝ   r   r   r    )r€  r�  r»  rT   rT   rU   Úunicode_zfillè  s    r¼  c                 C   s^   t | ƒ}d}|d k	r8t|ƒD ]}| | |kr|  S qn"t|ƒD ]}t| | ƒs@|  S q@|S r·   ©rá   rÐ   r*   ©r€  Úcharsr‡  r¾   rT   rT   rU   Úunicode_strip_left_bound  s    
rÀ  c                 C   sv   t | ƒ}d}|d k	rDt|d ddƒD ]}| | |kr$|d7 } qrq$n.t|d ddƒD ]}t| | ƒsT|d7 } qrqT|S rp  r½  r¾  rT   rT   rU   Úunicode_strip_right_bound  s    rÁ  c                 C   s<   t | tjƒr| j} | d ks8t | tjtjtjfƒs8tdƒ‚d S )Nz%The arg must be a UnicodeType or None)rÝ   r   ræ   r~   rÿ   rÞ   r  r    )r¿  rT   rT   rU   Úunicode_strip_types_check'  s    þrÂ  c                 C   s<   t | tjƒr| j} | d ks8t | tjtjtjfƒs8tdƒ‚d S )Nz,The slice indices must be an Integer or None)rÝ   r   ræ   r~   rÿ   r   r  r    )ÚargrT   rT   rU   rE  0  s    þrE  Úlstripc                 C   s0   t |tjƒrddd„}|S t|ƒ ddd„}|S )Nc                 S   s   |   t|ƒ¡S r‡   )rÄ  rà   ©r€  r¿  rT   rT   rU   Úlstrip_impl=  s    z#unicode_lstrip.<locals>.lstrip_implc                 S   s   | t | |ƒd … S r‡   )rÀ  rÅ  rT   rT   rU   rÆ  C  s    )N)N©rÝ   r   rè   rÂ  )r€  r¿  rÆ  rT   rT   rU   Úunicode_lstrip9  s    

rÈ  Úrstripc                 C   s0   t |tjƒrddd„}|S t|ƒ ddd„}|S )Nc                 S   s   |   t|ƒ¡S r‡   )rÉ  rà   rÅ  rT   rT   rU   Úrstrip_implL  s    z#unicode_rstrip.<locals>.rstrip_implc                 S   s   | d t | |ƒ… S r‡   )rÁ  rÅ  rT   rT   rU   rÊ  R  s    )N)NrÇ  )r€  r¿  rÊ  rT   rT   rU   Úunicode_rstripH  s    

rË  Ústripc                 C   s0   t |tjƒrddd„}|S t|ƒ ddd„}|S )Nc                 S   s   |   t|ƒ¡S r‡   )rÌ  rà   rÅ  rT   rT   rU   Ú
strip_impl[  s    z!unicode_strip.<locals>.strip_implc                 S   s    t | |ƒ}t| |ƒ}| ||… S r‡   )rÀ  rÁ  )r€  r¿  ZlbÚrbrT   rT   rU   rÍ  a  s    

)N)NrÇ  )r€  r¿  rÍ  rT   rT   rU   Úunicode_stripW  s    

rÏ  c                 C   sB   | dkr|rdS |S n| dk r&| |7 } | dk s6| |kr>t dƒ‚| S )a%  
    Parameters
    ----------
    idx : int or None
        the index
    length : int
        the string length
    is_start : bool; optional with defaults to True
        Is it the *start* or the *stop* of the slice?

    Returns
    -------
    norm_idx : int
        normalized index
    Nr   zstring index out of range)Ú
IndexError)rœ   rF   Zis_startrT   rT   rU   Únormalize_str_idxl  s    rÑ  c                 C   s>   | dkr|S | |   kr"|k r.n n| | S | dk r:dS | S )a%  
    Used for unicode_count

    If arg < -slice_len, returns 0 (prevents circle)

    If arg is within slice, e.g -slice_len <= arg < slice_len
    returns its real index via arg % slice_len

    If arg > slice_len, returns arg (in this case count must
    return 0 if it is start index)
    Nr   rT   )rÃ  Z	slice_lenÚdefaultrT   rT   rU   rB  ‹  s
    rB  c                 C   s   |||ƒ}dd„ }||fS )zFix slice object.
    c           	      S   sF   |j \}}|\}}|  |||¡}t | |||¡ t |||¡ | ¡ S r‡   )r›   Úmake_helperrB   Zguard_invalid_sliceZ	fix_slicer   )	r€   r�   rª   r›   Ú	slicetypeZ
lengthtypeÚsliceobjrF   ÚslicerT   rT   rU   r¡   ¦  s    
z!_normalize_slice.<locals>.codegenrT   )r¨   rÕ  rF   rª   r¡   rT   rT   rU   Ú_normalize_slice   s    
r×  c                 C   s   t  |¡}dd„ }||fS )z2Compute the span from the given slice object.
    c                 S   s,   |j \}|\}|  |||¡}t ||¡}|S r‡   )r›   rÓ  rB   Zget_slice_length)r€   r�   rª   r›   rÔ  rÕ  rÖ  Zresult_sizerT   rT   rU   r¡   ·  s
    z_slice_span.<locals>.codegen)r   rM   )r¨   rÕ  rª   r¡   rT   rT   rU   Ú_slice_span±  s    
rØ  c           
      C   st   |j | j krHt|j ƒ}|| }|| }|| }t| j||j||dd� n(t|ƒD ]}	t| ||	 t|||	 ƒƒ qPd S )Nrn   )Úalign)r[   rr   r   rY   rÐ   r¸   r¿   )
Údstr¤  rC  Z
src_offsetrÒ   Ú
byte_widthZsrc_byte_offsetZdst_byte_offsetrx   r¾   rT   rT   rU   r¡  Á  s    
  ÿ
ÿr¡  c                 C   s2   |t jkst‚dd„ }t  t jt jt j¡}||fS )z_Create a slice of a unicode string using a view of its data to avoid
    extra allocation.
    c                 S   sê   |\}}}t  tj¡| ||d�}t  tj¡| |ƒ}|j|_|j|_|j|_||_|  t	d¡|_
| j t¡}	|	 | jtjfi ¡}
|  |	|
¡}|||jfƒ}| ||¡}| |j|g¡|_t  |jj¡|_| jrâ| j ||jd |¡ | ¡ S )Nr�   r{   r   )r   r}   r   r°   rJ   rG   rH   rF   r³   r   rI   Útyping_contextÚresolve_value_typerr   Úget_call_typerN   Úget_functionr±   r™   rE   r´   rK   r~   Ú
enable_nrtr‘   Úincrefr›   r   )r€   r�   rª   r›   rC  r  rF   Zin_strZview_strZbw_typZbw_sigZbw_implrÛ  r©   rT   rT   rU   r¡   ×  sB    
ÿ  ÿÿ ÿ  ÿz$_get_str_slice_view.<locals>.codegen)r   r°   rÉ   rM   )r¨   Zsrc_tZstart_tZlength_tr¡   rª   rT   rT   rU   Ú_get_str_slice_viewÐ  s    râ  c                 C   s@   t | tjƒr<t |tjƒr$dd„ }|S t |tjƒr<dd„ }|S d S )Nc                 S   s^   t |t| ƒƒ}t| |ƒ}t|ƒ}|| jkr6t| |dƒS t|ƒ}t|d|ƒ}t|d|ƒ |S d S rÌ   )	rÑ  rá   r¿   r×   r[   râ  rÙ   r¼   r¸   )r»   rœ   rÕ   rG   rH   ÚretrT   rT   rU   Úgetitem_charú  s    

z%unicode_getitem.<locals>.getitem_charc                 S   sæ   t |t| ƒƒ}t|ƒ}t| |jƒ}t|ƒ}t|ƒ}t|j|j |j	|jƒD ]4}t| |ƒ}|t|ƒM }t|ƒ}||krJt
||ƒ}qJ|jdkr¢|| jkr¢t| |j|ƒS t|||ƒ}	|j}
t|ƒD ] }t|	|t| |
ƒƒ |
|j7 }
q¼|	S d S r	  )r×  rá   rØ  r¿   r  r×   rÙ   rÐ   ÚstepÚstoprË   r[   râ  r¼   r¸   )r»   rœ   Z	slice_idxÚspanrÕ   rG   rH   r¾   Únew_kindrã  ÚcurrT   rT   rU   Úgetitem_slice  s,     ÿ
z&unicode_getitem.<locals>.getitem_slice)rÝ   r   rÞ   r   Z	SliceType)r»   rœ   rä  rê  rT   rT   rU   Úunicode_getitemö  s    $rë  c                 C   sL   t | tjƒr$t |tjƒr$dd„ }|S t | tjƒrHt |tjƒrHdd„ }|S d S )Nc                 S   sˆ   | j |j  }t| j|jƒ}t| j|jƒ}t|||ƒ}tt| ƒƒD ]}t||t	| |ƒƒ q@tt|ƒƒD ]}t|t| ƒ| t	||ƒƒ qd|S r‡   )
rZ   rË   r[   rÍ   r\   r¼   rÐ   rá   r¸   r¿   )r½   rÑ   Ú
new_lengthrè  Z	new_asciir0  r¾   r  rT   rT   rU   Úconcat_impl7  s    z#unicode_concat.<locals>.concat_implc                 S   s   | t |ƒ S r‡   r©  rä   rT   rT   rU   rí  D  s    )rÝ   r   rÞ   rè   )r½   rÑ   rí  rT   rT   rU   Úunicode_concat3  s    
rî  c                 C   s°   | dks|dk rdS |dkr | S | j | }| j}t||| jƒ}t| ƒ}t|d| d|ƒ |}d| |kr€t|||d|ƒ |d9 }qZd| |ks¬|| }t||||| |ƒ |S d S )Nr   rn   r   rÎ   )rZ   r[   r¼   r\   rá   r¡  )Zstr_argZmult_argrì  rè  r0  Zlen_aZ	copy_sizeÚrestrT   rT   rU   Ú_repeat_implI  s"    

rð  c                 C   sL   t | tjƒr$t |tjƒr$dd„ }|S t | tjƒrHt |tjƒrHdd„ }|S d S )Nc                 S   s
   t | |ƒS r‡   ©rð  rä   rT   rT   rU   Úwrapg  s    zunicode_repeat.<locals>.wrapc                 S   s
   t || ƒS r‡   rñ  rä   rT   rT   rU   rò  k  s    )rÝ   r   rÞ   r   )r½   rÑ   rò  rT   rT   rU   Úunicode_repeatd  s    ró  c                 C   s   t | tjƒrdd„ }|S d S )Nc                 S   s   t | ƒdkS r·   r¸  ©r½   rT   rT   rU   r"  s  s    zunicode_not.<locals>.implrÜ   ©r½   r"  rT   rT   rU   Úunicode_notp  s    rö  Úreplacec                 C   s�   |}t |tjƒr|j}nt |tjƒr*|j}t |ttjfƒsHtd 	|¡ƒ‚t |tj
tjfƒshtd 	|¡ƒ‚t |tj
ƒs‚td 	|¡ƒ‚ddd„}|S )NzGUnsupported parameters. The parameters must be Integer. Given count: {}z+The object must be a UnicodeType. Given: {}r{   c           	      S   sÔ   |dkr| S |dkrºt | ƒ}|dkr6|| |¡ | S |g}tt|ƒ|ƒ}t|ƒD ]F}| || ¡ |d |kr|| |¡ qR| d ||d d … ¡¡ qR|t|ƒkr°| |¡ d |¡S |  ||¡}| |¡}|S )Nr   r   r{   rn   )Úlistr¦  rð   rá   rÐ   rh  re  )	r»   Úold_strÚnew_strr@  ZscharsZsplit_resultZ	min_countr¾   r0  rT   rT   rU   r"  Œ  s&    


zunicode_replace.<locals>.impl)r{   )rÝ   r   rÿ   rq   ræ   r~   rc  r   r    r  rÞ   r  )r»   rù  rú  r@  r  r"  rT   rT   rU   Úunicode_replacex  s&    ÿÿÿ
rû  c                    s   ‡ ‡fdd„}|S )Nc                    s   ‡ ‡fdd„}|S )Nc                    s’   t | ƒ}|dkrdS |dkr<t| dƒ}| jr4ˆ |ƒS ˆ|ƒS | jrht|ƒD ]}t| |ƒ}ˆ |ƒsJ dS qJt|ƒD ]}t| |ƒ}ˆ|ƒsp dS qpdS )Nr   Frn   T)rá   r¿   r\   rÐ   )rE   rF   r`  r¾   ©Ú
ascii_funcÚunicode_funcrT   rU   r"  ­  s$    


z.gen_isAlX.<locals>.unicode_isAlX.<locals>.implrT   ©rE   r"  rü  rT   rU   Úunicode_isAlX«  s    z gen_isAlX.<locals>.unicode_isAlXrT   )rý  rþ  r   rT   rü  rU   Ú	gen_isAlXª  s    r  Úisalphac                 C   s   t | ƒpt| ƒS r‡   )r>   r=   ©ÚxrT   rT   rU   Ú<lambda>Î  s    r  Úisalnumc                    s   ‡ ‡‡fdd„}|S )Nc                    sp   t | ƒ}|dkrˆt| dƒƒS |dkr*dS d}t|ƒD ]4}t| |ƒ}ˆ |ƒsTˆ|ƒrZ dS |s6ˆ|ƒr6d}q6|S ©Nrn   r   FT©rá   r¿   rÐ   )r½   ÚlÚcasedrœ   r`  ©Úis_lowerÚis_titleÚis_upperrT   rU   r"  Ü  s    
z_is_upper.<locals>.implrT   )r  r  r  r"  rT   r  rU   Ú	_is_upper×  s    r  c                 C   s   dS rã   rT   r  rT   rT   rU   r  í  ó    Úisupperc                 C   s   dd„ }|S )z
    Implements .isupper()
    c                 S   s   | j rt| ƒS t| ƒS d S r‡   )r\   Ú_ascii_is_upperÚ_unicode_is_upperrô  rT   rT   rU   r"  ú  s    zunicode_isupper.<locals>.implrT   rõ  rT   rT   rU   Úunicode_isupperõ  s    r  Úisasciic                 C   s   dd„ }|S )z Implements UnicodeType.isascii()c                 S   s   | j S r‡   )r\   ©rE   rT   rT   rU   r"    s    zunicode_isascii.<locals>.implrT   rÿ  rT   rT   rU   Úunicode_isascii  s    r  Úistitlec                 C   s   dd„ }|S )zï
    Implements UnicodeType.istitle()
    The algorithm is an approximate translation from CPython:
    https://github.com/python/cpython/blob/1d4b6ba19466aba0eb91c4ba01ba509acf18c723/Objects/unicodeobject.c#L11829-L11885 # noqa: E501
    c                 S   sž   t | ƒ}|dkr*t| dƒ}t|ƒp(t|ƒS |dkr6dS d}d}t|ƒD ]R}t| |ƒ}t|ƒsdt|ƒrx|rn dS d}d}qFt|ƒr”|sŠ dS d}d}qFd}qF|S r  )rá   r¿   r0   r6   rÐ   r1   )rE   rF   Úcharr
  Úprevious_is_casedrœ   rT   rT   rU   r"    s,    

zunicode_istitle.<locals>.implrT   rÿ  rT   rT   rU   Úunicode_istitle  s    r  Úislowerc                 C   s   dd„ }|S )aP  
    impl is an approximate translation of:
    https://github.com/python/cpython/blob/201c8f79450628241574fba940e08107178dc3a5/Objects/unicodeobject.c#L11900-L11933    # noqa: E501
    mixed with:
    https://github.com/python/cpython/blob/201c8f79450628241574fba940e08107178dc3a5/Objects/bytes_methods.c#L131-L156    # noqa: E501
    c                 S   sp   t | ƒ}|dkrtt| dƒƒS |dkr*dS d}t|ƒD ]4}t| |ƒ}t|ƒsTt|ƒrZ dS |s6t|ƒr6d}q6|S r  )rá   r1   r¿   rÐ   r0   r6   )rE   rF   r
  rœ   rÕ   rT   rT   rU   r"  :  s    
zunicode_islower.<locals>.implrT   rÿ  rT   rT   rU   Úunicode_islower1  s    	r  Úisidentifierc                 C   s   dd„ }|S )z%Implements UnicodeType.isidentifier()c                 S   s^   t | ƒ}|dkrdS t| dƒ}t|ƒs2|dkr2dS td|ƒD ]}t| |ƒ}t|ƒs< dS q<dS )Nr   Fé_   rn   T)rá   r¿   r,   rÐ   r-   )rE   rF   Zfirst_cpr¾   r`  rT   rT   rU   r"  Q  s    

z"unicode_isidentifier.<locals>.implrT   rÿ  rT   rT   rU   Úunicode_isidentifierM  s    r   c                    s   ‡ ‡fdd„}|S )Nc                    s   ‡ ‡fdd„}|S )Nc                    sX   t | ƒ}|dkrˆ t| dƒƒS ˆr.|dkr.dS t|ƒD ]}t| |ƒ}ˆ |ƒs6 dS q6dS r  r  )rE   rF   r¾   r`  ©Ú_PyUnicode_IS_funcÚempty_is_falserT   rU   r"  g  s    
z*gen_isX.<locals>.unicode_isX.<locals>.implrT   rÿ  r!  rT   rU   Úunicode_isXf  s    zgen_isX.<locals>.unicode_isXrT   )r"  r#  r$  rT   r!  rU   Úgen_isXe  s    r%  ÚisspaceÚ	isnumericÚisdigitÚ	isdecimalÚisprintablec                    s   ‡ ‡fdd„}|S )z)Generate common case operation performer.c           	         s¬   t | ƒ}|dkr t| j|| jƒS | jrBt| j|dƒ}ˆ | |ƒ |S ttd| | jƒ}dg}ˆ| |||ƒ}|d }t|ƒ}t||t|ƒƒ}t|ƒD ]}t||t	||ƒƒ q�|S )Nr   rn   é   )
rá   r¼   r[   r\   r   r×   rÙ   rÐ   r¸   r¿   )	rE   rF   r’   ÚtmpÚmaxcharsZ	newlengthÚmaxcharZnewkindr¾   rü  rT   rU   r"  “  s     
zcase_operation.<locals>.implrT   )rý  rþ  r"  rT   rü  rU   Úcase_operation‘  s    r/  c                 C   s’   d}|d }|dkr2t | |ƒ}t|ƒs(q2|d8 }q|dko@t|ƒ}|r†|d }||k rtt | |ƒ}t|ƒsjqt|d7 }qN||kp„t|ƒ }|rŽdS dS )zEThis is a translation of the function that handles the capital sigma.r   rn   iÂ  iÃ  )r¿   r/   r.   )rE   rF   rœ   r�   r  Zfinal_sigmarT   rT   rU   Ú_handle_capital_sigma®  s"    



r0  c                 C   s&   | dkrt |||ƒ|d< dS t| |ƒS )z>This is a translation of the function that lowers a character.i£  r   rn   )r0  r&   )r`  rE   rF   rœ   ÚmappedrT   rT   rU   Ú_lower_ucs4Æ  s    r2  c                    s   ‡ fdd„}|S )Nc           
         s†   d}t |ƒD ]t}tjdtd�}t| |ƒ}ˆ r>t|| |||ƒ}n
t||ƒ}|d |… D ]*}	t|d |	ƒ|d< t|||	ƒ |d7 }qTq|S ©Nr   r+  ©rT  rn   )	rÐ   r¹   Úzerosr#   r¿   r2  r%   Úmaxr¸   )
rE   rF   r’   r-  Úkrœ   r1  r`  Ún_resr  ©ÚlowerrT   rU   Ú_do_upper_or_lowerÑ  s    

z7_gen_unicode_upper_or_lower.<locals>._do_upper_or_lowerrT   )r:  r;  rT   r9  rU   Ú_gen_unicode_upper_or_lowerÐ  s    r<  c                    s   ‡ fdd„}|S )Nc                    s0   t t| ƒƒD ]}t| |ƒ}t||ˆ |ƒƒ qd S r‡   )rÐ   rá   r¿   r¸   ©rE   r’   rœ   r`  ©ÚfuncrT   rU   Ú_ascii_upper_or_lowerè  s    
z8_gen_ascii_upper_or_lower.<locals>._ascii_upper_or_lowerrT   )r?  r@  rT   r>  rU   Ú_gen_ascii_upper_or_lowerç  s    rA  r:  c                 C   s
   t ttƒS )zImplements .lower())r/  Ú_ascii_lowerÚ_unicode_lowerr  rT   rT   rU   Úunicode_loweró  s    rD  Úupperc                 C   s
   t ttƒS )zImplements .upper())r/  Ú_ascii_upperÚ_unicode_upperr  rT   rT   rU   Úunicode_upperù  s    rH  c                 C   s~   d}t jdtd�}t|ƒD ]^}| d¡ t| |ƒ}t||ƒ}|d |… D ].}	|d }
t|
|	ƒ|d< t|||	ƒ |d7 }qHq|S r3  )	r¹   r5  r#   rÐ   Úfillr¿   r'   r6  r¸   )rE   rF   r’   r-  r7  r1  rœ   r`  r8  r  r.  rT   rT   rU   Ú_unicode_casefold 	  s    


rJ  c                 C   s0   t t| ƒƒD ]}t| |ƒ}t||t|ƒƒ qd S r‡   )rÐ   rá   r¿   r¸   r"   r=  rT   rT   rU   Ú_ascii_casefold	  s    
rK  Úcasefoldc                 C   s
   t ttƒS )zImplements str.casefold())r/  rK  rJ  r  rT   rT   rU   Úunicode_casefold	  s    rM  c                 C   sÊ   d}d}t jdtd�}t| dƒ}t||ƒ}|d |… D ]"}	t||	ƒ}t|||	ƒ |d7 }q6td|ƒD ]X}
| d¡ t| |
ƒ}t	|| ||
|ƒ}|d |… D ]"}	t||	ƒ}t|||	ƒ |d7 }q˜qd||d< |S r3  )
r¹   r5  r#   r¿   r(   r6  r¸   rÐ   rI  r2  )rE   rF   r’   r-  r7  r.  r1  r`  r8  r  rœ   rT   rT   rU   Ú_unicode_capitalize	  s&    






rN  c                 C   sL   t | dƒ}t|dt|ƒƒ tdt| ƒƒD ]}t | |ƒ}t||t|ƒƒ q(d S rA  )r¿   r¸   r!   rÐ   rá   r"   )rE   r’   r`  rœ   rT   rT   rU   Ú_ascii_capitalize9	  s
    

rO  Ú
capitalizec                 C   s
   t ttƒS r‡   )r/  rO  rN  r  rT   rT   rU   Úunicode_capitalizeC	  s    rQ  c                 C   s¦   d}d}t jdtd�}t|ƒD ]‚}| d¡ t| |ƒ}|rLt|| |||ƒ}	ntt|ƒ|ƒ}	|d|	… D ],}
|\}t||
ƒ|d< t	|||
ƒ |d7 }qft
t|ƒƒ}q|S )zCThis is a translation of the function that titles a unicode string.r   Fr+  r4  Nrn   )r¹   Úemptyr#   rÐ   rI  r¿   r2  r(   r6  r¸   r.   )rE   rF   r’   r-  r7  Zprevious_casedr1  rœ   r`  r8  r  r.  rT   rT   rU   Ú_unicode_titleI	  s     


rS  c                 C   sh   d}t t| ƒƒD ]R}t| |ƒ}t|ƒr8|s2t|ƒ}d}nt|ƒrR|rLt|ƒ}d}nd}t|||ƒ qdS )z" Does .title() on an ASCII string FTN)rÐ   rá   r¿   r7   r!   r8   r"   r¸   )rE   r’   r  rœ   r`  rT   rT   rU   Ú_ascii_title`	  s    
rT  Útitlec                 C   s
   t ttƒS )zImplements str.title())r/  rT  rS  r  rT   rT   rU   Úunicode_titlet	  s    rV  c                 C   sN   t t| ƒƒD ]<}t| |ƒ}t|ƒr,t|ƒ}nt|ƒr<t|ƒ}t|||ƒ qd S r‡   )rÐ   rá   r¿   r8   r"   r7   r!   r¸   r=  rT   rT   rU   Ú_ascii_swapcase|	  s    

rW  c                 C   s®   d}d}t jdtd�}t|ƒD ]‚}| d¡ t| |ƒ}t|ƒrPt|| |||ƒ}	n t|ƒrdt	||ƒ}	nd}	||d< |d |	… D ]"}
t
||
ƒ}t|||
ƒ |d7 }q|q||d< |S r3  )r¹   rR  r#   rÐ   rI  r¿   r0   r2  r1   r%   r6  r¸   )rE   rF   r’   r-  r7  r.  r1  rœ   r`  r8  r  rT   rT   rU   Ú_unicode_swapcaseˆ	  s$    


rX  Úswapcasec                 C   s
   t ttƒS r‡   )r/  rW  rX  r  rT   rT   rU   Úunicode_swapcaseŸ	  s    rZ  c                 C   s   t | tjƒrdd„ }|S d S )Nc                 S   s"   t | ƒ}|dkrtdƒ‚t| dƒS )Nrn   zord() expected a characterr   )rá   Ú	TypeErrorr¿   )r�   ÚlcrT   rT   rU   r"  ¨	  s    zol_ord.<locals>.implrÜ   )r�   r"  rT   rT   rU   Úol_ord¥	  s    r]  c                 C   s4   | t kst‚t| ƒ}t|d|tkƒ}t|d| ƒ |S rÌ   )Ú_MAX_UNICODErÉ   r×   r¼   r   r¸   )rž   rG   rã  rT   rT   rU   Ú_unicode_char·	  s
    r_  zchr() arg not in range(0x%hx)c                 C   s$   | dk s| t krttƒ‚tt| ƒƒS r·   )r^  rp   Ú_out_of_range_msgr_  r#   )ZordinalrT   rT   rU   Ú_PyUnicode_FromOrdinalÄ	  s    ra  c                 C   s   t | tjƒrdd„ }|S d S )Nc                 S   s   t | ƒS r‡   )ra  )r¾   rT   rT   rU   r"  Ð	  s    zol_chr.<locals>.impl)rÝ   r   r   )r¾   r"  rT   rT   rU   Úol_chrÍ	  s    rb  Ú__str__c                 C   s   dd„ S )Nc                 S   s   | S r‡   rT   rÚ   rT   rT   rU   r  ×	  r  zunicode_str.<locals>.<lambda>rT   rÚ   rT   rT   rU   Úunicode_strÕ	  s    rd  Ú__repr__c                 C   s   dd„ S )Nc                 S   s   d|  d S )Nú'rT   rÚ   rT   rT   rU   r  Þ	  r  zunicode_repr.<locals>.<lambda>rT   rÚ   rT   rT   rU   Úunicode_reprÚ	  s    rg  c                    s   | dƒ‰ ‡ fdd„}|S )Né
   c           	         s°   d}| dk r|  } d}| dkr"dS |d t t t | ¡¡ƒ }t}t|ƒ}t|||dƒ}|rlt|dtdƒƒ |d }| dkr¬t	| ˆ ƒ\} }tdƒ| }t|||ƒ |d8 }qt|S )NFr   Trµ  rn   r·  )
rc  r¹   ÚfloorÚlog10r   rr   r¶   r¸   ÚordÚdivmod)	rÒ   ÚflagrF   rG   rº   r»   rœ   Údigitr�   ©ÚtenrT   rU   r"  æ	  s&    
zinteger_str.<locals>.implrT   )rÒ   r"  rT   ro  rU   Úinteger_strá	  s    rq  c                 C   s   dd„ S )Nc                 S   s   |   ¡ S r‡   )rc  ©rÒ   rT   rT   rU   r  ÿ	  r  zinteger_repr.<locals>.<lambda>rT   rr  rT   rT   rU   Úinteger_reprý	  s    rs  c                 C   s   dd„ S )Nc                 S   s   | rdS dS )NÚTrueÚFalserT   ©rÑ   rT   rT   rU   r  
  r  zboolean_str.<locals>.<lambda>rT   rv  rT   rT   rU   Úboolean_str
  s    rw  Zgetiterc           
      C   sp   |j \}|\}|  ||j¡}|  tjd¡}t ||¡}||_||_	| j
rX| j |||¡ | ¡ }	t| ||j|	ƒS r·   )r›   rÓ  Úreturn_typer³   r   r`   r   Zalloca_once_valuer_   rE   rà  r‘   rá  r   r   )
r€   r�   rª   r›   r  rE   Úiterobjr  Zindexptrr’   rT   rT   rU   Úgetiter_unicode
  s    rz  Ziternextc              	   C   sú   |j \}|\}| j}| tj¡}| |tjtjfi ¡}	|  	||	¡}
| t
¡}| |tjfi ¡}|  	||¡}| j|||d�}|||jfƒ}| |j¡}| d||¡}| |¡ | |¡�: |
||j|fƒ}| |¡ t ||¡}| ||j¡ W 5 Q R X d S )Nr�   ú<)r›   rÜ  rÝ  ÚoperatorÚgetitemrÞ  r   r°   r`   rß  rá   rÓ  rE   r˜   r_   Zicmp_unsignedZ	set_validZif_thenZyield_r   Zincrement_indexrÁ   )r€   r�   rª   r›   r0  ZitertyÚiterZtyctxZfntyZgetitem_sigZgetitem_implZlen_sigrÛ   ry  Zstrlenr_   Zis_validZgotitemZnindexrT   rT   rU   Úiternext_unicode%
  s*    ÿ


r  )r   )NN)NN)NN)NN)NN)NN)NN)r¥   )Nr{   )Nr{   )r}  )F)N)N)N)T)r{   )T)òr[  r|  Únumpyr¹   Zllvmlite.irr   r   Znumba.core.cgutilsr   Znumba.core.extendingr   r   r   r   r	   r
   r   r   r   r   Znumba.core.imputilsr   r   r   r   r   r   Znumba.core.datamodelr   r   Z
numba.corer   r   Znumba.core.pythonapir   r   r   r   Znumba._helperlibr   Znumba.cpython.hashingr   Znumba.core.unsafe.bytesr   Znumba.core.errorsr    Znumba.cpython.unicode_supportr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   Znumba.cpythonrB   r^  rM   Zbitwidthr  rÞ   rD   ZUnicodeIteratorTyper^   rz   r†   rç   r°   r‰   rŠ   r�   r“   r£   r«   r®   r¯   r¶   r¼   r¿   rÂ   rÆ   rÇ   rÈ   r¸   rË   rÍ   rr   rÓ   r×   rÙ   rá   rß   Úeqrì   Únerî   Últrô   Úgtrö   Úlerø   Úgerú   Úcontainsrý   r  r  r  r  r  r  r#  rû   r*  r'  r+  r3  r5  r?  rG  rI  r  rU  rY  rd  ro  rt  rx  rw  r{  rŠ  r“  r˜  rš  r›  rŸ  r¥  r³  r¼  rÀ  rÁ  rÂ  rE  rÈ  rË  rÏ  rÑ  rB  r×  rØ  r¡  râ  r}  rë  r²   Úiaddrî  rð  r±   ró  Únot_rö  rû  r  Z_unicode_is_alnumr  Z_always_falser  r  r  r  r  r  r   r%  r/  r0  r2  r<  rG  rC  rA  rF  rB  rD  rH  rJ  rK  rM  rN  rO  rQ  rS  rT  rV  rW  rX  rZ  rk  r]  r_  r`  ra  Úchrrb  rd  rg  r   rq  rs  r�  rw  rz  ZNEWr  rT   rT   rT   rU   Ú<module>   s@  0 Œ	






















&



	
	
	


.
0





#
$

$

4
1
@
T,ÿÿ
Q
%)#ÿ







		







%
<



1!ÿÿÿþ





%




ÿ
ÿ	

	
	
	