a
    
d;Z                    @   sX  d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZmZ d dlmZmZ d dlmZm Z  d dl!m"Z"m#Z#m$Z$m%Z% d d	l&m'Z' d d
l(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZO d dlPmQZQ dZRejSjTZUeejVG dd de
jZWeejVdd eejVdd eejVdd eejVdd eejVdd eejXG dd deZYdd ZZd d! Z[eej\ej]d"d# Z^eej]d$d% Z_eejVd&d' Z`eejVd(d) Zad*d+ Zbed,d- Zced.d/ Zded0d1 Zeed2d3 Zfed>d4d5Zged6d7d8d9 Zhd:d; Zied<d= Zjed>d? Zked@dA Zled6d7dBdC ZmedDdE ZnedFdG ZoedHdI Zped6d7dJdK ZqedLdM ZredNdO ZseetdPdQ ZueejvdRdS ZweejxdTdU ZyeejzdVdW Z{eej|dXdY Z}eej~dZd[ Zeejd\d] Zeejd^d_ Zd`da Zdbdc Zeddde Zedfdg Zedhdi Zedjdk Zdldm ZeeeZeeeZeejVdnd?dodpZeejVdqd@drdsZeejVdtdAdudvZeejVdwdBdxdyZeejVdzd{d| ZeejVd}dCd~dZeejVddd Zedd ZeejVddDddZeejVddEddZeejVddFddZeejVddGddZdd Zeee8Zeee9ZeejVddHddZeejVddIddZdd ZeejVded6 eejVded dd ZeeeAZeee@ZeejVddJddZedd ZeejVddd ZeejVddd Zedd Zedd Zdd Zdd ZeejVddKddZeejVddLddZeejVddMddZedNddZedd ZeddĄ ZeddƄ Zed6d7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jVdՃdOddׄZddل ZeejVdڃeeMeK edd܄ ZeejVd݃ee2e dd߄ Zedd܄ ZeeeEeFeZeee?e>eDZeejVddd ZeejVddd ZeejVddd ZeejVddd ZeejVddd ZȐdPddZeejVdee8 eejVdeeL eejVdeeN eejVdeeO eejVdee7d6 dd Zedd Zedd Zdd Zeed6ZeedZdd  Zeee/Zeee0ZeejVddd ZeejVddd Zedd Zed	d
 ZeejVddd Zedd Zedd ZeejVddd Zedd Zedd ZeejVddd Zedd Zedd ZeejVd d!d" Zeed#d$ Zed%d& Zd'eR Zed(d) Zeed*d+ ZeejVd,d-d. ZeejVd/d0d1 Zeejd,d2d3 Zeejd/d4d5 Zeejd/eejd,d6d7 Zed8ejVd9d: Zed;ejXeejd<d= ZdS (Q      N)IntTypeConstant)is_nonelike)
modelsregister_modelmake_attribute_wrapperunboxboxNativeValueoverloadoverload_method	intrinsicregister_jitable)lower_constant
lower_castlower_builtiniternext_implimpl_ret_new_refRefType)register_defaultStructModel)typescgutils)PY_UNICODE_1BYTE_KINDPY_UNICODE_2BYTE_KINDPY_UNICODE_4BYTE_KINDPY_UNICODE_WCHAR_KIND)	c_helpers)
_Py_hash_t)memcpy_region)TypingError)!_Py_TOUPPER_Py_TOLOWER_Py_UCS4_Py_ISALNUM_PyUnicode_ToUpperFull_PyUnicode_ToLowerFull_PyUnicode_ToFoldedFull_PyUnicode_ToTitleFull_PyUnicode_IsPrintable_PyUnicode_IsSpace_Py_ISSPACE_PyUnicode_IsXidStart_PyUnicode_IsXidContinue_PyUnicode_IsCased_PyUnicode_IsCaseIgnorable_PyUnicode_IsUppercase_PyUnicode_IsLowercase_PyUnicode_IsLineBreak_Py_ISLINEBREAK_Py_ISLINEFEED_Py_ISCARRIAGERETURN_PyUnicode_IsTitlecase_Py_ISLOWER_Py_ISUPPER_Py_TAB_Py_LINEFEED_Py_CARRIAGE_RETURN	_Py_SPACE_PyUnicode_IsAlpha_PyUnicode_IsNumeric_Py_ISALPHA_PyUnicode_IsDigit_PyUnicode_IsDecimalDigit)slicing c                   @   s   e Zd Zdd ZdS )UnicodeModelc              	   C   sV   dt jfdt jfdt jfdt jfdtfdt t jfdt jfg}tj	
| ||| d S )Ndatalengthkindis_asciihashmeminfoparent)r   voidptrintpint32uint32r   ZMemInfoPointerZpyobjectr   r   __init__selfZdmmZfe_typemembers rT   ^/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/numba/cpython/unicode.pyrP   O   s    
zUnicodeModel.__init__N)__name__
__module____qualname__rP   rT   rT   rT   rU   rD   M   s   rD   rE   _datarF   _lengthrG   _kindrH   	_is_asciirI   _hashc                       s   e Zd Z fddZ  ZS )UnicodeIteratorModelc                    s2   dt t jfd|jfg}tt| ||| d S )NindexrE   )r   ZEphemeralPointeruintprE   superr^   rP   rQ   	__class__rT   rU   rP   f   s    zUnicodeIteratorModel.__init__)rV   rW   rX   rP   __classcell__rT   rT   rb   rU   r^   d   s   r^   c                 C   s   ddl m}m}m}m}m}m}m}m}m	}	 t
d }
|||||||||||}||
}| }| }| }| }|| |	||	||	||	|}|d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   )ctypesre   rf   rg   rh   ri   rj   rk   rl   rm   r   
ValueErrorvalue_kind_to_byte_widthfrom_addressbytes)objre   rf   rg   rh   ri   rj   rk   rl   rm   Zextract_unicode_fnprotofnrF   rG   rH   hashvrE   nbytesoutrT   rT   rU   compile_time_get_string_datan   s&    , 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_proxyrE   rF   typerG   rH   rI   	_getvalue)contextbuildertypZliteral_stringZ	databytesrF   rG   rH   rx   modgvuni_strrT   rT   rU   make_string_from_constant   s    r   c                 C   s   t | |||jS N)r   Zliteral_value)r   r   ZfromtyZtotyvalrT   rT   rU   cast_from_literal   s    
r   c                 C   s   t | |||S r   )r   )r   r   r   ZpyvalrT   rT   rU   constant_unicode   s    r   c                 C   s   |j |\}}}}}}t| |j|j}	||	_||	_||	_||	_	||	_
|j |||	_||	_t|j|j  }
t|	 |
dS )zE
    Convert a unicode str object to a native unicode structure.
    )is_error)pyapiZstring_as_string_size_and_kindr   r~   r   r   rE   rF   rG   rH   rI   Znrt_meminfo_new_from_pyobjectrJ   rK   Zis_not_nullZerr_occurredr
   r   )r   ru   cokrE   rF   rG   rH   rx   r   r   rT   rT   rU   unbox_unicode_str   s    
r   c                 C   sR   t | |j|j|d}|j|j|j|j}|j	| |jj
|j| | |S )z@
    Convert a native unicode structure to a unicode string
    rq   )r   r~   r   r   r   Zstring_from_kind_and_datarG   rE   rF   Zobject_hashnrtZdecref)r   r   r   r   resrT   rT   rU   box_unicode_str   s    r   c                    s    fdd}|S )Nc                    s@   |\}}| |t  }||||g}||tdS N    )bitcastr   
as_pointerloadgepZzext)r   r   	signatureargsrE   idxptrchbitsizerT   rU   codegen   s    z#make_deref_codegen.<locals>.codegenrT   r   r   rT   r   rU   make_deref_codegen   s    r   c                 C   s   t t jt j}|tdfS N   r   rO   rL   rM   r   	typingctxrE   offsetsigrT   rT   rU   deref_uint8   s    r   c                 C   s   t t jt j}|tdfS N   r   r   rT   rT   rU   deref_uint16   s    r   c                 C   s   t t jt j}|tdfS r   r   r   rT   rT   rU   deref_uint32   s    r   c                 C   s(   dd }t t jt jt jt j}||fS )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 )Nrn   r|   )r   r~   r   unicode_typemuladdr   r   r   Zmeminfo_allocrJ   rG   rH   rF   get_constantr   rI   Zmeminfo_datarE   get_null_valuerK   r   )r   r   r   r   Zkind_valZchar_bytes_valZ
length_valZis_ascii_valZuni_str_ctorr   Z
nbytes_valrT   rT   rU   details   s     

z_malloc_string.<locals>.details)r   r   rN   rM   rO   )r   rG   Z
char_bytesrF   rH   r   r   rT   rT   rU   _malloc_string   s    r   c                 C   s,   t | }t| |||}t||td |S Nr   )rr   r   _set_code_pointnprO   )rG   rF   rH   
char_widthsrT   rT   rU   _empty_string  s    r   F)Z_nrtc                 C   sJ   | j tkrt| j|S | j tkr,t| j|S | j tkrBt| j|S dS d S r   )r[   r   r   rY   r   r   r   r   )airT   rT   rU   _get_code_point  s    


r   c                    s    fdd}|S )Nc                    sT   |\}}} dk r"| |t }||t  }|||||g |  S r   )truncr   r   r   storer   Zget_dummy_value)r   r   r   r   rE   r   r   r   r   rT   rU   r   .  s    
z!make_set_codegen.<locals>.codegenrT   r   rT   r   rU   make_set_codegen-  s    r   c                 C   s    t t jt jt j}|tdfS r   r   voidrL   int64rO   r   r   rE   r   r   r   rT   rT   rU   	set_uint89  s    r   c                 C   s    t t jt jt j}|tdfS r   r   r   rT   rT   rU   
set_uint16?  s    r   c                 C   s    t t jt jt j}|tdfS r   r   r   rT   rT   rU   
set_uint32E  s    r   c                 C   sZ   | j tkrt| j|| n<| j tkr4t| j|| n"| j tkrNt| j|| ntdd S )Nz4Unexpected unicode representation in _set_code_point)	r[   r   r   rY   r   r   r   r   AssertionError)r   r   r   rT   rT   rU   r   K  s    


r   c                 C   sV   | t ks|t krtd| tkr$|S | tkr>|tkr8|S | S n| tkrJ| S tdd S )N!PY_UNICODE_WCHAR_KIND unsupportedz/Unexpected unicode representation in _pick_kind)r   r   r   r   r   )Zkind1Zkind2rT   rT   rU   
_pick_kind^  s    r   c                 C   s$   | dkr|dkrt dS t dS Nrn   r   )r   rO   )Z	is_ascii1Z	is_ascii2rT   rT   rU   _pick_asciip  s    
r   c                 C   sB   | t krdS | tkrdS | tkr$dS | tkr6tdntdd S )Nrn         r   z'Unexpected unicode encoding encountered)r   r   r   r   r   )rG   rT   rT   rU   rr   w  s    
rr   c                 C   sz   |dkrdS || | j krdS || |j kr0dS t|D ]<}t| || }t||| }||k rf dS ||kr8 dS q8dS )Nr   r|   rn   )rZ   ranger   )r   Za_offsetbZb_offsetnr   Za_chrZb_chrrT   rT   rU   _cmp_region  s    r   c                 C   s8   | dk rt S | dk rtS d}| |kr0d}t|tS dS )zK
    Compute the minimum unicode kind needed to hold a given codepoint
       i   rC   z;Invalid codepoint. Found value greater than Unicode maximumN)r   r   rp   r   )cpZMAX_UNICODEmsgrT   rT   rU   _codepoint_to_kind  s    r   c                 C   s   | dk S )z;
    Returns true if a codepoint is in the ASCII range
       rT   )r   rT   rT   rU   _codepoint_is_ascii  s    r   c                 C   s   t | tjrdd }|S d S )Nc                 S   s   | j S r   )rZ   r   rT   rT   rU   len_impl  s    zunicode_len.<locals>.len_impl
isinstancer   UnicodeType)r   r   rT   rT   rU   unicode_len  s    r   c                 C   s   | j r|j sd S t| tjr$| j}n| }t|tjr<|j}n|}tjtjtjf}t||}t||}|rx|rxdd }|S ||A 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_nonerT   rT   rU   eq_impl  s    zunicode_eq.<locals>.eq_implc                 S   s   dS NFrT   r   r   rT   rT   rU   r     s    )is_internalr   r   Optionalr   r   StringLiteralUnicodeCharSeq)r   r   Zcheck_aZcheck_baccept	a_unicode	b_unicoder   rT   rT   rU   
unicode_eq  s"    

r   c                 C   s`   | j r|j sd S tjtjtjf}t| |}t||}|rH|rHdd }|S ||A r\dd }|S d S )Nc                 S   s
   | |k S r   rT   r   rT   rT   rU   ne_impl  s    zunicode_ne.<locals>.ne_implc                 S   s   dS )NTrT   r   rT   rT   rU   r     s    zunicode_ne.<locals>.eq_impl)r   r   r   r   r   r   )r   r   r   r   r   r   r   rT   rT   rU   
unicode_ne  s    

r   c                 C   s<   t | tjtjf}t |tjtjf}|r8|r8dd }|S d S )Nc                 S   sJ   t t| t|}t| d|d|}|dkr.dS |dkrFt| t|k S dS )Nr   r|   TFminr   r   r   r   ZminlenZeqcoderT   rT   rU   lt_impl  s    zunicode_lt.<locals>.lt_implr   r   r   r   )r   r   r   r   r   rT   rT   rU   
unicode_lt  s
    r   c                 C   s<   t | tjtjf}t |tjtjf}|r8|r8dd }|S d S )Nc                 S   sJ   t t| t|}t| d|d|}|dkr.dS |dkrFt| t|kS dS )Nr   rn   TFr   r   rT   rT   rU   gt_impl  s    zunicode_gt.<locals>.gt_implr   )r   r   r   r   r   rT   rT   rU   
unicode_gt  s
    r   c                 C   s<   t | tjtjf}t |tjtjf}|r8|r8dd }|S d S )Nc                 S   s
   | |k S r   rT   r   rT   rT   rU   le_impl  s    zunicode_le.<locals>.le_implr   )r   r   r   r   r   rT   rT   rU   
unicode_le  s
    r   c                 C   s<   t | tjtjf}t |tjtjf}|r8|r8dd }|S d S )Nc                 S   s
   | |k  S r   rT   r   rT   rT   rU   ge_impl&  s    zunicode_ge.<locals>.ge_implr   )r   r   r   r   r   rT   rT   rU   
unicode_ge!  s
    r   c                 C   s(   t | tjr$t |tjr$dd }|S d S )Nc                 S   s   t | |dkS )Nr|   )_findr   rT   rT   rU   contains_impl.  s    z'unicode_contains.<locals>.contains_implr   )r   r   r   rT   rT   rU   unicode_contains+  s    r   c                 C   s^   | }t | tjr| j}nt | tjr*| j}tjtjf}|d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   Omittedrq   r   r   IntegerNoneTyper    format)tynamethetyacceptedrT   rT   rU   unicode_idx_check_type4  s    r	  c                 C   s(   t | tjs$d|tj| }t|dS )z$Check object belongs to unicode typer   N)r   r   r   r  r    )r  r  r   rT   rT   rU   unicode_sub_check_typeH  s    r
  c                 C   s   | d|t d @ > O } | S Nrn   _BLOOM_WIDTHmaskr   rT   rT   rU   
_bloom_addQ  s    r  c                 C   s   | d|t d @ > @ S r  r  r  rT   rT   rU   _bloom_checkW  s    r  c                 C   sP  t |}|dkr|S |d  }}t||}td}t||}	t|D ],}
t||
}t|	|}	||krF||
 d }qF|}
|
|| krLt| ||
 }||krd}||k 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   rn   r|   )r   r   r   rM   r  r   r  )rE   substrstartendmZgapmlastlastzeror  r   r   jhaystack_ch	needle_chrT   rT   rU   _default_find]  sD    










r  c                 C   sR  t |}|dkr|S |d  }}t|d}td|}|}	|	dkrnt||	}
t||
}|
|krd|	d }|	d8 }	q8|| }	|	|krNt| |	}
|
|kr|}|dk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   rn   r|   )r   r   r  r  )rE   r  r  r  r  skipr  Zmfirstr  r   r   r  r  r  rT   rT   rU   _default_rfind  sF    












r  c                    s   d fdd	}|S )z%Generate finder either left or right.Nc                    sV   t | }t |}|d u rd}|d u r(|}t|||\}}|| |k rHdS  | |||S )Nr   r|   )r   _adjust_indices)rE   r  r  r  rF   
sub_length	find_funcrT   rU   impl  s    zgenerate_finder.<locals>.impl)NNrT   )r"  r#  rT   r!  rU   generate_finder  s    r$  findc                 C   s<   t |tjrddd}|S t|d t|d t|d tS )zImplements str.find()Nc                 S   s   |  t|S r   )r%  r   rE   r  r  r  rT   rT   rU   	find_impl  s    zunicode_find.<locals>.find_implr  r  r  )NN)r   r   r   r	  r
  r   )rE   r  r  r  r'  rT   rT   rU   unicode_find  s    



r(  rfindc                 C   s<   t |tjrddd}|S t|d t|d t|d tS )zImplements str.rfind()Nc                 S   s   |  t|S r   )r)  r   r&  rT   rT   rU   
rfind_impl  s    z!unicode_rfind.<locals>.rfind_implr  r  r  )NN)r   r   r   r	  r
  _rfind)rE   r  r  r  r*  rT   rT   rU   unicode_rfind  s    



r,  rindexc                 C   s,   t |d t |d t|d ddd}|S )zImplements str.rindex()r  r  subNc                 S   s"   |  |||}|dk rtd|S Nr   zsubstring not found)r)  rp   r   r.  r  r  resultrT   rT   rU   rindex_impl  s    z#unicode_rindex.<locals>.rindex_impl)NNr	  r
  )r   r.  r  r  r2  rT   rT   rU   unicode_rindex  s
    



r4  r_   c                 C   s,   t |d t |d t|d ddd}|S )zImplements str.index()r  r  r.  Nc                 S   s"   |  |||}|dk rtd|S r/  )r%  rp   r0  rT   rT   rU   
index_impl  s    z!unicode_index.<locals>.index_impl)NNr3  )r   r.  r  r  r5  rT   rT   rU   unicode_index  s
    



r6  	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[   r\   r   rp   r%  rE   r8  Z	empty_str
sep_lengthposrT   rT   rU   r#  '  s    


zunicode_partition.<locals>.impl
r   r   r  rq   r   r   r   r   r  r    rE   r8  r  r  r   r#  rT   rT   rU   unicode_partition  s    r@  countc                 C   sD   t | t | t|tjr*ddd}|S d}t|t|d S )Nc                 S   s   d}t | }t |}t||d}t|||}|| dk s@||krDdS | || } t | }d| }}|dkrr|d S || |kr| |||  |kr|d7 }||7 }qr|d7 }qr|S Nr   rn   )r   _normalize_slice_idx_count)srcr.  r  r  rA  Zsrc_lenZsub_lenrT   rT   rU   
count_implB  s$    


z!unicode_count.<locals>.count_implz+The substring must be a UnicodeType, not {})NN)_count_args_types_checkr   r   r   r    r  r   )rD  r.  r  r  rE  	error_msgrT   rT   rU   unicode_count;  s    
rH  
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   r8  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 r9  )r   r   r[   r\   r   rp   r)  r;  rT   rT   rU   r#  p  s    


z unicode_rpartition.<locals>.implr>  r?  rT   rT   rU   unicode_rpartition`  s    rJ  c                 C   sL   || kr| }|dk r(|| 7 }|dk r(d}|dk rD|| 7 }|dk rDd}||fS r   rT   )rF   r  r  rT   rT   rU   r    s    r  
startswithc                 C   s   t |st|tjstdt |s8t|tjs8tdt|tjr`t|jtjr`d
dd}|S t|tjrzddd}|S t|tj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)rK  )r   prefixr  r  itemrT   rT   rU   startswith_tuple_impl  s    z1unicode_startswith.<locals>.startswith_tuple_implc                 S   s   |  t|||S r   )rK  r   )r   rM  r  r  rT   rT   rU   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   rM  r  r  rF   Zprefix_lengthZs_slicerT   rT   rU   startswith_unicode_impl  s    z3unicode_startswith.<locals>.startswith_unicode_implz9The arg 'prefix' should be a string or a tuple of strings)NN)NN)NN)	r   r   r   r  r    UniTupledtyper   r   )r   rM  r  r  rO  rP  rS  rT   rT   rU   unicode_startswith  s,    


rV  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 rL  )rW  )r   r  r  r  rN  rT   rT   rU   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 rQ  rR  )r   r  r  r  rF   r   r   rT   rT   rU   rX    s    c                 S   s   |  t|||S r   )rW  r   )r   r  r  r  rT   rT   rU   rX    s    )NN)NN)NN)
r   r   r  r  r  r    TuplerT  r   r   )r   r  r  r  rX  rT   rT   rU   unicode_endswith  s&    


rZ  
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 longrn   )r   r   r   r9   sysmaxsizeOverflowErrorr:   r;   r   r[   r\   r   r<   )rE   tabsizerF   r  Zline_posfoundr   
code_pointincrr   r   rT   rT   rU   expandtabs_impl  sL    





z+unicode_expandtabs.<locals>.expandtabs_impl)r   )
r   r   r  rq   r   r   r  intr    r  )rE   r_  r  r  rc  rT   rT   rU   unicode_expandtabs  s    


.re  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)rf  r   )r   r8  rg  rT   rT   rU   
split_implE  s    z!unicode_split.<locals>.split_implc           
      S   s   t | }t |}|dkr tdg }d}d}|dkr~|dkr~t|d}t|D ],}t| ||krN|| ||  |d }qNnbd}	||k r|dks|	|k rt| ||d|dkr|| ||  ||7 }|}|	d7 }	q|d7 }q||kr|| |d   |S )Nr   r:  rn   r|   )r   rp   r   r   appendr   )
r   r8  rg  a_lensep_lenpartsr  r   Zsep_code_pointsplit_countrT   rT   rU   rh  J  s4    


rq   Fc                 S   s   t | }g }d}d}d}d}t|D ]b}t| |}	t|	}
|rN|
rDq|}d}q$|
sTq$|| ||  d}|d7 }|dkr$||kr$ qq$||kr|s|| |d   |S )Nr   TFrn   r|   )r   r   r   r*   ri  )r   r8  rg  rj  rl  r  r   rm  Zin_whitespace_blockra  Zis_whitespacerT   rT   rU   split_whitespace_implo  s0    
z,unicode_split.<locals>.split_whitespace_impl)Nr|   )Nr|   )Nr|   )	r   r   r  r  ZIntegerLiteralr   r   r  getattr)r   r8  rg  rh  rn  rT   rT   rU   unicode_split=  s"    

"
 rp  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   rn   r|   )r\  r]  r   r   ri  )rE   r8  rg  r1  r   ra  r  isspace_funcrT   rU   rsplit_whitespace_impl  s<    






z?generate_rsplit_whitespace_impl.<locals>.rsplit_whitespace_impl)Nr|   rT   )rs  rt  rT   rr  rU   generate_rsplit_whitespace_impl  s    &ru  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  rq   r   r   r    r  )r  r  r  r  rT   rT   rU   _unicode_rsplit_check_type  s    z2unicode_rsplit.<locals>._unicode_rsplit_check_typer8  rg  Nr|   c                 S   s   | j rt| ||S t| ||S r   )r\   ascii_rsplit_whitespace_implunicode_rsplit_whitespace_impl)rE   r8  rg  rT   rT   rU   rt    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 rq  )r   r   ri  )rE   r   rg  r1  Zch_code_pointr   r  Zdata_code_pointrT   rT   rU   _rsplit_char  s    


z9unicode_rsplit.<locals>.rsplit_impl.<locals>._rsplit_charr   r:  rn   )r  r  r|   )r   r[   r   r\  r]  rp   r)  ri  )rE   r8  rg  rz  r<  r1  r  r=  rT   rT   rU   rsplit_impl  s,    
z#unicode_rsplit.<locals>.rsplit_impl)Nr|   )Nr|   )r   r   r   r  r  rd  r   r  )rE   r8  rg  rw  rt  r{  rT   rT   rU   unicode_rsplit  s    


/r|  center c                 C   s^   t |tjstdt |tjr.ddd}|S |dksPt |tjtjfsPtdddd}|S )	NThe width must be an Integerr~  c                 S   s   |  |t|S r   )r}  r   stringwidthfillcharrT   rT   rU   center_impl  s    z#unicode_center.<locals>.center_impl"The fillchar must be a UnicodeTypec           	      S   s   t | }t |}|dkr td||kr,| S || }|d ||@ d@  }|| }|| }||krl||  | S ||  ||  S d S )Nrn   5The fill character must be exactly one character longr   r   rp   )	r  r  r  str_lenfillchar_lenZ	allmarginZlmarginZrmarginZl_stringrT   rT   rU   r  %  s    )r~  )r~  r   r   r  r    r   r  r   )r  r  r  r  rT   rT   rU   unicode_center  s    

r  c                    s   d fdd	}|S )Nr~  c                    st   t |tjstdt |tjr@ r2d
dd}|S ddd}|S |dksbt |tjtjfsbtdd fdd		}|S )Nr  r~  c                 S   s   |  |t|S r   )ljustr   r  rT   rT   rU   
ljust_implD  s    z<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.ljust_implc                 S   s   |  |t|S r   )rjustr   r  rT   rT   rU   
rjust_implH  s    z<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.rjust_implr  c                    sP   t | }t |}|dkr td||kr,| S |||  } rD| | S ||  S d S )Nrn   r  r  )r  r  r  r  r  newstrSTRING_FIRSTrT   rU   r#  P  s    z6gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.impl)r~  )r~  )r~  r  )r  r  r  r  r  r#  r  rT   rU   unicode_Xjust>  s    

z(gen_unicode_Xjust.<locals>.unicode_Xjust)r~  rT   )r  r  rT   r  rU   gen_unicode_Xjust=  s    %r  r  r  Tc                    s    fdd}|S )zDGenerate splitlines performer based on ascii or unicode line breaks.c           
         s   t | }g }d }}||k r||k rBt| |} |r8qB|d7 }q|}||k r|d |k rt| |}t| |d }	t|rt|	r|d7 }|d7 }|r|}|| ||  |}q|S rB  )r   r   r5   r4   ri  )
rE   keependsrF   r1  r   r  ra  eolZcur_cpZnext_cpis_line_break_funcrT   rU   r#  l  s,    


z&generate_splitlines_func.<locals>.implrT   )r  r#  rT   r  rU   generate_splitlines_funcj  s    r  
splitlinesc                 C   sl   |}t |tjr|j}nt |tjr*|j}tjttjt	f}|d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   )r\   _ascii_splitlines_unicode_splitlines)rE   r  rT   rT   rU   splitlines_impl  s    
z+unicode_splitlines.<locals>.splitlines_impl)F)r   r   r  rq   r   r   r  rd  Booleanboolr    r  )rE   r  r  r  r  rT   rT   rU   unicode_splitlines  s    
r  c                 C   s   t |}|dkrdS t | }|d | }| j}| j}|D ](}|t |7 }t||j}t||j}q8t|||}|d }	t|d|	dt |	 t |	}
td|D ]D}t||
| d| |
|7 }
|| }	t||
|	dt |	 |
t |	7 }
q|S )Nr    rn   )r   r[   r\   r   r   r   _strncpyr   )r8  rl  Z	parts_lenrk  rF   rG   rH   pr1  part
dst_offsetr   rT   rT   rU   	join_list  s,    r  joinc                 C   sv   t |tjrBt |jtjr&dd }|S t |jtjrrdd }|S n0t |tjrZdd }|S t |tjrrdd }|S d S )Nc                 S   s
   t | |S r   r  )r8  rl  rT   rT   rU   join_list_impl  s    z$unicode_join.<locals>.join_list_implc                 S   s   dd |D }t | |S )Nc                 S   s   g | ]}t |qS rT   r   .0r  rT   rT   rU   
<listcomp>      z8unicode_join.<locals>.join_list_impl.<locals>.<listcomp>r  )r8  rl  _partsrT   rT   rU   r    s    c                 S   s   dd |D }|  |S )Nc                 S   s   g | ]}|qS rT   rT   r  rT   rT   rU   r    r  z8unicode_join.<locals>.join_iter_impl.<locals>.<listcomp>)r  r8  rl  Z
parts_listrT   rT   rU   join_iter_impl  s    z$unicode_join.<locals>.join_iter_implc                    s$    fddt t D }t| |S )Nc                    s   g | ]} | qS rT   rT   )r  r   rl  rT   rU   r    r  z7unicode_join.<locals>.join_str_impl.<locals>.<listcomp>)r   r   r  r  rT   r  rU   join_str_impl  s    z#unicode_join.<locals>.join_str_impl)r   r   ListrU  r   r   ZIterableType)r8  rl  r  r  r  rT   rT   rU   unicode_join  s    r  zfillc                 C   s    t |tjstddd }|S )Nz<width> must be an Integerc                 S   sZ   t | }||kr| S |r | d nd}d||  }|dv rN|| | dd   }n||  }|S )Nr   r  0)+-rn   r   )r  r  r  
first_charpaddingr  rT   rT   rU   
zfill_impl  s    z!unicode_zfill.<locals>.zfill_impl)r   r   r  r    )r  r  r  rT   rT   rU   unicode_zfill  s    r  c                 C   s^   t | }d}|d ur8t|D ]}| | |vr|  S qn"t|D ]}t| | s@|  S q@|S r   r   r   r*   r  charsr  r   rT   rT   rU   unicode_strip_left_bound  s    
r  c                 C   sv   t | }d}|d urDt|d ddD ]}| | |vr$|d7 } qrq$n.t|d ddD ]}t| | sT|d7 } qrqT|S rq  r  r  rT   rT   rU   unicode_strip_right_bound  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  rT   rT   rU   unicode_strip_types_check'  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    )argrT   rT   rU   rF  0  s    rF  lstripc                 C   s0   t |tjrddd}|S t| ddd}|S )Nc                 S   s   |  t|S r   )r  r   r  r  rT   rT   rU   lstrip_impl=  s    z#unicode_lstrip.<locals>.lstrip_implc                 S   s   | t | |d  S r   )r  r  rT   rT   rU   r  C  s    )N)Nr   r   r   r  )r  r  r  rT   rT   rU   unicode_lstrip9  s    

r  rstripc                 C   s0   t |tjrddd}|S t| ddd}|S )Nc                 S   s   |  t|S r   )r  r   r  rT   rT   rU   rstrip_implL  s    z#unicode_rstrip.<locals>.rstrip_implc                 S   s   | d t | | S r   )r  r  rT   rT   rU   r  R  s    )N)Nr  )r  r  r  rT   rT   rU   unicode_rstripH  s    

r  stripc                 C   s0   t |tjrddd}|S t| ddd}|S )Nc                 S   s   |  t|S r   )r  r   r  rT   rT   rU   
strip_impl[  s    z!unicode_strip.<locals>.strip_implc                 S   s    t | |}t| |}| || S r   )r  r  )r  r  ZlbrbrT   rT   rU   r  a  s    

)N)Nr  )r  r  r  rT   rT   rU   unicode_stripW  s    

r  c                 C   sB   | d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   rF   Zis_startrT   rT   rU   normalize_str_idxl  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   rT   )r  Z	slice_lendefaultrT   rT   rU   rC    s
    rC  c                 C   s   |||}dd }||fS )zFix slice object.
    c           	      S   sF   |j \}}|\}}| |||}t| ||| t||| | S r   )r   make_helperrB   Zguard_invalid_sliceZ	fix_slicer   )	r   r   r   r   	slicetypeZ
lengthtypesliceobjrF   slicerT   rT   rU   r     s    
z!_normalize_slice.<locals>.codegenrT   )r   r  rF   r   r   rT   rT   rU   _normalize_slice  s    
r  c                 C   s   t |}dd }||fS )z2Compute the span from the given slice object.
    c                 S   s,   |j \}|\}| |||}t||}|S r   )r   r  rB   Zget_slice_length)r   r   r   r   r  r  r  Zresult_sizerT   rT   rU   r     s
    z_slice_span.<locals>.codegen)r   rM   )r   r  r   r   rT   rT   rU   _slice_span  s    
r  c           
      C   st   |j | j krHt|j }|| }|| }|| }t| j||j||dd n(t|D ]}	t| ||	 t|||	  qPd S )Nrn   )Zalign)r[   rr   r   rY   r   r   r   )
dstr  rD  Z
src_offsetr   
byte_widthZsrc_byte_offsetZdst_byte_offsetry   r   rT   rT   rU   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   rJ   rG   rH   rF   r   r   rI   typing_contextresolve_value_typerr   get_call_typerN   get_functionr   r   rE   r   rK   r   
enable_nrtr   increfr   r   )r   r   r   r   rD  r  rF   in_strZview_strZbw_typZbw_sigZbw_implr  r   rT   rT   rU   r     s8    
z$_get_str_slice_view.<locals>.codegen)r   r   rM   )r   Zsrc_tZstart_tZlength_tr   r   rT   rT   rU   _get_str_slice_view  s    r  c                 C   s@   t | tjr<t |tjr$dd }|S t |tjr<dd }|S d S )Nc                 S   s^   t |t| }t| |}t|}|| jkr6t| |dS t|}t|d|}t|d| |S d S r   )	r  r   r   r   r[   r  r   r   r   )r   r   r   rG   rH   retrT   rT   rU   getitem_char  s    

z%unicode_getitem.<locals>.getitem_charc                 S   s   t |t| }t|}t| |j}t|}t|}t|j|j |j	|jD ]4}t| |}|t|M }t|}||krJt
||}qJ|jdkr|| jk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   rG   rH   r   new_kindr  currT   rT   rU   getitem_slice  s*    
z&unicode_getitem.<locals>.getitem_slice)r   r   r   r  Z	SliceType)r   r   r  r  rT   rT   rU   unicode_getitem  s    $r  c                 C   sL   t | tjr$t |tjr$dd }|S t | tjrHt |tjrHdd }|S d S )Nc                 S   s   | j |j  }t| j|j}t| j|j}t|||}tt| D ]}t||t	| | q@tt|D ]}t|t| | t	|| qd|S r   )
rZ   r   r[   r   r\   r   r   r   r   r   )r   r   
new_lengthr  Z	new_asciir1  r   r  rT   rT   rU   concat_impl7  s    z#unicode_concat.<locals>.concat_implc                 S   s   | t | S r   r  r   rT   rT   rU   r  D  s    )r   r   r   r   )r   r   r  rT   rT   rU   unicode_concat3  s    
r  c                 C   s   | dks|dk rdS |dkr | S | j | }| j}t||| j}t| }t|d| d| |}d| |krt|||d| |d9 }qZd| |ks|| }t||||| | |S d S )Nr  rn   r   r   )rZ   r[   r   r\   r   r  )Zstr_argZmult_argr  r  r1  Zlen_aZ	copy_sizerestrT   rT   rU   _repeat_implI  s"    

r  c                 C   sL   t | tjr$t |tjr$dd }|S t | tjrHt |tjrHdd }|S d S )Nc                 S   s
   t | |S r   r  r   rT   rT   rU   wrapg  s    zunicode_repeat.<locals>.wrapc                 S   s
   t || S r   r  r   rT   rT   rU   r  k  s    )r   r   r   r  )r   r   r  rT   rT   rU   unicode_repeatd  s    r  c                 C   s   t | tjrdd }|S d S )Nc                 S   s   t | dkS r   r  r   rT   rT   rU   r#  s  s    zunicode_not.<locals>.implr   r   r#  rT   rT   rU   unicode_notp  s    r  replacec                 C   s   |}t |tjr|j}nt |tjr*|j}t |ttjfsHtd	|t |tj
tjfshtd	|t |tj
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|   rn   )listr  r   r   r   ri  rf  )	r   old_strnew_strrA  ZscharsZsplit_resultZ	min_countr   r1  rT   rT   rU   r#    s&    


zunicode_replace.<locals>.impl)r|   )r   r   r  rq   r   r   rd  r  r    r  r   r  )r   r  r  rA  r  r#  rT   rT   rU   unicode_replacex  s&    
r  c                    s    fdd}|S )Nc                    s    fdd}|S )Nc                    s   t | }|dkrdS |dkr<t| d}| jr4 |S |S | jrht|D ]}t| |} |sJ dS qJt|D ]}t| |}|sp dS qpdS )Nr   Frn   T)r   r   r\   r   )rE   rF   ra  r   
ascii_funcunicode_funcrT   rU   r#    s$    


z.gen_isAlX.<locals>.unicode_isAlX.<locals>.implrT   rE   r#  r  rT   rU   unicode_isAlX  s    z gen_isAlX.<locals>.unicode_isAlXrT   )r  r   r  rT   r  rU   	gen_isAlX  s    r  isalphac                 C   s   t | pt| S r   )r>   r=   xrT   rT   rU   <lambda>  s    r  isalnumc                    s    fdd}|S )Nc                    sp   t | }|dkrt| dS |dkr*dS d}t|D ]4}t| |} |sT|rZ dS |s6|r6d}q6|S Nrn   r   FTr   r   r   )r   lcasedr   ra  is_loweris_titleis_upperrT   rU   r#    s    
z_is_upper.<locals>.implrT   )r  r  r  r#  rT   r  rU   	_is_upper  s    r  c                 C   s   dS r   rT   r  rT   rT   rU   r    r  isupperc                 C   s   dd }|S )z
    Implements .isupper()
    c                 S   s   | j rt| S t| S d S r   )r\   _ascii_is_upper_unicode_is_upperr  rT   rT   rU   r#    s    zunicode_isupper.<locals>.implrT   r  rT   rT   rU   unicode_isupper  s    r  isasciic                 C   s   dd }|S )z Implements UnicodeType.isascii()c                 S   s   | j S r   )r\   rE   rT   rT   rU   r#    s    zunicode_isascii.<locals>.implrT   r  rT   rT   rU   unicode_isascii  s    r  istitlec                 C   s   dd }|S )z
    Implements UnicodeType.istitle()
    The algorithm is an approximate translation from CPython:
    https://github.com/python/cpython/blob/1d4b6ba19466aba0eb91c4ba01ba509acf18c723/Objects/unicodeobject.c#L11829-L11885 # noqa: E501
    c                 S   s   t | }|dkr*t| d}t|p(t|S |dkr6dS d}d}t|D ]R}t| |}t|sdt|rx|rn dS d}d}qFt|r|s dS d}d}qFd}qF|S r	  )r   r   r0   r6   r   r1   )rE   rF   charr  previous_is_casedr   rT   rT   rU   r#    s,    

zunicode_istitle.<locals>.implrT   r  rT   rT   rU   unicode_istitle  s    r  islowerc                 C   s   dd }|S )aP  
    impl is an approximate translation of:
    https://github.com/python/cpython/blob/201c8f79450628241574fba940e08107178dc3a5/Objects/unicodeobject.c#L11900-L11933    # noqa: E501
    mixed with:
    https://github.com/python/cpython/blob/201c8f79450628241574fba940e08107178dc3a5/Objects/bytes_methods.c#L131-L156    # noqa: E501
    c                 S   sp   t | }|dkrtt| dS |dkr*dS d}t|D ]4}t| |}t|sTt|rZ dS |s6t|r6d}q6|S r	  )r   r1   r   r   r0   r6   )rE   rF   r  r   r   rT   rT   rU   r#  :  s    
zunicode_islower.<locals>.implrT   r  rT   rT   rU   unicode_islower1  s    	r  isidentifierc                 C   s   dd }|S )z%Implements UnicodeType.isidentifier()c                 S   s^   t | }|dkrdS t| d}t|s2|dkr2dS td|D ]}t| |}t|s< dS q<dS )Nr   F_   rn   T)r   r   r,   r   r-   )rE   rF   Zfirst_cpr   ra  rT   rT   rU   r#  Q  s    

z"unicode_isidentifier.<locals>.implrT   r  rT   rT   rU   unicode_isidentifierM  s    r!  c                    s    fdd}|S )Nc                    s    fdd}|S )Nc                    sX   t | }|dkr t| dS r.|dkr.dS t|D ]}t| |} |s6 dS q6dS r	  r
  )rE   rF   r   ra  _PyUnicode_IS_funcempty_is_falserT   rU   r#  g  s    
z*gen_isX.<locals>.unicode_isX.<locals>.implrT   r  r"  rT   rU   unicode_isXf  s    zgen_isX.<locals>.unicode_isXrT   )r#  r$  r%  rT   r"  rU   gen_isXe  s    r&  isspace	isnumericisdigit	isdecimalisprintablec                    s    fdd}|S )z)Generate common case operation performer.c           	         s   t | }|dkr t| j|| jS | jrBt| j|d} | | |S ttd| | j}dg}| |||}|d }t|}t||t|}t|D ]}t||t	|| q|S )Nr   rn      )
r   r   r[   r\   r   r   r   r   r   r   )	rE   rF   r   tmpmaxcharsZ	newlengthmaxcharZnewkindr   r  rT   rU   r#    s     
zcase_operation.<locals>.implrT   )r  r   r#  rT   r  rU   case_operation  s    r0  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   rn   i  i  )r   r/   r.   )rE   rF   r   r   r  Zfinal_sigmarT   rT   rU   _handle_capital_sigma  s"    



r1  c                 C   s&   | dkrt ||||d< dS t| |S )z>This is a translation of the function that lowers a character.i  r   rn   )r1  r&   )ra  rE   rF   r   mappedrT   rT   rU   _lower_ucs4  s    r3  c                    s    fdd}|S )Nc           
         s   d}t |D ]t}tjdtd}t| |} r>t|| |||}n
t||}|d | D ]*}	t|d |	|d< t|||	 |d7 }qTq|S Nr   r,  rU  rn   )	r   r   zerosr#   r   r3  r%   maxr   )
rE   rF   r   r.  kr   r2  ra  n_resr  lowerrT   rU   _do_upper_or_lower  s    

z7_gen_unicode_upper_or_lower.<locals>._do_upper_or_lowerrT   )r;  r<  rT   r:  rU   _gen_unicode_upper_or_lower  s    r=  c                    s    fdd}|S )Nc                    s0   t t| D ]}t| |}t|| | qd S r   )r   r   r   r   rE   r   r   ra  funcrT   rU   _ascii_upper_or_lower  s    
z8_gen_ascii_upper_or_lower.<locals>._ascii_upper_or_lowerrT   )r@  rA  rT   r?  rU   _gen_ascii_upper_or_lower  s    rB  r;  c                 C   s
   t ttS )zImplements .lower())r0  _ascii_lower_unicode_lowerr  rT   rT   rU   unicode_lower  s    rE  upperc                 C   s
   t ttS )zImplements .upper())r0  _ascii_upper_unicode_upperr  rT   rT   rU   unicode_upper  s    rI  c                 C   s~   d}t jdtd}t|D ]^}|d t| |}t||}|d | D ].}	|d }
t|
|	|d< t|||	 |d7 }qHq|S r4  )	r   r6  r#   r   fillr   r'   r7  r   )rE   rF   r   r.  r8  r2  r   ra  r9  r  r/  rT   rT   rU   _unicode_casefold 	  s    


rK  c                 C   s0   t t| D ]}t| |}t||t| qd S r   )r   r   r   r   r"   r>  rT   rT   rU   _ascii_casefold	  s    
rL  casefoldc                 C   s
   t ttS )zImplements str.casefold())r0  rL  rK  r  rT   rT   rU   unicode_casefold	  s    rN  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 r4  )
r   r6  r#   r   r(   r7  r   r   rJ  r3  )rE   rF   r   r.  r8  r/  r2  ra  r9  r  r   rT   rT   rU   _unicode_capitalize	  s&    






rO  c                 C   sL   t | d}t|dt| tdt| D ]}t | |}t||t| q(d S rB  )r   r   r!   r   r   r"   )rE   r   ra  r   rT   rT   rU   _ascii_capitalize9	  s
    

rP  
capitalizec                 C   s
   t ttS r   )r0  rP  rO  r  rT   rT   rU   unicode_capitalizeC	  s    rR  c                 C   s   d}d}t jdtd}t|D ]}|d t| |}|rLt|| |||}	ntt||}	|d|	 D ],}
|\}t||
|d< t	|||
 |d7 }qft
t|}q|S )zCThis is a translation of the function that titles a unicode string.r   Fr,  r5  Nrn   )r   emptyr#   r   rJ  r   r3  r(   r7  r   r.   )rE   rF   r   r.  r8  Zprevious_casedr2  r   ra  r9  r  r/  rT   rT   rU   _unicode_titleI	  s     


rT  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   ra  rT   rT   rU   _ascii_title`	  s    
rU  titlec                 C   s
   t ttS )zImplements str.title())r0  rU  rT  r  rT   rT   rU   unicode_titlet	  s    rW  c                 C   sN   t t| D ]<}t| |}t|r,t|}nt|r<t|}t||| qd S r   )r   r   r   r8   r"   r7   r!   r   r>  rT   rT   rU   _ascii_swapcase|	  s    

rX  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 r4  )r   rS  r#   r   rJ  r   r0   r3  r1   r%   r7  r   )rE   rF   r   r.  r8  r/  r2  r   ra  r9  r  rT   rT   rU   _unicode_swapcase	  s$    


rY  swapcasec                 C   s
   t ttS r   )r0  rX  rY  r  rT   rT   rU   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 )Nrn   zord() expected a characterr   )r   	TypeErrorr   )r   lcrT   rT   rU   r#  	  s    zol_ord.<locals>.implr   )r   r#  rT   rT   rU   ol_ord	  s    r^  c                 C   s4   | t ksJ t| }t|d|tk}t|d|  |S r   )_MAX_UNICODEr   r   r   r   )r   rG   r  rT   rT   rU   _unicode_char	  s
    r`  zchr() arg not in range(0x%hx)c                 C   s$   | dk s| t krtttt| S r   )r_  rp   _out_of_range_msgr`  r#   )ZordinalrT   rT   rU   _PyUnicode_FromOrdinal	  s    rb  c                 C   s   t | tjrdd }|S d S )Nc                 S   s   t | S r   )rb  )r   rT   rT   rU   r#  	  s    zol_chr.<locals>.impl)r   r   r  )r   r#  rT   rT   rU   ol_chr	  s    rc  __str__c                 C   s   dd S )Nc                 S   s   | S r   rT   r   rT   rT   rU   r  	  r  zunicode_str.<locals>.<lambda>rT   r   rT   rT   rU   unicode_str	  s    re  __repr__c                 C   s   dd S )Nc                 S   s   d|  d S )N'rT   r   rT   rT   rU   r  	  r  zunicode_repr.<locals>.<lambda>rT   r   rT   rT   rU   unicode_repr	  s    rh  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rt	|  \} }td| }t||| |d8 }qt|S )NFr   Tr  rn   r  )
rd  r   floorlog10r   rr   r   r   orddivmod)	r   flagrF   rG   r   r   r   digitr   ZtenrT   rU   r#  	  s&    
zinteger_str.<locals>.implrT   )r   r#  rT   rp  rU   integer_str	  s    rq  c                 C   s   dd S )Nc                 S   s   |   S r   )rd  r   rT   rT   rU   r  	  r  zinteger_repr.<locals>.<lambda>rT   rr  rT   rT   rU   integer_repr	  s    rs  c                 C   s   dd S )Nc                 S   s   | rdS dS )NTrueFalserT   r   rT   rT   rU   r  
  r  zboolean_str.<locals>.<lambda>rT   rv  rT   rT   rU   boolean_str
  s    rw  Zgetiterc           
      C   sp   |j \}|\}| ||j}| tjd}t||}||_||_	| j
rX| j||| | }	t| ||j|	S r   )r   r  return_typer   r   r`   r   Zalloca_once_valuer_   rE   r  r   r  r   r   )
r   r   r   r   r  rE   iterobjr  Zindexptrr   rT   rT   rU   getiter_unicode
  s    rz  Ziternextc                 C   s  |j \}|\}| j}|tj}||tjtjfi }	| 	||	}
|t
}||tjfi }| 	||}| j|||d}|||jf}||j}|d||}|| ||D |
||j|f}|| t||}|||j W d    n1 s0    Y  d S )Nr   <)r   r  r  operatorgetitemr  r   r   r`   r  r   r  rE   r   r_   Zicmp_unsignedZ	set_validZif_thenZyield_r   Zincrement_indexr   )r   r   r   r   r1  ZitertyiterZtyctxZfntyZgetitem_sigZgetitem_implZlen_sigr   ry  Zstrlenr_   Zis_validZgotitemZnindexrT   rT   rU   iternext_unicode%
  s*    


r  )r   )NN)NN)NN)NN)NN)NN)NN)r   )Nr|   )Nr|   )r~  )F)N)N)N)T)r|   )T)r\  r|  numpyr   Zllvmlite.irr   r   Znumba.core.cgutilsr   Znumba.core.extendingr   r   r   r   r	   r
   r   r   r   r   Znumba.core.imputilsr   r   r   r   r   r   Znumba.core.datamodelr   r   Z
numba.corer   r   Znumba.core.pythonapir   r   r   r   Znumba._helperlibr   Znumba.cpython.hashingr   Znumba.core.unsafe.bytesr   Znumba.core.errorsr    Znumba.cpython.unicode_supportr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   Znumba.cpythonrB   r_  rM   Zbitwidthr  r   rD   ZUnicodeIteratorTyper^   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r   r   r   r   r   eqr   ner   ltr   gtr   ler   ger   containsr   r	  r
  r  r  r  r  r$  r   r+  r(  r,  r4  r6  r@  rH  rJ  r  rV  rZ  re  rp  ru  ry  rx  r|  r  r  r  r  r  r  r  r  r  r  r  r  rF  r  r  r  r  rC  r  r  r  r  r}  r  r   iaddr  r  r   r  not_r  r  r  Z_unicode_is_alnumr  Z_always_falser  r  r  r  r  r  r!  r&  r0  r1  r3  r=  rH  rD  rB  rG  rC  rE  rI  rK  rL  rN  rO  rP  rR  rT  rU  rW  rX  rY  r[  rl  r^  r`  ra  rb  chrrc  re  rh  r  rq  rs  r  rw  rz  ZNEWr  rT   rT   rT   rU   <module>   s@  0 	




















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