o
    Y۷i_                    @   s  d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZmZ d dlmZmZ d dlmZm Z m!Z! d dl"m#Z# d d	l$m%Z%m&Z&m'Z' d d
l(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ d dlRmSZS e#dv rd dl$mTZT dZUe!jVrejWjXZYnejZjXZYeej[G dd de
jZ\eej[dd eej[dd eej[dd eej[dd eej[dd eej]G dd  d eZ^d!d" Z_d#d$ Z`eejaejbd%d& Zceejbd'd( Zdeej[d)d* Zeeej[d+d, Zfd-d. Zged/d0 Zhed1d2 Zied3d4 Zjed5d6 ZkedDd7d8Zled9d:d;d< Zmd=d> Zned?d@ ZoedAdB ZpedCdD Zqed9d:dEdF Zre#dGv redHdI Zsne#dv redJdI Zsnete#edKdL Zue#dGv redMdN Zvne#dv redOdN Zvnete#ed9d:dPdQ ZwedRdS ZxedTdU ZyeezdVdW Z{eej|dXdY Z}eej~dZd[ Zeejd\d] Zeejd^d_ Zeejd`da Zeejdbdc Zeejddde Zdfdg Zdhdi Zedjdk Zedldm Zedndo Zedpdq Zdrds ZeeeZeeeZeej[dtdEdudvZeej[dwdEdxdyZeej[dzdEd{d|Zeej[d}dEd~dZeej[ddd Zeej[ddEddZeej[ddd Zedd Zeej[ddEddZeej[ddEddZeej[ddFddZeej[ddGddZdd Zeee:Zeee;Zeej[ddGddZeej[ddHddZdd Zeej[ded9 eej[ded dd ZeeeCZeeeBZeej[ddIddZedd Zeej[ddd Zeej[ddd Zedd Zedd Zdd Zdd Zeej[ddJddZeej[ddJddZeej[ddJddĄZedKddƄZeddȄ Zeddʄ Zedd̄ Zed9d:dd΄ ZeddЄ Zeejdd҄ ZeejeejddԄ Zeddք Zeejdd؄ Zeejddڄ Zeej[dۃdLdd݄Zdd߄ Zeej[deeOeM edd Zeej[dee4eŃ dd Zedd ZeeeGeHeǃZeeeAe@eFZeej[ddd Zeej[ddd Zeej[ddd Zeej[ddd Zeej[ddd ZΐdKddZeej[dee: eej[deeN eej[deeP eej[deeQ eej[dee9d9 dd Zedd  Zedd ZҐdd Zeed9ZeedZՐdd Zeee1Zeee2Zeej[ddd	 Zeej[d
dd Zedd Zedd Zeej[ddd Zedd Zedd Zeej[ddd Zedd Zedd Zeej[dd d! Zed"d# Zed$d% Zeej[d&d'd( Zeed)d* Zed+d, Zd-eU Zed.d/ Zeed0d1 Zeej[d2d3d4 Zeej[d5d6d7 Zeejd2d8d9 Zeejd5d:d; Zeejd5eejd2d<d= Zed>ej[d?d@ ZedAej]eejdBdC ZdS (M      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config)	PYVERSION)PY_UNICODE_1BYTE_KINDPY_UNICODE_2BYTE_KINDPY_UNICODE_4BYTE_KIND)	c_helpers)
_Py_hash_t)memcpy_region)TypingError)!_Py_TOUPPER_Py_TOLOWER_Py_UCS4_Py_ISALNUM_PyUnicode_ToUpperFull_PyUnicode_ToLowerFull_PyUnicode_ToFoldedFull_PyUnicode_ToTitleFull_PyUnicode_IsPrintable_PyUnicode_IsSpace_Py_ISSPACE_PyUnicode_IsXidStart_PyUnicode_IsXidContinue_PyUnicode_IsCased_PyUnicode_IsCaseIgnorable_PyUnicode_IsUppercase_PyUnicode_IsLowercase_PyUnicode_IsLineBreak_Py_ISLINEBREAK_Py_ISLINEFEED_Py_ISCARRIAGERETURN_PyUnicode_IsTitlecase_Py_ISLOWER_Py_ISUPPER_Py_TAB_Py_LINEFEED_Py_CARRIAGE_RETURN	_Py_SPACE_PyUnicode_IsAlpha_PyUnicode_IsNumeric_Py_ISALPHA_PyUnicode_IsDigit_PyUnicode_IsDecimalDigit)slicing))   
   )rD      )PY_UNICODE_WCHAR_KIND c                   @   s   e Zd Zdd ZdS )UnicodeModelc              	   C   sV   dt jfdt jfdt jfdt jfdtfdt t jfdt jfg}tj	
| ||| d S )Ndatalengthkindis_asciihashmeminfoparent)r   voidptrintpint32uint32r   MemInfoPointerpyobjectr   r   __init__selfdmmfe_typemembers r]   K/home/ubuntu/vllm_env/lib/python3.10/site-packages/numba/cpython/unicode.pyrW   T   s   
zUnicodeModel.__init__N)__name__
__module____qualname__rW   r]   r]   r]   r^   rI   R   s    rI   rJ   _datarK   _lengthrL   _kindrM   	_is_asciirN   _hashc                       s   e Zd Z fddZ  ZS )UnicodeIteratorModelc                    s2   dt t jfd|jfg}tt| ||| d S )NindexrJ   )r   EphemeralPointeruintprJ   superrg   rW   rX   	__class__r]   r^   rW   k   s   zUnicodeIteratorModel.__init__)r_   r`   ra   rW   __classcell__r]   r]   rl   r^   rg   i   s    rg   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   )ctypesro   rp   rq   rr   rs   rt   ru   rv   rw   r   
ValueErrorvalue_kind_to_byte_widthfrom_addressbytes)objro   rp   rq   rr   rs   rt   ru   rv   rw   extract_unicode_fnprotofnrK   rL   rM   hashvrJ   nbytesoutr]   r]   r^   compile_time_get_string_datas   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_proxyrJ   rK   typerL   rM   rN   	_getvalue)contextbuildertypliteral_string	databytesrK   rL   rM   r   modgvuni_strr]   r]   r^   make_string_from_constant   s   r   c                 C   s   t | |||jS N)r   literal_value)r   r   fromtytotyvalr]   r]   r^   cast_from_literal   s   
r   c                 C   s   t | |||S r   )r   )r   r   r   pyvalr]   r]   r^   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   rJ   rK   rL   rM   rN   nrt_meminfo_new_from_pyobjectrO   rP   is_not_nullerr_occurredr
   r   )r   r   cokrJ   rK   rL   rM   r   r   r   r]   r]   r^   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
    r|   )r   r   r   r   r   string_from_kind_and_datarL   rJ   rK   object_hashnrtdecref)r   r   r   r   resr]   r]   r^   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argsrJ   idxptrchbitsizer]   r^   codegen   s   z#make_deref_codegen.<locals>.codegenr]   r   r   r]   r   r^   make_deref_codegen   s   r   c                 C      t t jt j}|tdfS N   r   rT   rQ   rR   r   	typingctxrJ   offsetsigr]   r]   r^   deref_uint8      r   c                 C   r   N   r   r   r]   r]   r^   deref_uint16   r   r   c                 C   r   r   r   r   r]   r]   r^   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 )Nry   r   )r   r   r   unicode_typemuladdr   r   r   meminfo_allocrO   rL   rM   rK   get_constantr   rN   meminfo_datarJ   get_null_valuerP   r   )r   r   r   r   kind_valchar_bytes_val
length_valis_ascii_valuni_str_ctorr   
nbytes_valr]   r]   r^   details   s    

z_malloc_string.<locals>.details)r   r   rS   rR   rT   )r   rL   
char_bytesrK   rM   r   r   r]   r]   r^   _malloc_string   s   r   c                 C   s,   t | }t| |||}t||td |S Nr   )r}   r   _set_code_pointnprT   )rL   rK   rM   
char_widthsr]   r]   r^   _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   )rd   r   r   rb   r   r   r   r   )air]   r]   r^   _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   rJ   r   r   r   r   r]   r^   r   3  s   
z!make_set_codegen.<locals>.codegenr]   r   r]   r   r^   make_set_codegen2  s   r   c                 C       t t jt jt j}|tdfS r   r   voidrQ   int64rT   r   r   rJ   r   r   r   r]   r]   r^   	set_uint8>     r   c                 C   r   r   r   r   r]   r]   r^   
set_uint16D  r   r   c                 C   r   r   r   r   r]   r]   r^   
set_uint32J  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)	rd   r   r   rb   r   r   r   r   AssertionError)r   r   r   r]   r]   r^   r   P  s   


r   ))rD      )rD      c                 C   s8   | t kr|S | tkr|tkr|S | S | tkr| S td)N/Unexpected unicode representation in _pick_kindr   r   r   r   kind1kind2r]   r]   r^   
_pick_kindd  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 unsupportedr   )rG   r   r   r   r   r   r]   r]   r^   r   s  s   c                 C   s$   | dkr|dkrt dS t dS Nry   r   )r   rT   )	is_ascii1	is_ascii2r]   r]   r^   _pick_ascii  s   

r  c                 C   s,   | t krdS | tkrdS | tkrdS td)Nry         'Unexpected unicode encoding encounteredr   rL   r]   r]   r^   r}     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)Nry   r  r  r   r  )r   r   r   rG   r   r  r]   r]   r^   r}     s   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   ry   )rc   ranger   )r   a_offsetbb_offsetnr   a_chrb_chrr]   r]   r^   _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   rH   z;Invalid codepoint. Found value greater than Unicode maximum)r   r   r{   r   )cpMAX_UNICODEmsgr]   r]   r^   _codepoint_to_kind  s   r  c                 C   s   | dk S )z;
    Returns true if a codepoint is in the ASCII range
       r]   )r   r]   r]   r^   _codepoint_is_ascii  s   r  c                 C      t | tjrdd }|S d S )Nc                 S      | j S r   )rc   r   r]   r]   r^   len_impl     zunicode_len.<locals>.len_impl
isinstancer   UnicodeType)r   r  r]   r]   r^   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_noner]   r]   r^   eq_impl  s   zunicode_eq.<locals>.eq_implc                 S      dS NFr]   r   r  r]   r]   r^   r&       )is_internalr  r   Optionalr   r  StringLiteralUnicodeCharSeq)r   r  check_acheck_baccept	a_unicode	b_unicoder&  r]   r]   r^   
unicode_eq  s$   

r4  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   r]   r)  r]   r]   r^   ne_impl     
zunicode_ne.<locals>.ne_implc                 S   r'  )NTr]   r)  r]   r]   r^   r&    r*  zunicode_ne.<locals>.eq_impl)r+  r   r  r-  r.  r  )r   r  r1  r2  r3  r5  r&  r]   r]   r^   
unicode_ne  s   

r7  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eqcoder]   r]   r^   lt_impl"     zunicode_lt.<locals>.lt_implr  r   r  r-  )r   r  r2  r3  r>  r]   r]   r^   
unicode_lt     rA  c                 C   r8  )Nc                 S   sJ   t t| t|}t| d|d|}|dkrdS |dkr#t| t|kS dS )Nr   ry   TFr9  r;  r]   r]   r^   gt_impl2  r?  zunicode_gt.<locals>.gt_implr@  )r   r  r2  r3  rC  r]   r]   r^   
unicode_gt-  rB  rD  c                 C   r8  )Nc                 S   s
   | |k S r   r]   r)  r]   r]   r^   le_implB  r6  zunicode_le.<locals>.le_implr@  )r   r  r2  r3  rE  r]   r]   r^   
unicode_le=     rF  c                 C   r8  )Nc                 S   s
   | |k  S r   r]   r)  r]   r]   r^   ge_implL  r6  zunicode_ge.<locals>.ge_implr@  )r   r  r2  r3  rH  r]   r]   r^   
unicode_geG  rG  rI  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)  r]   r]   r^   contains_implT  r   z'unicode_contains.<locals>.contains_implr  )r   r  rL  r]   r]   r^   unicode_containsQ  s   rM  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   Omittedr|   r,  r   IntegerNoneTyper!   format)tynamethetyacceptedr]   r]   r^   unicode_idx_check_typeZ  s   rW  c                 C   s(   t | tjsd|tj| }t|dS )z$Check object belongs to unicode typerN  N)r  r   r  rR  r!   )rS  rT  r  r]   r]   r^   unicode_sub_check_typen  s   rX  c                 C   s   | d|t d @ > O } | S Nry   _BLOOM_WIDTHmaskr   r]   r]   r^   
_bloom_addw  s   r^  c                 C   s   | d|t d @ > @ S rY  rZ  r\  r]   r]   r^   _bloom_check}  s   r_  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   ry   r   )r#  r   r   rR   r^  r	  r_  )rJ   substrstartendmgapmlastlastzeror]  r   r   jhaystack_ch	needle_chr]   r]   r^   _default_find  sJ   







rk  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   ry   r   )r#  r   r^  r_  )rJ   r`  ra  rb  rc  skipre  mfirstr]  r   r   rh  ri  rj  r]   r]   r^   _default_rfind  sL   







rn  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)rJ   r`  ra  rb  rK   
sub_length	find_funcr]   r^   impl  s   zgenerate_finder.<locals>.implNNr]   )rs  rt  r]   rr  r^   generate_finder  s   rv  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   )rw  r"  rJ   r`  ra  rb  r]   r]   r^   	find_impl     zunicode_find.<locals>.find_implra  rb  r`  ru  )r  r   r.  rW  rX  rK  )rJ   r`  ra  rb  r{  r]   r]   r^   unicode_find     



r}  rfindc                 C   rx  )zImplements str.rfind()Nc                 S   ry  r   )r  r"  rz  r]   r]   r^   
rfind_impl  r|  z!unicode_rfind.<locals>.rfind_implra  rb  r`  ru  )r  r   r.  rW  rX  _rfind)rJ   r`  ra  rb  r  r]   r]   r^   unicode_rfind	  r~  r  rindexc                 C   ,   t |d t |d t|d ddd}|S )zImplements str.rindex()ra  rb  subNc                 S   "   |  |||}|dk rtd|S Nr   zsubstring not found)r  r{   r   r  ra  rb  resultr]   r]   r^   rindex_impl      z#unicode_rindex.<locals>.rindex_implru  rW  rX  )r   r  ra  rb  r  r]   r]   r^   unicode_rindex  
   



r  rh   c                 C   r  )zImplements str.index()ra  rb  r  Nc                 S   r  r  )rw  r{   r  r]   r]   r^   
index_impl2  r  z!unicode_index.<locals>.index_implru  r  )r   r  ra  rb  r  r]   r]   r^   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()NrN  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   rd   re   r#  r{   rw  rJ   r  	empty_str
sep_lengthposr]   r]   r^   rt  M     


"zunicode_partition.<locals>.impl
r  r   rO  r|   r,  r   r  r.  rR  r!   rJ   r  rU  rV  r  rt  r]   r]   r^   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   ry   )r#  _normalize_slice_idx_count)srcr  ra  rb  r  src_lensub_lenr]   r]   r^   
count_implh  s&   

z!unicode_count.<locals>.count_implz+The substring must be a UnicodeType, not {}ru  )_count_args_types_checkr  r   r  r!   rR  r   )r  r  ra  rb  r  	error_msgr]   r]   r^   unicode_counta  s   
r  
rpartitionc                 C   r  )zImplements str.rpartition()NrN  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   rd   re   r#  r{   r  r  r]   r]   r^   rt    r  z unicode_rpartition.<locals>.implr  r  r]   r]   r^   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   r]   )rK   ra  rb  r]   r]   r^   rp    s   rp  
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   prefixra  rb  itemr]   r]   r^   startswith_tuple_impl  s
   z1unicode_startswith.<locals>.startswith_tuple_implc                 S      |  t|||S r   )r  r"  )r   r  ra  rb  r]   r]   r^   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#  rp  r  )r   r  ra  rb  rK   prefix_lengths_slicer]   r]   r^   startswith_unicode_impl  s   z3unicode_startswith.<locals>.startswith_unicode_implz9The arg 'prefix' should be a string or a tuple of stringsru  )	r   r  r   rP  r!   UniTupledtyper  r.  )r   r  ra  rb  r  r  r  r]   r]   r^   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   r`  ra  rb  r  r]   r]   r^   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   r`  ra  rb  rK   rq  r   r]   r]   r^   r    s   c                 S   r  r   )r  r"  )r   r`  ra  rb  r]   r]   r^   r    r  ru  )
r  r   rO  rP  rQ  r!   Tupler  r  r.  )r   r`  ra  rb  r  r]   r]   r^   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 longry   )r#  r	  r   r:   sysmaxsizeOverflowErrorr;   r<   r   rd   re   r   r=   )rJ   tabsizerK   rh  line_posfoundr   
code_pointincrr   r   r]   r]   r^   expandtabs_impl2  sT   

z+unicode_expandtabs.<locals>.expandtabs_implr   )
r  r   rO  r|   r,  r   rP  intr!   rR  )rJ   r  rU  rV  r  r]   r]   r^   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  r]   r]   r^   
split_implk  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  ry   r   )r#  r{   r   r	  appendr  )
r   r  r  a_lensep_lenpartsrf  r   sep_code_pointsplit_countr]   r]   r^   r  p  s:   

	r|   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   TFry   r   )r#  r	  r   r+   r  )r   r  r  r  r  rf  r   r  in_whitespace_blockr  is_whitespacer]   r]   r^   split_whitespace_impl  s2   
z,unicode_split.<locals>.split_whitespace_implrJ  )	r  r   rO  rP  IntegerLiteralr.  r  rQ  getattr)r   r  r  r  r  r]   r]   r^   unicode_splitc  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   ry   r   )r  r  r#  r   r  )rJ   r  r  r  r   r  rh  isspace_funcr]   r^   rsplit_whitespace_impl  sD   


z?generate_rsplit_whitespace_impl.<locals>.rsplit_whitespace_implrJ  r]   )r  r  r]   r  r^   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 typesNrN  )r  r   rO  r|   r,  r   r!   rR  )rS  rT  rV  rU  r]   r]   r^   _unicode_rsplit_check_type  s   z2unicode_rsplit.<locals>._unicode_rsplit_check_typer  r  Nr   c                 S   s   | j r	t| ||S t| ||S r   )re   ascii_rsplit_whitespace_implunicode_rsplit_whitespace_impl)rJ   r  r  r]   r]   r^   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  )rJ   r   r  r  ch_code_pointr   rh  data_code_pointr]   r]   r^   _rsplit_char  s   

z9unicode_rsplit.<locals>.rsplit_impl.<locals>._rsplit_charr   r  ry   )ra  rb  r   )r"  rd   r#  r  r  r{   r  r  )rJ   r  r  r  r  r  rh  r  r]   r]   r^   rsplit_impl  s.   z#unicode_rsplit.<locals>.rsplit_implrJ  )r   r  r.  rQ  rP  r  r  rO  )rJ   r  r  r  r  r  r]   r]   r^   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fillcharr]   r]   r^   center_implC     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 )Nry   5The fill character must be exactly one character longr  r#  r{   )	r  r  r  str_lenfillchar_len	allmarginlmarginrmarginl_stringr]   r]   r^   r  K  s   r  r  r   rP  r!   r.  rO  r  )r  r  r  r  r]   r]   r^   unicode_center=  s   

r  c                    ro  )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  r]   r]   r^   
ljust_implj  r  z<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.ljust_implc                 S   r  r   )rjustr"  r  r]   r]   r^   
rjust_impln  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 )Nry   r  r  )r  r  r  r  r  newstrSTRING_FIRSTr]   r^   rt  v  s   z6gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.implr  r  )r  r  r  r   r  rt  r  r]   r^   unicode_Xjustd  s   

z(gen_unicode_Xjust.<locals>.unicode_Xjustr  r]   )r  r  r]   r  r^   gen_unicode_Xjustc  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   r6   r5   r  )
rJ   keependsrK   r  r   rh  r  eolcur_cpnext_cpis_line_break_funcr]   r^   rt    s0   

z&generate_splitlines_func.<locals>.implr]   )r  rt  r]   r  r^   generate_splitlines_func  s   r  
splitlinesc                 C   sl   |}t |tjr|j}n	t |tjr|j}tjttjt	f}|dur/t ||s/t
dd||ddd}|S )zImplements str.splitlines()NrN  r  Fc                 S   s   | j rt| |S t| |S r   )re   _ascii_splitlines_unicode_splitlines)rJ   r  r]   r]   r^   splitlines_impl  s   

z+unicode_splitlines.<locals>.splitlines_implF)r  r   rO  r|   r,  r   rP  r  Booleanboolr!   rR  )rJ   r  rU  rV  r  r]   r]   r^   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    ry   )r#  rd   re   r   r  r   _strncpyr	  )r  r  	parts_lenr  rK   rL   rM   pr  part
dst_offsetr   r]   r]   r^   	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  r]   r]   r^   join_list_impl  r6  z$unicode_join.<locals>.join_list_implc                 S   s   dd |D }t | |S )Nc                 S   s   g | ]}t |qS r]   r"  .0r  r]   r]   r^   
<listcomp>      z8unicode_join.<locals>.join_list_impl.<locals>.<listcomp>r   )r  r  _partsr]   r]   r^   r!       
c                 S   s   dd |D }|  |S )Nc                 S   s   g | ]}|qS r]   r]   r#  r]   r]   r^   r%    s    z8unicode_join.<locals>.join_iter_impl.<locals>.<listcomp>)r  r  r  
parts_listr]   r]   r^   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 r]   r]   )r$  r   r  r]   r^   r%  	  r&  z7unicode_join.<locals>.join_str_impl.<locals>.<listcomp>)r	  r#  r  r)  r]   r,  r^   join_str_impl  s   
z#unicode_join.<locals>.join_str_impl)r  r   Listr  r  r.  IterableType)r  r  r!  r+  r-  r]   r]   r^   unicode_join  s   r0  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)+-ry   r#  )r  r  r  
first_charpaddingr  r]   r]   r^   
zfill_impl  s   z!unicode_zfill.<locals>.zfill_impl)r  r   rP  r!   )r  r  r8  r]   r]   r^   unicode_zfill  s   r9  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   r]   r]   r^   unicode_strip_left_bound*  s   r=  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;  r]   r]   r^   unicode_strip_right_bound;  s"   	r>  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   rO  r  rQ  r!   )r<  r]   r]   r^   unicode_strip_types_checkM     r@  c                 C   r?  )Nz,The slice indices must be an Integer or None)r  r   r,  r   rO  rP  rQ  r!   )argr]   r]   r^   r  V  rA  r  lstripc                 C   0   t |tjrddd}|S t| ddd}|S )Nc                 S   ry  r   )rC  r"  r  r<  r]   r]   r^   lstrip_implc  r|  z#unicode_lstrip.<locals>.lstrip_implc                 S   s   | t | |d  S r   )r=  rE  r]   r]   r^   rF  i  r  r   r  r   r.  r@  )r  r<  rF  r]   r]   r^   unicode_lstrip_     

rH  rstripc                 C   rD  )Nc                 S   ry  r   )rJ  r"  rE  r]   r]   r^   rstrip_implr  r|  z#unicode_rstrip.<locals>.rstrip_implc                 S   s   | d t | | S r   )r>  rE  r]   r]   r^   rK  x  r  r   rG  )r  r<  rK  r]   r]   r^   unicode_rstripn  rI  rL  stripc                 C   rD  )Nc                 S   ry  r   )rM  r"  rE  r]   r]   r^   
strip_impl  r|  z!unicode_strip.<locals>.strip_implc                 S   s    t | |}t| |}| || S r   )r=  r>  )r  r<  lbrbr]   r]   r^   rN    s   

r   rG  )r  r<  rN  r]   r]   r^   unicode_strip}  s   

rQ  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   rK   is_startr]   r]   r^   normalize_str_idx  s   rT  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   r]   )rB  	slice_lendefaultr]   r]   r^   r    s   r  c                 C   s   |||}dd }||fS )zFix slice object.
    c           	      S   sF   |j \}}|\}}| |||}t| ||| t||| | S r   )r   make_helperrC   guard_invalid_slice	fix_slicer   )	r   r   r   r   	slicetype
lengthtypesliceobjrK   slicer]   r]   r^   r     s   
z!_normalize_slice.<locals>.codegenr]   )r   r\  rK   r   r   r]   r]   r^   _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   rW  rC   get_slice_length)r   r   r   r   rZ  r\  r]  result_sizer]   r]   r^   r     s
   z_slice_span.<locals>.codegen)r   rR   )r   r\  r   r   r]   r]   r^   _slice_span  s   
ra  c           
      C   sv   |j | j kr%t|j }|| }|| }|| }t| j||j||dd d S t|D ]}	t| ||	 t|||	  q)d S )Nry   )align)rd   r}   r    rb   r	  r   r   )
dstr  r  
src_offsetr  
byte_widthsrc_byte_offsetdst_byte_offsetr   r   r]   r]   r^   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   rO   rL   rM   rK   r   r   rN   typing_contextresolve_value_typer}   get_call_typerS   get_functionr   r   rJ   r   rP   r   
enable_nrtr   increfr   r   )r   r   r   r   r  ra  rK   in_strview_strbw_typbw_sigbw_implre  r   r]   r]   r^   r     s8   
z$_get_str_slice_view.<locals>.codegen)r   r   rR   )r   src_tstart_tlength_tr   r   r]   r]   r^   _get_str_slice_view  s   rv  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  )	rT  r#  r   r  rd   rv  r  r   r   )r   r   r  rL   rM   retr]   r]   r^   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 rY  )r^  r#  ra  r   ra  r  r  r	  stepstopr   rd   rv  r   r   )r   r   	slice_idxspanr  rL   rM   r   new_kindrw  curr]   r]   r^   getitem_slice-  s,   

z&unicode_getitem.<locals>.getitem_slice)r  r   r  rP  	SliceType)r   r   rx  r  r]   r]   r^   unicode_getitem  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   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   )
rc   r   rd   r  re   r   r	  r#  r   r   )r   r  
new_lengthr}  	new_asciir  r   rh  r]   r]   r^   concat_impl]  s   z#unicode_concat.<locals>.concat_implc                 S   s   | t | S r   r"  r)  r]   r]   r^   r  j     )r  r   r  r.  )r   r  r  r]   r]   r^   unicode_concatY  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rEt|||d| |d9 }d| |ks3d| |ks[|| }t||||| | |S d S )Nr  ry   r   r  )rc   rd   r   re   r#  r  )str_argmult_argr  r}  r  len_a	copy_sizerestr]   r]   r^   _repeat_implo  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)  r]   r]   r^   wrap  r6  zunicode_repeat.<locals>.wrapc                 S   s
   t || S r   r  r)  r]   r]   r^   r    r6  )r  r   r  rP  )r   r  r  r]   r]   r^   unicode_repeat  s   r  c                 C   r  )Nc                 S   s   t | dkS r   r5  r   r]   r]   r^   rt    r  zunicode_not.<locals>.implr  r   rt  r]   r]   r^   unicode_not  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   ry   )listr  r:  r#  r	  r  r  )	r   old_strnew_strr  scharssplit_result	min_countr   r  r]   r]   r^   rt    s&   


zunicode_replace.<locals>.implr   )r  r   rO  r|   r,  r   r  rP  r!   rR  r  rQ  )r   r  r  r  rU  rt  r]   r]   r^   unicode_replace  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   Fry   T)r#  r   re   r	  )rJ   rK   r  r   
ascii_funcunicode_funcr]   r^   rt    s(   


z.gen_isAlX.<locals>.unicode_isAlX.<locals>.implr]   rJ   rt  r  r]   r^   unicode_isAlX  s   z gen_isAlX.<locals>.unicode_isAlXr]   )r  r  r  r]   r  r^   	gen_isAlX  s   r  isalphac                 C   s   t | pt| S r   )r?   r>   xr]   r]   r^   <lambda>  s   r  isalnumc                    s    fdd}|S )Nc                    st   t | }|dkrt| ddkS |dkrdS d}t|D ]}t| |} |s,|r/ dS |s7|r7d}q|S Nry   r   FTr#  r   r	  )r   lcasedr   r  is_loweris_titleis_upperr]   r^   rt    s   
z_is_upper.<locals>.implr]   )r  r  r  rt  r]   r  r^   	_is_upper  s   r  c                 C   r'  r(  r]   r  r]   r]   r^   r        isupperc                 C      dd }|S )z
    Implements .isupper()
    c                 S   s   | j rt| S t| S r   )re   _ascii_is_upper_unicode_is_upperr  r]   r]   r^   rt     s   zunicode_isupper.<locals>.implr]   r  r]   r]   r^   unicode_isupper  s   r  isasciic                 C   r  )z Implements UnicodeType.isascii()c                 S   r  r   )re   rJ   r]   r]   r^   rt  ,  r  zunicode_isascii.<locals>.implr]   r  r]   r]   r^   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   r1   r7   r	  r2   )rJ   rK   charr  previous_is_casedr   r]   r]   r^   rt  9  s,   

zunicode_istitle.<locals>.implr]   r  r]   r]   r^   unicode_istitle1  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#  r2   r   r	  r1   r7   )rJ   rK   r  r   r  r]   r]   r^   rt  `  s   
zunicode_islower.<locals>.implr]   r  r]   r]   r^   unicode_islowerW  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_   ry   T)r#  r   r-   r	  r.   )rJ   rK   first_cpr   r  r]   r]   r^   rt  w  s   

z"unicode_isidentifier.<locals>.implr]   r  r]   r]   r^   unicode_isidentifiers  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  )rJ   rK   r   r  _PyUnicode_IS_funcempty_is_falser]   r^   rt    s   
z*gen_isX.<locals>.unicode_isX.<locals>.implr]   r  r  r]   r^   unicode_isX  s   zgen_isX.<locals>.unicode_isXr]   )r  r  r  r]   r  r^   gen_isX  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   ry   rD   )
r#  r   rd   re   r   r  r  r	  r   r   )	rJ   rK   r   tmpmaxchars	newlengthmaxcharnewkindr   r  r]   r^   rt    s    
zcase_operation.<locals>.implr]   )r  r  rt  r]   r  r^   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   ry   i  i  )r   r0   r/   )rJ   rK   r   r   rh  final_sigmar]   r]   r^   _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   ry   )r  r'   )r  rJ   rK   r   mappedr]   r]   r^   _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   rD   r  ry   )	r	  r   zerosr$   r   r  r&   maxr   )
rJ   rK   r   r  kr   r  r  n_resrc  lowerr]   r^   _do_upper_or_lower  s   


z7_gen_unicode_upper_or_lower.<locals>._do_upper_or_lowerr]   )r  r  r]   r  r^   _gen_unicode_upper_or_lower  s   r  c                    r   )Nc                    s0   t t| D ]}t| |}t|| | qd S r   )r	  r#  r   r   rJ   r   r   r  funcr]   r^   _ascii_upper_or_lower	  s   
z8_gen_ascii_upper_or_lower.<locals>._ascii_upper_or_lowerr]   )r  r  r]   r  r^   _gen_ascii_upper_or_lower	  s   r  r  c                 C   
   t ttS )zImplements .lower())r  _ascii_lower_unicode_lowerr  r]   r]   r^   unicode_lower	     
r  upperc                 C   r  )zImplements .upper())r  _ascii_upper_unicode_upperr  r]   r]   r^   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   )rJ   rK   r   r  r  r  r   r  r  rc  r  r]   r]   r^   _unicode_casefold&	  s   



r  c                 C   s0   t t| D ]}t| |}t||t| qd S r   )r	  r#  r   r   r#   r  r]   r]   r^   _ascii_casefold7	  s   
r  casefoldc                 C   r  )zImplements str.casefold())r  r  r  r  r]   r]   r^   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  )rJ   rK   r   r  r  r  r  r  r  rc  r   r]   r]   r^   _unicode_capitalizeE	  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#   )rJ   r   r  r   r]   r]   r^   _ascii_capitalize_	  s   

r  
capitalizec                 C   r  r   )r  r  r  r  r]   r]   r^   unicode_capitalizei	     
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   FrD   r  Nry   )r   emptyr$   r	  r  r   r  r)   r  r   r/   )rJ   rK   r   r  r  previous_casedr  r   r  r  rc  r  r]   r]   r^   _unicode_titleo	  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   r8   r"   r9   r#   r   )rJ   r   r  r   r  r]   r]   r^   _ascii_title	  s   
r  titlec                 C   r  )zImplements str.title())r  r  r  r  r]   r]   r^   unicode_title	  s   
r   c                 C   sN   t t| D ]}t| |}t|rt|}nt|rt|}t||| qd S r   )r	  r#  r   r9   r#   r8   r"   r   r  r]   r]   r^   _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   r1   r  r2   r&   r  r   )rJ   rK   r   r  r  r  r  r   r  r  rc  r]   r]   r^   _unicode_swapcase	  s&   



r  swapcasec                 C   r  r   )r  r  r  r  r]   r]   r^   unicode_swapcase	  r  r  c                 C   r  )Nc                 S   s"   t | }|dkrtdt| dS )Nry   zord() expected a characterr   )r#  	TypeErrorr   )r   lcr]   r]   r^   rt  	  s   
zol_ord.<locals>.implr  )r   rt  r]   r]   r^   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   rL   rw  r]   r]   r^   _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  r{   _out_of_range_msgr	  r$   )ordinalr]   r]   r^   _PyUnicode_FromOrdinal	  s   r  c                 C   r  )Nc                 S   s   t | S r   )r  )r   r]   r]   r^   rt  	  s   zol_chr.<locals>.impl)r  r   rP  )r   rt  r]   r]   r^   ol_chr	  r!  r  __str__c                 C      dd S )Nc                 S   s   | S r   r]   r  r]   r]   r^   r  	  r  zunicode_str.<locals>.<lambda>r]   r  r]   r]   r^   unicode_str	     r  __repr__c                 C   r  )Nc                 S   s   d|  d S )N'r]   r  r]   r]   r^   r  
      zunicode_repr.<locals>.<lambda>r]   r  r]   r]   r^   unicode_repr 
  s   r  c                    s   | d  fdd}|S )NrE   c           	         s   d}| dk r|  } d}| dkrdS |d t tt|  }t}t|}t|||d}|r6t|dtd |d }| dkrYt	|  \} }td| }t||| |d8 }| dks>|S )NFr   Tr2  ry   r4  )
r  r   floorlog10r   r}   r   r   orddivmod)	r  flagrK   rL   r   r   r   digitr   tenr]   r^   rt  
  s(   zinteger_str.<locals>.implr]   )r  rt  r]   r  r^   integer_str
  s   r  c                 C   r  )Nc                 S   s   |   S r   )r  r  r]   r]   r^   r  %
  s    zinteger_repr.<locals>.<lambda>r]   r  r]   r]   r^   integer_repr#
  r  r   c                 C   r  )Nc                 S   s   | rdS dS )NTrueFalser]   r  r]   r]   r^   r  +
  r  zboolean_str.<locals>.<lambda>r]   r#  r]   r]   r^   boolean_str(
  s   r$  getiterc           
      C   sp   |j \}|\}| ||j}| tjd}t||}||_||_	| j
r,| j||| | }	t| ||j|	S r   )r   rW  return_typer   r   rj   r   alloca_once_valuerh   rJ   rl  r   rm  r   r   )
r   r   r   r   rS  rJ   iterobjrg  indexptrr   r]   r]   r^   getiter_unicode3
  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   rh  ri  operatorgetitemrj  r   r   rj   rk  r#  rW  rJ   r   rh   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(  strlenrh   is_validgotitemnindexr]   r]   r^   iternext_unicodeK
  s,   


"r?  )r   ru  r  rJ  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   r   numba.core.utilsr   numba.core.pythonapir   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   numba.cpythonrC   rG   r  USE_LEGACY_TYPE_SYSTEMrR   bitwidthr[  py_intr  rI   UnicodeIteratorTyperg   r   r   r-  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   NotImplementedErrorr  r}   r  r  r  r#  r   eqr4  ner7  ltrA  gtrD  lerF  gerI  containsrM  rW  rX  r^  r_  rk  rn  rv  rK  r  r}  r  r  r  r  r  r  rp  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r0  r9  r=  r>  r@  r  rH  rL  rQ  rT  r  r^  ra  r  rv  r.  r  r   iaddr  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  rP  r  r   r  r$  r*  NEWr?  r]   r]   r]   r^   <module>   s`   0 
	





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

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