o
    1&ij                    @   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   ZMemInfoPointerZpyobjectr   r   __init__selfZdmmZfe_typemembers rY   @C:\wamp64\www\opt\env\Lib\site-packages\numba/cpython/unicode.pyrU   T   s   
zUnicodeModel.__init__N)__name__
__module____qualname__rU   rY   rY   rY   rZ   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   ZEphemeralPointeruintprJ   superrc   rU   rV   	__class__rY   rZ   rU   k   s   zUnicodeIteratorModel.__init__)r[   r\   r]   rU   __classcell__rY   rY   rg   rZ   rc   i   s    rc   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byrefZextract_unicodeNz1cannot extract unicode data from the given string   )ctypesrj   rk   rl   rm   rn   ro   rp   rq   rr   r   
ValueErrorvalue_kind_to_byte_widthfrom_addressbytes)objrj   rk   rl   rm   rn   ro   rp   rq   rr   Zextract_unicode_fnprotofnrK   rL   rM   hashvrJ   nbytesoutrY   rY   rZ   compile_time_get_string_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   moduleZinsert_const_bytesr   create_struct_proxyrJ   rK   typerL   rM   rN   	_getvalue)contextbuildertypZliteral_stringZ	databytesrK   rL   rM   r}   modgvuni_strrY   rY   rZ   make_string_from_constant   s   r   c                 C   s   t | |||jS N)r   Zliteral_value)r   r   ZfromtyZtotyvalrY   rY   rZ   cast_from_literal   s   
r   c                 C   s   t | |||S r   )r   )r   r   r   ZpyvalrY   rY   rZ   constant_unicode      r   c                 C   s   |j |\}}}}}}t| |j|j}	||	_||	_||	_||	_	||	_
|j |||	_||	_t|j|j  }
t|	 |
dS )zE
    Convert a unicode str object to a native unicode structure.
    )is_error)pyapiZstring_as_string_size_and_kindr   r   r   r   rJ   rK   rL   rM   rN   Znrt_meminfo_new_from_pyobjectrO   rP   Zis_not_nullZerr_occurredr
   r   )r   rz   cokrJ   rK   rL   rM   r}   r   r   rY   rY   rZ   unbox_unicode_str   s   
r   c                 C   sR   t | |j|j|d}|j|j|j|j}|j	| |jj
|j| | |S )z@
    Convert a native unicode structure to a unicode string
    rv   )r   r   r   r   r   Zstring_from_kind_and_datarL   rJ   rK   Zobject_hashnrtZdecref)r   r   r   r   resrY   rY   rZ   box_unicode_str   s   r   c                        fdd}|S )Nc                    s@   |\}}| |t  }||||g}||tdS N    )bitcastr   
as_pointerloadgepZzext)r   r   	signatureargsrJ   idxptrchbitsizerY   rZ   codegen   s   z#make_deref_codegen.<locals>.codegenrY   r   r   rY   r   rZ   make_deref_codegen   s   r   c                 C      t t jt j}|tdfS N   r   rT   rQ   rR   r   	typingctxrJ   offsetsigrY   rY   rZ   deref_uint8      r   c                 C   r   N   r   r   rY   rY   rZ   deref_uint16   r   r   c                 C   r   r   r   r   rY   rY   rZ   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 )Nrs   r   )r   r   r   unicode_typemuladdr   r   r   Zmeminfo_allocrO   rL   rM   rK   get_constantr   rN   Zmeminfo_datarJ   get_null_valuerP   r   )r   r   r   r   Zkind_valZchar_bytes_valZ
length_valZis_ascii_valZuni_str_ctorr   Z
nbytes_valrY   rY   rZ   details   s    

z_malloc_string.<locals>.details)r   r   rS   rR   rT   )r   rL   Z
char_bytesrK   rM   r   r   rY   rY   rZ   _malloc_string   s   r   c                 C   s,   t | }t| |||}t||td |S Nr   )rw   r   _set_code_pointnprT   )rL   rK   rM   
char_widthsrY   rY   rZ   _empty_string  s   r   F)Z_nrtc                 C   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irY   rY   rZ   _get_code_point"  s   


r   c                    r   )Nc                    sT   |\}}} dk r| |t }||t  }|||||g |  S r   )truncr   r   r   storer   Zget_dummy_value)r   r   r   r   rJ   r   r   r   r   rY   rZ   r   3  s   
z!make_set_codegen.<locals>.codegenrY   r   rY   r   rZ   make_set_codegen2  s   r   c                 C       t t jt jt j}|tdfS r   r   ZvoidrQ   Zint64rT   r   r   rJ   r   r   r   rY   rY   rZ   	set_uint8>     r   c                 C   r   r   r   r   rY   rY   rZ   
set_uint16D  r   r   c                 C   r   r   r   r   rY   rY   rZ   
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)	r`   r   r   r^   r   r   r   r   AssertionError)r   r   r   rY   rY   rZ   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   Zkind1Zkind2rY   rY   rZ   
_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   rY   rY   rZ   r   s  s   c                 C   s$   | dkr|dkrt dS t dS Nrs   r   )r   rT   )Z	is_ascii1Z	is_ascii2rY   rY   rZ   _pick_ascii  s   

r   c                 C   s,   | t krdS | tkrdS | tkrdS td)Nrs         'Unexpected unicode encoding encounteredr   rL   rY   rY   rZ   rw     s   rw   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)Nrs   r   r   r   r   )r   r   r   rG   r   r   rY   rY   rZ   rw     s   c                 C   sz   |dkrdS || | j krdS || |j krdS t|D ]}t| || }t||| }||k r3 dS ||kr: dS qdS )Nr   r   rs   )r_   ranger   )r   Za_offsetbZb_offsetnr   Za_chrZb_chrrY   rY   rZ   _cmp_region  s   r   c                 C   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   ru   r   )cpZMAX_UNICODEmsgrY   rY   rZ   _codepoint_to_kind  s   r   c                 C   s   | dk S )z;
    Returns true if a codepoint is in the ASCII range
       rY   )r   rY   rY   rZ   _codepoint_is_ascii  s   r   c                 C      t | tjrdd }|S d S )Nc                 S      | j S r   )r_   r   rY   rY   rZ   len_impl     zunicode_len.<locals>.len_impl
isinstancer   UnicodeType)r   r   rY   rY   rZ   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   Za_noneZb_nonerY   rY   rZ   eq_impl  s   zunicode_eq.<locals>.eq_implc                 S      dS NFrY   r   r   rY   rY   rZ   r        )is_internalr   r   Optionalr   r   StringLiteralUnicodeCharSeq)r   r   Zcheck_aZcheck_baccept	a_unicode	b_unicoder   rY   rY   rZ   
unicode_eq  s$   

r  c                 C   s`   | j r|j sd S tjtjtjf}t| |}t||}|r$|r$dd }|S ||A r.dd }|S d S )Nc                 S   s
   | |k S r   rY   r   rY   rY   rZ   ne_impl     
zunicode_ne.<locals>.ne_implc                 S   r   )NTrY   r   rY   rY   rZ   r     r   zunicode_ne.<locals>.eq_impl)r   r   r   r   r   r   )r   r   r  r  r  r  r   rY   rY   rZ   
unicode_ne  s   

r  c                 C   @   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   ZminlenZeqcoderY   rY   rZ   lt_impl"     zunicode_lt.<locals>.lt_implr   r   r   r   )r   r   r  r  r  rY   rY   rZ   
unicode_lt     r  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   rs   TFr	  r  rY   rY   rZ   gt_impl2  r  zunicode_gt.<locals>.gt_implr  )r   r   r  r  r  rY   rY   rZ   
unicode_gt-  r  r  c                 C   r  )Nc                 S   s
   | |k S r   rY   r   rY   rY   rZ   le_implB  r  zunicode_le.<locals>.le_implr  )r   r   r  r  r  rY   rY   rZ   
unicode_le=     r  c                 C   r  )Nc                 S   s
   | |k  S r   rY   r   rY   rY   rZ   ge_implL  r  zunicode_ge.<locals>.ge_implr  )r   r   r  r  r  rY   rY   rZ   
unicode_geG  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   rY   rY   rZ   contains_implT  r   z'unicode_contains.<locals>.contains_implr   )r   r   r  rY   rY   rZ   unicode_containsQ  s   r  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   Omittedrv   r   r   IntegerNoneTyper!   format)tynamethetyacceptedrY   rY   rZ   unicode_idx_check_typeZ  s   r%  c                 C   s(   t | tjsd|tj| }t|dS )z$Check object belongs to unicode typer  N)r   r   r   r   r!   )r!  r"  r   rY   rY   rZ   unicode_sub_check_typen  s   r&  c                 C   s   | d|t d @ > O } | S Nrs   _BLOOM_WIDTHmaskr   rY   rY   rZ   
_bloom_addw  s   r,  c                 C   s   | d|t d @ > @ S r'  r(  r*  rY   rY   rZ   _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   rs   r   )r   r   r   rR   r,  r   r-  )rJ   substrstartendmgapmlastlastzeror+  r   r   jhaystack_ch	needle_chrY   rY   rZ   _default_find  sJ   







r9  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   rs   r   )r   r   r,  r-  )rJ   r.  r/  r0  r1  skipr3  Zmfirstr+  r   r   r6  r7  r8  rY   rY   rZ   _default_rfind  sL   







r;  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.  r/  r0  rK   
sub_length	find_funcrY   rZ   impl  s   zgenerate_finder.<locals>.implNNrY   )r@  rA  rY   r?  rZ   generate_finder  s   rC  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   )rD  r   rJ   r.  r/  r0  rY   rY   rZ   	find_impl     zunicode_find.<locals>.find_implr/  r0  r.  rB  )r   r   r   r%  r&  r  )rJ   r.  r/  r0  rH  rY   rY   rZ   unicode_find     



rJ  rfindc                 C   rE  )zImplements str.rfind()Nc                 S   rF  r   )rL  r   rG  rY   rY   rZ   
rfind_impl  rI  z!unicode_rfind.<locals>.rfind_implr/  r0  r.  rB  )r   r   r   r%  r&  _rfind)rJ   r.  r/  r0  rM  rY   rY   rZ   unicode_rfind	  rK  rO  rindexc                 C   ,   t |d t |d t|d ddd}|S )zImplements str.rindex()r/  r0  subNc                 S   "   |  |||}|dk rtd|S Nr   zsubstring not found)rL  ru   r   rR  r/  r0  resultrY   rY   rZ   rindex_impl      z#unicode_rindex.<locals>.rindex_implrB  r%  r&  )r   rR  r/  r0  rW  rY   rY   rZ   unicode_rindex  
   



rZ  rd   c                 C   rQ  )zImplements str.index()r/  r0  rR  Nc                 S   rS  rT  )rD  ru   rU  rY   rY   rZ   
index_impl2  rX  z!unicode_index.<locals>.index_implrB  rY  )r   rR  r/  r0  r\  rY   rY   rZ   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()Nr  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`   ra   r   ru   rD  rJ   r`  Z	empty_str
sep_lengthposrY   rY   rZ   rA  M     


"zunicode_partition.<locals>.impl
r   r   r  rv   r   r   r   r   r   r!   rJ   r`  r#  r$  r   rA  rY   rY   rZ   unicode_partition=     ri  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   rs   )r   _normalize_slice_idx_count)srcrR  r/  r0  rk  Zsrc_lenZsub_lenrY   rY   rZ   
count_implh  s&   

z!unicode_count.<locals>.count_implz+The substring must be a UnicodeType, not {}rB  )_count_args_types_checkr   r   r   r!   r   r   )rn  rR  r/  r0  ro  	error_msgrY   rY   rZ   unicode_counta  s   
rr  
rpartitionc                 C   r_  )zImplements str.rpartition()Nr  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 ra  )r   r   r`   ra   r   ru   rL  rc  rY   rY   rZ   rA    rf  z unicode_rpartition.<locals>.implrg  rh  rY   rY   rZ   unicode_rpartition  rj  rt  c                 C   sL   || kr| }|dk r|| 7 }|dk rd}|dk r"|| 7 }|dk r"d}||fS r   rY   )rK   r/  r0  rY   rY   rZ   r=    s   r=  
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)ru  )r   prefixr/  r0  itemrY   rY   rZ   startswith_tuple_impl  s
   z1unicode_startswith.<locals>.startswith_tuple_implc                 S      |  t|||S r   )ru  r   )r   rw  r/  r0  rY   rY   rZ   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   r=  r   )r   rw  r/  r0  rK   Zprefix_lengthZs_slicerY   rY   rZ   startswith_unicode_impl  s   z3unicode_startswith.<locals>.startswith_unicode_implz9The arg 'prefix' should be a string or a tuple of stringsrB  )	r   r   r   r  r!   UniTupledtyper   r   )r   rw  r/  r0  ry  r{  r  rY   rY   rZ   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 rv  )r  )r   r.  r/  r0  rx  rY   rY   rZ   endswith_impl  s
   z'unicode_endswith.<locals>.endswith_implc                 S   s   t | }t |}|d u rd}|d u r|}t|||\}}|| |k r$dS |dkr*dS | || } t | | }t| ||d|dkS r}  r~  )r   r.  r/  r0  rK   r>  r   rY   rY   rZ   r    s   c                 S   rz  r   )r  r   )r   r.  r/  r0  rY   rY   rZ   r    r|  rB  )
r   r   r  r  r  r!   Tupler  r   r   )r   r.  r/  r0  r  rY   rY   rZ   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 longrs   )r   r   r   r:   sysmaxsizeOverflowErrorr;   r<   r   r`   ra   r   r=   )rJ   tabsizerK   r6  Zline_posfoundr   
code_pointincrr   r   rY   rY   rZ   expandtabs_impl2  sT   

z+unicode_expandtabs.<locals>.expandtabs_implr   )
r   r   r  rv   r   r   r  intr!   r   )rJ   r  r#  r$  r  rY   rY   rZ   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  rY   rY   rZ   
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   rb  rs   r   )r   ru   r   r   appendr   )
r   r`  r  a_lensep_lenpartsr4  r   Zsep_code_pointsplit_countrY   rY   rZ   r  p  s:   

	rv   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   TFrs   r   )r   r   r   r+   r  )r   r`  r  r  r  r4  r   r  Zin_whitespace_blockr  Zis_whitespacerY   rY   rZ   split_whitespace_impl  s2   
z,unicode_split.<locals>.split_whitespace_implr  )	r   r   r  r  ZIntegerLiteralr   r   r  getattr)r   r`  r  r  r  rY   rY   rZ   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   rs   r   )r  r  r   r   r  )rJ   r`  r  rV  r   r  r6  isspace_funcrY   rZ   rsplit_whitespace_impl  sD   


z?generate_rsplit_whitespace_impl.<locals>.rsplit_whitespace_implr  rY   )r  r  rY   r  rZ   generate_rsplit_whitespace_impl  s   &r  rsplitc                 C   sh   dd }||dt jt jt jf ||dt jtf |du 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 typesNr  )r   r   r  rv   r   r   r!   r   )r!  r"  r$  r#  rY   rY   rZ   _unicode_rsplit_check_type  s   z2unicode_rsplit.<locals>._unicode_rsplit_check_typer`  r  Nr   c                 S   s   | j r	t| ||S t| ||S r   )ra   ascii_rsplit_whitespace_implunicode_rsplit_whitespace_impl)rJ   r`  r  rY   rY   rZ   r    s   z.unicode_rsplit.<locals>.rsplit_whitespace_implc                 S   s   t |}| j|jk st| t|k r| gS dd }|dk r tj}t|}|dk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  rV  Zch_code_pointr   r6  Zdata_code_pointrY   rY   rZ   _rsplit_char  s   

z9unicode_rsplit.<locals>.rsplit_impl.<locals>._rsplit_charr   rb  rs   )r/  r0  r   )r   r`   r   r  r  ru   rL  r  )rJ   r`  r  r  rd  rV  r6  re  rY   rY   rZ   rsplit_impl  s.   z#unicode_rsplit.<locals>.rsplit_implr  )r   r   r   r  r  r  r   r  )rJ   r`  r  r  r  r  rY   rY   rZ   unicode_rsplit  s   


/r  center c                 C   s^   t |tjs
tdt |tjrddd}|S |dk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fillcharrY   rY   rZ   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 )Nrs   5The fill character must be exactly one character longr   r   ru   )	r  r  r  str_lenfillchar_lenZ	allmarginZlmarginZrmarginZl_stringrY   rY   rZ   r  K  s   r  r   r   r  r!   r   r  r   )r  r  r  r  rY   rY   rZ   unicode_center=  s   

r  c                    r<  )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  rY   rY   rZ   
ljust_implj  r  z<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.ljust_implc                 S   r  r   )rjustr   r  rY   rY   rZ   
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 )Nrs   r  r  )r  r  r  r  r  newstrSTRING_FIRSTrY   rZ   rA  v  s   z6gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.implr  r  )r  r  r  r  r  rA  r  rY   rZ   unicode_Xjustd  s   

z(gen_unicode_Xjust.<locals>.unicode_Xjustr  rY   )r  r  rY   r  rZ   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 rl  )r   r   r6   r5   r  )
rJ   keependsrK   rV  r   r6  r  eolZcur_cpZnext_cpis_line_break_funcrY   rZ   rA    s0   

z&generate_splitlines_func.<locals>.implrY   )r  rA  rY   r  rZ   generate_splitlines_func  s   r  
splitlinesc                 C   sl   |}t |tjr|j}n	t |tjr|j}tjttjt	f}|dur/t ||s/t
dd||ddd}|S )zImplements str.splitlines()Nr  r  Fc                 S   s   | j rt| |S t| |S r   )ra   _ascii_splitlines_unicode_splitlines)rJ   r  rY   rY   rZ   splitlines_impl  s   

z+unicode_splitlines.<locals>.splitlines_implF)r   r   r  rv   r   r   r  r  Booleanboolr!   r   )rJ   r  r#  r$  r  rY   rY   rZ   unicode_splitlines  s   
r  c                 C   s   t |}|dkr
dS t | }|d | }| j}| j}|D ]}|t |7 }t||j}t||j}qt|||}|d }	t|d|	dt |	 t |	}
td|D ]"}t||
| d| |
|7 }
|| }	t||
|	dt |	 |
t |	7 }
qN|S )Nr    rs   )r   r`   ra   r   r   r   _strncpyr   )r`  r  Z	parts_lenr  rK   rL   rM   prV  part
dst_offsetr   rY   rY   rZ   	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  rY   rY   rZ   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 rY   r   .0r  rY   rY   rZ   
<listcomp>      z8unicode_join.<locals>.join_list_impl.<locals>.<listcomp>r  )r`  r  _partsrY   rY   rZ   r       
c                 S   s   dd |D }|  |S )Nc                 S   s   g | ]}|qS rY   rY   r  rY   rY   rZ   r    s    z8unicode_join.<locals>.join_iter_impl.<locals>.<listcomp>)r  r`  r  Z
parts_listrY   rY   rZ   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 rY   rY   )r  r   r  rY   rZ   r  	  r  z7unicode_join.<locals>.join_str_impl.<locals>.<listcomp>)r   r   r  r  rY   r  rZ   join_str_impl  s   
z#unicode_join.<locals>.join_str_impl)r   r   Listr  r   r   ZIterableType)r`  r  r  r  r  rY   rY   rZ   unicode_join  s   r  zfillc                 C   s    t |tjs
tddd }|S )Nz<width> must be an Integerc                 S   s\   t | }||kr
| S |r| d nd}d||  }|dv r(|| | dd   }|S ||  }|S )Nr   r  0)+-rs   r   )r  r  r  
first_charpaddingr  rY   rY   rZ   
zfill_impl  s   z!unicode_zfill.<locals>.zfill_impl)r   r   r  r!   )r  r  r  rY   rY   rZ   unicode_zfill  s   r  c                 C   s`   t | }d}|d urt|D ]}| | |vr|  S q|S t|D ]}t| | s-|  S q!|S r   r   r   r+   r  charsr  r   rY   rY   rZ   unicode_strip_left_bound*  s   r  c                 C   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  rY   rY   rZ   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   r  r   r  r!   )r  rY   rY   rZ   unicode_strip_types_checkM     r  c                 C   r  )Nz,The slice indices must be an Integer or None)r   r   r   r   r  r  r  r!   )argrY   rY   rZ   rp  V  r  rp  lstripc                 C   0   t |tjrddd}|S t| ddd}|S )Nc                 S   rF  r   )r  r   r  r  rY   rY   rZ   lstrip_implc  rI  z#unicode_lstrip.<locals>.lstrip_implc                 S   s   | t | |d  S r   )r  r  rY   rY   rZ   r  i  r|  r   r   r   r   r  )r  r  r  rY   rY   rZ   unicode_lstrip_     

r   rstripc                 C   r  )Nc                 S   rF  r   )r  r   r  rY   rY   rZ   rstrip_implr  rI  z#unicode_rstrip.<locals>.rstrip_implc                 S   s   | d t | | S r   )r  r  rY   rY   rZ   r  x  r|  r   r  )r  r  r  rY   rY   rZ   unicode_rstripn  r  r  stripc                 C   r  )Nc                 S   rF  r   )r  r   r  rY   rY   rZ   
strip_impl  rI  z!unicode_strip.<locals>.strip_implc                 S   s    t | |}t| |}| || S r   )r  r  )r  r  ZlbrbrY   rY   rZ   r    s   

r   r  )r  r  r  rY   rY   rZ   unicode_strip}  s   

r  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   Zis_startrY   rY   rZ   normalize_str_idx  s   r
  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   rY   )r  Z	slice_lendefaultrY   rY   rZ   rm    s   rm  c                 C   s   |||}dd }||fS )zFix slice object.
    c           	      S   sF   |j \}}|\}}| |||}t| ||| t||| | S r   )r   make_helperrC   Zguard_invalid_sliceZ	fix_slicer   )	r   r   r   r   	slicetypeZ
lengthtypesliceobjrK   slicerY   rY   rZ   r     s   
z!_normalize_slice.<locals>.codegenrY   )r   r  rK   r   r   rY   rY   rZ   _normalize_slice  s   
r  c                 C   s   t |}dd }||fS )z2Compute the span from the given slice object.
    c                 S   s,   |j \}|\}| |||}t||}|S r   )r   r  rC   Zget_slice_length)r   r   r   r   r  r  r  Zresult_sizerY   rY   rZ   r     s
   z_slice_span.<locals>.codegen)r   rR   )r   r  r   r   rY   rY   rZ   _slice_span  s   
r  c           
      C   sv   |j | j kr%t|j }|| }|| }|| }t| j||j||dd d S t|D ]}	t| ||	 t|||	  q)d S )Nrs   )align)r`   rw   r    r^   r   r   r   )
dstr  rn  Z
src_offsetr   
byte_widthZsrc_byte_offsetZdst_byte_offsetr~   r   rY   rY   rZ   r    s   


r  c                 C   s2   |t jksJ dd }t t jt jt j}||fS )z_Create a slice of a unicode string using a view of its data to avoid
    extra allocation.
    c                 S   s   |\}}}t tj| ||d}t tj| |}|j|_|j|_|j|_||_| t	d|_
| jt}	|	| jtjfi }
| |	|
}|||jf}|||}||j|g|_t |jj|_| jrq| j||jd | | S )Nr   r   r   )r   r   r   r   rO   rL   rM   rK   r   r   rN   typing_contextresolve_value_typerw   get_call_typerS   get_functionr   r   rJ   r   rP   r   
enable_nrtr   increfr   r   )r   r   r   r   rn  r/  rK   Zin_strZview_strZbw_typZbw_sigZbw_implr  r   rY   rY   rZ   r     s8   
z$_get_str_slice_view.<locals>.codegen)r   r   rR   )r   Zsrc_tZstart_tZlength_tr   r   rY   rY   rZ   _get_str_slice_view  s   r  c                 C   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   )	r
  r   r   r   r`   r  r   r   r   )r   r   r   rL   rM   retrY   rY   rZ   getitem_char   s   

z%unicode_getitem.<locals>.getitem_charc                 S   s   t |t| }t|}t| |j}t|}t|}t|j|j |j	|jD ]}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 r'  )r  r   r  r   r/  r   r   r   stepstopr   r`   r  r   r   )r   r   Z	slice_idxspanr   rL   rM   r   new_kindr  currY   rY   rZ   getitem_slice-  s,   

z&unicode_getitem.<locals>.getitem_slice)r   r   r   r  Z	SliceType)r   r   r  r#  rY   rY   rZ   unicode_getitem  s   $r$  c                 C   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   ra   r   r   r   r   r   )r   r   
new_lengthr!  Z	new_asciirV  r   r6  rY   rY   rZ   concat_impl]  s   z#unicode_concat.<locals>.concat_implc                 S   s   | t | S r   r  r   rY   rY   rZ   r&  j     )r   r   r   r   )r   r   r&  rY   rY   rZ   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  rs   r   r   )r_   r`   r   ra   r   r  )Zstr_argZmult_argr%  r!  rV  Zlen_aZ	copy_sizerestrY   rY   rZ   _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   rY   rY   rZ   wrap  r  zunicode_repeat.<locals>.wrapc                 S   s
   t || S r   r+  r   rY   rY   rZ   r,    r  )r   r   r   r  )r   r   r,  rY   rY   rZ   unicode_repeat  s   r-  c                 C   r   )Nc                 S   s   t | dkS r   r  r   rY   rY   rZ   rA    r'  zunicode_not.<locals>.implr   r   rA  rY   rY   rZ   unicode_not  r   r0  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   rs   )listr  r
  r   r   r  r  )	r   old_strnew_strrk  ZscharsZsplit_resultZ	min_countr   rV  rY   rY   rZ   rA    s&   


zunicode_replace.<locals>.implr   )r   r   r  rv   r   r   r  r  r!   r   r   r  )r   r3  r4  rk  r#  rA  rY   rY   rZ   unicode_replace  s&   
r6  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   Frs   T)r   r   ra   r   )rJ   rK   r  r   
ascii_funcunicode_funcrY   rZ   rA    s(   


z.gen_isAlX.<locals>.unicode_isAlX.<locals>.implrY   rJ   rA  r9  rY   rZ   unicode_isAlX  s   z gen_isAlX.<locals>.unicode_isAlXrY   )r:  r;  r=  rY   r9  rZ   	gen_isAlX  s   r>  isalphac                 C   s   t | pt| S r   )r?   r>   xrY   rY   rZ   <lambda>  s   rB  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 Nrs   r   FTr   r   r   )r   lcasedr   r  is_loweris_titleis_upperrY   rZ   rA    s   
z_is_upper.<locals>.implrY   )rI  rK  rJ  rA  rY   rH  rZ   	_is_upper  s   rL  c                 C   r   r   rY   r@  rY   rY   rZ   rB        isupperc                 C      dd }|S )z
    Implements .isupper()
    c                 S   s   | j rt| S t| S r   )ra   _ascii_is_upper_unicode_is_upperr.  rY   rY   rZ   rA     s   zunicode_isupper.<locals>.implrY   r/  rY   rY   rZ   unicode_isupper  s   rR  isasciic                 C   rO  )z Implements UnicodeType.isascii()c                 S   r   r   )ra   rJ   rY   rY   rZ   rA  ,  r   zunicode_isascii.<locals>.implrY   r<  rY   rY   rZ   unicode_isascii(  s   rU  istitlec                 C   rO  )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 rD  )r   r   r1   r7   r   r2   )rJ   rK   charrG  previous_is_casedr   rY   rY   rZ   rA  9  s,   

zunicode_istitle.<locals>.implrY   r<  rY   rY   rZ   unicode_istitle1  s   rY  islowerc                 C   rO  )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 rD  )r   r2   r   r   r1   r7   )rJ   rK   rG  r   r   rY   rY   rZ   rA  `  s   
zunicode_islower.<locals>.implrY   r<  rY   rY   rZ   unicode_islowerW  s   	r[  isidentifierc                 C   rO  )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_   rs   T)r   r   r-   r   r.   )rJ   rK   Zfirst_cpr   r  rY   rY   rZ   rA  w  s   

z"unicode_isidentifier.<locals>.implrY   r<  rY   rY   rZ   unicode_isidentifiers  s   r^  c                    r7  )Nc                    r8  )Nc                    sX   t | }|dkr t| dS r|dkrdS t|D ]}t| |} |s) dS qdS rD  rE  )rJ   rK   r   r  _PyUnicode_IS_funcempty_is_falserY   rZ   rA    s   
z*gen_isX.<locals>.unicode_isX.<locals>.implrY   r<  r_  rY   rZ   unicode_isX  s   zgen_isX.<locals>.unicode_isXrY   )r`  ra  rb  rY   r_  rZ   gen_isX  s   rc  isspace	isnumericisdigit	isdecimalisprintablec                    r7  )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   rs   rD   )
r   r   r`   ra   r   r   r   r   r   r   )	rJ   rK   r   tmpmaxcharsZ	newlengthmaxcharZnewkindr   r9  rY   rZ   rA    s    
zcase_operation.<locals>.implrY   )r:  r;  rA  rY   r9  rZ   case_operation  s   rl  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   rs   i  i  )r   r0   r/   )rJ   rK   r   r   r6  Zfinal_sigmarY   rY   rZ   _handle_capital_sigma  s&   

rm  c                 C   s&   | dkrt ||||d< dS t| |S )z>This is a translation of the function that lowers a character.i  r   rs   )rm  r'   )r  rJ   rK   r   mappedrY   rY   rZ   _lower_ucs4  s   
ro  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  rs   )	r   r   zerosr$   r   ro  r&   maxr   )
rJ   rK   r   rj  kr   rn  r  n_resr1  lowerrY   rZ   _do_upper_or_lower  s   


z7_gen_unicode_upper_or_lower.<locals>._do_upper_or_lowerrY   )rw  rx  rY   rv  rZ   _gen_unicode_upper_or_lower  s   ry  c                    r   )Nc                    s0   t t| D ]}t| |}t|| | qd S r   )r   r   r   r   rJ   r   r   r  funcrY   rZ   _ascii_upper_or_lower	  s   
z8_gen_ascii_upper_or_lower.<locals>._ascii_upper_or_lowerrY   )r|  r}  rY   r{  rZ   _gen_ascii_upper_or_lower	  s   r~  rw  c                 C   
   t ttS )zImplements .lower())rl  _ascii_lower_unicode_lowerrT  rY   rY   rZ   unicode_lower	     
r  upperc                 C   r  )zImplements .upper())rl  _ascii_upper_unicode_upperrT  rY   rY   rZ   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 rp  )	r   rr  r$   r   fillr   r(   rs  r   )rJ   rK   r   rj  rt  rn  r   r  ru  r1  rk  rY   rY   rZ   _unicode_casefold&	  s   



r  c                 C   s0   t t| D ]}t| |}t||t| qd S r   )r   r   r   r   r#   rz  rY   rY   rZ   _ascii_casefold7	  s   
r  casefoldc                 C   r  )zImplements str.casefold())rl  r  r  rT  rY   rY   rZ   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 rp  )
r   rr  r$   r   r)   rs  r   r   r  ro  )rJ   rK   r   rj  rt  rk  rn  r  ru  r1  r   rY   rY   rZ   _unicode_capitalizeE	  s(   







r  c                 C   sL   t | d}t|dt| tdt| D ]}t | |}t||t| qd S rl  )r   r   r"   r   r   r#   )rJ   r   r  r   rY   rY   rZ   _ascii_capitalize_	  s   

r  
capitalizec                 C   r  r   )rl  r  r  rT  rY   rY   rZ   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   rq  Nrs   )r   emptyr$   r   r  r   ro  r)   rs  r   r/   )rJ   rK   r   rj  rt  Zprevious_casedrn  r   r  ru  r1  rk  rY   rY   rZ   _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   rX  r   r  rY   rY   rZ   _ascii_title	  s   
r  titlec                 C   r  )zImplements str.title())rl  r  r  rT  rY   rY   rZ   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   rz  rY   rY   rZ   _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 rp  )r   r  r$   r   r  r   r1   ro  r2   r&   rs  r   )rJ   rK   r   rj  rt  rk  rn  r   r  ru  r1  rY   rY   rZ   _unicode_swapcase	  s&   



r  swapcasec                 C   r  r   )rl  r  r  rT  rY   rY   rZ   unicode_swapcase	  r  r  c                 C   r   )Nc                 S   s"   t | }|dkrtdt| dS )Nrs   zord() expected a characterr   )r   	TypeErrorr   )r   lcrY   rY   rZ   rA  	  s   
zol_ord.<locals>.implr   )r   rA  rY   rY   rZ   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   r  rY   rY   rZ   _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  ru   _out_of_range_msgr  r$   )ZordinalrY   rY   rZ   _PyUnicode_FromOrdinal	  s   r  c                 C   r   )Nc                 S   s   t | S r   )r  )r   rY   rY   rZ   rA  	  s   zol_chr.<locals>.impl)r   r   r  )r   rA  rY   rY   rZ   ol_chr	  r   r  __str__c                 C      dd S )Nc                 S   s   | S r   rY   r   rY   rY   rZ   rB  	  rM  zunicode_str.<locals>.<lambda>rY   r   rY   rY   rZ   unicode_str	     r  __repr__c                 C   r  )Nc                 S   s   d|  d S )N'rY   r   rY   rY   rZ   rB  
      zunicode_repr.<locals>.<lambda>rY   r   rY   rY   rZ   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   Tr  rs   r  )
r  r   floorlog10r   rw   r   r   orddivmod)	r   flagrK   rL   r   r   r   digitr   tenrY   rZ   rA  
  s(   zinteger_str.<locals>.implrY   )r   rA  rY   r  rZ   integer_str
  s   r  c                 C   r  )Nc                 S   s   |   S r   )r  r   rY   rY   rZ   rB  %
  s    zinteger_repr.<locals>.<lambda>rY   r  rY   rY   rZ   integer_repr#
  r  r  c                 C   r  )Nc                 S   s   | rdS dS )NTrueFalserY   r   rY   rY   rZ   rB  +
  r  zboolean_str.<locals>.<lambda>rY   r  rY   rY   rZ   boolean_str(
  s   r  Zgetiterc           
      C   sp   |j \}|\}| ||j}| tjd}t||}||_||_	| j
r,| j||| | }	t| ||j|	S r   )r   r  return_typer   r   re   r   Zalloca_once_valuerd   rJ   r  r   r  r   r   )
r   r   r   r   r!  rJ   iterobjr5  Zindexptrr   rY   rY   rZ   getiter_unicode3
  s   r  Ziternextc                 C   s  |j \}|\}| j}|tj}||tjtjfi }	| 	||	}
|t
}||tjfi }| 	||}| j|||d}|||jf}||j}|d||}|| ||# |
||j|f}|| t||}|||j W d    d S 1 sw   Y  d S )Nr   <)r   r  r  operatorgetitemr  r   r   re   r  r   r  rJ   r   rd   Zicmp_unsignedZ	set_validZif_thenZyield_r   Zincrement_indexr   )r   r   r   r   rV  ZitertyiterZtyctxZfntyZgetitem_sigZgetitem_implZlen_sigr   r  Zstrlenrd   Zis_validZgotitemZnindexrY   rY   rZ   iternext_unicodeK
  s,   


"r  )r   rB  r  r  r  r  r   )Tr5  )r  r  numpyr   Zllvmlite.irr   r   Znumba.core.cgutilsr   Znumba.core.extendingr   r   r   r   r	   r
   r   r   r   r   Znumba.core.imputilsr   r   r   r   r   r   Znumba.core.datamodelr   r   Z
numba.corer   r   r   Znumba.core.utilsr   Znumba.core.pythonapir   r   r   Znumba._helperlibr   Znumba.cpython.hashingr   Znumba.core.unsafe.bytesr    Znumba.core.errorsr!   Znumba.cpython.unicode_supportr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   Znumba.cpythonrC   rG   r  ZUSE_LEGACY_TYPE_SYSTEMrR   Zbitwidthr)  Zpy_intr   rI   ZUnicodeIteratorTyperc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   NotImplementedErrorr   rw   r   r   r   r   r   eqr  ner  ltr  gtr  ler  ger  containsr  r%  r&  r,  r-  r9  r;  rC  r  rN  rJ  rO  rZ  r]  ri  rr  rt  r=  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rp  r   r  r  r
  rm  r  r  r  r  r  r$  r   iaddr(  r*  r   r-  not_r0  r6  r>  Z_unicode_is_alnumrL  Z_always_falserP  rQ  rR  rU  rY  r[  r^  rc  rl  rm  ro  ry  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  r  r  r  r  r  r  ZNEWr  rY   rY   rY   rZ   <module>   s`   0 
	





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

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