
    ܙd;Z                       d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZmZ d dlmZmZ d dlmZm Z  d dl!m"Z"m#Z#m$Z$m%Z% d d	l&m'Z' d d
l(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZO d dlPmQZQ dZRejS        jT        ZU eejV                   G d de
j                              ZW eejV        dd            eejV        dd            eejV        dd            eejV        dd            eejV        dd            eejX                   G d de                      ZYd ZZd Z[ eej\        ej]                  d              Z^ eej]                  d!             Z_ eejV                  d"             Z` eejV                  d#             Zad$ Zbed%             Zced&             Zded'             Zeed(             Zfedd)            Zg ed*+          d,             Zhd- Zied.             Zjed/             Zked0             Zl ed*+          d1             Zmed2             Zned3             Zoed4             Zp ed*+          d5             Zqed6             Zred7             Zs eet          d8             Zu eejv                  d9             Zw eejx                  d:             Zy eejz                  d;             Z{ eej|                  d<             Z} eej~                  d=             Z eej                  d>             Z eej                  d?             Zd@ ZdA ZedB             ZedC             ZedD             ZedE             ZdF Z e ee                    Z e ee                    Z eejV        dG          ddH            Z eejV        dI          ddJ            Z eejV        dK          ddL            Z eejV        dM          ddN            Z eejV        dO          dP             Z eejV        dQ          ddR            Z eejV        dS          dT             ZedU             Z eejV        dV          ddW            Z eejV        dX          ddY            Z eejV        dZ          dd\            Z eejV        d]          dd_            Zd` Z e ee8                    Z e ee9                    Z eejV        da          ddb            Z eejV        dc          dde            Zdf Z  eejV        dg           ed*                       eejV        dh           edi                     dj Z e eeA                    Z e ee@                    Z eejV        dk          ddl            Zedm             Z eejV        dn          do             Z eejV        dp          dq             Zedr             Zeds             Zdt Zdu Z eejV        dv          ddw            Z eejV        dx          ddy            Z eejV        dz          dd{            Zedd|            Zed}             Zed~             Zed             Z ed*+          d             Zed             Z eej                  d             Z eej                   eej                  d                         Zed             Z eej                  d             Z eej                  d             Z eejV        d          dd            Zd Z  eejV        d           eeMeK                      ed           Z  eejV        d           ee2e                     d Z ed           Z e eeEeFe                    Z e ee?e>eD                    Z eejV        d          d             Z eejV        d          d             Z eejV        d          d             Z eejV        d          d             Z eejV        d          d             ZddZ  eejV        d           ee8                       eejV        d           eeL                       eejV        d           eeN                       eejV        d           eeO                       eejV        d           ee7d*                     d Zed             Zed             Zd Z e ed*                    Z e edi                    Zd Z e ee/                    Z e ee0                    Z eejV        d          d             Z eejV        d          d             Zed             Zed             Z eejV        d          d             Zed             Zed             Z eejV        d          d             Zed             Zed             Z eejV        d          d             Zed             Zed             Z eejV        d          d             Z ee          d             Zed             ZdeRz  Zed             Z ee          d             Z eejV        d          d             Z eejV        d          d             Z eej        d          d             Z eej        d          d             Z eej        d           eej        d          dÄ                         Z edejV                  dń             Z edejX                   eej                  dǄ                         ZdS )    N)IntTypeConstant)is_nonelike)
modelsregister_modelmake_attribute_wrapperunboxboxNativeValueoverloadoverload_method	intrinsicregister_jitable)lower_constant
lower_castlower_builtiniternext_implimpl_ret_new_refRefType)register_defaultStructModel)typescgutils)PY_UNICODE_1BYTE_KINDPY_UNICODE_2BYTE_KINDPY_UNICODE_4BYTE_KINDPY_UNICODE_WCHAR_KIND)	c_helpers)
_Py_hash_t)memcpy_region)TypingError)!_Py_TOUPPER_Py_TOLOWER_Py_UCS4_Py_ISALNUM_PyUnicode_ToUpperFull_PyUnicode_ToLowerFull_PyUnicode_ToFoldedFull_PyUnicode_ToTitleFull_PyUnicode_IsPrintable_PyUnicode_IsSpace_Py_ISSPACE_PyUnicode_IsXidStart_PyUnicode_IsXidContinue_PyUnicode_IsCased_PyUnicode_IsCaseIgnorable_PyUnicode_IsUppercase_PyUnicode_IsLowercase_PyUnicode_IsLineBreak_Py_ISLINEBREAK_Py_ISLINEFEED_Py_ISCARRIAGERETURN_PyUnicode_IsTitlecase_Py_ISLOWER_Py_ISUPPER_Py_TAB_Py_LINEFEED_Py_CARRIAGE_RETURN	_Py_SPACE_PyUnicode_IsAlpha_PyUnicode_IsNumeric_Py_ISALPHA_PyUnicode_IsDigit_PyUnicode_IsDecimalDigit)slicing c                       e Zd Zd ZdS )UnicodeModelc           	         dt           j        fdt           j        fdt           j        fdt           j        fdt
          fdt          j        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memberss       5lib/python3.11/site-packages/numba/cpython/unicode.pyrU   zUnicodeModel.__init__O   s}    U]#uz"U[!&Z ,U];;<u~&	
 	##D#w@@@@@    N)__name__
__module____qualname__rU    r[   rZ   rF   rF   M   s(        A A A A Ar[   rF   rH   _datarI   _lengthrJ   _kindrK   	_is_asciirL   _hashc                        e Zd Z fdZ xZS )UnicodeIteratorModelc                     dt          j        t           j                  fd|j        fg}t	          t
          |                               |||           d S )NindexrH   )r   EphemeralPointeruintprH   superrf   rU   )rV   rW   rX   rY   	__class__s       rZ   rU   zUnicodeIteratorModel.__init__f   sR    U3EK@@AGL)+"D))223IIIIIr[   )r\   r]   r^   rU   __classcell__)rl   s   @rZ   rf   rf   d   sA        J J J J J J J J Jr[   rf   c           
      T   ddl m}m}m}m}m}m}m}m}m	}	 t          d         }
 ||| ||           ||           ||           ||                    } ||
          } |            } |            } |            } |            } ||  |	|           |	|           |	|           |	|                    }|t          d          |j        }|j        }|j        }|dz   t          |          z  }||z                      |          }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fnrI   rJ   rK   hashvrH   nbytesouts                       rZ   compile_time_get_string_datar   n   s                        
 ##45Ih	779+=+=wwu~~gfoowwy'9'9; ;E	!	"	"BY[[F577DvxxHIKKE2c55==%%++uuXeMMD|LMMM\F:D~Hqj/555FV
)
)$
/
/C::vtXu{::r[   c                    t          |          \  }}}}}|j        }	|                     |	|          }
 t          j        |          | |          }|
|_        |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_proxyrH   rI   typerJ   rK   rL   	_getvalue)contextbuildertypliteral_string	databytesrI   rJ   rK   r   modgvuni_strs               rZ   make_string_from_constantr      s     	%^44 -IvtXu
.C		#	#C	3	3B.g)#..w@@GGL^((00GN<$$T**GL',,X66G <$$R((GLr[   c                 0    t          | |||j                  S N)r   literal_value)r   r   fromtytotyvals        rZ   cast_from_literalr      s     $$ 4  r[   c                 &    t          | |||          S r   )r   )r   r   r   pyvals       rZ   constant_unicoder      s    $WgsEBBBr[   c                    |j                             |          \  }}}}}} t          j        |           |j        |j                  }	||	_        ||	_        ||	_        ||	_	        ||	_
        |j                             ||          |	_        ||	_        t          j        |j        |j                                                   }
t!          |	                                |
          S )zE
    Convert a unicode str object to a native unicode structure.
    )is_error)pyapistring_as_string_size_and_kindr   r   r   r   rH   rI   rJ   rK   rL   nrt_meminfo_new_from_pyobjectrM   rN   is_not_nullerr_occurredr   r   )r   r   cokrH   rI   rJ   rK   r   r   r   s              rZ   unbox_unicode_strr      s     	
..s33 ,BfdHe.g)#..qy!)DDGGLGNGLGGLg;; GO GN"19ag.B.B.D.DEEHw((**X>>>>r[   c                 0    t          j        |           |j        |j        |          }|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_datarJ   rH   rI   object_hashnrtdecref)r   r   r   r   ress        rZ   box_unicode_strr      s    
 /g)#..qy!)3OOOG
'
+
+glGN4 4C
 GIMC---Jr[   c                       fd}|S )Nc                    |\  }}|                     |t                                                              }|                    |                    ||g                    }|                    |t          d                    S N    )bitcastr   
as_pointerloadgepzext)	r   r   	signatureargsrH   idxptrchbitsizes	           rZ   codegenz#make_deref_codegen.<locals>.codegen   sn    	coodGG$4$4$?$?$A$ABB\\'++cC51122||B,,,r[   r_   r   r   s   ` rZ   make_deref_codegenr      s#    - - - - - Nr[   c                 v    t          j        t           j        t           j                  }|t	          d          fS N   r   rR   rO   rP   r   	typingctxrH   offsetsigs       rZ   deref_uint8r      s+    
,u}ej
1
1C"1%%%%r[   c                 v    t          j        t           j        t           j                  }|t	          d          fS N   r   r   s       rZ   deref_uint16r      +    
,u}ej
1
1C"2&&&&r[   c                 v    t          j        t           j        t           j                  }|t	          d          fS r   r   r   s       rZ   deref_uint32r      r   r[   c                     d }t          j        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           
      @   |\  }}}}t          j        t          j                  } || |          }	|                    ||                    |t          |j        d                              }
| j        	                    ||
          |	_
        ||	_        ||	_        ||	_        |                     t          d          |	_        | j                            ||	j
                  |	_        t          j        |	j        j                  |	_        |	                                S )Nry   r   )r   r   r   unicode_typemuladdr   r   r   meminfo_allocrM   rJ   rK   rI   get_constantr   rL   meminfo_datarH   get_null_valuerN   r   )r   r   r   r   kind_valchar_bytes_val
length_valis_ascii_valuni_str_ctorr   
nbytes_vals              rZ   detailsz_malloc_string.<locals>.details   s    ?C<>:| 253EFF,w00[[!(Z-5joq-I-I"K "KL L
 "+33GZHH'#++J;;{//II /0CDD  """r[   )r   r   rQ   rP   rR   )r   rJ   
char_bytesrI   rK   r   r   s          rZ   _malloc_stringr      s;    # # #* 
U[%*ej%,
O
OC<r[   c                     t          |           }t          | |||          }t          ||t          j        d                     |S Nr   )r}   r   _set_code_pointnprR   )rJ   rI   rK   
char_widthss        rZ   _empty_stringr     sA    $T**JtZ::AAvry||,,,Hr[   F)_nrtc                     | j         t          k    rt          | j        |          S | j         t          k    rt          | j        |          S | j         t          k    rt          | j        |          S dS r   )rb   r   r   r`   r   r   r   r   )ais     rZ   _get_code_pointr     si    w'''17A&&&	
)	)	)AGQ'''	
)	)	)AGQ''' qr[   c                       fd}|S )Nc                 J   |\  }}}dk     r#|                     |t                              }|                    |t                                                              }|                    ||                    ||g                     |                                 S r   )truncr   r   r   storer   get_dummy_value)	r   r   r   r   rH   r   r   r   r   s	           rZ   r   z!make_set_codegen.<locals>.codegen.  s    c2R<<r77#3#344BoodGG$4$4$?$?$A$ABBb'++cC511222&&(((r[   r_   r   s   ` rZ   make_set_codegenr   -  s#    ) ) ) ) ) Nr[   c                     t          j        t           j        t           j        t           j                  }|t          d          fS r   r   voidrO   int64rR   r   r   rH   r   r   r   s        rZ   	set_uint8r   9  s/    
*U]EK
>
>C ####r[   c                     t          j        t           j        t           j        t           j                  }|t          d          fS r   r   r   s        rZ   
set_uint16r  ?  /    
*U]EK
>
>C $$$$r[   c                     t          j        t           j        t           j        t           j                  }|t          d          fS r   r   r   s        rZ   
set_uint32r  E  r  r[   c                    | 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)	rb   r   r   r`   r   r  r   r  AssertionError)r   r   r   s      rZ   r   r   K  s     	w'''!'1b!!!!!	
)	)	)17Ar"""""	
)	)	)17Ar"""""BD D 	Dr[   c                     | t           k    s|t           k    rt          d          | t          k    r|S | t          k    r|t          k    r|S | S | t          k    r| S t          d          )N!PY_UNICODE_WCHAR_KIND unsupportedz/Unexpected unicode representation in _pick_kind)r   r  r   r   r   )kind1kind2s     rZ   
_pick_kindr  ^  s{    %%%2G)G)G@AAA%%%	'	'	')))LL	'	'	'NOOOr[   c                 j    | dk    r|dk    rt          j        d          S t          j        d          S Nry   r   )r   rR   )	is_ascii1	is_ascii2s     rZ   _pick_asciir  p  s/    A~~)q..|A<??r[   c                     | t           k    rdS | t          k    rdS | t          k    rdS | t          k    rt	          d          t	          d          )Nry         r  z'Unexpected unicode encoding encountered)r   r   r   r   r  )rJ   s    rZ   r}   r}   w  s_    $$$q	&	&	&q	&	&	&q	&	&	&@AAAFGGGr[   c                     |dk    rdS ||z   | j         k    rdS ||z   |j         k    rdS t          |          D ]:}t          | ||z             }t          |||z             }||k     r dS ||k    r dS ;dS )Nr   r   ry   )ra   ranger   )r   a_offsetbb_offsetnr   a_chrb_chrs           rZ   _cmp_regionr    s    Avvq	A		!	!r	A		!	!q1XX  8a<008a<005==22U]]11  1r[   c                 v    | 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   rD   z;Invalid codepoint. Found value greater than Unicode maximum)r   r   r{   r   )cpMAX_UNICODEmsgs      rZ   _codepoint_to_kindr"    sK    
 
Cxx$$	e$$ OCS//!$$r[   c                     | dk     S )z;
    Returns true if a codepoint is in the ASCII range
       r_   )r   s    rZ   _codepoint_is_asciir%    s    
 8Or[   c                 D    t          | t          j                  rd }|S d S )Nc                     | j         S r   )ra   r   s    rZ   len_implzunicode_len.<locals>.len_impl  s
    9r[   
isinstancer   UnicodeType)r   r)  s     rZ   unicode_lenr-    s5    !U&'' 	 	 	 r[   c                 b   | 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 }|S ||z  rd }|S d S )Nc           	          | 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_nones       rZ   eq_implzunicode_eq.<locals>.eq_impl  s    $YF$YF ! ! !f !4 5AAAA1vvQuq!Q3q6622a77r[   c                     dS NFr_   r   r  s     rZ   r4  zunicode_eq.<locals>.eq_impl  s    5r[   )is_internalr+  r   Optionalr   r,  StringLiteralUnicodeCharSeq)r   r  check_acheck_baccept	a_unicode	b_unicoder4  s           rZ   
unicode_eqrA    s    M am !U^$$ &!U^$$ &!4e6JKF7F++I7F++I Y 	8 	8 	8 	Y	 	 	 		 r[   c                     | j         r|j         sd S t          j        t          j        t          j        f}t          | |          }t          ||          }|r|rd }|S ||z  rd }|S d S )Nc                     | |k     S r   r_   r7  s     rZ   ne_implzunicode_ne.<locals>.ne_impl  s    Q<r[   c                     dS )NTr_   r7  s     rZ   r4  zunicode_ne.<locals>.eq_impl  s    4r[   )r8  r   r,  r:  r;  r+  )r   r  r>  r?  r@  rD  r4  s          rZ   
unicode_nerF    s    M am !4e6JKF1f%%I1f%%I Y 	  	  	 	Y	 	 	 		 r[   c                     t          | t          j        t          j        f          }t          |t          j        t          j        f          }|r|rd }|S d S d S )Nc                     t          t          |           t          |                    }t          | d|d|          }|dk    rdS |dk    r t          |           t          |          k     S dS )Nr   r   TFminr1  r  r   r  minleneqcodes       rZ   lt_implzunicode_lt.<locals>.lt_impl  sd    QQ((F Aq!V44F||t11vvA&5r[   r+  r   r,  r:  )r   r  r?  r@  rN  s        rZ   
unicode_ltrP    o    1u0%2EFGGI1u0%2EFGGI 	Y 		 	 	 	 	 	 	r[   c                     t          | t          j        t          j        f          }t          |t          j        t          j        f          }|r|rd }|S d S d S )Nc                     t          t          |           t          |                    }t          | d|d|          }|dk    rdS |dk    r t          |           t          |          k    S dS )Nr   ry   TFrI  rK  s       rZ   gt_implzunicode_gt.<locals>.gt_impl  sd    QQ((F Aq!V44F{{t11vvA&5r[   rO  )r   r  r?  r@  rT  s        rZ   
unicode_gtrU    rQ  r[   c                     t          | t          j        t          j        f          }t          |t          j        t          j        f          }|r|rd }|S d S d S )Nc                     | |k     S r   r_   r7  s     rZ   le_implzunicode_le.<locals>.le_impl      A;r[   rO  )r   r  r?  r@  rX  s        rZ   
unicode_lerZ    m    1u0%2EFGGI1u0%2EFGGI Y 	 	 	   r[   c                     t          | t          j        t          j        f          }t          |t          j        t          j        f          }|r|rd }|S d S d S )Nc                     | |k      S r   r_   r7  s     rZ   ge_implzunicode_ge.<locals>.ge_impl&  rY  r[   rO  )r   r  r?  r@  r^  s        rZ   
unicode_ger_  !  r[  r[   c                 |    t          | t          j                  rt          |t          j                  rd }|S d S d S )Nc                 *    t          | |          dk    S Nr   )_findr7  s     rZ   contains_implz'unicode_contains.<locals>.contains_impl.  s    A;;##r[   r*  )r   r  rd  s      rZ   unicode_containsre  +  sV    !U&'' Jq%:K,L,L 	$ 	$ 	$ 	   r[   c                 0   | }t          | t          j                  r| j        }n!t          | t          j                  r| j        }t          j        t          j        f}|4t          ||          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|   r9  r   IntegerNoneTyper!   format)tynamethetyaccepteds       rZ   unicode_idx_check_typerp  4  s     E"em$$ 	B	'	' u~.HE8!<!<3::42NNOOO r[   c                     t          | t          j                  s0d                    |t          j        |           }t	          |          dS )z$Check object belongs to unicode typerg  N)r+  r   r,  rk  r!   )rl  rm  r!  s      rZ   unicode_sub_check_typerr  H  sI    b%+,, '..tU5FKK# r[   c                 ,    | d|t           dz
  z  z  z  } | S Nry   _BLOOM_WIDTHmaskr   s     rZ   
_bloom_addry  Q  s     Q2)*+,DKr[   c                 (    | d|t           dz
  z  z  z  S rt  ru  rw  s     rZ   _bloom_checkr{  W  s    1|a/0122r[   c                    t          |          }|dk    r|S |dz
  x}}t          ||          }t          j        d          }t	          ||          }	t          |          D ]0}
t          ||
          }t	          |	|          }	||k    r||
z
  dz
  }1|}
|
||z
  k    rt          | ||
z             }||k    r{d}||k     r5t          | |
|z             }t          ||          }||k    rn|dz  }||k     5||k    r|
S t          | ||
z   dz             }t          |	|          dk    r|
|z  }
n5|
|z  }
n/t          | ||
z   dz             }t          |	|          dk    r|
|z  }
|
dz  }
|
||z
  k    dS )zLeft finder.r   ry   r   )r1  r   r   rP   ry  r  r{  )rH   substrstartendmgapmlastlastzerorx  r   r   jhaystack_ch	needle_chs                  rZ   _default_findr  ]  s    	FAAvva%C%65))D:a==DdD!!D5\\    VQ''$##::!)a-CA
sQw,,T519--::Ae))-dAE::+FA66	)++Q e)) Ezz uqy1}55BD"%%**QS uqy1}55BD"%%**Q	Q/ sQw,,2 2r[   c                    t          |          }|dk    r|S |dz
  x}}t          |d          }t          d|          }|}	|	dk    r6t          ||	          }
t          ||
          }|
|k    r|	dz
  }|	dz  }	|	dk    6||z
  }	|	|k    rt          | |	          }
|
|k    r~|}|dk    r5t          | |	|z             }t          ||          }||k    rn|dz  }|dk    5|dk    r|	S t          | |	dz
            }
|	|k    rt          ||
          dk    r|	|z  }	n8|	|z  }	n2t          | |	dz
            }
|	|k    rt          ||
          dk    r|	|z  }	|	dz  }	|	|k    dS )zRight finder.r   ry   r   )r1  r   ry  r{  )rH   r}  r~  r  r  skipr  mfirstrx  r   r   r  r  r  s                 rZ   _default_rfindr    s    	FAAvv
q5D5VQ''Fa  DA
a%%VQ''$##<<q5D	Q a%% 	aA
u**T1%%<<Aa%%-dAE::+FA66	)++Q a%% Avv q1u--B5yy\$33q88QT	 !q1u--B5yy\$33q88Q	Q3 u**6 2r[   c                      d fd	}|S )z%Generate finder either left or right.Nc                     t          |           }t          |          }|d}||}t          |||          \  }}||z
  |k     rdS  | |||          S )Nr   r   )r1  _adjust_indices)rH   r}  r~  r  rI   
sub_length	find_funcs         rZ   implzgenerate_finder.<locals>.impl  sl    T[[
=E;C$VUC88
s;##2yvuc222r[   NNr_   )r  r  s   ` rZ   generate_finderr    s(    3 3 3 3 3 3 Kr[   findc                     t          |t          j                  rdd}|S t          |d           t          |d           t	          |d           t
          S )zImplements str.find()Nc                 F    |                      t          |                    S r   )r  r0  rH   r}  r~  r  s       rZ   	find_implzunicode_find.<locals>.find_impl  s    99S[[)))r[   r~  r  r}  r  )r+  r   r;  rp  rr  rc  )rH   r}  r~  r  r  s        rZ   unicode_findr    sh     &%.// 	* 	* 	* 	*5'***3&&&68,,,Lr[   rfindc                     t          |t          j                  rdd}|S t          |d           t          |d           t	          |d           t
          S )zImplements str.rfind()Nc                 F    |                      t          |                    S r   )r  r0  r  s       rZ   
rfind_implz!unicode_rfind.<locals>.rfind_impl  s    ::c&kk***r[   r~  r  r}  r  )r+  r   r;  rp  rr  _rfind)rH   r}  r~  r  r  s        rZ   unicode_rfindr    sh     &%.// 	+ 	+ 	+ 	+5'***3&&&68,,,Mr[   rindexc                 n    t          |d           t          |d           t          |d           dd}|S )zImplements str.rindex()r~  r  subNc                 ^    |                      |||          }|dk     rt          d          |S Nr   zsubstring not found)r  r{   r   r  r~  r  results        rZ   rindex_implz#unicode_rindex.<locals>.rindex_impl  s4    eS))A::2333r[   r  rp  rr  )r   r  r~  r  r  s        rZ   unicode_rindexr    sP     5'***3&&&3&&&    r[   rh   c                 n    t          |d           t          |d           t          |d           dd}|S )zImplements str.index()r~  r  r  Nc                 ^    |                      |||          }|dk     rt          d          |S r  )r  r{   r  s        rZ   
index_implz!unicode_index.<locals>.index_impl  s4    UC((A::2333r[   r  r  )r   r  r~  r  r  s        rZ   unicode_indexr    sP     5'***3&&&3&&&    r[   	partitionc                 6   |}t          |t          j                  r|j        }n!t          |t          j                  r|j        }t          j        t          j        f}|6t          ||          s&d                    d||          }t          |          d }|S )zImplements str.partition()Nrg  sepc                 x   t          |          }t          | j        d| j                  }t	          |          }| j        |j        k     st	          |           |k     r| ||fS |dk    rt          d          |                     |          }|dk     r| ||fS | d|         || ||z   t	          |                    fS Nr   empty separator)r0  r   rb   rc   r1  r{   r  rH   r  	empty_str
sep_lengthposs        rZ   r  zunicode_partition.<locals>.impl'  s    #hh!$*a@@	XX
:	!!SYY%;%;I--??.///iinn77I--AcE{CcJ&6s4yy&@!AAAr[   
r+  r   rh  r|   r9  r   r,  r;  rk  r!   rH   r  rn  ro  r!  r  s         rZ   unicode_partitionr         E#u}%% 		C	(	( !5#78HE8!<!<'..uhDD#B B B" Kr[   countc                     t          |           t          |           t          |t          j                  rdd}|S d}t	          |                    t          |                              )Nc                 b   d}t          |           }t          |          }t          ||d          }t          |||          }||z
  dk     s||k    rdS | ||         } t          |           }d|}}|dk    r|dz   S ||z   |k    r*| |||z            |k    r|dz  }||z  }n|dz  }||z   |k    *|S Nr   ry   )r1  _normalize_slice_idx_count)srcr  r~  r  r  src_lensub_lens          rZ   
count_implz!unicode_count.<locals>.count_implB  s    E#hhG#hhG.ugqAAE,S'7CCCU{Q%'//qeck"C#hhGG3E!||{"7?g--uuw./366QJEW$EEQJE 7?g-- Lr[   z+The substring must be a UnicodeType, not {}r  )_count_args_types_checkr+  r   r,  r!   rk  r   )r  r  r~  r  r  	error_msgs         rZ   unicode_countr  ;  sx     E"""C   #u()) 	 	 	 	0 =I
i&&tCyy11
2
22r[   
rpartitionc                 6   |}t          |t          j                  r|j        }n!t          |t          j                  r|j        }t          j        t          j        f}|6t          ||          s&d                    d||          }t          |          d }|S )zImplements str.rpartition()Nrg  r  c                 x   t          |          }t          | j        d| j                  }t	          |          }| j        |j        k     st	          |           |k     r||| fS |dk    rt          d          |                     |          }|dk     r||| fS | d|         || ||z   t	          |                    fS r  )r0  r   rb   rc   r1  r{   r  r  s        rZ   r  z unicode_rpartition.<locals>.implp  s    #hh!$*a@@	XX
:	!!SYY%;%;i--??.///jjoo77i--AcE{CcJ&6s4yy&@!AAAr[   r  r  s         rZ   unicode_rpartitionr  `  r  r[   c                 f    || k    r| }|dk     r|| z  }|dk     rd}|dk     r|| z  }|dk     rd}||fS r   r_   )rI   r~  r  s      rZ   r  r    sZ    
V||
Qwwv77Cqyy199E#:r[   
startswithc                    t          |          s)t          |t          j                  st	          d          t          |          s)t          |t          j                  st	          d          t          |t          j                  r%t          |j        t          j                  rdd}|S t          |t          j                  rdd}|S t          |t          j                  r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                 D    |D ]}|                      |||          r dS dS NTF)r  )r   prefixr~  r  items        rZ   startswith_tuple_implz1unicode_startswith.<locals>.startswith_tuple_impl  s:        <<eS11  44 5r[   c                 J    |                      t          |          ||          S r   )r  r0  )r   r  r~  r  s       rZ   startswith_char_seq_implz4unicode_startswith.<locals>.startswith_char_seq_impl  s    <<FUC888r[   c                     t          |           t          |          }}|d}||}t          |||          \  }}||z
  |k     rdS |dk    rdS | ||         }t          |d|d|          dk    S Nr   FTr1  r  r  )r   r  r~  r  rI   prefix_lengths_slices          rZ   startswith_unicode_implz3unicode_startswith.<locals>.startswith_unicode_impl  s    $'FFCKKMF}{(<<JE3U{]**u!!tc	lGw61mDDIIr[   z9The arg 'prefix' should be a string or a tuple of stringsr  )	r   r+  r   ri  r!   UniTupledtyper,  r;  )r   r  r~  r  r  r  r  s          rZ   unicode_startswithr    sK   u Jj&F&F JHJ J 	J s HJsEM$B$B HFH H 	H &%.)) (Iv|U%677(I	 	 	 	 %$	FE0	1	1 I	9 	9 	9 	9 ('	FE-	.	. I	J 	J 	J 	J$ '& GI I 	Ir[   endswithc                    |@t          |t          j        t          j        t          j        f          st          d          |@t          |t          j        t          j        t          j        f          st          d          t          |t          j        t          j        f          rdd}|S t          |t          j                  rdd}|S t          |t          j	                  rdd}|S d S )Nz!The arg must be a Integer or Nonec                 H    |D ]}|                      |||          du r dS dS r  )r  )r   r}  r~  r  r  s        rZ   endswith_implz'unicode_endswith.<locals>.endswith_impl  s?        ::dE3//47744 8 5r[   c                    t          |           }t          |          }|d}||}t          |||          \  }}||z
  |k     rdS |dk    rdS | ||         } t          |           |z
  }t          | ||d|          dk    S r  r  )r   r}  r~  r  rI   r  r   s          rZ   r  z'unicode_endswith.<locals>.endswith_impl  s    VVFVJ}{(<<JE3U{Z''uQt%)AVVj(Fq&&!Z@@AEEr[   c                 J    |                      t          |          ||          S r   )r  r0  )r   r}  r~  r  s       rZ   r  z'unicode_endswith.<locals>.endswith_impl  s    ::c&kk5#666r[   r  )
r+  r   rh  ri  rj  r!   Tupler  r,  r;  )r   r}  r~  r  r  s        rZ   unicode_endswithr    s   MZ05050@ A AM =>>>K:cEM,1M,1N,< = =K =>>>&5;788 	 	 	 	 &%+,, 	F 	F 	F 	F& &%.// 	7 	7 	7 	7 r[   
expandtabsr   c                 (   |}t          |t          j                  r|j        }n!t          |t          j                  r|j        }t          j        t          f}|3t          ||          s#t          d	                    ||                    dd}|S )zImplements str.expandtabs()Nz"tabsize" must be {}, not {}r   c                    t          |           }dx}}d}t          |          D ]}t          | |          }|t          k    r=d}|dk    r4|||z  z
  }|t          j        |z
  k    rt          d          ||z  }||z  }Z|t          j        dz
  k    rt          d          |dz  }|dz  }|t          t          fv rd}|s| S t          | j
        || j                  }	dx}}t          |          D ]}t          | |          }|t          k    rE|dk    r>|||z  z
  }||z  }t          |||z             D ]}
t          |	|
t                     ||z  }b|dz  }t          |	||           |dz  }|t          t          fv rd}|	S )Nr   FTznew string is too longry   )r1  r  r   r:   sysmaxsizeOverflowErrorr;   r<   r   rb   rc   r   r=   )rH   tabsizerI   r  line_posfoundr   
code_pointincrr   r   s              rZ   expandtabs_implz+unicode_expandtabs.<locals>.expandtabs_impl  s   THv 	! 	!A(q11JW$$Q;;"h&89D3;---+,DEEE$HIAs{Q&&'(@AAAAQ,0C!DDD H 	KDJ4>::Hv 	! 	!A(q11JW$$Q;;"h&89D$H$QD11 = ='S)<<<<IAAQ
333Q,0C!DDD H
r[   r   )
r+  r   rh  r|   r9  r   ri  intr!   rk  )rH   r  rn  ro  r  s        rZ   unicode_expandtabsr    s     E'5=)) 	GU^	,	, s#HE8!<!<*11(GDDF F 	F, , , ,\ r[   splitr   c                 ^   |dk    s3t          |t          j        t          j        t          j        f          sd S t          |t          j                  rdd}|S t          |t          j                  rdd}|S |+t          |t          j                  st          |dd          dd}|S d S )Nr   c                 J    |                      t          |          |          S )N)maxsplit)r  r0  )r   r  r  s      rZ   
split_implz!unicode_split.<locals>.split_implE  s    773s88h7777r[   c                 `   t          |           }t          |          }|dk    rt          d          g }d}d}|dk    r_|dk    rYt          |d          }t          |          D ]8}t          | |          |k    r"|                    | ||                    |dz   }9nld}	||k     rd|dk    s|	|k     rXt          | ||d|          dk    r*|                    | ||                    ||z  }|}|	dz  }	n|dz  }||k     r|dk    R|	|k     X||k    r|                    | |d                     |S )Nr   r  ry   r   )r1  r{   r   r  appendr  )
r   r  r  a_lensep_lenpartsr  r   sep_code_pointsplit_counts
             rZ   r  z!unicode_split.<locals>.split_implJ  su   FFE#hhG!|| !2333EDC!||B!0a!8!8 << ' 'C&q#...@@QtCx[111"Qw'
  Ekkx2~~'2X'='="1c37;;q@@QtCx[111w"#q(q Ekkx2~~'2X'='= u}}QtuuX&&&Lr[   r|   Fc                 b   t          |           }g }d}d}d}d}t          |          D ]`}t          | |          }	t          |	          }
|r|
r&|}d}+|
s.|                    | ||                    d}|dz  }|dk    r||k    r na||k    r|s|                    | |d                     |S )Nr   TFry   r   )r1  r  r   r+   r  )r   r  r  r  r   r  r   r  in_whitespace_blockr  is_whitespaces              rZ   split_whitespace_implz,unicode_split.<locals>.split_whitespace_implo  s    FFEEDCK"&U|| " ",Q44
 2: > >& "$ 4".3++( "QtCx[111.2+#q(#r>>kX.E.E!Eu}}%8}QtuuX&&&Lr[   rb  )	r+  r   rh  ri  IntegerLiteralr;  r,  rj  getattr)r   r  r  r  r  s        rZ   unicode_splitr	  =  s    NNx%-"'"6"8 9 9  t#u+,, 	8 	8 	8 	8#u()) F%!	 !	 !	 !	D 	
377C%((0	 	 	 	@ %$C 10r[   c                      d fd	}|S )z@Generate whitespace rsplit func based on either ascii or unicodeNr   c                 P   |dk     rt           j        }g }t          |           dz
  }|dk    r|dk    r't          | |          } |          sn|dz  }|dk    '|dk     rnb|}|dz  }|dk    r't          | |          } |          rn|dz  }|dk    '|                    | |dz   |dz                       |dz  }|dk    |dk    rS|dk    r't          | |          } |          sn|dz  }|dk    '|dk    r |                    | d|dz                       |d d d         S Nr   ry   r   )r  r  r1  r   r  )rH   r  r  r  r   r  r  isspace_funcs          rZ   rsplit_whitespace_implz?generate_rsplit_whitespace_impl.<locals>.rsplit_whitespace_impl  s   a<<{HIIMllq&&,T155
#|J// Q	 q&&
 1uuAFAq&&,T155
<
++ Q	 q&&
 MM$q1uQU{+,,,MH! ll$ 66 q&&,T155
#|J// Q	 q&&
 Avvd1QU7m,,,ddd|r[   rb  r_   )r  r  s   ` rZ   generate_rsplit_whitespace_implr    s*    $ $ $ $ $ $L "!r[   rsplitc                    d } ||dt           j        t           j        t           j        f            ||dt           j        t
          f           |&t          |t           j        t           j        f          rdd}|S dd}|S )	zImplements str.unicode_rsplit()c                     | }t          | t          j                  r| j        }n!t          | t          j                  r| j        }|4t          ||          s&t          d                    |||                     dS dS )z.Check object belongs to one of specified typesNrg  )r+  r   rh  r|   r9  r   r!   rk  )rl  rm  ro  rn  s       rZ   _unicode_rsplit_check_typez2unicode_rsplit.<locals>._unicode_rsplit_check_type  s    b%-(( 	HEEEN++ 	GEZx%@%@)00xDDF F F r[   r  r  Nr   c                 T    | j         rt          | ||          S t          | ||          S r   )rc   ascii_rsplit_whitespace_implunicode_rsplit_whitespace_impl)rH   r  r  s      rZ   r  z.unicode_rsplit.<locals>.rsplit_whitespace_impl  s1    ~ I3D#xHHH1$XFFFr[   c                 4   t          |          }| j        |j        k     s t          |           t          |          k     r| gS d }|dk     rt          j        }t          |          }|dk    rt          d          |dk    r || ||          S g }t          |           }|dk    rL|                     |d|          }|dk     rn-|                    | ||z   |                    |}|dz  }|dk    L|                    | d|                    |d d d         S )Nc                 t   g }t          |d          }t          |           dz
  x}}|dk    r\|dk    rVt          | |          }||k    r/|                    | |dz   |dz                       |dz
  x}}|dz  }|dz  }|dk    r|dk    V|dk    r |                    | d|dz                       |d d d         S r  )r   r1  r  )rH   r   r  r  ch_code_pointr   r  data_code_points           rZ   _rsplit_charz9unicode_rsplit.<locals>.rsplit_impl.<locals>._rsplit_char  s    F+B22MIIM!Aq&&X\\"1$":":"m33MM$q1uq1u}"5666EMAMHQ q&&X\\ Bwwd1q1u9o...$$B$<r[   r   r  ry   )r~  r  r   )r0  rb   r1  r  r  r{   r  r  )rH   r  r  r  r  r  r  r  s           rZ   rsplit_implz#unicode_rsplit.<locals>.rsplit_impl  s<   #hh:	!!SYYS%9%96M	  	  	 " a<<{HXX
??.///??<c8444IIll**Sq*11CQwwMM$sZ/12333AMH ll 	d1Q3i   ddd|r[   rb  )r   r,  r;  rj  ri  r  r+  rh  )rH   r  r  r  r  r  s         rZ   unicode_rsplitr    s    F F F sEE,=,1,@,1N,< = = = xemS5IJJJ
{ju~u}&EFF{	G 	G 	G 	G
 &%- - - -^ r[   center c                    t          |t          j                  st          d          t          |t          j                  rdd}|S |dk    s5t          |t          j        t          j        f          st          d          dd}|S )NThe width must be an Integerr  c                 H    |                      |t          |                    S r   )r  r0  stringwidthfillchars      rZ   center_implz#unicode_center.<locals>.center_impl  s    ==H666r[   "The fillchar must be a UnicodeTypec                     t          |           }t          |          }|dk    rt          d          ||k    r| S ||z
  }|dz  ||z  dz  z   }||z
  }||z  }||k    r|| z   |z   S || z   ||z  z   S )Nry   5The fill character must be exactly one character longr  r1  r{   )	r$  r%  r&  str_lenfillchar_len	allmarginlmarginrmarginl_strings	            rZ   r'  z#unicode_center.<locals>.center_impl%  s    f++8}}1 . / / / GMGO	>i%&7!&;<g%g%gf$x//f$7(:;;r[   r  r+  r   ri  r!   r;  rh  r,  )r$  r%  r&  r'  s       rZ   unicode_centerr4    s    eU]++ :8999(E011 	7 	7 	7 	7OOx%-1B!CDD >???< < < <* r[   c                      d fd	}|S )Nr  c                 ,   t          |t          j                  st          d          t          |t          j                  rrdd}|S dd}|S |dk    s5t          |t          j        t          j        f          st          d          dfd	}|S )Nr!  r  c                 H    |                      |t          |                    S r   )ljustr0  r#  s      rZ   
ljust_implz<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.ljust_implD      !<<s8}}===r[   c                 H    |                      |t          |                    S r   )rjustr0  r#  s      rZ   
rjust_implz<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.rjust_implH  r:  r[   r(  c                     t          |           }t          |          }|dk    rt          d          ||k    r| S |||z
  z  }r| |z   S || z   S )Nry   r*  r+  )r$  r%  r&  r,  r-  newstrSTRING_FIRSTs         rZ   r  z6gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.implP  sw    &kkGx==Lq    "2 3 3 3 %'/2F '&&r[   r2  r3  )r$  r%  r&  r9  r=  r  r@  s         rZ   unicode_Xjustz(gen_unicode_Xjust.<locals>.unicode_Xjust>  s    %// 	><===h 455 	" "> > > >!!> > > >!!C8emU5F%GHH  BCCC	' 	' 	' 	' 	' 	'" r[   r2  r_   )r@  rA  s   ` rZ   gen_unicode_XjustrB  =  s*    # # # # # #J r[   r<  r8  Tc                       fd}|S )zDGenerate splitlines performer based on ascii or unicode line breaks.c                    t          |           }g }dx}}||k     r||k     r't          | |          } 
|          rn|dz  }||k     '|}||k     rX|dz   |k     rFt          | |          }t          | |dz             }	t          |          rt          |	          r|dz  }|dz  }|r|}|                    | ||                    |}||k     |S r  )r1  r   r6   r5   r  )rH   keependsrI   r  r   r  r  eolcur_cpnext_cpis_line_break_funcs             rZ   r  z&generate_splitlines_func.<locals>.impll  s   T	A&jjf**,T155
%%j11 Q	 f** C6zzq56>>,T155F-dAE::G+F33 w8O8O QQ CMM$qu+&&&A+ &jj. r[   r_   )rI  r  s   ` rZ   generate_splitlines_funcrJ  j  s#        < Kr[   
splitlinesc                 L   |}t          |t          j                  r|j        }n!t          |t          j                  r|j        }t          j        t          t          j        t          f}|4t          ||          s$t          d                    d||                    dd}|S )zImplements str.splitlines()Nrg  rE  Fc                 P    | j         rt          | |          S t          | |          S r   )rc   _ascii_splitlines_unicode_splitlines)rH   rE  s     rZ   splitlines_implz+unicode_splitlines.<locals>.splitlines_impl  s,    > 	5$T8444"4222r[   F)r+  r   rh  r|   r9  r   ri  r  Booleanboolr!   rk  )rH   rE  rn  ro  rP  s        rZ   unicode_splitlinesrT    s     E(EM** 	Hen	-	- sEM48HE8!<!<%,,Z8LLN N 	N3 3 3 3 r[   c           
      Z   t          |          }|dk    rdS t          |           }|dz
  |z  }| j        }| j        }|D ]>}|t          |          z  }t          ||j                  }t	          ||j                  }?t          |||          }|d         }	t          |d|	dt          |	                     t          |	          }
t          d|          D ]T}t          ||
| d|           |
|z  }
||         }	t          ||
|	dt          |	                     |
t          |	          z  }
U|S )Nr    ry   )r1  rb   rc   r  r  r   _strncpyr  )r  r   	parts_lenr  rI   rJ   rK   pr  part
dst_offsetr   s               rZ   	join_listr\    s?   E

IA~~r #hhG!mw&F9D}H 6 6#a&&$((x55422F 8DVQaT+++TJQ	""    S!W555g
SzT1c$ii888c$ii

Mr[   joinc                 J   t          |t          j                  rJt          |j        t          j                  rd }|S t          |j        t          j                  rd }|S d S t          |t          j                  rd }|S t          |t          j                  rd }|S d S )Nc                 "    t          | |          S r   r\  )r  r   s     rZ   join_list_implz$unicode_join.<locals>.join_list_impl  s     e,,,r[   c                 :    d |D             }t          | |          S )Nc                 ,    g | ]}t          |          S r_   r0  .0rY  s     rZ   
<listcomp>z8unicode_join.<locals>.join_list_impl.<locals>.<listcomp>  s    000Q#a&&000r[   r`  )r  r   _partss      rZ   ra  z$unicode_join.<locals>.join_list_impl  s%    00%000 f---r[   c                 D    d |D             }|                      |          S )Nc                     g | ]}|S r_   r_   re  s     rZ   rg  z8unicode_join.<locals>.join_iter_impl.<locals>.<listcomp>  s    +++!+++r[   )r]  r  r   
parts_lists      rZ   join_iter_implz$unicode_join.<locals>.join_iter_impl  s'    ++U+++J88J'''r[   c                 t    fdt          t                              D             }t          | |          S )Nc                      g | ]
}|         S r_   r_   )rf  r   r   s     rZ   rg  z7unicode_join.<locals>.join_str_impl.<locals>.<listcomp>  s    >>>q%(>>>r[   )r  r1  r\  rk  s    ` rZ   join_str_implz#unicode_join.<locals>.join_str_impl  s:    >>>>E#e**,=,=>>>JS*---r[   )r+  r   Listr  r,  r;  IterableType)r  r   ra  rm  rp  s        rZ   unicode_joinrs    s     %$$ ek5#455 
	- - -!!U%9:: 	. . . "!D	E5-	.	. 
	( 	( 	( 	E5,	-	- 	. 	. 	.  r[   zfillc                 ^    t          |t          j                  st          d          d }|S )Nz<width> must be an Integerc                     t          |           }||k    r| S |r| d         nd}d||z
  z  }|dv r||z   | dd          z   }n|| z   }|S )Nr   rV  0)+-ry   r1  )r$  r%  r,  
first_charpaddingr?  s         rZ   
zfill_implz!unicode_zfill.<locals>.zfill_impl  sp    f++GM")1VAYYr
)##')F122J6FFv%Fr[   )r+  r   ri  r!   )r$  r%  r}  s      rZ   unicode_zfillr~    s<    eU]++ 86777  " r[   c                     t          |           }d}|!t          |          D ]}| |         |vr|c S n+t          |          D ]}t          | |                   s|c S |S r   r1  r  r+   r$  charsr,  r   s       rZ   unicode_strip_left_boundr    s    &kkG	Aw 	 	Aay%% &	 w 	 	A%fQi00  Nr[   c                     t          |           }d}|)t          |dz
  dd          D ]}| |         |vr|dz  } nn3t          |dz
  dd          D ]}t          | |                   s|dz  } n|S r  r  r  s       rZ   unicode_strip_right_boundr    s    &kkG	Aw{B++ 	 	Aay%%Q & w{B++ 	 	A%fQi00 Q Hr[   c                     t          | t          j                  r| j        } | @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   r9  r   rh  r,  rj  r!   )r  s    rZ   unicode_strip_types_checkr  '  se    %(( 
MZ050A050@ A AM ABBB MMMr[   c                     t          | t          j                  r| j        } | @t          | t          j        t          j        t          j        f          st          d          d S d S )Nz,The slice indices must be an Integer or None)r+  r   r9  r   rh  ri  rj  r!   )args    rZ   r  r  0  sa    #u~&& hK:cEM,1M,1N,< = =K HIII KKKr[   lstripc                 l    t          |t          j                  rdd}|S t          |           dd}|S )Nc                 F    |                      t          |                    S r   )r  r0  r$  r  s     rZ   lstrip_implz#unicode_lstrip.<locals>.lstrip_impl=      ==U,,,r[   c                 2    | t          | |          d          S r   )r  r  s     rZ   r  z#unicode_lstrip.<locals>.lstrip_implC  s    .vu==>>??r[   r   r+  r   r;  r  )r$  r  r  s      rZ   unicode_lstripr  9  s_     %-.. 	- 	- 	- 	-e$$$@ @ @ @r[   rstripc                 l    t          |t          j                  rdd}|S t          |           dd}|S )Nc                 F    |                      t          |                    S r   )r  r0  r  s     rZ   rstrip_implz#unicode_rstrip.<locals>.rstrip_implL  r  r[   c                 2    | d t          | |                   S r   )r  r  s     rZ   r  z#unicode_rstrip.<locals>.rstrip_implR  s    ?0???@@r[   r   r  )r$  r  r  s      rZ   unicode_rstripr  H  s_     %-.. 	- 	- 	- 	-e$$$A A A Ar[   stripc                 l    t          |t          j                  rdd}|S t          |           dd}|S )Nc                 F    |                      t          |                    S r   )r  r0  r  s     rZ   
strip_implz!unicode_strip.<locals>.strip_impl[  s    <<E

+++r[   c                 V    t          | |          }t          | |          }| ||         S r   )r  r  )r$  r  lbrbs       rZ   r  z!unicode_strip.<locals>.strip_impla  s.    %fe44&vu55be}r[   r   r  )r$  r  r  s      rZ   unicode_stripr  W  s]     %-.. 	, 	, 	, 	,e$$$    r[   c                 b    | |rdS |S | dk     r| |z  } | 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   rI   is_starts      rZ   normalize_str_idxr  l  sR    " { 	1M	qv
Qww#--4555Jr[   c                 J    | |S | | cxk    r|k     rn n| |z  S | dk     rdn| 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_   )r  	slice_lendefaults      rZ   r  r    sN     {zS$$$$9$$$$$Ya11S r[   c                 (     |||          }d }||fS )zFix slice object.
    c                     |j         \  }}|\  }}|                     |||          }t          j        | |||           t          j        |||           |                                S r   )r   make_helperrC   guard_invalid_slice	fix_slicer   )	r   r   r   r   	slicetype
lengthtypesliceobjrI   slices	            rZ   r   z!_normalize_slice.<locals>.codegen  sk    "%(J!6##GYAA#GWiGGG'5&111   r[   r_   )r   r  rI   r   r   s        rZ   _normalize_slicer    s0     (8V
$
$C! ! ! <r[   c                 8    t          j        |          }d }||fS )z2Compute the span from the given slice object.
    c                 x    |j         \  }|\  }|                     |||          }t          j        ||          }|S r   )r   r  rC   get_slice_length)r   r   r   r   r  r  r  result_sizes           rZ   r   z_slice_span.<locals>.codegen  sA    h
##GYAA.w>>r[   )r   rP   )r   r  r   r   s       rZ   _slice_spanr    s.     *X

C   <r[   c           
         |j         | j         k    rDt          |j                   }||z  }||z  }||z  }t          | j        ||j        ||d           d S t	          |          D ]'}	t          | ||	z   t          |||	z                        (d S )Nry   )align)rb   r}   r    r`   r  r   r   )
dstr[  r  
src_offsetr  
byte_widthsrc_byte_offsetdst_byte_offsetr   r   s
             rZ   rW  rW    s    
yCI(33
$z1$z1Zci#)%vQ	8 	8 	8 	8 	8 	8 q 	B 	BACa+Ca@@B B B B	B 	Br[   c                     |t           j        k    sJ d }t          j        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                 \   |\  }}} t          j        t          j                  | ||          } t          j        t          j                  | |          }|j        |_        |j        |_        |j        |_        ||_        |                     t          d          |_
        | j                            t                    }	|	                    | j        t          j        fi           }
|                     |	|
          } |||j        f          }|                    ||          }|                    |j        |g          |_        t          j        |j        j                  |_        | j        r'| j                            ||j        d         |           |                                S )Nr   r   r   )r   r   r   r   rM   rJ   rK   rI   r   r   rL   typing_contextresolve_value_typer}   get_call_typerQ   get_functionr   r   rH   r   rN   r   
enable_nrtr   increfr   r   )r   r   r   r   r  r~  rI   in_strview_strbw_typbw_sigbw_implr  r   s                 rZ   r   z$_get_str_slice_view.<locals>.codegen  s   !UF ,    '= = = 7.    '2 2!>"O ,,Z<<'::;NOO%%"U[NB8 8&&vv66WWv{n55
UJ//FK&::!01EFF 	:KwS999!!###r[   )r   r   rP   )r   src_tstart_tlength_tr   r   s         rZ   _get_str_slice_viewr    sN    
 E&&&&&$ $ $6 
U/UZ
H
HC<r[   c                     t          | t          j                  r>t          |t          j                  rd }|S t          |t          j                  rd }|S d S d S )Nc                    t          |t          |                     }t          | |          }t          |          }|| j        k    rt          | |d          S t          |          }t          |d|          }t          |d|           |S r  )	r  r1  r   r"  rb   r  r%  r   r   )r   r   r  rJ   rK   rets         rZ   getitem_charz%unicode_getitem.<locals>.getitem_char  s    'SVV44$Q,,)"--17??.q#q9992266H'a::C#CB///Jr[   c           	         t          |t          |                     }t          |          }t          | |j                  }t          |          }t          |          }t          |j        |j        z   |j	        |j                  D ]I}t          | |          }|t          |          z  }t          |          }||k    rt          ||          }J|j        dk    r!|| j        k    rt          | |j        |          S t          |||          }	|j        }
t          |          D ]+}t          |	|t          | |
                     |
|j        z  }
,|	S rt  )r  r1  r  r   r~  r"  r%  r  stepstopr  rb   r  r   r   )r   r   	slice_idxspanr  rJ   rK   r   new_kindr  curs              rZ   getitem_slicez&unicode_getitem.<locals>.getitem_slice  sU   ,S#a&&99	"9--$Q	88)"--.r22 y?(~y~? ? : :A(A..B 3B 7 77H1"55Hx'')$99 >Q&&417?? /q)/4HHH (dH==C#/C"4[[ . .'Q30G0GHHHy~-Jr[   )r+  r   r,  ri  	SliceType)r   r   r  r  s       rZ   unicode_getitemr    s    !U&'' 3!c5=)) 2	!
 
 
  U_-- %	!" " "H ! g3! 3!%	! %	!r[   c                     t          | t          j                  rt          |t          j                  rd }|S t          | t          j                  rt          |t          j                  rd }|S d S d S )Nc           	         | j         |j         z   }t          | j        |j                  }t          | j        |j                  }t          |||          }t          t          |                     D ]!}t          ||t          | |                     "t          t          |                    D ]1}t          |t          |           |z   t          ||                     2|S r   )
ra   r  rb   r  rc   r   r  r1  r   r   )r   r  
new_lengthr  	new_asciir  r   r  s           rZ   concat_implz#unicode_concat.<locals>.concat_impl7  s    QY.J!!'1733H#AK==I"8ZCCF3q66]] B B?1a+@+@AAAA3q66]] K KA
OAq4I4IJJJJMr[   c                 &    | t          |          z   S r   rd  r7  s     rZ   r  z#unicode_concat.<locals>.concat_implD  s    s1vv:r[   )r+  r   r,  r;  )r   r  r  s      rZ   unicode_concatr  3  s     !U&'' Jq%:K,L,L 		 		 		 !U&'' Jq%:N,O,O 	 	 	   r[   c                 h   | dk    s|dk     rdS |dk    r| S | j         |z  }| j        }t          ||| j                  }t	          |           }t          |d| d|           |}d|z  |k    r!t          |||d|           |dz  }d|z  |k    !d|z  |k    s||z
  }t          |||||z
  |           |S d S )NrV  ry   r   r  )ra   rb   r   rc   r1  rW  )str_argmult_argr  r  r  len_a	copy_sizerests           rZ   _repeat_implr  I  s    "}}1r	Q_x/
=xW5FGGGGQ...	)mz))VY9===NI )mz)) 9}
** 	)DVY	D0@$GGGM +*r[   c                     t          | t          j                  rt          |t          j                  rd }|S t          | t          j                  rt          |t          j                  rd }|S d S d S )Nc                 "    t          | |          S r   r  r7  s     rZ   wrapzunicode_repeat.<locals>.wrapg      1%%%r[   c                 "    t          ||           S r   r  r7  s     rZ   r  zunicode_repeat.<locals>.wrapk  r  r[   )r+  r   r,  ri  )r   r  r  s      rZ   unicode_repeatr  d  s    !U&'' Jq%-,H,H 	& 	& 	&	Au}	%	% *Q8I*J*J 	& 	& 	&   r[   c                 D    t          | t          j                  rd }|S d S )Nc                 (    t          |           dk    S r   rz  r   s    rZ   r  zunicode_not.<locals>.impls  s    q66Q;r[   r*  r   r  s     rZ   unicode_notr  p  s5    !U&'' 	 	 	 r[   replacec                 &   |}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          s"t          d	                    |                    t          |t          j
                  s"t          d	                    |                    dd}|S )NzGUnsupported parameters. The parameters must be Integer. Given count: {}z+The object must be a UnicodeType. Given: {}r   c                    |dk    r| S |dk    rt          |           }|dk    r||                    |          z   |z   S |g}t          t          |          |          }t	          |          D ]o}|                    ||                    |dz   |k    r|                    |           <|                    d                    ||dz   d                               p|t          |          k    r|                    |           d                    |          S |                     ||          }|                    |          }|S )Nr   rV  r   ry   )listr]  rJ  r1  r  r  r  )	r   old_strnew_strr  scharssplit_result	min_countr   r  s	            rZ   r  zunicode_replace.<locals>.impl  sL   A::Hb==!WWF{{f!5!55??#9LCKK//I9%% C C##F1I...q5I%% ''0000 ''Axx0@(A(ABBBBs6{{""##G,,,77<(((%((f%%r[   r   )r+  r   rh  r|   r9  r   r  ri  r!   rk  r,  rj  )r   r  r  r  rn  r  s         rZ   unicode_replacer  x  s   E%'' 	E5>	*	* 
ec5=122 L ==CVE]]L L 	L g 15>BCC 8 ''-vg8 8 	8 gu011 8 ''-vg8 8 	8   , Kr[   c                       fd}|S )Nc                     fd}|S )Nc                 j   t          |           }|dk    rdS |dk    r-t          | d          }| j        r |          S  |          S | j        r0t          |          D ] }t          | |          } |          s dS !t          |          D ] }t          | |          } |          s dS !dS )Nr   Fry   T)r1  r   rc   r  )rH   rI   r  r   
ascii_funcunicode_funcs       rZ   r  z.gen_isAlX.<locals>.unicode_isAlX.<locals>.impl  s    YYF{{u{{,T155
> 4%:j111'<
333~ %v % %A!0q!9!9J%:j11 %$uu% 6]] ! !,T155
#|J// ! 55! 4r[   r_   )rH   r  r  r  s     rZ   unicode_isAlXz gen_isAlX.<locals>.unicode_isAlX  s(    	 	 	 	 	 	2 r[   r_   )r  r  r  s   `` rZ   	gen_isAlXr    s*         8 r[   isalphac                 >    t          |           pt          |           S r   )r?   r>   xs    rZ   <lambda>r    s"    &:1&=&= '<&8&;&; r[   isalnumc                       fd}|S )Nc                    t          |           }|dk    r t          | d                    S |dk    rdS d}t          |          D ]:}t          | |          } |          s |          r dS |s |          rd};|S Nry   r   FTr1  r   r  )r   lcasedr   r  is_loweris_titleis_uppers        rZ   r  z_is_upper.<locals>.impl  s    FF668OAq1122266588 	 	C(C00Jx
## xx
';'; uu  4 4 r[   r_   )r  r  r  r  s   ``` rZ   	_is_upperr    s/    
       Kr[   c                     dS r6  r_   r  s    rZ   r  r    s    5 r[   isupperc                     d }|S )z
    Implements .isupper()
    c                 L    | j         rt          |           S t          |           S r   )rc   _ascii_is_upper_unicode_is_upperr  s    rZ   r  zunicode_isupper.<locals>.impl  s(    ; 	("1%%%$Q'''r[   r_   r  s     rZ   unicode_isupperr    s    
( ( (
 Kr[   isasciic                     d }|S )z Implements UnicodeType.isascii()c                     | j         S r   )rc   rH   s    rZ   r  zunicode_isascii.<locals>.impl  s
    ~r[   r_   rH   r  s     rZ   unicode_isasciir%    s      Kr[   istitlec                     d }|S )z
    Implements UnicodeType.istitle()
    The algorithm is an approximate translation from CPython:
    https://github.com/python/cpython/blob/1d4b6ba19466aba0eb91c4ba01ba509acf18c723/Objects/unicodeobject.c#L11829-L11885 # noqa: E501
    c                 n   t          |           }|dk    r.t          | d          }t          |          pt          |          S |dk    rdS d}d}t	          |          D ]U}t          | |          }t          |          st          |          r
|r dS d}d}:t          |          r
|s dS d}d}Sd}V|S r  )r1  r   r1   r7   r  r2   )rH   rI   charr  previous_is_casedr   s         rZ   r  zunicode_istitle.<locals>.impl  s    TQ;;"4++D)$//O3I$3O3OOQ;;5!== 	* 	*C"4--D%d++ */Ed/K/K *$ ! 55$(!'-- *( ! 55$(!$)!!r[   r_   r$  s     rZ   unicode_istitler+    s      6 Kr[   islowerc                     d }|S )aP  
    impl is an approximate translation of:
    https://github.com/python/cpython/blob/201c8f79450628241574fba940e08107178dc3a5/Objects/unicodeobject.c#L11900-L11933    # noqa: E501
    mixed with:
    https://github.com/python/cpython/blob/201c8f79450628241574fba940e08107178dc3a5/Objects/bytes_methods.c#L131-L156    # noqa: E501
    c                 *   t          |           }|dk    rt          t          | d                    S |dk    rdS d}t          |          D ]F}t          | |          }t	          |          st          |          r dS |st          |          rd}G|S r  )r1  r2   r   r  r1   r7   )rH   rI   r  r   r  s        rZ   r  zunicode_islower.<locals>.impl:  s    TQ;;)/$*B*BCCCQ;;5== 	 	C s++B%b)) -CB-G-G uu 5b99 r[   r_   r$  s     rZ   unicode_islowerr/  1  s       Kr[   isidentifierc                     d }|S )z%Implements UnicodeType.isidentifier()c                     t          |           }|dk    rdS t          | d          }t          |          s|dk    rdS t          d|          D ]$}t          | |          }t	          |          s dS %dS )Nr   F_   ry   T)r1  r   r-   r  r.   )rH   rI   first_cpr   r  s        rZ   r  z"unicode_isidentifier.<locals>.implQ  s    TQ;;5"4++$X.. 	8t3C3C5q&!! 	 	A(q11J+J77 uu tr[   r_   r$  s     rZ   unicode_isidentifierr5  M  s        Kr[   c                       fd}|S )Nc                     fd}|S )Nc                     t          |           }|dk    r t          | d                    S r|dk    rdS t          |          D ] }t          | |          } |          s dS !dS r  r  )rH   rI   r   r  _PyUnicode_IS_funcempty_is_falses       rZ   r  z*gen_isX.<locals>.unicode_isX.<locals>.implg  s    YYF{{))/$*B*BCCC &A++u6]] ! !,T155
))*55 ! 55! 4r[   r_   )rH   r  r9  r:  s     rZ   unicode_isXzgen_isX.<locals>.unicode_isXf  s(    	 	 	 	 	 	 r[   r_   )r9  r:  r;  s   `` rZ   gen_isXr<  e  s*         " r[   isspace	isnumericisdigit	isdecimalisprintablec                       fd}|S )z)Generate common case operation performer.c           	         t          |           }|dk    rt          | j        || j                  S | j        r$t          | j        |d          } 	| |           |S t          t          d|z  | j                  }dg} 
| |||          }|d         }t          |          }t          ||t          |                    }t          |          D ]!}t          ||t          ||                     "|S )Nr   ry      )
r1  r   rb   rc   r   r"  r%  r  r   r   )rH   rI   r   tmpmaxchars	newlengthmaxcharnewkindr   r  r  s            rZ   r  zcase_operation.<locals>.impl  s   TQ;; VT^DDD> 	
FA66CJtS!!!J 11v:t~NN3 LvsH==	1+$W--GY0CG0L0LMMy!! 	= 	=ACOC$;$;<<<<
r[   r_   )r  r  r  s   `` rZ   case_operationrJ    s)         . Kr[   c                 D   d}|dz
  }|dk    r+t          | |          }t          |          sn|dz  }|dk    +|dk    ot          |          }|rL|dz   }||k     r+t          | |          }t          |          sn|dz  }||k     +||k    pt          |           }|rdndS )zEThis is a translation of the function that handles the capital sigma.r   ry   i  i  )r   r0   r/   )rH   rI   r   r   r  final_sigmas         rZ   _handle_capital_sigmarM    s     	
AaA
q&&D!$$)!,, 		Q	 q&&
 63033K C!G&jja((A-a00 FA	 &jj
 F{A+=a+@+@'@*55U*r[   c                 Z    | dk    rt          |||          |d<   dS t          | |          S )z>This is a translation of the function that lowers a character.i  r   ry   )rM  r'   )r  rH   rI   r   mappeds        rZ   _lower_ucs4rP    s9     U)$<<q	q!*f555r[   c                       fd}|S )Nc                 J   d}t          |          D ]}t          j        dt                    }t	          | |          }
rt          || |||          }nt          ||          }|d |         D ]1}	t          |d         |	          |d<   t          |||	           |dz  }2|S Nr   rD  r  ry   )	r  r   zerosr$   r   rP  r&   maxr   )rH   rI   r   rF  kr   rO  r  n_resr  lowers             rZ   _do_upper_or_lowerz7_gen_unicode_upper_or_lower.<locals>._do_upper_or_lower  s    == 	 	CXax000F(s33J C#Jfc6JJ /z6BBFUF^  !(1+q11Q***Q r[   r_   )rY  rZ  s   ` rZ   _gen_unicode_upper_or_lowerr[    s$         r[   c                       fd}|S )Nc                     t          t          |                     D ],}t          | |          }t          || |                     -d S r   )r  r1  r   r   )rH   r   r   r  funcs       rZ   _ascii_upper_or_lowerz8_gen_ascii_upper_or_lower.<locals>._ascii_upper_or_lower  sX    T## 	8 	8C(s33JCdd:&6&67777	8 	8r[   r_   )r^  r_  s   ` rZ   _gen_ascii_upper_or_lowerr`    s$    8 8 8 8 8 ! r[   rY  c                 6    t          t          t                    S )zImplements .lower())rJ  _ascii_lower_unicode_lowerr#  s    rZ   unicode_lowerrd         ,777r[   upperc                 6    t          t          t                    S )zImplements .upper())rJ  _ascii_upper_unicode_upperr#  s    rZ   unicode_upperrj    re  r[   c                 J   d}t          j        dt                    }t          |          D ]u}|                    d           t          | |          }t          ||          }|d |         D ]3}	|d         }
t          |
|	          |d<   t          |||	           |dz  }4v|S rS  )	r   rU  r$   r  fillr   r(   rV  r   )rH   rI   r   rF  rW  rO  r   r  rX  r  rH  s              rZ   _unicode_casefoldrm   	  s    	AXax(((FV}}  A$T3//
'
F;; 	 	AqkGgq//HQKCA&&&FAA		 Hr[   c                     t          t          |                     D ]0}t          | |          }t          ||t	          |                     1d S r   )r  r1  r   r   r#   rH   r   r   r  s       rZ   _ascii_casefoldrp  	  sU    SYY ; ;$T3//
S+j"9"9::::; ;r[   casefoldc                 6    t          t          t                    S )zImplements str.casefold())rJ  rp  rm  r#  s    rZ   unicode_casefoldrs  	  s     /+<===r[   c                    d}d}t          j        dt                    }t          | d          }t	          ||          }|d |         D ](}	t          ||	          }t          |||	           |dz  })t          d|          D ]m}
|                    d           t          | |
          }t          || ||
|          }|d |         D ](}	t          ||	          }t          |||	           |dz  })n||d<   |S rS  )
r   rU  r$   r   r)   rV  r   r  rl  rP  )rH   rI   r   rF  rW  rH  rO  r  rX  r  r   s              rZ   _unicode_capitalizeru  	  s!   	AGXax(((F q))J":v66EFUF^  gq//Q"""	QQ  A$T3//
Jfc6BB 	 	A'1ooGCA&&&FAA	 HQKHr[   c                     t          | d          }t          |dt          |                     t          dt	          |                     D ]0}t          | |          }t          ||t          |                     1d S r  )r   r   r"   r  r1  r#   )rH   r   r  r   s       rZ   _ascii_capitalizerw  9	  s     q))JCK
33444QD		"" ; ;$T3//
S+j"9"9::::; ;r[   
capitalizec                 6    t          t          t                    S r   )rJ  rw  ru  r#  s    rZ   unicode_capitalizerz  C	  s    +-@AAAr[   c                    d}d}t          j        dt                    }t          |          D ]}|                    d           t          | |          }|rt          || |||          }	nt          t          |          |          }	|d|	         D ]/}
|\  }t          ||
          |d<   t          |||
           |dz  }0t          t          |                    }|S )zCThis is a translation of the function that titles a unicode string.r   FrD  rT  Nry   )r   emptyr$   r  rl  r   rP  r)   rV  r   r/   )rH   rI   r   rF  rW  previous_casedrO  r   r  rX  r  rH  s               rZ   _unicode_titler~  I	  s     	
ANXax(((FV}} B BA$T3//
 	I
D&#vFFEE*8J+?+?HHE 	 	AHGgq//HQKCA&&&FAA+HZ,@,@AAHr[   c                    d}t          t          |                     D ]k}t          | |          }t          |          r|st	          |          }d}n%t          |          r|rt          |          }d}nd}t          |||           ldS )z" Does .title() on an ASCII string FTN)r  r1  r   r8   r"   r9   r#   r   )rH   r   r*  r   r  s        rZ   _ascii_titler  `	  s     SYY . .$T3//
z"" 		&$ 5(44
 $$$ 	&  5(44
 $ %S*----. .r[   titlec                 6    t          t          t                    S )zImplements str.title())rJ  r  r~  r#  s    rZ   unicode_titler  t	  s     ,777r[   c                     t          t          |                     D ]`}t          | |          }t          |          rt	          |          }nt          |          rt          |          }t          |||           ad S r   )r  r1  r   r9   r#   r8   r"   r   ro  s       rZ   _ascii_swapcaser  |	  s    SYY . .$T3//
z"" 	1$Z00JJ$$ 	1$Z00JS*----. .r[   c                    d}d}t          j        dt                    }t          |          D ]}|                    d           t          | |          }t          |          rt          || |||          }	n't          |          rt          ||          }	nd}	||d<   |d |	         D ](}
t          ||
          }t          |||
           |dz  })||d<   |S rS  )r   r|  r$   r  rl  r   r1   rP  r2   r&   rV  r   )rH   rI   r   rF  rW  rH  rO  r   r  rX  r  s              rZ   _unicode_swapcaser  	  s    	AGXax(((FV}}  A$T3//
!*-- 	#
D&#vFFEE#J// 	#*:v>>EEE"F1I 	 	A'1ooGCA&&&FAA	 HQKHr[   swapcasec                 6    t          t          t                    S r   )rJ  r  r  r#  s    rZ   unicode_swapcaser  	  s    /+<===r[   c                 D    t          | t          j                  rd }|S d S )Nc                 j    t          |           }|dk    rt          d          t          | d          S )Nry   zord() expected a characterr   )r1  	TypeErrorr   )r   lcs     rZ   r  zol_ord.<locals>.impl	  s5    QBQww <==="1a(((r[   r*  )r   r  s     rZ   ol_ordr  	  s7    !U&'' 	) 	) 	)  r[   c                     | t           k    sJ t          |           }t          |d|t          k              }t	          |d|            |S r  )_MAX_UNICODEr"  r   r   r   )r   rJ   r  s      rZ   _unicode_charr  	  sN    b!!D
a)>!>
?
?CCBJr[   zchr() arg not in range(0x%hx)c                     | dk     s| t           k    rt          t                    t          t	          |                     S r   )r  r{   _out_of_range_msgr  r$   )ordinals    rZ   _PyUnicode_FromOrdinalr  	  s:    !w--*+++'**+++r[   c                 D    t          | t          j                  rd }|S d S )Nc                      t          |           S r   )r  )r   s    rZ   r  zol_chr.<locals>.impl	  s    )!,,,r[   )r+  r   ri  )r   r  s     rZ   ol_chrr  	  s4    !U]## 	- 	- 	- r[   __str__c                     d S )Nc                     | S r   r_   r(  s    rZ   r  zunicode_str.<locals>.<lambda>	  s    Q r[   r_   r(  s    rZ   unicode_strr  	  s
    ;r[   __repr__c                     d S )Nc                     d| z   dz   S )N'r_   r(  s    rZ   r  zunicode_repr.<locals>.<lambda>	  s    S1Ws] r[   r_   r(  s    rZ   unicode_reprr  	  s     #""r[   c                 (     | d          fd}|S )N
   c                    d}| dk     r|  } d}| dk    rdS |dz   t          t          j        t          j        |                               z   }t          }t          |          }t          |||d          }|rt          |dt          d                     |dz
  }| dk    rAt          | 	          \  } }t          d          |z   }t          |||           |dz  }| dk    A|S )NFr   Trw  ry   ry  )
r  r   floorlog10r   r}   r   r   orddivmod)
r  flagrI   rJ   r   r   r   digitr   tens
            rZ   r  zinteger_str.<locals>.impl	  s    q55AD663C! 5 5666$(..
4VT:: 	,Aq#c((+++qj!eea~~HAuC5 AAsA&&&1HC	 !ee
 r[   r_   )r  r  r  s     @rZ   integer_strr  	  s2     !B%%C    ( Kr[   c                     d S )Nc                 *    |                                  S r   )r  r  s    rZ   r  zinteger_repr.<locals>.<lambda>	  s    QYY[[ r[   r_   r  s    rZ   integer_reprr  	  s       r[   c                     d S )Nc                     | rdndS )NTrueFalser_   r  s    rZ   r  zboolean_str.<locals>.<lambda>
  s    q-VVg r[   r_   r  s    rZ   boolean_strr  
  s     .--r[   getiterc                 t   |j         \  }|\  }|                     ||j                  }|                     t          j        d          }t          j        ||          }||_        ||_	        | j
        r| j                            |||           |                                }	t          | ||j        |	          S r   )r   r  return_typer   r   rj   r   alloca_once_valuerh   rH   r  r   r  r   r   )
r   r   r   r   rl  rH   iterobjr  indexptrr   s
             rZ   getiter_unicoder  
  s    8DRFT!!'3?;;G Q//D($77HGM GL  .7B---




CGWcosCCCr[   iternextc                    |j         \  }|\  }| j        }|                    t          j                  }|                    |t          j        t          j        fi           }	| 	                    ||	          }
|                    t                    }|                    |t          j        fi           }| 	                    ||          }|                     |||          } |||j        f          }|                    |j                  }|                    d||          }|                    |           |                    |          5   |
||j        |f          }|                    |           t'          j        ||          }|                    ||j                   d d d            d S # 1 swxY w Y   d S )Nr   <)r   r  r  operatorgetitemr  r   r   rj   r  r1  r  rH   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nindexs                      rZ   iternext_unicoder  %
  s    xHVFT"E ##H$455D$$UU-?,M%') )K''k::L ##C((D  );(=rBBG##D'22H !!'6!>>G Xg//F LL''E $$S%88H
X		"	" - -,wu(>??g (%88fgm,,,- - - - - - - - - - - - - - - - - -s   AF44F8;F8)r   r  r  rb  r2  rQ  r   )Tr   )r  r  numpyr   llvmlite.irr   r   numba.core.cgutilsr   numba.core.extendingr   r   r   r	   r
   r   r   r   r   r   numba.core.imputilsr   r   r   r   r   r   numba.core.datamodelr   r   
numba.corer   r   numba.core.pythonapir   r   r   r   numba._helperlibr   numba.cpython.hashingr   numba.core.unsafe.bytesr    numba.core.errorsr!   numba.cpython.unicode_supportr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   numba.cpythonrC   r  rP   bitwidthrv  r,  rF   UnicodeIteratorTyperf   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%  r1  r-  eqrA  nerF  ltrP  gtrU  lerZ  ger_  containsre  rp  rr  ry  r{  r  r  r  rc  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r4  rB  rJ  rN  rO  rT  r\  rs  r~  r  r  r  r  r  r  r  r  r  r  r  rW  r  r  r  r   iaddr  r  r   r  not_r  r  r  _unicode_is_alnumr  _always_falser  r  r  r%  r+  r/  r5  r<  rJ  rM  rP  r[  ri  rc  r`  rh  rb  rd  rj  rm  rp  rs  ru  rw  rz  r~  r  r  r  r  r  r  r  r  r  r  chrr  r  r  ri  r  r  rR  r  r  NEWr  r_   r[   rZ   <module>r     sL   



      ) ) ) ) ) ) ) ) * * * * * *                       K K K K K K K K K K K K K K K K > > > > > > > > % % % % % % % %            ' & & & & & , , , , , , 1 1 1 1 1 1 ) ) ) ) ) )F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F> " ! ! ! ! !  z"
 !""A A A A A6% A A #"A  u(&' : : :  u((I > > >  u(&' : : :  u(*k B B B  u(&' : : : %+,,J J J J J; J J -,J; ; ;8  ( E!344  54 "##C C $#C u? ? ?, U  $   & & &
 ' ' '
 ' ' '
   <     u
 
 
	 	 	 $ $ $
 % % %
 % % %
 uD D D$ P P P"    
H 
H 
H u  & % % %"    
#   
(+# # #L 
(+  " 
(+   
(+   
(+   
(+   
(
  P P P(     
 3 3 3
 + + +\ - - -`  & 	7788		//.99	:	: "F++   ,+ "G,,   -, "H--   .-" "G,,   -," "K00    10 F "G,, 3  3  3 -, 3H "L11    21 H    "L111I 1I 1I 211Ih "J//- - - 0/-b "L11= = = 21=@ "G,,Q% Q% Q% -,Q%h)" )" )"X "2!1##$677"9 "9 //##K00 2  2 
 "H--N N N .-Nb "H--" " " .-"J& & &R ,!7 + +,=,=e,D,D E E E +!7 + +,=,=d,C,C D D D     F %$%=%=o%N%NOO &&'?'?( (   
 "L11   210   > "F++  ,+6 "G,,  -,6       "C C CJ J J "H--   .- "H--   .- "G,,   -,(    < ! ! !(        uB B B " " "J 
(
4! 4! 4!x 
(,	(-   (   4 
(,   
(-   "I..) ) ) /.)b  B .!9 - -ii8J/L /L M M M %$ &= &= > > 
 .!9 - -ii8I/K /K L L L  , ! 11""99[+-:$< $< = =$$YY/E/E/E&G &G H H 
 "I..	 	 /.	 "I..  /. "I.." " /."J "I..  /.6 "N33  43.   , .!9 - -gg6H.I.I J J J 0!; / /8L0M0M N N N .!9 - -gg6H.I.I J J J 0!; / /G%&&( ( ( 2!= 1 1G"E**, , ,  : + + +. 6 6 6  & "!"="=e"D"DEE!!"="=d"C"CDD! ! !   9 9+ F FGG 9 9+ F FGG "G,,8 8 -,8
 "G,,8 8 -,8     ; ; ; "J//> > 0/>   2 ; ; ; "L11B B 21B
   , . . .& "G,,8 8 -,8 . . .   , "J//> > 0/>
 
#  "    4lB  , , , 
#   "I..  /. "J//# # 0/# 	**  +*6 
++! ! ,+! 
++	**. . +* ,+. y%+,,D D -,D. z5455w{%- %-  65%- %- %-r[   