a
    DfP_                    @   s  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" d d	l#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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP d dlQmRZR e"dv rd dl#mSZS dZTejUjVZWeejXG dd de
jZYeejXdd eejXdd eejXdd eejXdd eejXdd eejZG dd  d eZ[d!d" Z\d#d$ Z]eej^ej_d%d& Z`eej_d'd( ZaeejXd)d* ZbeejXd+d, Zcd-d. Zded/d0 Zeed1d2 Zfed3d4 Zged5d6 ZhedDd7d8Zied9d:d;d< Zjd=d> Zked?d@ ZledAdB ZmedCdD Zned9d:dEdF Zoe"dGv r6edHdI Zpn e"dv rNedJdI Zpneqe"edKdL Zre"dGv rzedMdN Zsn e"dv redOdN Zsneqe"ed9d:dPdQ ZtedRdS ZuedTdU ZveewdVdW ZxeejydXdY Zzeej{dZd[ Z|eej}d\d] Z~eejd^d_ Zeejd`da Zeejdbdc Zeejddde Zdfdg Zdhdi Zedjdk Zedldm Zedndo Zedpdq Zdrds ZeeeZeeeZeejXdtdEdudvZeejXdwdFdxdyZeejXdzdGd{d|ZeejXd}dHd~dZeejXddd ZeejXddIddZeejXddd Zedd ZeejXddJddZeejXddKddZeejXddLddZeejXddMddZdd Zeee9Zeee:ZeejXddNddZeejXddOddZdd ZeejXded9 eejXded dd ZeeeBZeeeAZeejXddPddZedd ZeejXddd ZeejXddd Zedd Zedd Zdd Zdd ZeejXddQddZeejXddRddZeejXddSddĄZedTddƄZeddȄ Zeddʄ Zedd̄ Zed9d:dd΄ ZeddЄ Zeejdd҄ ZeejeejddԄ Zeddք Zeejdd؄ Zeejddڄ ZeejXdۃdUdd݄Zdd߄ ZeejXdeeNeL edd ZeejXdee3e dd Zedd ZeeeFeGeăZeee@e?eEZeejXddd ZeejXddd ZeejXddd ZeejXddd ZeejXddd ZːdVddZeejXdee9 eejXdeeM eejXdeeO eejXdeeP eejXdee8d9 dd Zedd  Zedd Zϐdd Zeed9ZeedZҐdd Zeee0Zeee1ZeejXddd	 ZeejXd
dd Zedd Zedd ZeejXddd Zedd Zedd ZeejXddd Zedd Zedd ZeejXdd d! Zed"d# Zed$d% ZeejXd&d'd( Zeed)d* Zed+d, Zd-eT Zed.d/ Zeed0d1 ZeejXd2d3d4 ZeejXd5d6d7 Zeejd2d8d9 Zeejd5d:d; Zeejd5eejd2d<d= Zed>ejXd?d@ ZedAejZeejdBdC ZdS (W      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)	PYVERSION)PY_UNICODE_1BYTE_KINDPY_UNICODE_2BYTE_KINDPY_UNICODE_4BYTE_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))   	   )rC   
   )rC      )PY_UNICODE_WCHAR_KIND 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 rY   b/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/numba/cpython/unicode.pyrU   Q   s    
zUnicodeModel.__init__N)__name__
__module____qualname__rU   rY   rY   rY   rZ   rI   O   s   rI   rJ   _datarK   _lengthrL   _kindrM   	_is_asciirN   _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indexrJ   )r   ZEphemeralPointeruintprJ   superrc   rU   rV   	__class__rY   rZ   rU   h   s    zUnicodeIteratorModel.__init__)r[   r\   r]   rU   __classcell__rY   rY   rg   rZ   rc   f   s   rc   c                 C   s   ddl m}m}m}m}m}m}m}m}m	}	 t
d }
|||||||||||}||
}| }| }| }| }|| |	||	||	||	|}|du rt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   )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fnrK   rL   rM   hashvrJ   nbytesoutrY   rY   rZ   compile_time_get_string_datap   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   moduleZinsert_const_bytesr   create_struct_proxyrJ   rK   typerL   rM   rN   	_getvalue)contextbuildertypZliteral_stringZ	databytesrK   rL   rM   r}   modgvuni_strrY   rY   rZ   make_string_from_constant   s    r   c                 C   s   t | |||jS N)r   Zliteral_value)r   r   ZfromtyZtotyvalrY   rY   rZ   cast_from_literal   s    
r   c                 C   s   t | |||S r   )r   )r   r   r   ZpyvalrY   rY   rZ   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   rJ   rK   rL   rM   rN   Znrt_meminfo_new_from_pyobjectrO   rP   Zis_not_nullZerr_occurredr
   r   )r   rz   cokrJ   rK   rL   rM   r}   r   r   rY   rY   rZ   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
    rv   )r   r   r   r   r   Zstring_from_kind_and_datarL   rJ   rK   Zobject_hashnrtZdecref)r   r   r   r   resrY   rY   rZ   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argsrJ   idxptrchbitsizerY   rZ   codegen   s    z#make_deref_codegen.<locals>.codegenrY   r   r   rY   r   rZ   make_deref_codegen   s    r   c                 C   s   t t jt j}|tdfS N   r   rT   rQ   rR   r   	typingctxrJ   offsetsigrY   rY   rZ   deref_uint8   s    r   c                 C   s   t t jt j}|tdfS N   r   r   rY   rY   rZ   deref_uint16   s    r   c                 C   s   t t jt j}|tdfS r   r   r   rY   rY   rZ   deref_uint32   s    r   c                 C   s(   dd }t t jt jt jt j}||fS )zmake 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 )Nrs   r   )r   r   r   unicode_typemuladdr   r   r   Zmeminfo_allocrO   rL   rM   rK   get_constantr   rN   Zmeminfo_datarJ   get_null_valuerP   r   )r   r   r   r   Zkind_valZchar_bytes_valZ
length_valZis_ascii_valZuni_str_ctorr   Z
nbytes_valrY   rY   rZ   details   s     

z_malloc_string.<locals>.details)r   r   rS   rR   rT   )r   rL   Z
char_bytesrK   rM   r   r   rY   rY   rZ   _malloc_string   s    r   c                 C   s,   t | }t| |||}t||td |S Nr   )rw   r   _set_code_pointnprT   )rL   rK   rM   
char_widthsrY   rY   rZ   _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   r^   r   r   r   r   )airY   rY   rZ   _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   rJ   r   r   r   r   rY   rZ   r   0  s    
z!make_set_codegen.<locals>.codegenrY   r   rY   r   rZ   make_set_codegen/  s    r   c                 C   s    t t jt jt j}|tdfS r   r   voidrQ   int64rT   r   r   rJ   r   r   r   rY   rY   rZ   	set_uint8;  s    r   c                 C   s    t t jt jt j}|tdfS r   r   r   rY   rY   rZ   
set_uint16A  s    r   c                 C   s    t t jt jt j}|tdfS r   r   r   rY   rY   rZ   
set_uint32G  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   rY   rY   rZ   r   M  s    


r   ))rC      c                 C   s>   | t kr|S | tkr&|tkr |S | S n| tkr2| S tdd S )N/Unexpected unicode representation in _pick_kindr   r   r   r   Zkind1Zkind2rY   rY   rZ   
_pick_kinda  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 unsupportedr   )rG   r   r   r   r   r   rY   rY   rZ   r   p  s    c                 C   s$   | dkr|dkrt dS t dS Nrs   r   )r   rT   )Z	is_ascii1Z	is_ascii2rY   rY   rZ   _pick_ascii  s    
r   c                 C   s0   | t krdS | tkrdS | tkr$dS tdd S )Nrs         'Unexpected unicode encoding encounteredr   rL   rY   rY   rZ   rw     s    rw   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 )Nrs   r   r   r   r   )r   r   r   rG   r   r   rY   rY   rZ   rw     s    
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   rs   )r_   ranger   )r   Za_offsetbZb_offsetnr   Za_chrZb_chrrY   rY   rZ   _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   rH   z;Invalid codepoint. Found value greater than Unicode maximumN)r   r   ru   r   )cpZMAX_UNICODEmsgrY   rY   rZ   _codepoint_to_kind  s    r   c                 C   s   | dk S )z;
    Returns true if a codepoint is in the ASCII range
       rY   )r   rY   rY   rZ   _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   rY   rY   rZ   len_impl  s    zunicode_len.<locals>.len_impl
isinstancer   UnicodeType)r   r   rY   rY   rZ   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 rdd }|S d S )Nc                 S   sd   | d u }|d u }|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_nonerY   rY   rZ   eq_impl  s    zunicode_eq.<locals>.eq_implc                 S   s   dS NFrY   r   r   rY   rY   rZ   r     s    )is_internalr   r   Optionalr   r   StringLiteralUnicodeCharSeq)r   r   Zcheck_aZcheck_baccept	a_unicode	b_unicoder   rY   rY   rZ   
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   rY   r   rY   rY   rZ   ne_impl  s    zunicode_ne.<locals>.ne_implc                 S   s   dS )NTrY   r   rY   rY   rZ   r     s    zunicode_ne.<locals>.eq_impl)r   r   r   r   r   r   )r   r   r   r   r   r   r   rY   rY   rZ   
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eqcoderY   rY   rZ   lt_impl  s    zunicode_lt.<locals>.lt_implr   r   r   r   )r   r   r   r   r   rY   rY   rZ   
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   rs   TFr   r   rY   rY   rZ   gt_impl/  s    zunicode_gt.<locals>.gt_implr   )r   r   r   r   r  rY   rY   rZ   
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   rY   r   rY   rY   rZ   le_impl?  s    zunicode_le.<locals>.le_implr   )r   r   r   r   r  rY   rY   rZ   
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   rY   r   rY   rY   rZ   ge_implI  s    zunicode_ge.<locals>.ge_implr   )r   r   r   r   r  rY   rY   rZ   
unicode_geD  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   rY   rY   rZ   contains_implQ  s    z'unicode_contains.<locals>.contains_implr   )r   r   r	  rY   rY   rZ   unicode_containsN  s    r
  c                 C   s^   | }t | tjr| j}nt | tjr*| j}tjtjf}|durZt ||sZtd	||| dS )zCheck 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   Omittedrv   r   r   IntegerNoneTyper    format)tynamethetyacceptedrY   rY   rZ   unicode_idx_check_typeW  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   rY   rY   rZ   unicode_sub_check_typek  s    r  c                 C   s   | d|t d @ > O } | S Nrs   _BLOOM_WIDTHmaskr   rY   rY   rZ   
_bloom_addt  s    r  c                 C   s   | d|t d @ > @ S r  r  r  rY   rY   rZ   _bloom_checkz  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 rt| |
| }t||}||krq|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   rs   r   )r   r   r   rR   r  r   r  )rJ   substrstartendmZgapmlastlastzeror  r   r   jhaystack_ch	needle_chrY   rY   rZ   _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rt| |	| }t||}||krq|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   rs   r   )r   r   r  r  )rJ   r  r  r  r   skipr!  Zmfirstr  r   r   r$  r%  r&  rY   rY   rZ   _default_rfind  sF    












r)  c                    s   d fdd	}|S )z%Generate finder either left or right.Nc                    sV   t | }t |}|d u rd}|d u r(|}t|||\}}|| |k rHdS  | |||S )Nr   r   )r   _adjust_indices)rJ   r  r  r  rK   
sub_length	find_funcrY   rZ   impl  s    zgenerate_finder.<locals>.impl)NNrY   )r-  r.  rY   r,  rZ   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   )r0  r   rJ   r  r  r  rY   rY   rZ   	find_impl  s    zunicode_find.<locals>.find_implr  r  r  )NN)r   r   r   r  r  r  )rJ   r  r  r  r2  rY   rY   rZ   unicode_find  s    



r3  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   )r4  r   r1  rY   rY   rZ   
rfind_impl
  s    z!unicode_rfind.<locals>.rfind_implr  r  r  )NN)r   r   r   r  r  _rfind)rJ   r  r  r  r5  rY   rY   rZ   unicode_rfind  s    



r7  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)r4  ru   r   r9  r  r  resultrY   rY   rZ   rindex_impl  s    z#unicode_rindex.<locals>.rindex_impl)NNr  r  )r   r9  r  r  r=  rY   rY   rZ   unicode_rindex  s
    



r?  rd   c                 C   s,   t |d t |d t|d ddd}|S )zImplements str.index()r  r  r9  Nc                 S   s"   |  |||}|dk rtd|S r:  )r0  ru   r;  rY   rY   rZ   
index_impl/  s    z!unicode_index.<locals>.index_impl)NNr>  )r   r9  r  r  r@  rY   rY   rZ   unicode_index(  s
    



rA  	partitionc                 C   sj   |}t |tjr|j}nt |tjr*|j}tjtjf}|du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`   ra   r   ru   r0  rJ   rC  Z	empty_str
sep_lengthposrY   rY   rZ   r.  J  s    


zunicode_partition.<locals>.impl
r   r   r  rv   r   r   r   r   r  r    rJ   rC  r  r  r   r.  rY   rY   rZ   unicode_partition:  s    rK  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   rs   )r   _normalize_slice_idx_count)srcr9  r  r  rL  Zsrc_lenZsub_lenrY   rY   rZ   
count_imple  s$    


z!unicode_count.<locals>.count_implz+The substring must be a UnicodeType, not {})NN)_count_args_types_checkr   r   r   r    r  r   )rO  r9  r  r  rP  	error_msgrY   rY   rZ   unicode_count^  s    
rS  
rpartitionc                 C   sj   |}t |tjr|j}nt |tjr*|j}tjtjf}|dur^t ||s^dd||}t	|dd }|S )zImplements str.rpartition()Nr  rC  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 rD  )r   r   r`   ra   r   ru   r4  rF  rY   rY   rZ   r.    s    


z unicode_rpartition.<locals>.implrI  rJ  rY   rY   rZ   unicode_rpartition  s    rU  c                 C   sL   || kr| }|dk r(|| 7 }|dk r(d}|dk rD|| 7 }|dk rDd}||fS r   rY   )rK   r  r  rY   rY   rZ   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rd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)rV  )r   prefixr  r  itemrY   rY   rZ   startswith_tuple_impl  s    z1unicode_startswith.<locals>.startswith_tuple_implc                 S   s   |  t|||S r   )rV  r   )r   rX  r  r  rY   rY   rZ   startswith_char_seq_impl  s    z4unicode_startswith.<locals>.startswith_char_seq_implc                 S   sv   t | t | }}|d u rd}|d u r*|}t|||\}}|| |k rJdS |dkrVdS | || }t|d|d|dkS Nr   FTr   r*  r   )r   rX  r  r  rK   Zprefix_lengthZs_slicerY   rY   rZ   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   rX  r  r  rZ  r[  r^  rY   rY   rZ   unicode_startswith  s,    


ra  endswithc                 C   s   |d u s&t |tjtjtjfs&td|d u sLt |tjtjtjfsLtdt |tjtjfrlddd}|S t |tjrddd}|S t |tj	rddd}|S d S )	Nz!The arg must be a Integer or Nonec                 S   s&   |D ]}|  |||du r dS qdS rW  )rb  )r   r  r  r  rY  rY   rY   rZ   endswith_impl  s    z'unicode_endswith.<locals>.endswith_implc                 S   s   t | }t |}|d u rd}|d u r(|}t|||\}}|| |k rHdS |dkrTdS | || } t | | }t| ||d|dkS r\  r]  )r   r  r  r  rK   r+  r   rY   rY   rZ   rc    s    c                 S   s   |  t|||S r   )rb  r   )r   r  r  r  rY   rY   rZ   rc    s    )NN)NN)NN)
r   r   r  r  r  r    Tupler_  r   r   )r   r  r  r  rc  rY   rY   rZ   unicode_endswith  s&    


re  
expandtabsr   c                 C   sd   |}t |tjr|j}nt |tjr*|j}tjtf}|du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rtd|d7 }|d7 }|ttfv 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v rd}q|	S )Nr   FTznew string is too longrs   )r   r   r   r9   sysmaxsizeOverflowErrorr:   r;   r   r`   ra   r   r<   )rJ   tabsizerK   r$  Zline_posfoundr   
code_pointincrr   r   rY   rY   rZ   expandtabs_impl/  sL    





z+unicode_expandtabs.<locals>.expandtabs_impl)r   )
r   r   r  rv   r   r   r  intr    r  )rJ   rj  r  r  rn  rY   rY   rZ   unicode_expandtabs  s    


.rp  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 u szt |tjszt|ddd u rddd}|S d S )Nr   c                 S   s   | j t||dS )N)maxsplit)rq  r   )r   rC  rr  rY   rY   rZ   
split_implh  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 rt| ||d|dkr|| ||  ||7 }|}|	d7 }	q|d7 }q||kr|| |d   |S )Nr   rE  rs   r   )r   ru   r   r   appendr   )
r   rC  rr  a_lensep_lenpartsr"  r   Zsep_code_pointsplit_countrY   rY   rZ   rs  m  s4    


rv   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$ qq$||kr|s|| |d   |S )Nr   TFrs   r   )r   r   r   r*   rt  )r   rC  rr  ru  rw  r"  r   rx  Zin_whitespace_blockrl  Zis_whitespacerY   rY   rZ   split_whitespace_impl  s0    
z,unicode_split.<locals>.split_whitespace_impl)Nr   )Nr   )Nr   )	r   r   r  r  ZIntegerLiteralr   r   r  getattr)r   rC  rr  rs  ry  rY   rY   rZ   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rt| |} |r~q|d8 }qb|| |d |d   |d8 }q|dkr|dkrt| |} |sq|d8 }q|dkr|| d|d   |d d d S Nr   rs   r   )rg  rh  r   r   rt  )rJ   rC  rr  r<  r   rl  r$  isspace_funcrY   rZ   rsplit_whitespace_impl  s<    






z?generate_rsplit_whitespace_impl.<locals>.rsplit_whitespace_impl)Nr   rY   )r~  r  rY   r}  rZ   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u 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urNt ||sNtd||| dS )z.Check object belongs to one of specified typesNr  )r   r   r  rv   r   r   r    r  )r  r  r  r  rY   rY   rZ   _unicode_rsplit_check_type  s    z2unicode_rsplit.<locals>._unicode_rsplit_check_typerC  rr  Nr   c                 S   s   | j rt| ||S t| ||S r   )ra   ascii_rsplit_whitespace_implunicode_rsplit_whitespace_impl)rJ   rC  rr  rY   rY   rZ   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 rq|| || |  |}|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   rt  )rJ   r   rr  r<  Zch_code_pointr   r$  Zdata_code_pointrY   rY   rZ   _rsplit_char  s    


z9unicode_rsplit.<locals>.rsplit_impl.<locals>._rsplit_charr   rE  rs   )r  r  r   )r   r`   r   rg  rh  ru   r4  rt  )rJ   rC  rr  r  rG  r<  r$  rH  rY   rY   rZ   rsplit_impl  s,    
z#unicode_rsplit.<locals>.rsplit_impl)Nr   )Nr   )r   r   r   r  r  ro  r   r  )rJ   rC  rr  r  r  r  rY   rY   rZ   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fillcharrY   rY   rZ   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 )Nrs   5The fill character must be exactly one character longr   r   ru   )	r  r  r  str_lenfillchar_lenZ	allmarginZlmarginZrmarginZl_stringrY   rY   rZ   r  H  s    )r  )r  r   r   r  r    r   r  r   )r  r  r  r  rY   rY   rZ   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  rY   rY   rZ   
ljust_implg  s    z<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.ljust_implc                 S   s   |  |t|S r   )rjustr   r  rY   rY   rZ   
rjust_implk  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 )Nrs   r  r  )r  r  r  r  r  newstrSTRING_FIRSTrY   rZ   r.  s  s    z6gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.impl)r  )r  )r  r  )r  r  r  r  r  r.  r  rY   rZ   unicode_Xjusta  s    

z(gen_unicode_Xjust.<locals>.unicode_Xjust)r  rY   )r  r  rY   r  rZ   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 rt| |}t| |d }	t|rt|	r|d7 }|d7 }|r|}|| ||  |}q|S rM  )r   r   r5   r4   rt  )
rJ   keependsrK   r<  r   r$  rl  eolZcur_cpZnext_cpis_line_break_funcrY   rZ   r.    s,    


z&generate_splitlines_func.<locals>.implrY   )r  r.  rY   r  rZ   generate_splitlines_func  s    r  
splitlinesc                 C   sl   |}t |tjr|j}nt |tjr*|j}tjttjt	f}|du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   )ra   _ascii_splitlines_unicode_splitlines)rJ   r  rY   rY   rZ   splitlines_impl  s    
z+unicode_splitlines.<locals>.splitlines_impl)F)r   r   r  rv   r   r   r  ro  Booleanboolr    r  )rJ   r  r  r  r  rY   rY   rZ   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    rs   )r   r`   ra   r   r   r   _strncpyr   )rC  rw  Z	parts_lenrv  rK   rL   rM   pr<  part
dst_offsetr   rY   rY   rZ   	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  )rC  rw  rY   rY   rZ   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 rY   r   .0r  rY   rY   rZ   
<listcomp>      z8unicode_join.<locals>.join_list_impl.<locals>.<listcomp>r  )rC  rw  _partsrY   rY   rZ   r    s    c                 S   s   dd |D }|  |S )Nc                 S   s   g | ]}|qS rY   rY   r  rY   rY   rZ   r     r  z8unicode_join.<locals>.join_iter_impl.<locals>.<listcomp>)r  rC  rw  Z
parts_listrY   rY   rZ   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 rY   rY   )r  r   rw  rY   rZ   r    r  z7unicode_join.<locals>.join_str_impl.<locals>.<listcomp>)r   r   r  r  rY   r  rZ   join_str_impl  s    z#unicode_join.<locals>.join_str_impl)r   r   Listr`  r   r   ZIterableType)rC  rw  r  r  r  rY   rY   rZ   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v rN|| | dd   }n||  }|S )Nr   r  0)+-rs   r   )r  r  r  
first_charpaddingr  rY   rY   rZ   
zfill_impl  s    z!unicode_zfill.<locals>.zfill_impl)r   r   r  r    )r  r  r  rY   rY   rZ   unicode_zfill  s    r  c                 C   s^   t | }d}|d ur8t|D ]}| | |vr|  S qn"t|D ]}t| | s@|  S q@|S r   r   r   r*   r  charsr  r   rY   rY   rZ   unicode_strip_left_bound'  s    
r  c                 C   sv   t | }d}|d urDt|d ddD ]}| | |vr$|d7 } qrq$n.t|d ddD ]}t| | sT|d7 } qrqT|S r|  r  r  rY   rY   rZ   unicode_strip_right_bound8  s    r  c                 C   s<   t | tjr| j} | d u 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  rY   rY   rZ   unicode_strip_types_checkJ  s    r  c                 C   s<   t | tjr| j} | d u 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    )argrY   rY   rZ   rQ  S  s    rQ  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  rY   rY   rZ   lstrip_impl`  s    z#unicode_lstrip.<locals>.lstrip_implc                 S   s   | t | |d  S r   )r  r  rY   rY   rZ   r  f  s    )N)Nr   r   r   r  )r  r  r  rY   rY   rZ   unicode_lstrip\  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  rY   rY   rZ   rstrip_implo  s    z#unicode_rstrip.<locals>.rstrip_implc                 S   s   | d t | | S r   )r  r  rY   rY   rZ   r  u  s    )N)Nr  )r  r  r  rY   rY   rZ   unicode_rstripk  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  rY   rY   rZ   
strip_impl~  s    z!unicode_strip.<locals>.strip_implc                 S   s    t | |}t| |}| || S r   )r  r  )r  r  ZlbrbrY   rY   rZ   r    s    

)N)Nr  )r  r  r  rY   rY   rZ   unicode_stripz  s    

r  c                 C   sB   | du 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   rK   Zis_startrY   rY   rZ   normalize_str_idx  s    r  c                 C   s>   | du 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   rY   )r  Z	slice_lendefaultrY   rY   rZ   rN    s
    rN  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sliceobjrK   slicerY   rY   rZ   r     s    
z!_normalize_slice.<locals>.codegenrY   )r   r  rK   r   r   rY   rY   rZ   _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_sizerY   rY   rZ   r     s
    z_slice_span.<locals>.codegen)r   rR   )r   r  r   r   rY   rY   rZ   _slice_span  s    
r  c           
      C   st   |j | j krHt|j }|| }|| }|| }t| j||j||dd n(t|D ]}	t| ||	 t|||	  qPd S )Nrs   )Zalign)r`   rw   r   r^   r   r   r   )
dstr  rO  Z
src_offsetr   
byte_widthZsrc_byte_offsetZdst_byte_offsetr~   r   rY   rY   rZ   r    s    

r  c                 C   s2   |t jksJ 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   rO   rL   rM   rK   r   r   rN   typing_contextresolve_value_typerw   get_call_typerS   get_functionr   r   rJ   r   rP   r   
enable_nrtr   increfr   r   )r   r   r   r   rO  r  rK   in_strZview_strZbw_typZbw_sigZbw_implr  r   rY   rY   rZ   r     s8    
z$_get_str_slice_view.<locals>.codegen)r   r   rR   )r   Zsrc_tZstart_tZlength_tr   r   rY   rY   rZ   _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   rL   rM   retrY   rY   rZ   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rt| |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   rL   rM   r   new_kindr  currY   rY   rZ   getitem_slice*  s*    
z&unicode_getitem.<locals>.getitem_slice)r   r   r   r  Z	SliceType)r   r   r  r  rY   rY   rZ   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   ra   r   r   r   r   r   )r   r   
new_lengthr  Z	new_asciir<  r   r$  rY   rY   rZ   concat_implZ  s    z#unicode_concat.<locals>.concat_implc                 S   s   | t | S r   r  r   rY   rY   rZ   r  g  s    )r   r   r   r   )r   r   r  rY   rY   rZ   unicode_concatV  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rt|||d| |d9 }qZd| |ks|| }t||||| | |S d S )Nr  rs   r   r   )r_   r`   r   ra   r   r  )Zstr_argZmult_argr  r  r<  Zlen_aZ	copy_sizerestrY   rY   rZ   _repeat_impll  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   rY   rY   rZ   wrap  s    zunicode_repeat.<locals>.wrapc                 S   s
   t || S r   r  r   rY   rY   rZ   r    s    )r   r   r   r  )r   r   r  rY   rY   rZ   unicode_repeat  s    r   c                 C   s   t | tjrdd }|S d S )Nc                 S   s   t | dkS r   r  r   rY   rY   rZ   r.    s    zunicode_not.<locals>.implr   r   r.  rY   rY   rZ   unicode_not  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
st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rt | }|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   rs   )listr  r   r   r   rt  rq  )	r   old_strnew_strrL  ZscharsZsplit_resultZ	min_countr   r<  rY   rY   rZ   r.    s&    


zunicode_replace.<locals>.impl)r   )r   r   r  rv   r   r   ro  r  r    r  r   r  )r   r  r  rL  r  r.  rY   rY   rZ   unicode_replace  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   Frs   T)r   r   ra   r   )rJ   rK   rl  r   
ascii_funcunicode_funcrY   rZ   r.    s$    


z.gen_isAlX.<locals>.unicode_isAlX.<locals>.implrY   rJ   r.  r	  rY   rZ   unicode_isAlX  s    z gen_isAlX.<locals>.unicode_isAlXrY   )r
  r  r  rY   r	  rZ   	gen_isAlX  s    r  isalphac                 C   s   t | pt| S r   )r>   r=   xrY   rY   rZ   <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 Nrs   r   FTr   r   r   )r   lcasedr   rl  is_loweris_titleis_upperrY   rZ   r.    s    
z_is_upper.<locals>.implrY   )r  r  r  r.  rY   r  rZ   	_is_upper  s    r  c                 C   s   dS r   rY   r  rY   rY   rZ   r    r  isupperc                 C   s   dd }|S )z
    Implements .isupper()
    c                 S   s   | j rt| S t| S d S r   )ra   _ascii_is_upper_unicode_is_upperr  rY   rY   rZ   r.    s    zunicode_isupper.<locals>.implrY   r  rY   rY   rZ   unicode_isupper  s    r   isasciic                 C   s   dd }|S )z Implements UnicodeType.isascii()c                 S   s   | j S r   )ra   rJ   rY   rY   rZ   r.  )  s    zunicode_isascii.<locals>.implrY   r  rY   rY   rZ   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   )rJ   rK   charr  previous_is_casedr   rY   rY   rZ   r.  6  s,    

zunicode_istitle.<locals>.implrY   r  rY   rY   rZ   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   )rJ   rK   r  r   r   rY   rY   rZ   r.  ]  s    
zunicode_islower.<locals>.implrY   r  rY   rY   rZ   unicode_islowerT  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_   rs   T)r   r   r,   r   r-   )rJ   rK   Zfirst_cpr   rl  rY   rY   rZ   r.  t  s    

z"unicode_isidentifier.<locals>.implrY   r  rY   rY   rZ   unicode_isidentifierp  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  )rJ   rK   r   rl  _PyUnicode_IS_funcempty_is_falserY   rZ   r.    s    
z*gen_isX.<locals>.unicode_isX.<locals>.implrY   r  r-  rY   rZ   unicode_isX  s    zgen_isX.<locals>.unicode_isXrY   )r.  r/  r0  rY   r-  rZ   gen_isX  s    r1  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   rs   rC   )
r   r   r`   ra   r   r   r   r   r   r   )	rJ   rK   r   tmpmaxcharsZ	newlengthmaxcharZnewkindr   r	  rY   rZ   r.    s     
zcase_operation.<locals>.implrY   )r
  r  r.  rY   r	  rZ   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pt| }|rdS dS )zEThis is a translation of the function that handles the capital sigma.r   rs   i  i  )r   r/   r.   )rJ   rK   r   r   r$  Zfinal_sigmarY   rY   rZ   _handle_capital_sigma  s"    



r;  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   rs   )r;  r&   )rl  rJ   rK   r   mappedrY   rY   rZ   _lower_ucs4  s    r=  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   rC   r`  rs   )	r   r   zerosr#   r   r=  r%   maxr   )
rJ   rK   r   r8  kr   r<  rl  n_resr   lowerrY   rZ   _do_upper_or_lower  s    

z7_gen_unicode_upper_or_lower.<locals>._do_upper_or_lowerrY   )rE  rF  rY   rD  rZ   _gen_unicode_upper_or_lower  s    rG  c                    s    fdd}|S )Nc                    s0   t t| D ]}t| |}t|| | qd S r   )r   r   r   r   rJ   r   r   rl  funcrY   rZ   _ascii_upper_or_lower	  s    
z8_gen_ascii_upper_or_lower.<locals>._ascii_upper_or_lowerrY   )rJ  rK  rY   rI  rZ   _gen_ascii_upper_or_lower
	  s    rL  rE  c                 C   s
   t ttS )zImplements .lower())r:  _ascii_lower_unicode_lowerr"  rY   rY   rZ   unicode_lower	  s    rO  upperc                 C   s
   t ttS )zImplements .upper())r:  _ascii_upper_unicode_upperr"  rY   rY   rZ   unicode_upper	  s    rS  c                 C   s~   d}t jdtd}t|D ]^}|d t| |}t||}|d | D ].}	|d }
t|
|	|d< t|||	 |d7 }qHq|S r>  )	r   r@  r#   r   fillr   r'   rA  r   )rJ   rK   r   r8  rB  r<  r   rl  rC  r   r9  rY   rY   rZ   _unicode_casefold#	  s    


rU  c                 C   s0   t t| D ]}t| |}t||t| qd S r   )r   r   r   r   r"   rH  rY   rY   rZ   _ascii_casefold4	  s    
rV  casefoldc                 C   s
   t ttS )zImplements str.casefold())r:  rV  rU  r"  rY   rY   rZ   unicode_casefold;	  s    rX  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 }qqd||d< |S r>  )
r   r@  r#   r   r(   rA  r   r   rT  r=  )rJ   rK   r   r8  rB  r9  r<  rl  rC  r   r   rY   rY   rZ   _unicode_capitalizeB	  s&    






rY  c                 C   sL   t | d}t|dt| tdt| D ]}t | |}t||t| q(d S rM  )r   r   r!   r   r   r"   )rJ   r   rl  r   rY   rY   rZ   _ascii_capitalize\	  s
    

rZ  
capitalizec                 C   s
   t ttS r   )r:  rZ  rY  r"  rY   rY   rZ   unicode_capitalizef	  s    r\  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   FrC   r?  Nrs   )r   emptyr#   r   rT  r   r=  r(   rA  r   r.   )rJ   rK   r   r8  rB  Zprevious_casedr<  r   rl  rC  r   r9  rY   rY   rZ   _unicode_titlel	  s     


r^  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   )rJ   r   r&  r   rl  rY   rY   rZ   _ascii_title	  s    
r_  titlec                 C   s
   t ttS )zImplements str.title())r:  r_  r^  r"  rY   rY   rZ   unicode_title	  s    ra  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   rH  rY   rY   rZ   _ascii_swapcase	  s    

rb  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 r>  )r   r]  r#   r   rT  r   r0   r=  r1   r%   rA  r   )rJ   rK   r   r8  rB  r9  r<  r   rl  rC  r   rY   rY   rZ   _unicode_swapcase	  s$    


rc  swapcasec                 C   s
   t ttS r   )r:  rb  rc  r"  rY   rY   rZ   unicode_swapcase	  s    re  c                 C   s   t | tjrdd }|S d S )Nc                 S   s"   t | }|dkrtdt| dS )Nrs   zord() expected a characterr   )r   	TypeErrorr   )r   lcrY   rY   rZ   r.  	  s    zol_ord.<locals>.implr   )r   r.  rY   rY   rZ   ol_ord	  s    rh  c                 C   s4   | t ksJ t| }t|d|tk}t|d|  |S r   )_MAX_UNICODEr   r   r   r   )r   rL   r  rY   rY   rZ   _unicode_char	  s
    rj  zchr() arg not in range(0x%hx)c                 C   s$   | dk s| t krtttt| S r   )ri  ru   _out_of_range_msgrj  r#   )ZordinalrY   rY   rZ   _PyUnicode_FromOrdinal	  s    rl  c                 C   s   t | tjrdd }|S d S )Nc                 S   s   t | S r   )rl  )r   rY   rY   rZ   r.  	  s    zol_chr.<locals>.impl)r   r   r  )r   r.  rY   rY   rZ   ol_chr	  s    rm  __str__c                 C   s   dd S )Nc                 S   s   | S r   rY   r   rY   rY   rZ   r  	  r  zunicode_str.<locals>.<lambda>rY   r   rY   rY   rZ   unicode_str	  s    ro  __repr__c                 C   s   dd S )Nc                 S   s   d|  d S )N'rY   r   rY   rY   rZ   r  
  r  zunicode_repr.<locals>.<lambda>rY   r   rY   rY   rZ   unicode_repr	  s    rr  c                    s   | d  fdd}|S )NrE   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rt	|  \} }td| }t||| |d8 }qt|S )NFr   Tr  rs   r  )
ro  r   floorlog10r   rw   r   r   orddivmod)	r   flagrK   rL   r   r   r   digitr   ZtenrY   rZ   r.  	
  s&    
zinteger_str.<locals>.implrY   )r   r.  rY   ry  rZ   integer_str
  s    rz  c                 C   s   dd S )Nc                 S   s   |   S r   )rn  r   rY   rY   rZ   r  "
  r  zinteger_repr.<locals>.<lambda>rY   r{  rY   rY   rZ   integer_repr 
  s    r|  c                 C   s   dd S )Nc                 S   s   | rdS dS )NTrueFalserY   r   rY   rY   rZ   r  (
  r  zboolean_str.<locals>.<lambda>rY   r  rY   rY   rZ   boolean_str%
  s    r  Zgetiterc           
      C   sp   |j \}|\}| ||j}| tjd}t||}||_||_	| j
rX| j||| | }	t| ||j|	S r   )r   r  return_typer   r   re   r   Zalloca_once_valuerd   rJ   r  r   r  r   r   )
r   r   r   r   r  rJ   iterobjr#  Zindexptrr   rY   rY   rZ   getiter_unicode0
  s    r  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||}|| ||D |
||j|f}|| t||}|||j W d    n1 s0    Y  d S )Nr   <)r   r  r  operatorgetitemr  r   r   re   r  r   r  rJ   r   rd   Zicmp_unsignedZ	set_validZif_thenZyield_r   Zincrement_indexr   )r   r   r   r   r<  ZitertyiterZtyctxZfntyZgetitem_sigZgetitem_implZlen_sigr   r  Zstrlenrd   Zis_validZgotitemZnindexrY   rY   rZ   iternext_unicodeH
  s*    


r  )r   )NN)NN)NN)NN)NN)NN)NN)r   )Nr   )Nr   )r  )F)N)N)N)T)r   )T)rg  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.utilsr   Znumba.core.pythonapir   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   rG   ri  rR   Zbitwidthr  r   rI   ZUnicodeIteratorTyperc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   NotImplementedErrorr   rw   r   r   r   r   r   eqr   ner   ltr  gtr  ler  ger  containsr
  r  r  r  r  r'  r)  r/  r  r6  r3  r7  r?  rA  rK  rS  rU  r*  ra  re  rp  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rQ  r  r  r  r  rN  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,  r1  r:  r;  r=  rG  rR  rN  rL  rQ  rM  rO  rS  rU  rV  rX  rY  rZ  r\  r^  r_  ra  rb  rc  re  ru  rh  rj  rk  rl  chrrm  ro  rr  r  rz  r|  r  r  r  ZNEWr  rY   rY   rY   rZ   <module>   sZ  0 
	

















	




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