U
    í¾|e;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   ÚMemInfoPointerÚpyobjectr   r   Ú__init__©ÚselfÚdmmÚfe_typeÚmembers© rX   úR/var/www/website-v5/atlas_env/lib/python3.8/site-packages/numba/cpython/unicode.pyrR   O   s    ø
zUnicodeModel.__init__N)Ú__name__Ú
__module__Ú__qualname__rR   rX   rX   rX   rY   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   ÚEphemeralPointerÚuintprE   Úsuperrb   rR   rS   ©Ú	__class__rX   rY   rR   f   s    ÿzUnicodeIteratorModel.__init__)rZ   r[   r\   rR   Ú__classcell__rX   rX   rg   rY   rb   d   s   rb   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ÚbyrefÚextract_unicodeNz1cannot extract unicode data from the given stringé   )Úctypesrj   rk   rl   rm   rn   ro   rp   rq   rr   r   Ú
ValueErrorÚvalueÚ_kind_to_byte_widthÚfrom_addressÚbytes)Úobjrj   rk   rl   rm   rn   ro   rp   rq   rr   Zextract_unicode_fnÚprotoÚfnrF   rG   rH   ÚhashvrE   ÚnbytesÚoutrX   rX   rY   Úcompile_time_get_string_datan   s(    , ÿ r�   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
    éÿÿÿÿ)r�   ÚmoduleÚinsert_const_bytesr   Úcreate_struct_proxyrE   rF   ÚtyperG   rH   rI   Ú	_getvalue)ÚcontextÚbuilderÚtypZliteral_stringZ	databytesrF   rG   rH   r~   ÚmodÚgvÚuni_strrX   rX   rY   Úmake_string_from_constantŠ   s    ÿrŽ   c                 C   s   t | |||jƒS ©N)rŽ   Úliteral_value)rˆ   r‰   ÚfromtyÚtotyÚvalrX   rX   rY   Úcast_from_literalž   s       ÿr”   c                 C   s   t | |||ƒS r�   )rŽ   )rˆ   r‰   rŠ   ÚpyvalrX   rX   rY   Ú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)ÚpyapiÚstring_as_string_size_and_kindr   r…   rˆ   r‰   rE   rF   rG   rH   rI   Únrt_meminfo_new_from_pyobjectrJ   rK   Úis_not_nullÚerr_occurredr
   r‡   )rŠ   r{   ÚcÚokrE   rF   rG   rH   r~   r�   r—   rX   rX   rY   Ú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
    ©rw   )r   r…   rˆ   r‰   r˜   Ústring_from_kind_and_datarG   rE   rF   Úobject_hashÚnrtÚdecref)rŠ   r“   r�   r�   ÚresrX   rX   rY   Úbox_unicode_strÆ   s      ÿr¦   c                    s   ‡ fdd„}|S )Nc                    s@   |\}}|  |tˆ ƒ ¡ ¡}| | ||g¡¡}| |tdƒ¡S ©Né    )Úbitcastr   Ú
as_pointerÚloadÚgepÚzext)rˆ   r‰   Ú	signatureÚargsrE   ÚidxÚptrÚch©ÚbitsizerX   rY   ÚcodegenÚ   s    z#make_deref_codegen.<locals>.codegenrX   ©r´   rµ   rX   r³   rY   Ú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ÚsigrX   rX   rY   Úderef_uint8ã   s    r¿   c                 C   s   t  t jt j¡}|tdƒfS ©Né   rº   r»   rX   rX   rY   Úderef_uint16é   s    rÂ   c                 C   s   t  t jt j¡}|tdƒfS r§   rº   r»   rX   rX   rY   Ú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 )Nrt   r‚   )r   r…   r   Úunicode_typeÚmulÚaddr   r†   r£   Úmeminfo_allocrJ   rG   rH   rF   Úget_constantr   rI   Ú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_valrX   rX   rY   Údetailsû   s     

ÿÿz_malloc_string.<locals>.details)r   rÄ   rN   rM   rO   )r¼   rG   Z
char_bytesrF   rH   rË   r¾   rX   rX   rY   Ú_malloc_stringõ   s    rÌ   c                 C   s,   t | ƒ}t| |||ƒ}t||t d¡ƒ |S ©Nr   )rx   rÌ   Ú_set_code_pointÚnprO   )rG   rF   rH   Ú
char_widthÚsrX   rX   rY   Ú_empty_string  s    rÒ   F)Ú_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¿   r]   r   rÂ   r   rÃ   )ÚaÚirX   rX   rY   Ú_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¬   Úget_dummy_value)rˆ   r‰   r®   r¯   rE   r°   r²   r±   r³   rX   rY   rµ   .  s    
z!make_set_codegen.<locals>.codegenrX   r¶   rX   r³   rY   Úmake_set_codegen-  s    rÚ   c                 C   s    t  t jt jt j¡}|tdƒfS r¸   ©r   ÚvoidrL   Úint64rO   rÚ   ©r¼   rE   r°   r²   r¾   rX   rX   rY   Ú	set_uint89  s    rß   c                 C   s    t  t jt jt j¡}|tdƒfS rÀ   rÛ   rÞ   rX   rX   rY   Ú
set_uint16?  s    rà   c                 C   s    t  t jt jt j¡}|tdƒfS r§   rÛ   rÞ   rX   rX   rY   Ú
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ß   r]   r   rà   r   rá   ÚAssertionError)rÔ   rÕ   r²   rX   rX   rY   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   )Úkind1Úkind2rX   rX   rY   Ú
_pick_kind^  s    ræ   c                 C   s$   | dkr|dkrt  d¡S t  d¡S ©Nrt   r   )r   rO   )Z	is_ascii1Z	is_ascii2rX   rX   rY   Ú_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 )Nrt   é   é   rã   z'Unexpected unicode encoding encountered)r   r   r   r   râ   )rG   rX   rX   rY   rx   w  s    
rx   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‚   rt   )r^   ÚrangerÖ   )rÔ   Za_offsetÚbZb_offsetÚnrÕ   Za_chrZb_chrrX   rX   rY   Ú_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   rv   r   )ÚcpZMAX_UNICODEÚmsgrX   rX   rY   Ú_codepoint_to_kind™  s    rò   c                 C   s   | dk S )z;
    Returns true if a codepoint is in the ASCII range
    é€   rX   )r²   rX   rX   rY   Ú_codepoint_is_ascii«  s    rô   c                 C   s   t | tjƒrdd„ }|S d S )Nc                 S   s   | j S r�   )r^   ©rÑ   rX   rX   rY   Úlen_impl¹  s    zunicode_len.<locals>.len_impl©Ú
isinstancer   ÚUnicodeType)rÑ   rö   rX   rX   rY   Ú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ì   Úa_noneÚb_nonerX   rX   rY   Úeq_implÎ  s    zunicode_eq.<locals>.eq_implc                 S   s   dS ©NFrX   ©rÔ   rì   rX   rX   rY   rÿ   à  s    )Úis_internalrø   r   ÚOptionalr†   rù   ÚStringLiteralÚUnicodeCharSeq)rÔ   rì   Zcheck_aZcheck_bÚacceptÚ	a_unicodeÚ	b_unicoderÿ   rX   rX   rY   Ú
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�   rX   r  rX   rX   rY   Úne_implí  s    zunicode_ne.<locals>.ne_implc                 S   s   dS )NTrX   r  rX   rX   rY   rÿ   ò  s    zunicode_ne.<locals>.eq_impl)r  r   rù   r  r  rø   )rÔ   rì   r  r  r  r
  rÿ   rX   rX   rY   Ú
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eqcoderX   rX   rY   Últ_implü  s    zunicode_lt.<locals>.lt_impl©rø   r   rù   r  )rÔ   rì   r  r  r  rX   rX   rY   Ú
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   rt   TFr  r  rX   rX   rY   Úgt_impl  s    zunicode_gt.<locals>.gt_implr  )rÔ   rì   r  r  r  rX   rX   rY   Ú
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�   rX   r  rX   rX   rY   Úle_impl  s    zunicode_le.<locals>.le_implr  )rÔ   rì   r  r  r  rX   rX   rY   Ú
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�   rX   r  rX   rX   rY   Úge_impl&  s    zunicode_ge.<locals>.ge_implr  )rÔ   rì   r  r  r  rX   rX   rY   Ú
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  rX   rX   rY   Úcontains_impl.  s    z'unicode_contains.<locals>.contains_implr÷   )rÔ   rì   r  rX   rX   rY   Ú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   ÚOmittedrw   r  r†   ÚIntegerÚNoneTyper    Úformat)ÚtyÚnameÚthetyÚacceptedrX   rX   rY   Ú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ñ   rX   rX   rY   Úunicode_sub_check_typeH  s    r%  c                 C   s   | d|t d @ > O } | S ©Nrt   ©Ú_BLOOM_WIDTH©Úmaskr²   rX   rX   rY   Ú
_bloom_addQ  s    r+  c                 C   s   | d|t d @ > @ S r&  r'  r)  rX   rX   rY   Ú_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   rt   r‚   )rü   rÖ   r   rM   r+  rë   r,  )rE   ÚsubstrÚstartÚendÚmÚgapÚmlastÚlastÚzeror*  rÕ   r²   ÚjÚhaystack_chÚ	needle_chrX   rX   rY   Ú_default_find]  sD    










r8  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   rt   r‚   )rü   rÖ   r+  r,  )rE   r-  r.  r/  r0  Úskipr2  Zmfirstr*  rÕ   r²   r5  r6  r7  rX   rX   rY   Ú_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_funcrX   rY   Úimpl¿  s    zgenerate_finder.<locals>.impl)NNrX   )r>  r?  rX   r=  rY   Ú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�   )rA  rû   ©rE   r-  r.  r/  rX   rX   rY   Ú	find_implØ  s    zunicode_find.<locals>.find_implr.  r/  r-  )NN)rø   r   r  r$  r%  r  )rE   r-  r.  r/  rC  rX   rX   rY   Úunicode_findÔ  s    



rD  Ú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�   )rE  rû   rB  rX   rX   rY   Ú
rfind_implç  s    z!unicode_rfind.<locals>.rfind_implr.  r/  r-  )NN)rø   r   r  r$  r%  Ú_rfind)rE   r-  r.  r/  rF  rX   rX   rY   Úunicode_rfindã  s    



rH  Ú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)rE  rv   ©rÑ   rJ  r.  r/  ÚresultrX   rX   rY   Úrindex_implú  s    z#unicode_rindex.<locals>.rindex_impl)NN©r$  r%  )rÑ   rJ  r.  r/  rN  rX   rX   rY   Úunicode_rindexó  s
    



rP  rc   c                 C   s,   t |dƒ t |dƒ t|dƒ ddd„}|S )zImplements str.index()r.  r/  rJ  Nc                 S   s"   |   |||¡}|dk rtdƒ‚|S rK  )rA  rv   rL  rX   rX   rY   Ú
index_impl  s    z!unicode_index.<locals>.index_impl)NNrO  )rÑ   rJ  r.  r/  rQ  rX   rX   rY   Úunicode_index  s
    



rR  Ú	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ü   rv   rA  ©rE   rT  Z	empty_strÚ
sep_lengthÚposrX   rX   rY   r?  '  s    


zunicode_partition.<locals>.impl©
rø   r   r  rw   r  r†   rù   r  r  r    ©rE   rT  r"  r#  rñ   r?  rX   rX   rY   Ú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   rt   )rü   Ú_normalize_slice_idx_count)ÚsrcrJ  r.  r/  r]  Zsrc_lenZsub_lenrX   rX   rY   Ú
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†   )r`  rJ  r.  r/  ra  Ú	error_msgrX   rX   rY   Úunicode_count;  s    
rd  Ú
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  rT  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 rU  )rû   rÒ   r_   r`   rü   rv   rE  rW  rX   rX   rY   r?  p  s    


z unicode_rpartition.<locals>.implrZ  r[  rX   rX   rY   Úunicode_rpartition`  s    rf  c                 C   sL   || kr| }|dk r(|| 7 }|dk r(d}|dk rD|| 7 }|dk rDd}||fS rÍ   rX   )rF   r.  r/  rX   rX   rY   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)rg  )rÑ   Úprefixr.  r/  ÚitemrX   rX   rY   Ústartswith_tuple_impl¢  s    z1unicode_startswith.<locals>.startswith_tuple_implc                 S   s   |   t|ƒ||¡S r�   )rg  rû   )rÑ   ri  r.  r/  rX   rX   rY   Ú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Ñ   ri  r.  r/  rF   Zprefix_lengthZs_slicerX   rX   rY   Ú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Ñ   ri  r.  r/  rk  rl  ro  rX   rX   rY   Úunicode_startswith•  s,    ÿÿÿ


ÿrr  Ú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 rh  )rs  )rÑ   r-  r.  r/  rj  rX   rX   rY   Ú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 rm  rn  )rÑ   r-  r.  r/  rF   r<  r½   rX   rX   rY   rt  à  s    c                 S   s   |   t|ƒ||¡S r�   )rs  rû   )rÑ   r-  r.  r/  rX   rX   rY   rt  ö  s    )NN)NN)NN)
rø   r   r  r  r  r    ÚTuplerp  rù   r  )rÑ   r-  r.  r/  rt  rX   rX   rY   Úunicode_endswithÊ  s&    þþ


rv  Ú
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 longrt   )rü   rë   rÖ   r9   ÚsysÚmaxsizeÚOverflowErrorr:   r;   rÒ   r_   r`   rÎ   r<   )rE   ÚtabsizerF   r5  Zline_posÚfoundrÕ   Ú
code_pointÚincrr¥   r°   rX   rX   rY   Úexpandtabs_impl  sL    





z+unicode_expandtabs.<locals>.expandtabs_impl)r¹   )
rø   r   r  rw   r  r†   r  Úintr    r  )rE   r{  r"  r#  r  rX   rX   rY   Úunicode_expandtabsü  s    

ÿ
.r�  Ú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)r‚  rû   )rÔ   rT  rƒ  rX   rX   rY   Ú
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   rV  rt   r‚   )rü   rv   rÖ   rë   Úappendrî   )
rÔ   rT  rƒ  Úa_lenÚsep_lenÚpartsr3  r°   Zsep_code_pointÚsplit_countrX   rX   rY   r„  J  s4    
ÿ

rw   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   TFrt   r‚   )rü   rë   rÖ   r*   r…  )rÔ   rT  rƒ  r†  rˆ  r3  r°   r‰  Zin_whitespace_blockr}  Úis_whitespacerX   rX   rY   Úsplit_whitespace_implo  s0    
z,unicode_split.<locals>.split_whitespace_impl)Nr‚   )Nr‚   )Nr‚   )	rø   r   r  r  ÚIntegerLiteralr  rù   r  Úgetattr)rÔ   rT  rƒ  r„  r‹  rX   rX   rY   Úunicode_split=  s"    ÿÿ

"ÿ
 rŽ  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   rt   r‚   )rx  ry  rü   rÖ   r…  )rE   rT  rƒ  rM  rÕ   r}  r5  ©Úisspace_funcrX   rY   Úrsplit_whitespace_impl•  s<    






z?generate_rsplit_whitespace_impl.<locals>.rsplit_whitespace_impl)Nr‚   rX   )r‘  r’  rX   r�  rY   Úgenerate_rsplit_whitespace_impl’  s    &r“  Ú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  rw   r  r†   r    r  )r   r!  r#  r"  rX   rX   rY   Ú_unicode_rsplit_check_typeÉ  s    ÿz2unicode_rsplit.<locals>._unicode_rsplit_check_typerT  rƒ  Nr‚   c                 S   s   | j rt| ||ƒS t| ||ƒS r�   )r`   Úascii_rsplit_whitespace_implÚunicode_rsplit_whitespace_impl)rE   rT  rƒ  rX   rX   rY   r’  Þ  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 r�  )rÖ   rü   r…  )rE   r²   rƒ  rM  Zch_code_pointrÕ   r5  Zdata_code_pointrX   rX   rY   Ú_rsplit_charë  s    


z9unicode_rsplit.<locals>.rsplit_impl.<locals>._rsplit_charr   rV  rt   )r.  r/  r‚   )rû   r_   rü   rx  ry  rv   rE  r…  )rE   rT  rƒ  r˜  rX  rM  r5  rY  rX   rX   rY   Úrsplit_implå  s,    
z#unicode_rsplit.<locals>.rsplit_impl)Nr‚   )Nr‚   )r   rù   r  r  r  r€  rø   r  )rE   rT  rƒ  r•  r’  r™  rX   rX   rY   Ú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ÚfillcharrX   rX   rY   Ú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 )Nrt   ú5The fill character must be exactly one character longré   ©rü   rv   )	rŸ  r   r¡  Ústr_lenÚfillchar_lenZ	allmarginZlmarginZrmarginZl_stringrX   rX   rY   r¢  %  s    )rœ  )rœ  ©rø   r   r  r    r  r  rù   )rŸ  r   r¡  r¢  rX   rX   rY   Ú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ž  rX   rX   rY   Ú
ljust_implD  s    z<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.ljust_implc                 S   s   |   |t|ƒ¡S r�   )Úrjustrû   rž  rX   rX   rY   Ú
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 )Nrt   r¤  r¥  )rŸ  r   r¡  r¦  r§  Únewstr©ÚSTRING_FIRSTrX   rY   r?  P  s    z6gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.impl)rœ  )rœ  )rœ  r¨  )rŸ  r   r¡  r«  r­  r?  r¯  rX   rY   Úunicode_Xjust>  s    

ÿz(gen_unicode_Xjust.<locals>.unicode_Xjust)rœ  rX   )r°  r±  rX   r¯  rY   Ú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 r^  )rü   rÖ   r5   r4   r…  )
rE   ÚkeependsrF   rM  rÕ   r5  r}  ÚeolZcur_cpZnext_cp©Úis_line_break_funcrX   rY   r?  l  s,    


z&generate_splitlines_func.<locals>.implrX   )r¶  r?  rX   rµ  rY   Ú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³  rX   rX   rY   Úsplitlines_impl£  s    
z+unicode_splitlines.<locals>.splitlines_impl)F)rø   r   r  rw   r  r†   r  r€  ÚBooleanÚboolr    r  )rE   r³  r"  r#  r»  rX   rX   rY   Ú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   Ú rt   )rü   r_   r`   ræ   rè   rÒ   Ú_strncpyrë   )rT  rˆ  Z	parts_lenr‡  rF   rG   rH   ÚprM  ÚpartÚ
dst_offsetr°   rX   rX   rY   Ú	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Ä  )rT  rˆ  rX   rX   rY   Ú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 rX   ©rû   ©Ú.0rÁ  rX   rX   rY   Ú
<listcomp>Ö  s     z8unicode_join.<locals>.join_list_impl.<locals>.<listcomp>rÆ  )rT  rˆ  Ú_partsrX   rX   rY   rÇ  Õ  s    c                 S   s   dd„ |D ƒ}|   |¡S )Nc                 S   s   g | ]}|‘qS rX   rX   rÉ  rX   rX   rY   rË  Ý  s     z8unicode_join.<locals>.join_iter_impl.<locals>.<listcomp>)rÅ  ©rT  rˆ  Z
parts_listrX   rX   rY   Ú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 rX   rX   )rÊ  rÕ   ©rˆ  rX   rY   rË  ã  s     z7unicode_join.<locals>.join_str_impl.<locals>.<listcomp>)rë   rü   rÄ  rÍ  rX   rÏ  rY   Újoin_str_implâ  s    z#unicode_join.<locals>.join_str_impl)rø   r   ÚListrq  rù   r  ÚIterableType)rT  rˆ  rÇ  rÎ  rÐ  rX   rX   rY   Ú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)ú+ú-rt   ©rü   )rŸ  r   r¦  Z
first_charÚpaddingr®  rX   rX   rY   Ú
zfill_implí  s    z!unicode_zfill.<locals>.zfill_impl)rø   r   r  r    )rŸ  r   rÚ  rX   rX   rY   Ú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Õ   rX   rX   rY   Ú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 r�  rÜ  rÝ  rX   rX   rY   Ú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Þ  rX   rX   rY   Ú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    )ÚargrX   rX   rY   rb  0  s    þrb  Ú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Þ  rX   rX   rY   Úlstrip_impl=  s    z#unicode_lstrip.<locals>.lstrip_implc                 S   s   | t | |ƒd … S r�   )rß  rä  rX   rX   rY   rå  C  s    )N)N©rø   r   r  rá  )rŸ  rÞ  rå  rX   rX   rY   Ú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ä  rX   rX   rY   Úrstrip_implL  s    z#unicode_rstrip.<locals>.rstrip_implc                 S   s   | d t | |ƒ… S r�   )rà  rä  rX   rX   rY   ré  R  s    )N)Nræ  )rŸ  rÞ  ré  rX   rX   rY   Ú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ä  rX   rX   rY   Ú
strip_impl[  s    z!unicode_strip.<locals>.strip_implc                 S   s    t | |ƒ}t| |ƒ}| ||… S r�   )rß  rà  )rŸ  rÞ  ÚlbÚrbrX   rX   rY   rì  a  s    

)N)Nræ  )rŸ  rÞ  rì  rX   rX   rY   Ú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   Úis_startrX   rX   rY   Ú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   rX   )râ  Z	slice_lenÚdefaultrX   rX   rY   r_  ‹  s
    r_  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   ÚslicerX   rX   rY   rµ   ¦  s    
z!_normalize_slice.<locals>.codegenrX   )r¼   rö  rF   r¾   rµ   rX   rX   rY   Ú_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÷  Úresult_sizerX   rX   rY   rµ   ·  s
    z_slice_span.<locals>.codegen)r   rM   )r¼   rö  r¾   rµ   rX   rX   rY   Ú_slice_span±  s    
rú  c           
      C   st   |j | j krHt|j ƒ}|| }|| }|| }t| j||j||dd� n(t|ƒD ]}	t| ||	 t|||	 ƒƒ qPd S )Nrt   )Úalign)r_   rx   r   r]   rë   rÎ   rÖ   )
ÚdstrÃ  r`  Z
src_offsetrí   Ú
byte_widthZsrc_byte_offsetZdst_byte_offsetr   rÕ   rX   rX   rY   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_typerx   Úget_call_typerN   Úget_functionrÅ   r¬   rE   rÊ   rK   r†   Ú
enable_nrtr£   Úincrefr¯   r‡   )rˆ   r‰   r¾   r¯   r`  r.  rF   Zin_strZview_strZbw_typZbw_sigZbw_implrý  r½   rX   rX   rY   rµ   ×  sB    
ÿ  ÿÿ ÿ  ÿz$_get_str_slice_view.<locals>.codegen)r   rÄ   râ   rM   )r¼   Zsrc_tZstart_tZlength_trµ   r¾   rX   rX   rY   Ú_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   ÚretrX   rX   rY   Ú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  ÚcurrX   rX   rY   Úgetitem_slice  s,     ÿ
z&unicode_getitem.<locals>.getitem_slice)rø   r   rù   r  Ú	SliceType)rÑ   r°   r  r  rX   rX   rY   Ú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�   )
r^   ræ   r_   rè   r`   rÒ   rë   rü   rÎ   rÖ   )rÔ   rì   Ú
new_lengthr
  Z	new_asciirM  rÕ   r5  rX   rX   rY   Úconcat_impl7  s    z#unicode_concat.<locals>.concat_implc                 S   s   | t |ƒ S r�   rÈ  r  rX   rX   rY   r  D  s    )rø   r   rù   r  )rÔ   rì   r  rX   rX   rY   Ú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¿  rt   r   ré   )r^   r_   rÒ   r`   rü   rÀ  )Zstr_argZmult_argr  r
  rM  Zlen_aZ	copy_sizeÚrestrX   rX   rY   Ú_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  rX   rX   rY   Úwrapg  s    zunicode_repeat.<locals>.wrapc                 S   s
   t || ƒS r�   r  r  rX   rX   rY   r  k  s    )rø   r   rù   r  )rÔ   rì   r  rX   rX   rY   Ú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Ô   rX   rX   rY   r?  s  s    zunicode_not.<locals>.implr÷   ©rÔ   r?  rX   rX   rY   Ú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‚   rt   )ÚlistrÅ  r  rü   rë   r…  r‚  )	rÑ   Úold_strÚnew_strr]  ZscharsZsplit_resultÚ	min_countrÕ   rM  rX   rX   rY   r?  Œ  s&    


zunicode_replace.<locals>.impl)r‚   )rø   r   r  rw   r  r†   r€  r  r    r  rù   r  )rÑ   r  r  r]  r"  r?  rX   rX   rY   Ú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   Frt   T)rü   rÖ   r`   rë   )rE   rF   r}  rÕ   ©Ú
ascii_funcÚunicode_funcrX   rY   r?  ­  s$    


z.gen_isAlX.<locals>.unicode_isAlX.<locals>.implrX   ©rE   r?  r   rX   rY   Úunicode_isAlX«  s    z gen_isAlX.<locals>.unicode_isAlXrX   )r!  r"  r$  rX   r   rY   Ú	gen_isAlXª  s    r%  Úisalphac                 C   s   t | ƒpt| ƒS r�   )r>   r=   ©ÚxrX   rX   rY   Ú<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 ©Nrt   r   FT©rü   rÖ   rë   )rÔ   ÚlÚcasedr°   r}  ©Úis_lowerÚis_titleÚis_upperrX   rY   r?  Ü  s    
z_is_upper.<locals>.implrX   )r0  r2  r1  r?  rX   r/  rY   Ú	_is_upper×  s    r3  c                 C   s   dS r   rX   r'  rX   rX   rY   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  rX   rX   rY   r?  ú  s    zunicode_isupper.<locals>.implrX   r  rX   rX   rY   Úunicode_isupperõ  s    r8  Úisasciic                 C   s   dd„ }|S )z Implements UnicodeType.isascii()c                 S   s   | j S r�   )r`   ©rE   rX   rX   rY   r?    s    zunicode_isascii.<locals>.implrX   r#  rX   rX   rY   Ú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°   rX   rX   rY   r?    s,    

zunicode_istitle.<locals>.implrX   r#  rX   rX   rY   Ú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ð   rX   rX   rY   r?  :  s    
zunicode_islower.<locals>.implrX   r#  rX   rX   rY   Úunicode_islower1  s    	rA  Ú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é_   rt   T)rü   rÖ   r,   rë   r-   )rE   rF   Zfirst_cprÕ   r}  rX   rX   rY   r?  Q  s    

z"unicode_isidentifier.<locals>.implrX   r#  rX   rX   rY   Úunicode_isidentifierM  s    rD  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_falserX   rY   r?  g  s    
z*gen_isX.<locals>.unicode_isX.<locals>.implrX   r#  rE  rX   rY   Úunicode_isXf  s    zgen_isX.<locals>.unicode_isXrX   )rF  rG  rH  rX   rE  rY   Úgen_isXe  s    rI  Ú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   rt   é   )
rü   rÒ   r_   r`   r   rò   rô   rë   rÎ   rÖ   )	rE   rF   r¥   ÚtmpÚmaxcharsZ	newlengthÚmaxcharZnewkindrÕ   r   rX   rY   r?  “  s     
zcase_operation.<locals>.implrX   )r!  r"  r?  rX   r   rY   Úcase_operation‘  s    rS  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   rt   iÂ  iÃ  )rÖ   r/   r.   )rE   rF   r°   r�   r5  Zfinal_sigmarX   rX   rY   Ú_handle_capital_sigma®  s"    



rT  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   rt   )rT  r&   )r}  rE   rF   r°   ÚmappedrX   rX   rY   Ú_lower_ucs4Æ  s    rV  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   rO  ©rq  rt   )	rë   rÏ   Úzerosr#   rÖ   rV  r%   ÚmaxrÎ   )
rE   rF   r¥   rQ  Úkr°   rU  r}  Ún_resr0  ©ÚlowerrX   rY   Ú_do_upper_or_lowerÑ  s    

z7_gen_unicode_upper_or_lower.<locals>._do_upper_or_lowerrX   )r^  r_  rX   r]  rY   Ú_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}  ©ÚfuncrX   rY   Ú_ascii_upper_or_lowerè  s    
z8_gen_ascii_upper_or_lower.<locals>._ascii_upper_or_lowerrX   )rc  rd  rX   rb  rY   Ú_gen_ascii_upper_or_lowerç  s    re  r^  c                 C   s
   t ttƒS )zImplements .lower())rS  Ú_ascii_lowerÚ_unicode_lowerr:  rX   rX   rY   Úunicode_loweró  s    rh  Úupperc                 C   s
   t ttƒS )zImplements .upper())rS  Ú_ascii_upperÚ_unicode_upperr:  rX   rX   rY   Úunicode_upperù  s    rl  c                 C   s~   d}t jdtd�}t|ƒD ]^}| d¡ t| |ƒ}t||ƒ}|d |… D ].}	|d }
t|
|	ƒ|d< t|||	ƒ |d7 }qHq|S rW  )	rÏ   rY  r#   rë   ÚfillrÖ   r'   rZ  rÎ   )rE   rF   r¥   rQ  r[  rU  r°   r}  r\  r0  rR  rX   rX   rY   Ú_unicode_casefold 	  s    


rn  c                 C   s0   t t| ƒƒD ]}t| |ƒ}t||t|ƒƒ qd S r�   )rë   rü   rÖ   rÎ   r"   ra  rX   rX   rY   Ú_ascii_casefold	  s    
ro  Úcasefoldc                 C   s
   t ttƒS )zImplements str.casefold())rS  ro  rn  r:  rX   rX   rY   Úunicode_casefold	  s    rq  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 rW  )
rÏ   rY  r#   rÖ   r(   rZ  rÎ   rë   rm  rV  )rE   rF   r¥   rQ  r[  rR  rU  r}  r\  r0  r°   rX   rX   rY   Ú_unicode_capitalize	  s&    






rr  c                 C   sL   t | dƒ}t|dt|ƒƒ tdt| ƒƒD ]}t | |ƒ}t||t|ƒƒ q(d S r^  )rÖ   rÎ   r!   rë   rü   r"   )rE   r¥   r}  r°   rX   rX   rY   Ú_ascii_capitalize9	  s
    

rs  Ú
capitalizec                 C   s
   t ttƒS r�   )rS  rs  rr  r:  rX   rX   rY   Úunicode_capitalizeC	  s    ru  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   FrO  rX  Nrt   )rÏ   Úemptyr#   rë   rm  rÖ   rV  r(   rZ  rÎ   r.   )rE   rF   r¥   rQ  r[  Zprevious_casedrU  r°   r}  r\  r0  rR  rX   rX   rY   Ú_unicode_titleI	  s     


rw  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}  rX   rX   rY   Ú_ascii_title`	  s    
rx  Útitlec                 C   s
   t ttƒS )zImplements str.title())rS  rx  rw  r:  rX   rX   rY   Úunicode_titlet	  s    rz  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Î   ra  rX   rX   rY   Ú_ascii_swapcase|	  s    

r{  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 rW  )rÏ   rv  r#   rë   rm  rÖ   r0   rV  r1   r%   rZ  rÎ   )rE   rF   r¥   rQ  r[  rR  rU  r°   r}  r\  r0  rX   rX   rY   Ú_unicode_swapcaseˆ	  s$    


r|  Úswapcasec                 C   s
   t ttƒS r�   )rS  r{  r|  r:  rX   rX   rY   Úunicode_swapcaseŸ	  s    r~  c                 C   s   t | tjƒrdd„ }|S d S )Nc                 S   s"   t | ƒ}|dkrtdƒ‚t| dƒS )Nrt   zord() expected a characterr   )rü   Ú	TypeErrorrÖ   )r�   ZlcrX   rX   rY   r?  ¨	  s    zol_ord.<locals>.implr÷   )r�   r?  rX   rX   rY   Ú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  rX   rX   rY   Ú_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�  rv   Ú_out_of_range_msgr‚  r#   )ÚordinalrX   rX   rY   Ú_PyUnicode_FromOrdinalÄ	  s    r…  c                 C   s   t | tjƒrdd„ }|S d S )Nc                 S   s   t | ƒS r�   )r…  )rÕ   rX   rX   rY   r?  Ð	  s    zol_chr.<locals>.impl)rø   r   r  )rÕ   r?  rX   rX   rY   Úol_chrÍ	  s    r†  Ú__str__c                 C   s   dd„ S )Nc                 S   s   | S r�   rX   rõ   rX   rX   rY   r)  ×	  r4  zunicode_str.<locals>.<lambda>rX   rõ   rX   rX   rY   Úunicode_strÕ	  s    rˆ  Ú__repr__c                 C   s   dd„ S )Nc                 S   s   d|  d S )Nú'rX   rõ   rX   rX   rY   r)  Þ	  r4  zunicode_repr.<locals>.<lambda>rX   rõ   rX   rX   rY   Úunicode_reprÚ	  s    r‹  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Õ  rt   r×  )
r€  rÏ   ÚfloorÚlog10r   rx   rÌ   rÎ   ÚordÚdivmod)	rí   ÚflagrF   rG   rÐ   rÑ   r°   Údigitr�   ©ÚtenrX   rY   r?  æ	  s&    
zinteger_str.<locals>.implrX   )rí   r?  rX   r“  rY   Úinteger_strá	  s    r•  c                 C   s   dd„ S )Nc                 S   s   |   ¡ S r�   )r‡  ©rí   rX   rX   rY   r)  ÿ	  r4  zinteger_repr.<locals>.<lambda>rX   r–  rX   rX   rY   Úinteger_reprý	  s    r—  c                 C   s   dd„ S )Nc                 S   s   | rdS dS )NÚTrueÚFalserX   ©rì   rX   rX   rY   r)  
  r4  zboolean_str.<locals>.<lambda>rX   rš  rX   rX   rY   Úboolean_str
  s    r›  Úgetiterc           
      C   sp   |j \}|\}|  ||j¡}|  tjd¡}t ||¡}||_||_	| j
rX| j |||¡ | ¡ }	t| ||j|	ƒS rÍ   )r¯   rô  Úreturn_typerÈ   r   re   r   Úalloca_once_valuerc   rE   r  r£   r  r‡   r   )
rˆ   r‰   r¾   r¯   r   rE   Úiterobjr4  Zindexptrr¥   rX   rX   rY   Úgetiter_unicode
  s    r   Ú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Ä   re   r  rü   rô  rE   r«   rc   Úicmp_unsignedÚ	set_validÚif_thenÚyield_r   Úincrement_indexrØ   )rˆ   r‰   r¾   r¯   rM  ÚitertyÚiterÚtyctxÚfntyZgetitem_sigÚgetitem_implZlen_sigrö   rŸ  Zstrlenrc   Úis_validZgotitemZnindexrX   rX   rY   Úiternext_unicode%
  s*    ÿ


r°  )r   )NN)NN)NN)NN)NN)NN)NN)r¹   )Nr‚   )Nr‚   )rœ  )F)N)N)N)T)r‚   )T)òrx  r£  ÚnumpyrÏ   Úllvmlite.irr   r   Únumba.core.cgutilsr   Únumba.core.extendingr   r   r   r   r	   r
   r   r   r   r   Únumba.core.imputilsr   r   r   r   r   r   Únumba.core.datamodelr   r   Ú
numba.corer   r   Únumba.core.pythonapir   r   r   r   Znumba._helperlibr   Znumba.cpython.hashingr   Znumba.core.unsafe.bytesr   Ú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   Únumba.cpythonrB   r�  rM   Úbitwidthr(  rù   rD   ÚUnicodeIteratorTyperb   r�   rŽ   r  rÄ   r”   r–   rŸ   r¦   r·   r¿   rÂ   rÃ   rÌ   rÒ   rÖ   rÚ   rß   rà   rá   rÎ   ræ   rè   rx   rî   rò   rô   rü   rú   Úeqr	  Úner  Últr  Úgtr  Úler  Úger  Úcontainsr  r$  r%  r+  r,  r8  r:  r@  r  rG  rD  rH  rP  rR  r\  rd  rf  r;  rr  rv  r�  rŽ  r“  r—  r–  rš  r©  r²  r·  r¹  rº  r¾  rÄ  rÓ  rÛ  rß  rà  rá  rb  rç  rê  rï  rò  r_  rø  rú  rÀ  r  r¤  r  rÆ   Úiaddr  r  rÅ   r  Únot_r  r  r%  Z_unicode_is_alnumr3  Z_always_falser6  r7  r8  r;  r?  rA  rD  rI  rS  rT  rV  r`  rk  rg  re  rj  rf  rh  rl  rn  ro  rq  rr  rs  ru  rw  rx  rz  r{  r|  r~  r�  r€  r‚  rƒ  r…  Úchrr†  rˆ  r‹  r  r•  r—  r¼  r›  r   ÚNEWr°  rX   rX   rX   rY   Ú<module>   s@  0 Œ	




















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