o
    Td;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d?dudvZeejVdwd?dxdyZeejVdzd{d| ZeejVd}d?d~dZeejVddd Zedd ZeejVdd?ddZeejVdd?ddZeejVdd@ddZeejVddAddZdd Zeee8Zeee9ZeejVddAddZeejVddBddZdd ZeejVded6 eejVded dd ZeeeAZeee@ZeejVddCddZedd ZeejVddd ZeejVddd Zedd Zedd Zdd Zdd ZeejVddDddZeejVddDddZeejVddDddZedEdd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ՃdFddׄ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ȐdEdd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 (G      N)IntTypeConstant)is_nonelike)
modelsregister_modelmake_attribute_wrapperunboxboxNativeValueoverloadoverload_method	intrinsicregister_jitable)lower_constant
lower_castlower_builtiniternext_implimpl_ret_new_refRefType)register_defaultStructModel)typescgutils)PY_UNICODE_1BYTE_KINDPY_UNICODE_2BYTE_KINDPY_UNICODE_4BYTE_KINDPY_UNICODE_WCHAR_KIND)	c_helpers)
_Py_hash_t)memcpy_region)TypingError)!_Py_TOUPPER_Py_TOLOWER_Py_UCS4_Py_ISALNUM_PyUnicode_ToUpperFull_PyUnicode_ToLowerFull_PyUnicode_ToFoldedFull_PyUnicode_ToTitleFull_PyUnicode_IsPrintable_PyUnicode_IsSpace_Py_ISSPACE_PyUnicode_IsXidStart_PyUnicode_IsXidContinue_PyUnicode_IsCased_PyUnicode_IsCaseIgnorable_PyUnicode_IsUppercase_PyUnicode_IsLowercase_PyUnicode_IsLineBreak_Py_ISLINEBREAK_Py_ISLINEFEED_Py_ISCARRIAGERETURN_PyUnicode_IsTitlecase_Py_ISLOWER_Py_ISUPPER_Py_TAB_Py_LINEFEED_Py_CARRIAGE_RETURN	_Py_SPACE_PyUnicode_IsAlpha_PyUnicode_IsNumeric_Py_ISALPHA_PyUnicode_IsDigit_PyUnicode_IsDecimalDigit)slicing c                   @   s   e Zd Zdd ZdS )UnicodeModelc              	   C   sV   dt jfdt jfdt jfdt jfdtfdt t jfdt jfg}tj	
| ||| d S )Ndatalengthkindis_asciihashmeminfoparent)r   voidptrintpint32uint32r   MemInfoPointerpyobjectr   r   __init__selfdmmfe_typemembers rX   h/home/ncw/WWW/www-new/content/articles/pi-bbp/venv/lib/python3.10/site-packages/numba/cpython/unicode.pyrR   O   s   
zUnicodeModel.__init__N)__name__
__module____qualname__rR   rX   rX   rX   rY   rD   M   s    rD   rE   _datarF   _lengthrG   _kindrH   	_is_asciirI   _hashc                       s   e Zd Z fddZ  ZS )UnicodeIteratorModelc                    s2   dt t jfd|jfg}tt| ||| d S )NindexrE   )r   EphemeralPointeruintprE   superrb   rR   rS   	__class__rX   rY   rR   f   s   zUnicodeIteratorModel.__init__)rZ   r[   r\   rR   __classcell__rX   rX   rg   rY   rb   d   s    rb   c                 C   s   ddl m}m}m}m}m}m}m}m}m	}	 t
d }
|||||||||||}||
}| }| }| }| }|| |	||	||	||	|}|du rStd|j}|j}|j}|d t| }|| |}t|||||jfS )ztGet string data from a python string for use at compile-time to embed
    the string data into the LLVM module.
    r   )		CFUNCTYPEc_void_pc_intc_uint	c_ssize_tc_ubyte	py_objectPOINTERbyrefextract_unicodeNz1cannot extract unicode data from the given string   )ctypesrj   rk   rl   rm   rn   ro   rp   rq   rr   r   
ValueErrorvalue_kind_to_byte_widthfrom_addressbytes)objrj   rk   rl   rm   rn   ro   rp   rq   rr   extract_unicode_fnprotofnrF   rG   rH   hashvrE   nbytesoutrX   rX   rY   compile_time_get_string_datan   s&   , r   c                 C   sz   t |\}}}}}|j}	| |	|}
t|| |}|
|_|j||_|j||_|j	||_	|j
d|_
| S )zf
    Get string data by `compile_time_get_string_data()` and return a
    unicode_type LLVM value
    )r   moduleinsert_const_bytesr   create_struct_proxyrE   rF   typerG   rH   rI   	_getvalue)contextbuildertypliteral_string	databytesrF   rG   rH   r   modgvuni_strrX   rX   rY   make_string_from_constant   s   r   c                 C   s   t | |||jS N)r   literal_value)r   r   fromtytotyvalrX   rX   rY   cast_from_literal   s   
r   c                 C   s   t | |||S r   )r   )r   r   r   pyvalrX   rX   rY   constant_unicode      r   c                 C   s   |j |\}}}}}}t| |j|j}	||	_||	_||	_||	_	||	_
|j |||	_||	_t|j|j  }
t|	 |
dS )zE
    Convert a unicode str object to a native unicode structure.
    )is_error)pyapistring_as_string_size_and_kindr   r   r   r   rE   rF   rG   rH   rI   nrt_meminfo_new_from_pyobjectrJ   rK   is_not_nullerr_occurredr
   r   )r   r{   cokrE   rF   rG   rH   r   r   r   rX   rX   rY   unbox_unicode_str   s   
r   c                 C   sR   t | |j|j|d}|j|j|j|j}|j	| |jj
|j| | |S )z@
    Convert a native unicode structure to a unicode string
    rw   )r   r   r   r   r   string_from_kind_and_datarG   rE   rF   object_hashnrtdecref)r   r   r   r   resrX   rX   rY   box_unicode_str   s   r   c                        fdd}|S )Nc                    s@   |\}}| |t  }||||g}||tdS N    )bitcastr   
as_pointerloadgepzext)r   r   	signatureargsrE   idxptrchbitsizerX   rY   codegen   s   z#make_deref_codegen.<locals>.codegenrX   r   r   rX   r   rY   make_deref_codegen   s   r   c                 C      t t jt j}|tdfS N   r   rO   rL   rM   r   	typingctxrE   offsetsigrX   rX   rY   deref_uint8      r   c                 C   r   N   r   r   rX   rX   rY   deref_uint16   r   r   c                 C   r   r   r   r   rX   rX   rY   deref_uint32   r   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 )Nrt   r   )r   r   r   unicode_typemuladdr   r   r   meminfo_allocrJ   rG   rH   rF   get_constantr   rI   meminfo_datarE   get_null_valuerK   r   )r   r   r   r   kind_valchar_bytes_val
length_valis_ascii_valuni_str_ctorr   
nbytes_valrX   rX   rY   details   s    

z_malloc_string.<locals>.details)r   r   rN   rM   rO   )r   rG   
char_bytesrF   rH   r   r   rX   rX   rY   _malloc_string   s   r   c                 C   s,   t | }t| |||}t||td |S Nr   )rx   r   _set_code_pointnprO   )rG   rF   rH   
char_widthsrX   rX   rY   _empty_string  s   r   F)_nrtc                 C   sF   | j tkrt| j|S | j tkrt| j|S | j tkr!t| j|S dS r   )r_   r   r   r]   r   r   r   r   )airX   rX   rY   _get_code_point  s   


r   c                    r   )Nc                    sT   |\}}} dk r| |t }||t  }|||||g |  S r   )truncr   r   r   storer   get_dummy_value)r   r   r   r   rE   r   r   r   r   rX   rY   r   .  s   
z!make_set_codegen.<locals>.codegenrX   r   rX   r   rY   make_set_codegen-  s   r   c                 C       t t jt jt j}|tdfS r   r   voidrL   int64rO   r   r   rE   r   r   r   rX   rX   rY   	set_uint89     r   c                 C   r   r   r   r   rX   rX   rY   
set_uint16?  r   r   c                 C   r   r   r   r   rX   rX   rY   
set_uint32E  r   r   c                 C   s\   | j tkrt| j|| d S | j tkrt| j|| d S | j tkr*t| j|| d S td)Nz4Unexpected unicode representation in _set_code_point)	r_   r   r   r]   r   r   r   r   AssertionError)r   r   r   rX   rX   rY   r   K  s   


r   c                 C   sP   | t ks|t krtd| tkr|S | tkr|tkr|S | S | tkr$| S td)N!PY_UNICODE_WCHAR_KIND unsupportedz/Unexpected unicode representation in _pick_kind)r   r   r   r   r   )kind1kind2rX   rX   rY   
_pick_kind^  s   r   c                 C   s$   | dkr|dkrt dS t dS Nrt   r   )r   rO   )	is_ascii1	is_ascii2rX   rX   rY   _pick_asciip  s   

r   c                 C   s<   | t krdS | tkrdS | tkrdS | tkrtdtd)Nrt         r   z'Unexpected unicode encoding encountered)r   r   r   r   r   )rG   rX   rX   rY   rx   w  s   rx   c                 C   sz   |dkrdS || | j krdS || |j krdS t|D ]}t| || }t||| }||k r3 dS ||kr: dS qdS )Nr   r   rt   )r^   ranger   )r   a_offsetbb_offsetnr   a_chrb_chrrX   rX   rY   _cmp_region  s   r  c                 C   s4   | dk rt S | dk rtS d}| |krd}t|tS )zK
    Compute the minimum unicode kind needed to hold a given codepoint
       i   rC   z;Invalid codepoint. Found value greater than Unicode maximum)r   r   rv   r   )cpMAX_UNICODEmsgrX   rX   rY   _codepoint_to_kind  s   r	  c                 C   s   | dk S )z;
    Returns true if a codepoint is in the ASCII range
       rX   )r   rX   rX   rY   _codepoint_is_ascii  s   r  c                 C      t | tjrdd }|S d S )Nc                 S      | j S r   )r^   r   rX   rX   rY   len_impl     zunicode_len.<locals>.len_impl
isinstancer   UnicodeType)r   r  rX   rX   rY   unicode_len     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||}|r<|r<dd }|S ||A rFdd }|S d S )Nc                 S   sd   | d u }|d u }|s|r|r|rdS dS t | } t |}t| t|kr&dS t| d|dt| dkS )NTFr   )strlenr  )r   r   a_noneb_nonerX   rX   rY   eq_impl  s   zunicode_eq.<locals>.eq_implc                 S      dS NFrX   r   r   rX   rX   rY   r       )is_internalr  r   Optionalr   r  StringLiteralUnicodeCharSeq)r   r   check_acheck_baccept	a_unicode	b_unicoder  rX   rX   rY   
unicode_eq  s$   

r(  c                 C   s`   | j r|j sd S tjtjtjf}t| |}t||}|r$|r$dd }|S ||A r.dd }|S d S )Nc                 S   s
   | |k S r   rX   r  rX   rX   rY   ne_impl     
zunicode_ne.<locals>.ne_implc                 S   r  )NTrX   r  rX   rX   rY   r    r  zunicode_ne.<locals>.eq_impl)r  r   r  r!  r"  r  )r   r   r%  r&  r'  r)  r  rX   rX   rY   
unicode_ne  s   

r+  c                 C   @   t | tjtjf}t |tjtjf}|r|rdd }|S d S d S )Nc                 S   sJ   t t| t|}t| d|d|}|dkrdS |dkr#t| t|k S dS )Nr   r   TFminr  r  r   r   minleneqcoderX   rX   rY   lt_impl     zunicode_lt.<locals>.lt_implr  r   r  r!  )r   r   r&  r'  r2  rX   rX   rY   
unicode_lt     r5  c                 C   r,  )Nc                 S   sJ   t t| t|}t| d|d|}|dkrdS |dkr#t| t|kS dS )Nr   rt   TFr-  r/  rX   rX   rY   gt_impl  r3  zunicode_gt.<locals>.gt_implr4  )r   r   r&  r'  r7  rX   rX   rY   
unicode_gt  r6  r8  c                 C   r,  )Nc                 S   s
   | |k S r   rX   r  rX   rX   rY   le_impl  r*  zunicode_le.<locals>.le_implr4  )r   r   r&  r'  r9  rX   rX   rY   
unicode_le     r:  c                 C   r,  )Nc                 S   s
   | |k  S r   rX   r  rX   rX   rY   ge_impl&  r*  zunicode_ge.<locals>.ge_implr4  )r   r   r&  r'  r<  rX   rX   rY   
unicode_ge!  r;  r=  c                 C   s,   t | tjrt |tjrdd }|S d S d S )Nc                 S   s   t | |dkS Nr   )_findr  rX   rX   rY   contains_impl.  r   z'unicode_contains.<locals>.contains_implr  )r   r   r@  rX   rX   rY   unicode_contains+  s   rA  c                 C   sb   | }t | tjr| j}n	t | tjr| j}tjtjf}|dur-t ||s/td	||| dS 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   Omittedrw   r   r   IntegerNoneTyper    format)tynamethetyacceptedrX   rX   rY   unicode_idx_check_type4  s   rK  c                 C   s(   t | tjsd|tj| }t|dS )z$Check object belongs to unicode typerB  N)r  r   r  rF  r    )rG  rH  r  rX   rX   rY   unicode_sub_check_typeH  s   rL  c                 C   s   | d|t d @ > O } | S Nrt   _BLOOM_WIDTHmaskr   rX   rX   rY   
_bloom_addQ  s   rR  c                 C   s   | d|t d @ > @ S rM  rN  rP  rX   rX   rY   _bloom_checkW  s   rS  c                 C   sX  t |}|dkr
|S |d  }}t||}td}t||}	t|D ]}
t||
}t|	|}	||kr9||
 d }q#|}
|
|| krt| ||
 }||krd}||k rlt| |
| }t||}||krdn|d7 }||k sS||krr|
S t| ||
 d }t|	|dkr|
|7 }
n|
|7 }
nt| ||
 d }t|	|dkr|
|7 }
|
d7 }
|
|| ksBdS )zLeft finder.r   rt   r   )r  r   r   rM   rR  r   rS  )rE   substrstartendmgapmlastlastzerorQ  r   r   jhaystack_ch	needle_chrX   rX   rY   _default_find]  sJ   







r_  c                 C   sX  t |}|dkr
|S |d  }}t|d}td|}|}	|	dkr:t||	}
t||
}|
|kr2|	d }|	d8 }	|	dks || }	|	|krt| |	}
|
|kr|}|dkrjt| |	| }t||}||krbn|d8 }|dksQ|dkrp|	S t| |	d }
|	|krt||
dkr|	|8 }	n|	|8 }	nt| |	d }
|	|krt||
dkr|	|8 }	|	d8 }	|	|ksBdS )zRight finder.r   rt   r   )r  r   rR  rS  )rE   rT  rU  rV  rW  skiprY  mfirstrQ  r   r   r\  r]  r^  rX   rX   rY   _default_rfind  sL   







rb  c                       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 r$dS  | |||S )Nr   r   )r  _adjust_indices)rE   rT  rU  rV  rF   
sub_length	find_funcrX   rY   impl  s   zgenerate_finder.<locals>.implNNrX   )rg  rh  rX   rf  rY   generate_finder  s   rj  findc                 C   <   t |tjrddd}|S t|d t|d t|d tS )zImplements str.find()Nc                 S      |  t|S r   )rk  r  rE   rT  rU  rV  rX   rX   rY   	find_impl     zunicode_find.<locals>.find_implrU  rV  rT  ri  )r  r   r"  rK  rL  r?  )rE   rT  rU  rV  ro  rX   rX   rY   unicode_find     



rq  rfindc                 C   rl  )zImplements str.rfind()Nc                 S   rm  r   )rs  r  rn  rX   rX   rY   
rfind_impl  rp  z!unicode_rfind.<locals>.rfind_implrU  rV  rT  ri  )r  r   r"  rK  rL  _rfind)rE   rT  rU  rV  rt  rX   rX   rY   unicode_rfind  rr  rv  rindexc                 C   ,   t |d t |d t|d ddd}|S )zImplements str.rindex()rU  rV  subNc                 S   "   |  |||}|dk rtd|S Nr   zsubstring not found)rs  rv   r   ry  rU  rV  resultrX   rX   rY   rindex_impl     z#unicode_rindex.<locals>.rindex_implri  rK  rL  )r   ry  rU  rV  r~  rX   rX   rY   unicode_rindex  
   



r  rc   c                 C   rx  )zImplements str.index()rU  rV  ry  Nc                 S   rz  r{  )rk  rv   r|  rX   rX   rY   
index_impl  r  z!unicode_index.<locals>.index_implri  r  )r   ry  rU  rV  r  rX   rX   rY   unicode_index  r  r  	partitionc                 C   j   |}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()NrB  sepc                 S   s   t |}t| jd| j}t|}| j|jk st| |k r!| ||fS |dkr)td| |}|dk r7| ||fS | d| || || t|  fS Nr   empty separator)r  r   r_   r`   r  rv   rk  rE   r  	empty_str
sep_lengthposrX   rX   rY   rh  '     


"zunicode_partition.<locals>.impl
r  r   rC  rw   r   r   r  r"  rF  r    rE   r  rI  rJ  r  rh  rX   rX   rY   unicode_partition     r  countc                 C   s@   t | t | t|tjrddd}|S d}t|t|)Nc                 S   s   d}t | }t |}t||d}t|||}|| dk s ||kr"dS | || } t | }d|}}|dkr9|d S || |kr\| |||  |krR|d7 }||7 }n|d7 }|| |ks?|S Nr   rt   )r  _normalize_slice_idx_count)srcry  rU  rV  r  src_lensub_lenrX   rX   rY   
count_implB  s&   

z!unicode_count.<locals>.count_implz+The substring must be a UnicodeType, not {}ri  )_count_args_types_checkr  r   r  r    rF  r   )r  ry  rU  rV  r  	error_msgrX   rX   rY   unicode_count;  s   
r  
rpartitionc                 C   r  )zImplements str.rpartition()NrB  r  c                 S   s   t |}t| jd| j}t|}| j|jk st| |k r!||| fS |dkr)td| |}|dk r7||| fS | d| || || t|  fS r  )r  r   r_   r`   r  rv   rs  r  rX   rX   rY   rh  p  r  z unicode_rpartition.<locals>.implr  r  rX   rX   rY   unicode_rpartition`  r  r  c                 C   sL   || kr| }|dk r|| 7 }|dk rd}|dk r"|| 7 }|dk r"d}||fS r   rX   )rF   rU  rV  rX   rX   rY   rd    s   rd  
startswithc                 C   s   t |st|tjstdt |st|tjstdt|tjr0t|jtjr0d
dd}|S t|tjr=d
dd}|S t|tjrJd
dd}|S td	)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)r  )r   prefixrU  rV  itemrX   rX   rY   startswith_tuple_impl  s
   z1unicode_startswith.<locals>.startswith_tuple_implc                 S      |  t|||S r   )r  r  )r   r  rU  rV  rX   rX   rY   startswith_char_seq_impl     z4unicode_startswith.<locals>.startswith_char_seq_implc                 S   sv   t | t |}}|d u rd}|d u r|}t|||\}}|| |k r%dS |dkr+dS | || }t|d|d|dkS Nr   FTr  rd  r  )r   r  rU  rV  rF   prefix_lengths_slicerX   rX   rY   startswith_unicode_impl  s   z3unicode_startswith.<locals>.startswith_unicode_implz9The arg 'prefix' should be a string or a tuple of stringsri  )	r   r  r   rD  r    UniTupledtyper  r"  )r   r  rU  rV  r  r  r  rX   rX   rY   unicode_startswith  s,   


r  endswithc                 C   s   |d u st |tjtjtjfstd|d u s&t |tjtjtjfs&tdt |tjtjfr6ddd}|S t |tjrCddd}|S t |tj	rPd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 r  )r  )r   rT  rU  rV  r  rX   rX   rY   endswith_impl  s
   z'unicode_endswith.<locals>.endswith_implc                 S   s   t | }t |}|d u rd}|d u r|}t|||\}}|| |k r$dS |dkr*dS | || } t | | }t| ||d|dkS r  r  )r   rT  rU  rV  rF   re  r   rX   rX   rY   r    s   c                 S   r  r   )r  r  )r   rT  rU  rV  rX   rX   rY   r    r  ri  )
r  r   rC  rD  rE  r    Tupler  r  r"  )r   rT  rU  rV  r  rX   rX   rY   unicode_endswith  s(   


r  
expandtabsr   c                 C   sd   |}t |tjr|j}n	t |tjr|j}tjtf}|dur+t ||s+td	||ddd}|S )zImplements str.expandtabs()Nz"tabsize" must be {}, not {}r   c                 S   s`  t | }d }}d}t|D ]F}t| |}|tkr9d}|dkr8|||  }|tj| kr0td||7 }||7 }q|tjd krDtd|d7 }|d7 }|ttfv rTd}q|sY| S t	| j
|| j}	d }}t|D ]D}t| |}|tkr|dkr|||  }||7 }t||| D ]}
t|	|
t q||7 }qi|d7 }t|	|| |d7 }|ttfv rd}qi|	S )Nr   FTznew string is too longrt   )r  r   r   r9   sysmaxsizeOverflowErrorr:   r;   r   r_   r`   r   r<   )rE   tabsizerF   r\  line_posfoundr   
code_pointincrr   r   rX   rX   rY   expandtabs_impl  sT   

z+unicode_expandtabs.<locals>.expandtabs_implr   )
r  r   rC  rw   r   r   rD  intr    rF  )rE   r  rI  rJ  r  rX   rX   rY   unicode_expandtabs  s   


.r  splitr   c                 C   s   |dkst |tjtjtjfsd S t |tjrd	dd}|S t |tjr+d	dd}|S |d u s=t |tjs=t|ddd u rDd	dd}|S d S )
Nr   c                 S   s   | j t||dS )N)maxsplit)r  r  )r   r  r  rX   rX   rY   
split_implE  r  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r=|| ||  |d }q'n<d}	||k r{|dksM|	|k r{t| ||d|dkrk|| ||  ||7 }|}|	d7 }	n|d7 }||k r{|dksM|	|k sM||kr|| |d   |S )Nr   r  rt   r   )r  rv   r   r   appendr  )
r   r  r  a_lensep_lenpartsrZ  r   sep_code_pointsplit_countrX   rX   rY   r  J  s>   


rw   Fc                 S   s   t | }g }d}d}d}d}t|D ]1}t| |}	t|	}
|r'|
r"q|}d}q|
s*q|| ||  d}|d7 }|dkrC||krC nq||krS|sS|| |d   |S )Nr   TFrt   r   )r  r   r   r*   r  )r   r  r  r  r  rZ  r   r  in_whitespace_blockr  is_whitespacerX   rX   rY   split_whitespace_implo  s2   
z,unicode_split.<locals>.split_whitespace_implr>  )	r  r   rC  rD  IntegerLiteralr"  r  rE  getattr)r   r  r  r  r  rX   rX   rY   unicode_split=  s$   

"
 r  c                    s   d fdd	}|S )z@Generate whitespace rsplit func based on either ascii or unicodeNr   c                    s  |dk rt j}g }t| d }|dkr_|dkr)t| |} |s!n|d8 }|dks|dk r.n1|}|d8 }|dkrJt| |} |rBn|d8 }|dks8|| |d |d   |d8 }|dks|dkr|dkryt| |} |sqn|d8 }|dksg|dkr|| d|d   |d d d S Nr   rt   r   )r  r  r  r   r  )rE   r  r  r}  r   r  r\  isspace_funcrX   rY   rsplit_whitespace_impl  sD   


z?generate_rsplit_whitespace_impl.<locals>.rsplit_whitespace_implr>  rX   )r  r  rX   r  rY   generate_rsplit_whitespace_impl  s   &r  rsplitc                 C   sh   dd }||dt jt jt jf ||dt jtf |du s&t|t jt jfr-ddd}|S dd	d
}|S )zImplements str.unicode_rsplit()c                 S   sV   | }t | tjr| j}n	t | tjr| j}|dur't ||s)td||| dS dS )z.Check object belongs to one of specified typesNrB  )r  r   rC  rw   r   r   r    rF  )rG  rH  rJ  rI  rX   rX   rY   _unicode_rsplit_check_type  s   z2unicode_rsplit.<locals>._unicode_rsplit_check_typer  r  Nr   c                 S   s   | j r	t| ||S t| ||S r   )r`   ascii_rsplit_whitespace_implunicode_rsplit_whitespace_impl)rE   r  r  rX   rX   rY   r    s   z.unicode_rsplit.<locals>.rsplit_whitespace_implc                 S   s   t |}| j|jk st| t|k r| gS dd }|dk r tj}t|}|dkr,td|dkr6|| ||S g }t| }|dkrb| j|d|d}|dk rMn|| || |  |}|d8 }|dks@|| d|  |d d d S )Nc                 S   s   g }t |d}t| d  }}|dkrC|dkrCt | |}||kr7|| |d |d   |d  }}|d8 }|d8 }|dkrC|dks|dkrR|| d|d   |d d d S r  )r   r  r  )rE   r   r  r}  ch_code_pointr   r\  data_code_pointrX   rX   rY   _rsplit_char  s   

z9unicode_rsplit.<locals>.rsplit_impl.<locals>._rsplit_charr   r  rt   )rU  rV  r   )r  r_   r  r  r  rv   rs  r  )rE   r  r  r  r  r}  r\  r  rX   rX   rY   rsplit_impl  s.   z#unicode_rsplit.<locals>.rsplit_implr>  )r   r  r"  rE  rD  r  r  rC  )rE   r  r  r  r  r  rX   rX   rY   unicode_rsplit  s   


/r  center c                 C   s^   t |tjs
tdt |tjrddd}|S |dks(t |tjtjfs(tdddd}|S )NThe width must be an Integerr  c                 S      |  |t|S r   )r  r  stringwidthfillcharrX   rX   rY   center_impl     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r6||  | S ||  ||  S )Nrt   5The fill character must be exactly one character longr   r  rv   )	r  r  r  str_lenfillchar_len	allmarginlmarginrmarginl_stringrX   rX   rY   r  %  s   r  r  r   rD  r    r"  rC  r  )r  r  r  r  rX   rX   rY   unicode_center  s   

r  c                    rc  )Nr  c                    st   t |tjs
tdt |tjr  rd
dd}|S d
dd}|S |dks1t |tjtjfs1tdd
 fdd		}|S )Nr  r  c                 S   r  r   )ljustr  r  rX   rX   rY   
ljust_implD  r  z<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.ljust_implc                 S   r  r   )rjustr  r  rX   rX   rY   
rjust_implH  r  z<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.rjust_implr  c                    sL   t | }t |}|dkrtd||kr| S |||  } r"| | S ||  S )Nrt   r  r  )r  r  r  r  r  newstrSTRING_FIRSTrX   rY   rh  P  s   z6gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.implr  r  )r  r  r  r  r  rh  r  rX   rY   unicode_Xjust>  s   

z(gen_unicode_Xjust.<locals>.unicode_Xjustr  rX   )r  r  rX   r  rY   gen_unicode_Xjust=  s   %r  r  r  Tc                    r   )zDGenerate splitlines performer based on ascii or unicode line breaks.c           
         s   t | }g }d }}||k r_||k r$t| |} |rn|d7 }||k s|}||k rP|d |k rHt| |}t| |d }	t|rHt|	rH|d7 }|d7 }|rP|}|| ||  |}||k s|S r  )r  r   r5   r4   r  )
rE   keependsrF   r}  r   r\  r  eolcur_cpnext_cpis_line_break_funcrX   rY   rh  l  s0   

z&generate_splitlines_func.<locals>.implrX   )r  rh  rX   r   rY   generate_splitlines_funcj  s   r  
splitlinesc                 C   sl   |}t |tjr|j}n	t |tjr|j}tjttjt	f}|dur/t ||s/t
dd||ddd}|S )zImplements str.splitlines()NrB  r  Fc                 S   s   | j rt| |S t| |S r   )r`   _ascii_splitlines_unicode_splitlines)rE   r  rX   rX   rY   splitlines_impl  s   

z+unicode_splitlines.<locals>.splitlines_implF)r  r   rC  rw   r   r   rD  r  Booleanboolr    rF  )rE   r  rI  rJ  r  rX   rX   rY   unicode_splitlines  s   
r
  c                 C   s   t |}|dkr
dS t | }|d | }| j}| j}|D ]}|t |7 }t||j}t||j}qt|||}|d }	t|d|	dt |	 t |	}
td|D ]"}t||
| d| |
|7 }
|| }	t||
|	dt |	 |
t |	7 }
qN|S )Nr    rt   )r  r_   r`   r   r   r   _strncpyr   )r  r  	parts_lenr  rF   rG   rH   pr}  part
dst_offsetr   rX   rX   rY   	join_list  s,   r  joinc                 C   sz   t |tjr#t |jtjrdd }|S t |jtjr dd }|S 	 d S t |tjr/dd }|S t |tjr;dd }|S d S )Nc                 S   
   t | |S r   r  )r  r  rX   rX   rY   join_list_impl  r*  z$unicode_join.<locals>.join_list_implc                 S   s   dd |D }t | |S )Nc                 S   s   g | ]}t |qS rX   r  .0r  rX   rX   rY   
<listcomp>      z8unicode_join.<locals>.join_list_impl.<locals>.<listcomp>r  )r  r  _partsrX   rX   rY   r       
c                 S   s   dd |D }|  |S )Nc                 S   s   g | ]}|qS rX   rX   r  rX   rX   rY   r    s    z8unicode_join.<locals>.join_iter_impl.<locals>.<listcomp>)r  r  r  
parts_listrX   rX   rY   join_iter_impl  r  z$unicode_join.<locals>.join_iter_implc                    s$    fddt t D }t| |S )Nc                    s   g | ]} | qS rX   rX   )r  r   r  rX   rY   r    r  z7unicode_join.<locals>.join_str_impl.<locals>.<listcomp>)r   r  r  r  rX   r   rY   join_str_impl  s   
z#unicode_join.<locals>.join_str_impl)r  r   Listr  r  r"  IterableType)r  r  r  r  r!  rX   rX   rY   unicode_join  s   r$  zfillc                 C   s    t |tjs
tddd }|S )Nz<width> must be an Integerc                 S   s\   t | }||kr
| S |r| d nd}d||  }|dv r(|| | dd   }|S ||  }|S )Nr   r  0)+-rt   r  )r  r  r  
first_charpaddingr  rX   rX   rY   
zfill_impl  s   z!unicode_zfill.<locals>.zfill_impl)r  r   rD  r    )r  r  r,  rX   rX   rY   unicode_zfill  s   r-  c                 C   s`   t | }d}|d urt|D ]}| | |vr|  S q|S t|D ]}t| | s-|  S q!|S r   r  r   r*   r  charsr  r   rX   rX   rY   unicode_strip_left_bound  s   r1  c                 C   s|   t | }d}|d ur$t|d ddD ]}| | |vr!|d7 } |S q|S t|d ddD ]}t| | s;|d7 } |S q,|S r  r.  r/  rX   rX   rY   unicode_strip_right_bound  s"   	r2  c                 C   @   t | tjr	| j} | d u st | tjtjtjfstdd S d S )Nz%The arg must be a UnicodeType or None)r  r   r   r   rC  r  rE  r    )r0  rX   rX   rY   unicode_strip_types_check'     r4  c                 C   r3  )Nz,The slice indices must be an Integer or None)r  r   r   r   rC  rD  rE  r    )argrX   rX   rY   r  0  r5  r  lstripc                 C   0   t |tjrddd}|S t| ddd}|S )Nc                 S   rm  r   )r7  r  r  r0  rX   rX   rY   lstrip_impl=  rp  z#unicode_lstrip.<locals>.lstrip_implc                 S   s   | t | |d  S r   )r1  r9  rX   rX   rY   r:  C  r  r   r  r   r"  r4  )r  r0  r:  rX   rX   rY   unicode_lstrip9     

r<  rstripc                 C   r8  )Nc                 S   rm  r   )r>  r  r9  rX   rX   rY   rstrip_implL  rp  z#unicode_rstrip.<locals>.rstrip_implc                 S   s   | d t | | S r   )r2  r9  rX   rX   rY   r?  R  r  r   r;  )r  r0  r?  rX   rX   rY   unicode_rstripH  r=  r@  stripc                 C   r8  )Nc                 S   rm  r   )rA  r  r9  rX   rX   rY   
strip_impl[  rp  z!unicode_strip.<locals>.strip_implc                 S   s    t | |}t| |}| || S r   )r1  r2  )r  r0  lbrbrX   rX   rY   rB  a  s   

r   r;  )r  r0  rB  rX   rX   rY   unicode_stripW  s   

rE  c                 C   s@   | du r
|rdS |S | dk r| |7 } | dk s| |krt d| S )a%  
    Parameters
    ----------
    idx : int or None
        the index
    length : int
        the string length
    is_start : bool; optional with defaults to True
        Is it the *start* or the *stop* of the slice?

    Returns
    -------
    norm_idx : int
        normalized index
    Nr   zstring index out of range)
IndexError)r   rF   is_startrX   rX   rY   normalize_str_idxl  s   rH  c                 C   s:   | du r|S | |   kr|k r| | S  | dk rdS | S )a%  
    Used for unicode_count

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

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

    If arg > slice_len, returns arg (in this case count must
    return 0 if it is start index)
    Nr   rX   )r6  	slice_lendefaultrX   rX   rY   r    s   r  c                 C   s   |||}dd }||fS )zFix slice object.
    c           	      S   sF   |j \}}|\}}| |||}t| ||| t||| | S r   )r   make_helperrB   guard_invalid_slice	fix_slicer   )	r   r   r   r   	slicetype
lengthtypesliceobjrF   slicerX   rX   rY   r     s   
z!_normalize_slice.<locals>.codegenrX   )r   rP  rF   r   r   rX   rX   rY   _normalize_slice  s   
rR  c                 C   s   t |}dd }||fS )z2Compute the span from the given slice object.
    c                 S   s,   |j \}|\}| |||}t||}|S r   )r   rK  rB   get_slice_length)r   r   r   r   rN  rP  rQ  result_sizerX   rX   rY   r     s
   z_slice_span.<locals>.codegen)r   rM   )r   rP  r   r   rX   rX   rY   _slice_span  s   
rU  c           
      C   sv   |j | j kr%t|j }|| }|| }|| }t| j||j||dd d S t|D ]}	t| ||	 t|||	  q)d S )Nrt   )align)r_   rx   r   r]   r   r   r   )
dstr  r  
src_offsetr  
byte_widthsrc_byte_offsetdst_byte_offsetr   r   rX   rX   rY   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rq| j||jd | | S )Nr   r   r   )r   r   r   r   rJ   rG   rH   rF   r   r   rI   typing_contextresolve_value_typerx   get_call_typerN   get_functionr   r   rE   r   rK   r   
enable_nrtr   increfr   r   )r   r   r   r   r  rU  rF   in_strview_strbw_typbw_sigbw_implrY  r   rX   rX   rY   r     s8   
z$_get_str_slice_view.<locals>.codegen)r   r   rM   )r   src_tstart_tlength_tr   r   rX   rX   rY   _get_str_slice_view  s   rj  c                 C   sD   t | tjrt |tjrdd }|S t |tjr dd }|S d S d S )Nc                 S   sZ   t |t| }t| |}t|}|| jkrt| |dS t|}t|d|}t|d| |S r   )	rH  r  r   r	  r_   rj  r  r   r   )r   r   r  rG   rH   retrX   rX   rY   getitem_char  s   

z%unicode_getitem.<locals>.getitem_charc                 S   s   t |t| }t|}t| |j}t|}t|}t|j|j |j	|jD ]}t| |}|t|M }t|}||kr?t
||}q%|jdkrQ|| jkrQt| |j|S t|||}	|j}
t|D ]}t|	|t| |
 |
|j7 }
q^|	S rM  )rR  r  rU  r   rU  r	  r  r   stepstopr   r_   rj  r   r   )r   r   	slice_idxspanr  rG   rH   r   new_kindrk  currX   rX   rY   getitem_slice  s,   

z&unicode_getitem.<locals>.getitem_slice)r  r   r  rD  	SliceType)r   r   rl  rs  rX   rX   rY   unicode_getitem  s   $ru  c                 C   sP   t | tjrt |tjrdd }|S t | tjr$t |tjr&dd }|S 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	|| q2|S r   )
r^   r   r_   r   r`   r   r   r  r   r   )r   r   
new_lengthrq  	new_asciir}  r   r\  rX   rX   rY   concat_impl7  s   z#unicode_concat.<locals>.concat_implc                 S   s   | t | S r   r  r  rX   rX   rY   rx  D     )r  r   r  r"  )r   r   rx  rX   rX   rY   unicode_concat3  s   
rz  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rEt|||d| |d9 }d| |ks3d| |ks[|| }t||||| | |S d S )Nr  rt   r   r   )r^   r_   r   r`   r  r  )str_argmult_argrv  rq  r}  len_a	copy_sizerestrX   rX   rY   _repeat_implI  s&   
r  c                 C   sP   t | tjrt |tjrdd }|S t | tjr$t |tjr&dd }|S d S d S )Nc                 S   r  r   r  r  rX   rX   rY   wrapg  r*  zunicode_repeat.<locals>.wrapc                 S   s
   t || S r   r  r  rX   rX   rY   r  k  r*  )r  r   r  rD  )r   r   r  rX   rX   rY   unicode_repeatd  s   r  c                 C   r  )Nc                 S   s   t | dkS r   r)  r   rX   rX   rY   rh  s  ry  zunicode_not.<locals>.implr  r   rh  rX   rX   rY   unicode_notp  r  r  replacec                 C   s   |}t |tjr|j}n	t |tjr|j}t |ttjfs$td	|t |tj
tjfs4td	|t |tj
sAtd	|ddd}|S )NzGUnsupported parameters. The parameters must be Integer. Given count: {}z+The object must be a UnicodeType. Given: {}r   c           	      S   s   |dkr| S |dkr]t | }|dkr||| | S |g}tt||}t|D ]#}|||  |d |kr>|| q)|d||d d   q)|t|krX|| d|S | ||}||}|S )Nr   r  r   rt   )listr  r.  r  r   r  r  )	r   old_strnew_strr  scharssplit_result	min_countr   r}  rX   rX   rY   rh    s&   


zunicode_replace.<locals>.implr   )r  r   rC  rw   r   r   r  rD  r    rF  r  rE  )r   r  r  r  rI  rh  rX   rX   rY   unicode_replacex  s&   
r  c                        fdd}|S )Nc                        fdd}|S )Nc                    s   t | }|dkr
dS |dkrt| d}| jr |S |S | jr4t|D ]}t| |} |s3 dS q%t|D ]}t| |}|sF dS q8dS )Nr   Frt   T)r  r   r`   r   )rE   rF   r  r   
ascii_funcunicode_funcrX   rY   rh    s(   


z.gen_isAlX.<locals>.unicode_isAlX.<locals>.implrX   rE   rh  r  rX   rY   unicode_isAlX  s   z gen_isAlX.<locals>.unicode_isAlXrX   )r  r  r  rX   r  rY   	gen_isAlX  s   r  isalphac                 C   s   t | pt| S r   )r>   r=   xrX   rX   rY   <lambda>  s   r  isalnumc                    s    fdd}|S )Nc                    sp   t | }|dkrt| dS |dkrdS d}t|D ]}t| |} |s*|r- dS |s5|r5d}q|S Nrt   r   FTr  r   r   )r   lcasedr   r  is_loweris_titleis_upperrX   rY   rh    s   
z_is_upper.<locals>.implrX   )r  r  r  rh  rX   r  rY   	_is_upper  s   r  c                 C   r  r  rX   r  rX   rX   rY   r        isupperc                 C      dd }|S )z
    Implements .isupper()
    c                 S   s   | j rt| S t| S r   )r`   _ascii_is_upper_unicode_is_upperr  rX   rX   rY   rh    s   zunicode_isupper.<locals>.implrX   r  rX   rX   rY   unicode_isupper  s   r  isasciic                 C   r  )z Implements UnicodeType.isascii()c                 S   r  r   )r`   rE   rX   rX   rY   rh    r  zunicode_isascii.<locals>.implrX   r  rX   rX   rY   unicode_isascii  s   r  istitlec                 C   r  )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rdS d}d}t|D ])}t| |}t|s2t|r<|r7 dS d}d}q#t|rJ|sE dS d}d}q#d}q#|S r  )r  r   r0   r6   r   r1   )rE   rF   charr  previous_is_casedr   rX   rX   rY   rh    s,   

zunicode_istitle.<locals>.implrX   r  rX   rX   rY   unicode_istitle  s   r  islowerc                 C   r  )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 ]}t| |}t|s*t|r- dS |s5t|r5d}q|S r  )r  r1   r   r   r0   r6   )rE   rF   r  r   r  rX   rX   rY   rh  :  s   
zunicode_islower.<locals>.implrX   r  rX   rX   rY   unicode_islower1  s   	r  isidentifierc                 C   r  )z%Implements UnicodeType.isidentifier()c                 S   s^   t | }|dkr
dS t| d}t|s|dkrdS td|D ]}t| |}t|s, dS qdS )Nr   F_   rt   T)r  r   r,   r   r-   )rE   rF   first_cpr   r  rX   rX   rY   rh  Q  s   

z"unicode_isidentifier.<locals>.implrX   r  rX   rX   rY   unicode_isidentifierM  s   r  c                    r  )Nc                    r  )Nc                    sX   t | }|dkr t| dS r|dkrdS t|D ]}t| |} |s) dS qdS r  r  )rE   rF   r   r  _PyUnicode_IS_funcempty_is_falserX   rY   rh  g  s   
z*gen_isX.<locals>.unicode_isX.<locals>.implrX   r  r  rX   rY   unicode_isXf  s   zgen_isX.<locals>.unicode_isXrX   )r  r  r  rX   r  rY   gen_isXe  s   r  isspace	isnumericisdigit	isdecimalisprintablec                    r  )z)Generate common case operation performer.c           	         s   t | }|dkrt| j|| jS | jr!t| j|d} | | |S ttd| | j}dg}| |||}|d }t|}t||t|}t|D ]}t||t	|| qH|S )Nr   rt      )
r  r   r_   r`   r   r	  r  r   r   r   )	rE   rF   r   tmpmaxchars	newlengthmaxcharnewkindr   r  rX   rY   rh    s    
zcase_operation.<locals>.implrX   )r  r  rh  rX   r  rY   case_operation  s   r  c                 C   s   d}|d }|dkrt | |}t|sn|d8 }|dks
|dko#t|}|rI|d }||k r@t | |}t|s8n|d7 }||k s.||kpHt| }|rMdS dS )zEThis is a translation of the function that handles the capital sigma.r   rt   i  i  )r   r/   r.   )rE   rF   r   r   r\  final_sigmarX   rX   rY   _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   rt   )r  r&   )r  rE   rF   r   mappedrX   rX   rY   _lower_ucs4  s   
r  c                    r   )Nc           
         s   d}t |D ]:}tjdtd}t| |} rt|| |||}nt||}|d | D ]}	t|d |	|d< t|||	 |d7 }q*q|S Nr   r  r  rt   )	r   r   zerosr#   r   r  r%   maxr   )
rE   rF   r   r  kr   r  r  n_resrW  lowerrX   rY   _do_upper_or_lower  s   


z7_gen_unicode_upper_or_lower.<locals>._do_upper_or_lowerrX   )r  r  rX   r  rY   _gen_unicode_upper_or_lower  s   r  c                    r   )Nc                    s0   t t| D ]}t| |}t|| | qd S r   )r   r  r   r   rE   r   r   r  funcrX   rY   _ascii_upper_or_lower  s   
z8_gen_ascii_upper_or_lower.<locals>._ascii_upper_or_lowerrX   )r  r  rX   r  rY   _gen_ascii_upper_or_lower  s   r  r  c                 C   
   t ttS )zImplements .lower())r  _ascii_lower_unicode_lowerr  rX   rX   rY   unicode_lower     
r  upperc                 C   r  )zImplements .upper())r  _ascii_upper_unicode_upperr  rX   rX   rY   unicode_upper  r  r  c                 C   s~   d}t jdtd}t|D ]/}|d t| |}t||}|d | D ]}	|d }
t|
|	|d< t|||	 |d7 }q$q|S r  )	r   r  r#   r   fillr   r'   r  r   )rE   rF   r   r  r  r  r   r  r  rW  r  rX   rX   rY   _unicode_casefold 	  s   



r  c                 C   s0   t t| D ]}t| |}t||t| qd S r   )r   r  r   r   r"   r  rX   rX   rY   _ascii_casefold	  s   
r  casefoldc                 C   r  )zImplements str.casefold())r  r  r  r  rX   rX   rY   unicode_casefold	  r  r  c                 C   s   d}d}t jdtd}t| d}t||}|d | D ]}	t||	}t|||	 |d7 }qtd|D ],}
|d t| |
}t	|| ||
|}|d | D ]}	t||	}t|||	 |d7 }qLq2||d< |S r  )
r   r  r#   r   r(   r  r   r   r  r  )rE   rF   r   r  r  r  r  r  r  rW  r   rX   rX   rY   _unicode_capitalize	  s(   







r  c                 C   sL   t | d}t|dt| tdt| D ]}t | |}t||t| qd S r  )r   r   r!   r   r  r"   )rE   r   r  r   rX   rX   rY   _ascii_capitalize9	  s   

r  
capitalizec                 C   r  r   )r  r  r  r  rX   rX   rY   unicode_capitalizeC	     
r  c                 C   s   d}d}t jdtd}t|D ]A}|d t| |}|r&t|| |||}	ntt||}	|d|	 D ]}
|\}t||
|d< t	|||
 |d7 }q3t
t|}q|S )zCThis is a translation of the function that titles a unicode string.r   Fr  r  Nrt   )r   emptyr#   r   r  r   r  r(   r  r   r.   )rE   rF   r   r  r  previous_casedr  r   r  r  rW  r  rX   rX   rY   _unicode_titleI	  s    


r  c                 C   sh   d}t t| D ])}t| |}t|r|st|}d}nt|r)|r&t|}d}nd}t||| qdS )z" Does .title() on an ASCII string FTN)r   r  r   r7   r!   r8   r"   r   )rE   r   r  r   r  rX   rX   rY   _ascii_title`	  s   
r  titlec                 C   r  )zImplements str.title())r  r  r  r  rX   rX   rY   unicode_titlet	  s   
r  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  rX   rX   rY   _ascii_swapcase|	  s   

r  c                 C   s   d}d}t jdtd}t|D ]A}|d t| |}t|r(t|| |||}	nt|r2t	||}	nd}	||d< |d |	 D ]}
t
||
}t|||
 |d7 }q>q||d< |S r  )r   r  r#   r   r  r   r0   r  r1   r%   r  r   )rE   rF   r   r  r  r  r  r   r  r  rW  rX   rX   rY   _unicode_swapcase	  s&   



r  swapcasec                 C   r  r   )r  r  r  r  rX   rX   rY   unicode_swapcase	  r  r  c                 C   r  )Nc                 S   s"   t | }|dkrtdt| dS )Nrt   zord() expected a characterr   )r  	TypeErrorr   )r   lcrX   rX   rY   rh  	  s   
zol_ord.<locals>.implr  )r   rh  rX   rX   rY   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   rk  rX   rX   rY   _unicode_char	  s
   r  zchr() arg not in range(0x%hx)c                 C   s$   | dk s| t krtttt| S r   )r  rv   _out_of_range_msgr  r#   )ordinalrX   rX   rY   _PyUnicode_FromOrdinal	  s   r  c                 C   r  )Nc                 S   s   t | S r   )r  )r   rX   rX   rY   rh  	  s   zol_chr.<locals>.impl)r  r   rD  )r   rh  rX   rX   rY   ol_chr	  r  r  __str__c                 C      dd S )Nc                 S   s   | S r   rX   r  rX   rX   rY   r  	  r  zunicode_str.<locals>.<lambda>rX   r  rX   rX   rY   unicode_str	     r  __repr__c                 C   r  )Nc                 S   s   d|  d S )N'rX   r  rX   rX   rY   r  	      zunicode_repr.<locals>.<lambda>rX   r  rX   rX   rY   unicode_repr	  s   r
  c                    s   | d  fdd}|S )N
   c           	         s   d}| dk r|  } d}| dkrdS |d t tt|  }t}t|}t|||d}|r6t|dtd |d }| dkrYt	|  \} }td| }t||| |d8 }| dks>|S )NFr   Tr&  rt   r(  )
r  r   floorlog10r   rx   r   r   orddivmod)	r  flagrF   rG   r   r   r   digitr   tenrX   rY   rh  	  s(   zinteger_str.<locals>.implrX   )r  rh  rX   r  rY   integer_str	  s   r  c                 C   r  )Nc                 S   s   |   S r   )r  r  rX   rX   rY   r  	  s    zinteger_repr.<locals>.<lambda>rX   r  rX   rX   rY   integer_repr	  r  r  c                 C   r  )Nc                 S   s   | rdS dS )NTrueFalserX   r   rX   rX   rY   r  
  r	  zboolean_str.<locals>.<lambda>rX   r  rX   rX   rY   boolean_str
  s   r  getiterc           
      C   sp   |j \}|\}| ||j}| tjd}t||}||_||_	| j
r,| j||| | }	t| ||j|	S r   )r   rK  return_typer   r   re   r   alloca_once_valuerc   rE   r`  r   ra  r   r   )
r   r   r   r   rG  rE   iterobjr[  indexptrr   rX   rX   rY   getiter_unicode
  s   r   iternextc                 C   s  |j \}|\}| j}|tj}||tjtjfi }	| 	||	}
|t
}||tjfi }| 	||}| j|||d}|||jf}||j}|d||}|| ||# |
||j|f}|| t||}|||j W d    d S 1 sw   Y  d S )Nr   <)r   r\  r]  operatorgetitemr^  r   r   re   r_  r  rK  rE   r   rc   icmp_unsigned	set_validif_thenyield_r   increment_indexr   )r   r   r   r   r}  itertyitertyctxfntygetitem_siggetitem_impllen_sigr  r  strlenrc   is_validgotitemnindexrX   rX   rY   iternext_unicode%
  s,   


"r5  )r   ri  r  r>  r  r  r   )Tr  )r  r#  numpyr   llvmlite.irr   r   numba.core.cgutilsr   numba.core.extendingr   r   r   r   r	   r
   r   r   r   r   numba.core.imputilsr   r   r   r   r   r   numba.core.datamodelr   r   
numba.corer   r   numba.core.pythonapir   r   r   r   numba._helperlibr   numba.cpython.hashingr   numba.core.unsafe.bytesr   numba.core.errorsr    numba.cpython.unicode_supportr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   numba.cpythonrB   r  rM   bitwidthrO  r  rD   UnicodeIteratorTyperb   r   r   r!  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rx   r  r	  r  r  r  eqr(  ner+  ltr5  gtr8  ler:  ger=  containsrA  rK  rL  rR  rS  r_  rb  rj  r?  ru  rq  rv  r  r  r  r  r  rd  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r$  r-  r1  r2  r4  r  r<  r@  rE  rH  r  rR  rU  r  rj  r$  ru  r   iaddrz  r  r   r  not_r  r  r  _unicode_is_alnumr  _always_falser  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  chrr  r  r
  rD  r  r  r  r  r   NEWr5  rX   rX   rX   rY   <module>   sB   0 	





















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