
    i__                    .   S SK r S SKrS SKrS SKJrJr  S SKJr  S SK	J
r
JrJrJrJrJrJrJrJrJr  S SKJrJrJrJrJrJr  S SKJrJr  S SKJrJ r   S SK!J"r"  S S	K#J$r$J%r%J&r&  S S
K'J(r(  S SK)J*r*  S SK+J,r,  S SK-J.r.  S SK/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrP  S SKQJRrR  \"S;   a  S SK#JSrS  SrT\R                  R                  rW\" \R                  5       " S S\
R:                  5      5       rY\" \R                  SS5        \" \R                  SS5        \" \R                  SS5        \" \R                  SS5        \" \R                  SS5        \" \R                  5       " S S \5      5       r[S! r\S" r]\" \R                  \R                  5      S# 5       r`\" \R                  5      S$ 5       ra\" \R                  5      S% 5       rb\" \R                  5      S& 5       rcS' rd\S( 5       re\S) 5       rf\S* 5       rg\S+ 5       rh\SS, j5       ri\" S-S.9S/ 5       rjS0 rk\S1 5       rl\S2 5       rm\S3 5       rn\" S-S.9S4 5       ro\"S5;   a	  \S6 5       rpO\"S;   a	  \S7 5       rpO\q" \"5      e\S8 5       rr\"S5;   a	  \S9 5       rsO\"S;   a	  \S: 5       rsO\q" \"5      e\" S-S.9S; 5       rt\S< 5       ru\S= 5       rv\" \w5      S> 5       rx\" \R                  5      S? 5       rz\" \R                  5      S@ 5       r|\" \R                  5      SA 5       r~\" \R                  5      SB 5       r\" \GR                  5      SC 5       r\" \GR                  5      SD 5       r\" \GR
                  5      SE 5       rSF rSG r\SH 5       r\SI 5       r\SJ 5       r\SK 5       rSL r\" \" \5      5      r\" \" \5      5      r\" \R                  SM5      SSN j5       r\" \R                  SO5      SSP j5       r\" \R                  SQ5      SSR j5       r\" \R                  SS5      SST j5       r\" \R                  SU5      SV 5       r\" \R                  SW5      SSX j5       r\" \R                  SY5      SZ 5       r\S[ 5       r\" \R                  S\5      SS] j5       r\" \R                  S^5      SS_ j5       r\" \R                  S`5      SSa j5       r\" \R                  Sb5      SSc j5       rSd r\" \" \95      5      r\" \" \:5      5      r\" \R                  Se5      SSf j5       r\" \R                  Sg5      SSh j5       rSi r\" \R                  Sj5      " \" S-5      5        \" \R                  Sk5      " \" Sl5      5        Sm r\" \" \B5      5      r\" \" \A5      5      r\" \R                  Sn5      SSo j5       r\Sp 5       r\" \R                  Sq5      Sr 5       r\" \R                  Ss5      St 5       r\Su 5       r\Sv 5       rSw rSx r\" \R                  Sy5      SSz j5       r\" \R                  S{5      SS| j5       r\" \R                  S}5      SS~ j5       r\SS j5       r\S 5       r\S 5       r\S 5       r\" S-S.9S 5       r\S 5       r\" \GRl                  5      S 5       r\" \GRp                  5      \" \GRr                  5      S 5       5       r\S 5       r\" \GRx                  5      S 5       r\" \GR|                  5      S 5       r\" \R                  S5      SS j5       rS r\" \R                  S5      " \" \N\L5      5        \" S 5      r\" \R                  S5      " \" \3\5      5        S r\" S 5      r\" \" \F\G\5      5      r\" \" \@\?\E5      5      r\" \R                  S5      S 5       r\" \R                  S5      S 5       r\" \R                  S5      S 5       r\" \R                  S5      S 5       r\" \R                  S5      S 5       rSS jr\" \R                  S5      " \" \95      5        \" \R                  S5      " \" \M5      5        \" \R                  S5      " \" \O5      5        \" \R                  S5      " \" \P5      5        \" \R                  S5      " \" \8S-5      5        S r\S 5       r\S 5       rS r\" \" S-5      5      r\" \" Sl5      5      rS r\" \" \05      5      r\" \" \15      5      r\" \R                  S5      S 5       r\" \R                  S5      S 5       r\S 5       r\S 5       r\" \R                  S5      S 5       r\S 5       r\S 5       r\" \R                  S5      S 5       r\S 5       r\S 5       r\" \R                  S5      S 5       r\S 5       r\S 5       r\" \R                  S5      S 5       r\" \5      S 5       r\S 5       rS\T-  r\S 5       r\" \5      S 5       r\" \R                  S5      S 5       r\" \R                  S5      S 5       r\" \GR                  S5      S 5       r\" \GR                  S5      S 5       r\" \GR                  S5      \" \GR                  S5      S 5       5       r\" S\R                  5      S 5       r\" S\R                  5      \" \GR                  5      S 5       5       rg)    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)	PYVERSION)PY_UNICODE_1BYTE_KINDPY_UNICODE_2BYTE_KINDPY_UNICODE_4BYTE_KIND)	c_helpers)
_Py_hash_t)memcpy_region)TypingError)!_Py_TOUPPER_Py_TOLOWER_Py_UCS4_Py_ISALNUM_PyUnicode_ToUpperFull_PyUnicode_ToLowerFull_PyUnicode_ToFoldedFull_PyUnicode_ToTitleFull_PyUnicode_IsPrintable_PyUnicode_IsSpace_Py_ISSPACE_PyUnicode_IsXidStart_PyUnicode_IsXidContinue_PyUnicode_IsCased_PyUnicode_IsCaseIgnorable_PyUnicode_IsUppercase_PyUnicode_IsLowercase_PyUnicode_IsLineBreak_Py_ISLINEBREAK_Py_ISLINEFEED_Py_ISCARRIAGERETURN_PyUnicode_IsTitlecase_Py_ISLOWER_Py_ISUPPER_Py_TAB_Py_LINEFEED_Py_CARRIAGE_RETURN	_Py_SPACE_PyUnicode_IsAlpha_PyUnicode_IsNumeric_Py_ISALPHA_PyUnicode_IsDigit_PyUnicode_IsDecimalDigit)slicing))   
   )rD      )PY_UNICODE_WCHAR_KIND c                       \ rS rSrS rSrg)UnicodeModelO   c           	      J   S[         R                  4S[         R                  4S[         R                  4S[         R                  4S[
        4S[         R                  " [         R                  5      4S[         R                  4/n[        R                  R                  XX#5        g )Ndatalengthkindis_asciihashmeminfoparent)r   voidptrintpint32uint32r   MemInfoPointerpyobjectr   r   __init__)selfdmmfe_typememberss       L/mnt/rpi/venvs/whisper/lib/python3.13/site-packages/numba/cpython/unicode.pyrZ   UnicodeModel.__init__Q   s|    U]]#uzz"U[[!&Z ,,U]];<u~~&	
 	##Dw@     N)__name__
__module____qualname____firstlineno__rZ   __static_attributes__rb   ra   r_   rJ   rJ   O   s    Ara   rJ   rM   _datarN   _lengthrO   _kindrP   	_is_asciirQ   _hashc                   (   ^  \ rS rSrU 4S jrSrU =r$ )UnicodeIteratorModelf   c                    > S[         R                  " [         R                  5      4SUR                  4/n[        [
        U ]  XU5        g )NindexrM   )r   EphemeralPointeruintprM   superrn   rZ   )r[   r\   r]   r^   	__class__s       r_   rZ   UnicodeIteratorModel.__init__h   s?    U33EKK@AGLL)+"D23Ira   rb   )rc   rd   re   rf   rZ   rg   __classcell__)ru   s   @r_   rn   rn   f   s    J Jra   rn   c           
         SSK JnJnJnJnJnJnJnJnJ	n	  [        S   n
U" X'U" U5      U" U5      U" U5      U" U5      5      nU" U
5      nU" 5       nU" 5       nU" 5       nU" 5       nU" X	" U5      U	" U5      U	" U5      U	" U5      5      nUc  [        S5      eUR                  nUR                  nUR                  nUS-   [        U5      -  nUU-  R                  U5      n[        U5      XUUR                  4$ )zlGet 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_unicodez1cannot extract unicode data from the given string   )ctypesry   rz   r{   r|   r}   r~   r   r   r   r   
ValueErrorvalue_kind_to_byte_widthfrom_addressbytes)objry   rz   r{   r|   r}   r~   r   r   r   extract_unicode_fnprotofnrN   rO   rP   hashvrM   nbytesouts                       r_   compile_time_get_string_datar   p   s      
 ##45h79+=wu~fowy'9;E	!	"B[F7DxHKEc5=%+uXeMD|LMM\\F::D~~Hqj/55FV
)
)$
/C:vXu{{::ra   c                    [        U5      u  pEpgnUR                  n	U R                  X5      n
[        R                  " U5      " X5      nXl        UR                  R                  U5      Ul        UR                  R                  U5      Ul        UR                  R                  U5      Ul	        UR                  R                  S5      Ul
        UR                  5       $ )zZ
Get string data by `compile_time_get_string_data()` and return a
unicode_type LLVM value
)r   moduleinsert_const_bytesr   create_struct_proxyrM   rN   typerO   rP   rQ   	_getvalue)contextbuildertypliteral_string	databytesrN   rO   rP   r   modgvuni_strs               r_   make_string_from_constantr      s     	%^4 -Itu
..C		#	#C	3B))#.w@GL^^((0GN<<$$T*GL'',,X6G <<$$R(GLra   c                 .    [        XX2R                  5      $ N)r   literal_value)r   r   fromtytotyvals        r_   cast_from_literalr      s    $$ 4 4 ra   c                     [        XX#5      $ r   )r   )r   r   r   pyvals       r_   constant_unicoder      s    $WsBBra   c                    UR                   R                  U5      u  p4pVpx[        R                  " U 5      " UR                  UR
                  5      n	XIl        XYl        Xil        Xyl	        Xl
        UR                   R                  UU5      U	l        Xl        [        R                  " UR
                  UR                   R                  5       5      n
[!        U	R#                  5       U
S9$ )z=
Convert a unicode str object to a native unicode structure.
)is_error)pyapistring_as_string_size_and_kindr   r   r   r   rM   rN   rO   rP   rQ   nrt_meminfo_new_from_pyobjectrR   rS   is_not_nullerr_occurredr   r   )r   r   cokrM   rN   rO   rP   r   r   r   s              r_   unbox_unicode_strr      s     	
..s3 ,BfH))#.qyy!))DGLNLLgg;;GO N""199agg.B.B.DEHw((*X>>ra   c                 r   [         R                  " U 5      " UR                  UR                  US9nUR                  R                  UR                  UR                  UR                  5      nUR                  R                  U5        UR                  R                  R                  UR                  X5        U$ )z8
Convert a native unicode structure to a unicode string
r   )r   r   r   r   r   string_from_kind_and_datarO   rM   rN   object_hashnrtdecref)r   r   r   r   ress        r_   box_unicode_strr      s    
 ))#.qyy!))3OG
''
+
+gllGNN4C
 GGIIMMC-Jra   c                    ^  U 4S jnU$ )Nc                    > Uu  pEUR                  U[        T5      R                  5       5      nUR                  UR	                  Xe/5      5      nUR                  U[        S5      5      $ N    )bitcastr   
as_pointerloadgepzext)	r   r   	signatureargsrM   idxptrchbitsizes	           r_   codegen#make_deref_codegen.<locals>.codegen   sV    	oodGG$4$?$?$AB\\'++c512||B,,ra   rb   r   r   s   ` r_   make_deref_codegenr      s    - Nra   c                     [         R                  " [         R                  [         R                  5      nU[	        S5      4$ N   r   rW   rT   rU   r   	typingctxrM   offsetsigs       r_   deref_uint8r      s+    
,,u}}ejj
1C"1%%%ra   c                     [         R                  " [         R                  [         R                  5      nU[	        S5      4$ N   r   r   s       r_   deref_uint16r      +    
,,u}}ejj
1C"2&&&ra   c                     [         R                  " [         R                  [         R                  5      nU[	        S5      4$ r   r   r   s       r_   deref_uint32r      r   ra   c                     S n[         R                  " [         R                  [         R                  [         R                  [         R                  5      nXe4$ )zymake empty string with data buffer of size alloc_bytes.

Must set length and kind values for string after it is returned
c           
      <   Uu  pEpg[         R                  " [        R                  5      nU" X5      n	UR	                  UUR                  U[        UR                  S5      5      5      n
U R                  R                  X5      U	l
        XIl        Xyl        Xil        U R                  [        S5      U	l        U R                  R#                  XR                  5      U	l        [         R&                  " U	R(                  R                  5      U	l        U	R+                  5       $ )Nr   r   )r   r   r   unicode_typemuladdr   r   r   meminfo_allocrR   rO   rP   rN   get_constantr   rQ   meminfo_datarM   get_null_valuerS   r   )r   r   r   r   kind_valchar_bytes_val
length_valis_ascii_valuni_str_ctorr   
nbytes_vals              r_   details_malloc_string.<locals>.details   s    ?C<: 2253E3EFw0[[!(Z-5jooq-I"KL
 "++33GH'#++J;{{//I //0C0CD  ""ra   )r   r   rV   rU   rW   )r   rO   
char_bytesrN   rP   r   r   s          r_   _malloc_stringr      s7    #* 

U[[%**ejj%,,
OC<ra   c                 t    [        U 5      n[        XX5      n[        XA[        R                  " S5      5        U$ Nr   )r   r   _set_code_pointnprW   )rO   rN   rP   
char_widthss        r_   _empty_stringr     s/    $T*Jt:AAryy|,Hra   F)_nrtc                     U R                   [        :X  a  [        U R                  U5      $ U R                   [        :X  a  [        U R                  U5      $ U R                   [        :X  a  [        U R                  U5      $ gr   )rj   r   r   rh   r   r   r   r   )ais     r_   _get_code_pointr     sa    ww''177A&&	
)	)AGGQ''	
)	)AGGQ'' ra   c                    ^  U 4S jnU$ )Nc                   > Uu  pEnTS:  a  UR                  U[        T5      5      nUR                  U[        T5      R                  5       5      nUR	                  XaR                  Xu/5      5        U R                  5       $ r   )truncr   r   r   storer   get_dummy_value)	r   r   r   r   rM   r   r   r   r   s	           r_   r   !make_set_codegen.<locals>.codegen0  sl    2R<r77#34BoodGG$4$?$?$ABb++c512&&((ra   rb   r   s   ` r_   make_set_codegenr  /  s    ) Nra   c                     [         R                  " [         R                  [         R                  [         R                  5      nU[        S5      4$ r   r   voidrT   int64rW   r  r   rM   r   r   r   s        r_   	set_uint8r  ;  s1    
**U]]EKK
>C ###ra   c                     [         R                  " [         R                  [         R                  [         R                  5      nU[        S5      4$ r   r  r  s        r_   
set_uint16r  A  1    
**U]]EKK
>C $$$ra   c                     [         R                  " [         R                  [         R                  [         R                  5      nU[        S5      4$ r   r  r  s        r_   
set_uint32r  G  r  ra   c                    U R                   [        :X  a  [        U R                  X5        g U R                   [        :X  a  [        U R                  X5        g U R                   [        :X  a  [        U R                  X5        g [        S5      e)Nz4Unexpected unicode representation in _set_code_point)	rj   r   r  rh   r   r  r   r  AssertionError)r   r   r   s      r_   r   r   M  sg     	ww''!''1!	
)	)177A"	
)	)177A"BD 	Dra   ))rD      )rD      )rD      c                 x    U [         :X  a  U$ U [        :X  a  U[        :X  a  U$ U $ U [        :X  a  U $ [        S5      e)N/Unexpected unicode representation in _pick_kindr   r   r   r  kind1kind2s     r_   
_pick_kindr  a  sL    ))L++--++L AC Cra   c                     U [         :X  d
  U[         :X  a  [        S5      eU [        :X  a  U$ U [        :X  a  U[        :X  a  U$ U $ U [        :X  a  U $ [        S5      e)N!PY_UNICODE_WCHAR_KIND unsupportedr  )rG   r  r   r   r   r  s     r_   r  r  p  si    **e7L.L !DEE))L++--++L AC Cra   c                 r    U S:X  a  US:X  a  [         R                  " S5      $ [         R                  " S5      $ Nr   r   )r   rW   )	is_ascii1	is_ascii2s     r_   _pick_asciir$    s+    A~)q.||A<<?ra   c                 Z    U [         :X  a  gU [        :X  a  gU [        :X  a  g[        S5      e)Nr         'Unexpected unicode encoding encounteredr  rO   s    r_   r   r     s2    ((**** !JKKra   c                     U [         :X  a  gU [        :X  a  gU [        :X  a  gU [        :X  a  [	        S5      e[	        S5      e)Nr   r&  r'  r  r(  )r   r   r   rG   r  r)  s    r_   r   r     sG    ((****** !DEE !JKKra   c                     US:X  a  gX-   U R                   :  a  gX4-   UR                   :  a  g[        U5       H-  n[        XU-   5      n[        X#U-   5      nXg:  a    gXg:  d  M-    g   g)Nr   r   r   )ri   ranger   )r   a_offsetbb_offsetnr   a_chrb_chrs           r_   _cmp_regionr3    sm    Av				!				!1Xa<0a<0=]  ra   c                 f    U S:  a  [         $ U S:  a  [        $ SnX:  a  Sn[        U5      e[        $ )zC
Compute the minimum unicode kind needed to hold a given codepoint
   i   rH   z;Invalid codepoint. Found value greater than Unicode maximum)r   r   r   r   )cpMAX_UNICODEmsgs      r_   _codepoint_to_kindr9    s@    
 
Cx$$	e$$ OCS/!$$ra   c                     U S:  $ )z3
Returns true if a codepoint is in the ASCII range
   rb   )r   s    r_   _codepoint_is_asciir<    s    
 8Ora   c                 L    [        U [        R                  5      (       a  S nU$ g )Nc                     U R                   $ r   )ri   r   s    r_   len_implunicode_len.<locals>.len_impl  s    99ra   
isinstancer   UnicodeType)r   r@  s     r_   unicode_lenrE    s$    !U&&''	 (ra   c                    U R                   (       a  UR                   (       d  g [        U [        R                  5      (       a  U R                  nOU n[        U[        R                  5      (       a  UR                  nOUn[        R
                  [        R                  [        R                  4n[        X$5      n[        X45      nU(       a  U(       a  S nU$ XV-  (       a  S nU$ g )Nc           	          U S L nUS L nU(       d  U(       a  U(       a  U(       a  gg[        U 5      n [        U5      n[        U 5      [        U5      :w  a  g[        U SUS[        U 5      5      S:H  $ )NTFr   )strlenr3  )r   r.  a_noneb_nones       r_   eq_implunicode_eq.<locals>.eq_impl  se    $YF$YFf AAAA1vQq!Q3q62a77ra   c                     gNFrb   r   r.  s     r_   rL  rM    s    ra   )is_internalrC  r   Optionalr   rD  StringLiteralUnicodeCharSeq)r   r.  check_acheck_baccept	a_unicode	b_unicoderL  s           r_   
unicode_eqrZ    s    MMamm!U^^$$&&!U^^$$&&!4!4e6J6JKF7+I7+IY	8 				 
ra   c                    U R                   (       a  UR                   (       d  g [        R                  [        R                  [        R                  4n[        X5      n[        X5      nU(       a  U(       a  S nU$ X4-  (       a  S nU$ g )Nc                     X:X  + $ r   rb   rP  s     r_   ne_implunicode_ne.<locals>.ne_impl  s
    <ra   c                     g)NTrb   rP  s     r_   rL  unicode_ne.<locals>.eq_impl  s    ra   )rQ  r   rD  rS  rT  rC  )r   r.  rW  rX  rY  r]  rL  s          r_   
unicode_nera    sh    MMamm!4!4e6J6JKF1%I1%IY	 				 
ra   c                     [        U [        R                  [        R                  45      n[        U[        R                  [        R                  45      nU(       a  U(       a  S nU$ g g )Nc                     [        [        U 5      [        U5      5      n[        U SUSU5      nUS:X  a  gUS:X  a  [        U 5      [        U5      :  $ g)Nr   r   TFminrI  r3  r   r.  minleneqcodes       r_   lt_implunicode_lt.<locals>.lt_impl  sN    QQ(F Aq!V4F|11vA&ra   rC  r   rD  rS  )r   r.  rX  rY  ri  s        r_   
unicode_ltrl    T    1u00%2E2EFGI1u00%2E2EFGIY	  yra   c                     [        U [        R                  [        R                  45      n[        U[        R                  [        R                  45      nU(       a  U(       a  S nU$ g g )Nc                     [        [        U 5      [        U5      5      n[        U SUSU5      nUS:X  a  gUS:X  a  [        U 5      [        U5      :  $ g)Nr   r   TFrd  rf  s       r_   gt_implunicode_gt.<locals>.gt_impl/  sN    QQ(F Aq!V4F{11vA&ra   rk  )r   r.  rX  rY  rp  s        r_   
unicode_gtrr  *  rm  ra   c                     [        U [        R                  [        R                  45      n[        U[        R                  [        R                  45      nU(       a  U(       a  S nU$ g g )Nc                     X:  + $ r   rb   rP  s     r_   le_implunicode_le.<locals>.le_impl?  
    ;ra   rk  )r   r.  rX  rY  ru  s        r_   
unicode_lerx  :  R    1u00%2E2EFGI1u00%2E2EFGIY	 yra   c                     [        U [        R                  [        R                  45      n[        U[        R                  [        R                  45      nU(       a  U(       a  S nU$ g g )Nc                     X:  + $ r   rb   rP  s     r_   ge_implunicode_ge.<locals>.ge_implI  rw  ra   rk  )r   r.  rX  rY  r|  s        r_   
unicode_ger~  D  ry  ra   c                     [        U [        R                  5      (       a%  [        U[        R                  5      (       a  S nU$ g g )Nc                     [        X5      S:  $ Nr   )_findrP  s     r_   contains_impl'unicode_contains.<locals>.contains_implQ  s    ;##ra   rB  )r   r.  r  s      r_   unicode_containsr  N  s=    !U&&''Jq%:K:K,L,L	$ 	 -M'ra   c                 T   U n[        U [        R                  5      (       a  U R                  nO+[        U [        R                  5      (       a  U R
                  n[        R                  [        R                  4nUb,  [        X#5      (       d  [        SR                  XU 5      5      egg)zoCheck object belongs to one of specific types
ty: type
    Type of the object
name: str
    Name of the object
N"{}" must be {}, not {})
rC  r   Omittedr   rR  r   IntegerNoneTyper!   format)tynamethetyaccepteds       r_   unicode_idx_check_typer  W  s     E"emm$$	B	'	'u~~.HE!<!<3::42NOO "=ra   c                     [        U [        R                  5      (       d,  SR                  U[        R                  U 5      n[	        U5      eg)z$Check object belongs to unicode typer  N)rC  r   rD  r  r!   )r  r  r8  s      r_   unicode_sub_check_typer  k  s?    b%++,,'..tU5F5FK# -ra   c                 *    U SU[         S-
  -  -  -  n U $ Nr   _BLOOM_WIDTHmaskr   s     r_   
_bloom_addr  t  s     Q2)*+,DKra   c                 &    U SU[         S-
  -  -  -  $ r  r  r  s     r_   _bloom_checkr  z  s    1|a/0122ra   c                 `   [        U5      nUS:X  a  U$ US-
  =pV[        X5      n[        R                  " S5      n[	        X5      n	[        U5       H'  n
[        X5      n[	        X5      n	X:X  d  M   Xj-
  S-
  nM)     Un
XU-
  ::  a  [        XU
-   5      nX:X  ac  SnX:  a+  [        X
U-   5      n[        X5      nX:w  a  OUS-  nX:  a  M+  X:X  a  U
$ [        XU
-   S-   5      n[        X5      S:X  a  X-  n
O)X-  n
O$[        XU
-   S-   5      n[        X5      S:X  a  X-  n
U
S-  n
XU-
  ::  a  M  g)zLeft finder.r   r   r   )rI  r   r   rU   r  r,  r  )rM   substrstartendmgapmlastlastzeror  r   r   jhaystack_ch	needle_chs                  r_   _default_findr    sN    	FAAva%C6)D::a=Dd!D5\V'$#:)a-C	  	A
Qw,T19-:A)-dE:+F6	+Q ) z qy1}5BD%* qy1}5BD%*	Q/ Qw,2 ra   c                 6   [        U5      nUS:X  a  U$ US-
  =pV[        US5      n[        SU5      nUn	U	S:  a-  [        X5      n
[        X5      nX:X  a  U	S-
  nU	S-  n	U	S:  a  M-  X4-
  n	X:  a  [        X	5      n
X:X  ah  UnUS:  a,  [        X	U-   5      n[        X5      nX:w  a  OUS-  nUS:  a  M,  US:X  a  U	$ [        X	S-
  5      n
X:  a  [        X5      S:X  a  X-  n	O+X-  n	O&[        X	S-
  5      n
X:  a  [        X5      S:X  a  X-  n	U	S-  n	X:  a  M  g)zRight finder.r   r   r   )rI  r   r  r  )rM   r  r  r  r  skipr  mfirstr  r   r   r  r  r  s                 r_   _default_rfindr    sQ    	FAAv
q5DVQ'Fa DA
a%V'$#<q5D	Q a% 	A
*T%<Aa%-dE:+F6	+Q a% Av 1u-By\$3q8	 !1u-By\$3q8	Q3 *6 ra   c                    ^  SU 4S jjnU$ )z%Generate finder either left or right.c                    > [        U 5      n[        U5      nUc  SnUc  Un[        XBU5      u  p#X2-
  U:  a  gT" XX#5      $ )Nr   r   )rI  _adjust_indices)rM   r  r  r  rN   
sub_length	find_funcs         r_   implgenerate_finder.<locals>.impl  sQ    T[
=E;C$VC8
;#u22ra   NNrb   )r  r  s   ` r_   generate_finderr    s    3 Kra   findc                     [        U[        R                  5      (       a  SS jnU$ [        US5        [        US5        [	        US5        [
        $ )zImplements str.find()c                 6    U R                  [        U5      5      $ r   )r  rH  rM   r  r  r  s       r_   	find_implunicode_find.<locals>.find_impl  s    99S[))ra   r  r  r  r  )rC  r   rT  r  r  r  )rM   r  r  r  r  s        r_   unicode_findr    sE     &%..//	*5'*3&68,Lra   rfindc                     [        U[        R                  5      (       a  SS jnU$ [        US5        [        US5        [	        US5        [
        $ )zImplements str.rfind()c                 6    U R                  [        U5      5      $ r   )r  rH  r  s       r_   
rfind_impl!unicode_rfind.<locals>.rfind_impl
  s    ::c&k**ra   r  r  r  r  )rC  r   rT  r  r  _rfind)rM   r  r  r  r  s        r_   unicode_rfindr    sE     &%..//	+5'*3&68,Mra   rindexc                 X    [        US5        [        US5        [        US5        SS jnU$ )zImplements str.rindex()r  r  subc                 L    U R                  XU5      nUS:  a  [        S5      eU$ Nr   zsubstring not found)r  r   r   r  r  r  results        r_   rindex_impl#unicode_rindex.<locals>.rindex_impl  s*    S)A:233ra   r  r  r  )r   r  r  r  r  s        r_   unicode_rindexr    s/     5'*3&3& ra   rq   c                 X    [        US5        [        US5        [        US5        SS jnU$ )zImplements str.index()r  r  r  c                 L    U R                  XU5      nUS:  a  [        S5      eU$ r  )r  r   r  s        r_   
index_impl!unicode_index.<locals>.index_impl/  s*    C(A:233ra   r  r  )r   r  r  r  r  s        r_   unicode_indexr  (  s/     5'*3&3& ra   	partitionc                 ^   Un[        U[        R                  5      (       a  UR                  nO+[        U[        R                  5      (       a  UR
                  n[        R                  [        R                  4nUb-  [        X#5      (       d  SR                  SX15      n[        U5      eS nU$ )zImplements str.partition()r  sepc                 L   [        U5      n[        U R                  SU R                  5      n[	        U5      nU R                  UR                  :  d  [	        U 5      U:  a  XU4$ US:X  a  [        S5      eU R                  U5      nUS:  a  XU4$ U SU XXC-   [	        U 5       4$ Nr   empty separator)rH  r   rj   rk   rI  r   r  rM   r  	empty_str
sep_lengthposs        r_   r  unicode_partition.<locals>.implJ  s    #h!$**a@	X
::		!SY%;I--?.//iin7I--Ac{Cc&6s4y!AAAra   
rC  r   r  r   rR  r   rD  rT  r  r!   rM   r  r  r  r8  r  s         r_   unicode_partitionr  :       E#u}}%%			C	(	(!!5#7#78HE!<!<'..uhD#B" Kra   countc                     [        U5        [        U5        [        U[        R                  5      (       a  SS jnU$ Sn[	        UR                  [        U5      5      5      e)Nc                    Sn[        U 5      n[        U5      n[        X%S5      n[        X5U5      nX2-
  S:  d  X%:  a  gXU n [        U 5      nSUp2US:X  a  US-   $ X&-   U::  a#  XX&-    U:X  a
  US-  nX&-  nOUS-  nX&-   U::  a  M#  U$ Nr   r   )rI  _normalize_slice_idx_count)srcr  r  r  r  src_lensub_lens          r_   
count_impl!unicode_count.<locals>.count_imple  s    E#hG#hG.uqAE,S7CC{Q%/c"C#hGG3!|{"?g-u/36QJE$EQJE ?g- Lra   z+The substring must be a UnicodeType, not {}r  )_count_args_types_checkrC  r   rD  r!   r  r   )r  r  r  r  r  	error_msgs         r_   unicode_countr  ^  sS     E"C #u(())	0 =I
i&&tCy1
22ra   
rpartitionc                 ^   Un[        U[        R                  5      (       a  UR                  nO+[        U[        R                  5      (       a  UR
                  n[        R                  [        R                  4nUb-  [        X#5      (       d  SR                  SX15      n[        U5      eS nU$ )zImplements str.rpartition()r  r  c                 L   [        U5      n[        U R                  SU R                  5      n[	        U5      nU R                  UR                  :  d  [	        U 5      U:  a  X"U 4$ US:X  a  [        S5      eU R                  U5      nUS:  a  X"U 4$ U SU XXC-   [	        U 5       4$ r  )rH  r   rj   rk   rI  r   r  r  s        r_   r   unicode_rpartition.<locals>.impl  s    #h!$**a@	X
::		!SY%;--?.//jjo7--Ac{Cc&6s4y!AAAra   r  r  s         r_   unicode_rpartitionr    r  ra   c                 ^    X :  a  U nUS:  a  X -  nUS:  a  SnUS:  a  X-  nUS:  a  SnX4$ r   rb   )rN   r  r  s      r_   r  r    sH    
|
Qw7Cqy19E:ra   
startswithc                 6   [        U5      (       d*  [        U[        R                  5      (       d  [	        S5      e[        U5      (       d*  [        U[        R                  5      (       d  [	        S5      e[        U[        R
                  5      (       a0  [        UR                  [        R                  5      (       a  SS jnU$ [        U[        R                  5      (       a  SS jnU$ [        U[        R                  5      (       a  SS jnU$ [	        S5      e)Nz:When specified, the arg 'start' must be an Integer or Nonez8When specified, the arg 'end' must be an Integer or Nonec                 H    U H  nU R                  XBU5      (       d  M    g   gNTF)r  )r   prefixr  r  items        r_   startswith_tuple_impl1unicode_startswith.<locals>.startswith_tuple_impl  s%    <<S11  ra   c                 8    U R                  [        U5      X#5      $ r   )r  rH  )r   r  r  r  s       r_   startswith_char_seq_impl4unicode_startswith.<locals>.startswith_char_seq_impl  s    <<FU88ra   c                     [        U 5      [        U5      pTUc  SnUc  Un[        XBU5      u  p#X2-
  U:  a  gUS:X  a  gXU n[        USUSU5      S:H  $ Nr   FTrI  r  r3  )r   r  r  r  rN   prefix_lengths_slices          r_   startswith_unicode_impl3unicode_startswith.<locals>.startswith_unicode_impl  sl    $'FCKM}{(<JE{]*!clGw61mDIIra   z9The arg 'prefix' should be a string or a tuple of stringsr  )	r   rC  r   r  r!   UniTupledtyperD  rT  )r   r  r  r  r  r  r  s          r_   unicode_startswithr
    s    uj&F&FHJ 	J sJsEMM$B$BFH 	H &%..))v||U%6%677	 %$	FE00	1	1	9 ('	FE--	.	.	J$ '& GI 	Ira   endswithc                 8   UbI  [        U[        R                  [        R                  [        R                  45      (       d  [        S5      eUbI  [        U[        R                  [        R                  [        R                  45      (       d  [        S5      e[        U[        R                  [        R                  45      (       a  SS jnU$ [        U[        R                  5      (       a  SS jnU$ [        U[        R                  5      (       a  SS jnU$ g )Nz!The arg must be a Integer or Nonec                 D    U H  nU R                  XBU5      SL d  M    g   gr  )r  )r   r  r  r  r  s        r_   endswith_impl'unicode_endswith.<locals>.endswith_impl  s'    ::d3/47  ra   c                     [        U 5      n[        U5      nUc  SnUc  Un[        XBU5      u  p#X2-
  U:  a  gUS:X  a  gXU n [        U 5      U-
  n[        XUSU5      S:H  $ r  r  )r   r  r  r  rN   r  r   s          r_   r  r    sz    VFVJ}{(<JE{Z'QAVj(Fq&!Z@AEEra   c                 8    U R                  [        U5      X#5      $ r   )r  rH  )r   r  r  r  s       r_   r  r    s    ::c&k566ra   r  )
rC  r   r  r  r  r!   Tupler  rD  rT  )r   r  r  r  r  s        r_   unicode_endswithr    s    MZ05050@ A A =>>K:cEMM,1MM,1NN,< = = =>>&5;;788	 &%++,,	F& &%..//	7 0ra   
expandtabsc                 H   Un[        U[        R                  5      (       a  UR                  nO+[        U[        R                  5      (       a  UR
                  n[        R                  [        4nUb*  [        X#5      (       d  [        SR                  X15      5      eSS jnU$ )zImplements str.expandtabs()z"tabsize" must be {}, not {}c                    [        U 5      nS=p4Sn[        U5       H  n[        X5      nU[        :X  a=  SnUS:  a3  XU-  -
  nU[        R
                  U-
  :  a  [        S5      eXH-  nX8-  nMS  MU  U[        R
                  S-
  :  a  [        S5      eUS-  nUS-  nU[        [        4;   d  M  SnM     U(       d  U $ [        U R                  X0R                  5      n	S=p4[        U5       H  n[        X5      nU[        :X  a>  US:  a6  XU-  -
  nXH-  n[        X3U-   5       H  n
[        X[        5        M     X8-  nMT  MV  US-  n[        XU5        US-  nU[        [        4;   d  M~  SnM     U	$ )Nr   FTznew string is too longr   )rI  r,  r   r:   sysmaxsizeOverflowErrorr;   r<   r   rj   rk   r   r=   )rM   tabsizerN   r  line_posfoundr   
code_pointincrr   r   s              r_   expandtabs_impl+unicode_expandtabs.<locals>.expandtabs_impl/  s   TvA(1JW$Q;"&89D3;;--+,DEE$HIA  s{{Q&'(@AAAQ,0C!DD H# & KDJJ>>:vA(1JW$Q;"&89D$H$QD1')<  2IA  A
3Q,0C!DD H   
ra   r   )
rC  r   r  r   rR  r   r  intr!   r  )rM   r  r  r  r  s        r_   unicode_expandtabsr#    s     E'5==))	GU^^	,	,s#HE!<!<*11(DF 	F,\ ra   splitc                    US:X  d?  [        U[        R                  [        R                  [        R                  45      (       d  g [        U[        R
                  5      (       a  SS jnU$ [        U[        R                  5      (       a  SS jnU$ Ub-  [        U[        R                  5      (       d  [        USS5      c  SS jnU$ g )Nr   c                 4    U R                  [        U5      US9$ )N)maxsplit)r$  rH  )r   r  r'  s      r_   
split_impl!unicode_split.<locals>.split_implh  s    773s8h777ra   c                    [        U 5      n[        U5      nUS:X  a  [        S5      e/ nSnSnUS:X  aN  US:X  aH  [        US5      n[        U5       H,  n[        X5      U:X  d  M  UR	                  XU 5        US-   nM.     O\Sn	Xs:  aU  US:X  d  X:  aJ  [        XUSU5      S:X  a  UR	                  XU 5        Xt-  nUnU	S-  n	OUS-  nXs:  a  US:X  a  MC  X:  a  MJ  Xc::  a  UR	                  XS  5        U$ )Nr   r  r   r   )rI  r   r   r,  appendr3  )
r   r  r'  a_lensep_lenpartsr  r   sep_code_pointsplit_counts
             r_   r(  r)  m  s   FE#hG!| !233EDC!|B!0a!8 <C&q..@QC[1"Qw (
  kx2~'2'="137;q@QC[1"#q(q kx2~'2'= }QuX&Lra   r   Fc                 N   [        U 5      n/ nSnSnSnSn[        U5       Ha  n[        X5      n	[        U	5      n
U(       a  U
(       a  M)  UnSnM/  U
(       d  M8  UR	                  XU 5        SnUS-  nUS:w  d  MZ  Xr:X  d  Ma    O   XS::  a  U(       d  UR	                  XS  5        U$ )Nr   TFr   r   )rI  r,  r   r+   r+  )r   r  r'  r,  r.  r  r   r0  in_whitespace_blockr  is_whitespaces              r_   split_whitespace_impl,unicode_split.<locals>.split_whitespace_impl  s    FEEDCK"&U|,Q4
 2: >&$".3+(QC[1.2+#q(#r>k.E!# $& }%8QuX&Lra   r  )	rC  r   r  r  IntegerLiteralrT  rD  r  getattr)r   r  r'  r(  r4  s        r_   unicode_splitr8  `  s    Nx%--"'"6"6"8 9 9#u++,,	8#u(())!	D 	
377C%(0	@ %$C 1ra   c                    ^  SU 4S jjnU$ )z@Generate whitespace rsplit func based on either ascii or unicodec                 "  > US:  a  [         R                  n/ n[        U 5      S-
  nUS:  a  US:  a&  [        X5      nT" U5      (       d  OUS-  nUS:  a  M&  US:  a  OYUnUS-  nUS:  a&  [        X5      nT" U5      (       a  OUS-  nUS:  a  M&  UR	                  XS-   US-    5        US-  nUS:  a  M  US:  aI  US:  a&  [        X5      nT" U5      (       d  OUS-  nUS:  a  M&  US:  a  UR	                  U SUS-    5        US S S2   $ Nr   r   r   )r  r  rI  r   r+  )rM   r  r'  r  r   r  r  isspace_funcs          r_   rsplit_whitespace_impl?generate_rsplit_whitespace_impl.<locals>.rsplit_whitespace_impl  s>   a<{{HIMlq&,T5
#J//Q	 q&
 1uAFAq&,T5

++Q	 q&
 MM$1uQU+,MH! l$ 6 q&,T5
#J//Q	 q&
 Avd1QUm,dd|ra   r  rb   )r<  r=  s   ` r_   generate_rsplit_whitespace_implr?    s    $L "!ra   rsplitc                 2   S nU" US[         R                  [         R                  [         R                  45        U" US[         R                  [
        45        Ub/  [        U[         R                  [         R                  45      (       a  SS jnU$ SS jnU$ )zImplements str.unicode_rsplit()c                    U n[        U [        R                  5      (       a  U R                  nO+[        U [        R                  5      (       a  U R
                  nUb,  [        X25      (       d  [        SR                  XU 5      5      egg)z.Check object belongs to one of specified typesNr  )rC  r   r  r   rR  r   r!   r  )r  r  r  r  s       r_   _unicode_rsplit_check_type2unicode_rsplit.<locals>._unicode_rsplit_check_type  ss    b%--((HHEENN++GGEZ%@%@)00DF F &Ara   r  r'  c                 T    U R                   (       a  [        XU5      $ [        XU5      $ r   )rk   ascii_rsplit_whitespace_implunicode_rsplit_whitespace_impl)rM   r  r'  s      r_   r=  .unicode_rsplit.<locals>.rsplit_whitespace_impl  s#    ~~3DxHH1$XFFra   c                    [        U5      nU R                  UR                  :  d  [        U 5      [        U5      :  a  U /$ S nUS:  a  [        R                  n[        U5      nUS:X  a  [        S5      eUS:X  a	  U" XU5      $ / n[        U 5      nUS:  a=  U R                  USUS9nUS:  a  O%UR                  XU-   U 5        UnUS-  nUS:  a  M=  UR                  U SU 5        US S S2   $ )Nc                 ,   / n[        US5      n[        U 5      S-
  =pVUS:  aM  US:  aG  [        X5      nXt:X  a$  UR                  XS-   US-    5        US-
  =peUS-  nUS-  nUS:  a  US:  a  MG  US:  a  UR                  U SUS-    5        US S S2   $ r;  )r   rI  r+  )rM   r   r'  r  ch_code_pointr   r  data_code_points           r_   _rsplit_char9unicode_rsplit.<locals>.rsplit_impl.<locals>._rsplit_char  s    F+B2MIM!Aq&X\"1$":"3MM$1uq1u"56EMAMHQ q&X\ Bwd1q1uo.$B$<ra   r   r  r   )r  r  r   )rH  rj   rI  r  r  r   r  r+  )rM   r  r'  rM  r  r  r  r  s           r_   rsplit_impl#unicode_rsplit.<locals>.rsplit_impl  s    #h::		!SYS%96M	 " a<{{HX
?.//?844Il**Sq*1CQwMM$Z/23AMH l 	d1Qi dd|ra   r  )r   rD  rT  r  r  r"  rC  r  )rM   r  r'  rC  r=  rO  s         r_   unicode_rsplitrQ    s    F sEE,=,=,1,@,@,1NN,< = xemmS5IJ
{ju~~u}}&EFF	G
 &%-^ ra   centerc                 0   [        U[        R                  5      (       d  [        S5      e[        U[        R                  5      (       a  SS jnU$ US:X  d:  [        U[        R
                  [        R                  45      (       d  [        S5      eSS jnU$ )NThe width must be an Integer c                 8    U R                  U[        U5      5      $ r   )rR  rH  stringwidthfillchars      r_   center_impl#unicode_center.<locals>.center_impl@  s    ==H66ra   "The fillchar must be a UnicodeTypec                     [        U 5      n[        U5      nUS:w  a  [        S5      eX::  a  U $ X-
  nUS-  XQ-  S-  -   nXV-
  nX&-  nXg:X  a  X-   U-   $ X-   X'-  -   $ )Nr   5The fill character must be exactly one character longr&  rI  r   )	rX  rY  rZ  str_lenfillchar_len	allmarginlmarginrmarginl_strings	            r_   r[  r\  H  s    f+8}1 . / / MO	>i&7!&;<%%$x//$(:;;ra   rU  rC  r   r  r!   rT  r  rD  )rX  rY  rZ  r[  s       r_   unicode_centerri  :  sy    eU]]++899(E0011	7Ox%--1B1B!CDD>??<* ra   c                    ^  SU 4S jjnU$ )Nc                 T  > [        U[        R                  5      (       d  [        S5      e[        U[        R                  5      (       a  T(       a  SS jnU$ SS jnU$ US:X  d:  [        U[        R
                  [        R                  45      (       d  [        S5      eSU4S jjnU$ )NrT  rU  c                 8    U R                  U[        U5      5      $ r   )ljustrH  rW  s      r_   
ljust_impl<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.ljust_implg      !<<s8}==ra   c                 8    U R                  U[        U5      5      $ r   )rjustrH  rW  s      r_   
rjust_impl<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.rjust_implk  rp  ra   r]  c                    > [        U 5      n[        U5      nUS:w  a  [        S5      eX::  a  U $ X!U-
  -  nT(       a  X-   $ XP-   $ )Nr   r_  r`  )rX  rY  rZ  ra  rb  newstrSTRING_FIRSTs         r_   r  6gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.impls  s[    &kGx=Lq   "2 3 3 '/2F&&ra   rg  rh  )rX  rY  rZ  rn  rs  r  rw  s         r_   unicode_Xjust(gen_unicode_Xjust.<locals>.unicode_Xjusta  s    %//<==h 4 455>!!>!!C8emmU5F5F%GHHBCC	'" ra   rg  rb   )rw  ry  s   ` r_   gen_unicode_Xjustr{  `  s    #J ra   rr  rm  Tc                    ^  U 4S jnU$ )zDGenerate splitlines performer based on ascii or unicode line breaks.c                 v  > [        U 5      n/ nS=pEXB:  a  XB:  a%  [        X5      nT
" U5      (       a  OUS-  nXB:  a  M%  UnXB:  aU  US-   U:  a>  [        X5      n[        XS-   5      n	[        U5      (       a  [        U	5      (       a  US-  nUS-  nU(       a  UnUR	                  XU 5        UnXB:  a  M  U$ r  )rI  r   r6   r5   r+  )rM   keependsrN   r  r   r  r  eolcur_cpnext_cpis_line_break_funcs             r_   r  &generate_splitlines_func.<locals>.impl  s    T	j*,T5
%j11Q	 * Czq56>,T5F-dE:G+F33w8O8OQQCMM$+&A+ j. ra   rb   )r  r  s   ` r_   generate_splitlines_funcr    s    < Kra   
splitlinesc                 r   Un[        U[        R                  5      (       a  UR                  nO+[        U[        R                  5      (       a  UR
                  n[        R                  [        [        R                  [        4nUb+  [        X#5      (       d  [        SR                  SX15      5      eSS jnU$ )zImplements str.splitlines()r  r~  c                 P    U R                   (       a  [        X5      $ [        X5      $ r   )rk   _ascii_splitlines_unicode_splitlines)rM   r~  s     r_   splitlines_impl+unicode_splitlines.<locals>.splitlines_impl  s    >>$T44"422ra   F)rC  r   r  r   rR  r   r  r"  Booleanboolr!   r  )rM   r~  r  r  r  s        r_   unicode_splitlinesr    s     E(EMM**	Henn	-	-sEMM48HE!<!<%,,ZLN 	N3 ra   c           
         [        U5      nUS:X  a  g[        U 5      nUS-
  U-  nU R                  nU R                  nU H;  nU[        U5      -  n[        XWR                  5      n[	        XgR                  5      nM=     [        XTU5      nUS   n	[        USU	S[        U	5      5        [        U	5      n
[        SU5       H>  n[        XU SU5        X-  n
X   n	[        XU	S[        U	5      5        U
[        U	5      -  n
M@     U$ )Nr    r   )rI  rj   rk   r  r$  r   _strncpyr,  )r  r.  	parts_lenr-  rN   rO   rP   pr  part
dst_offsetr   s               r_   	join_listr    s    E
IA~ #hG!mw&F99D}}H#a&$(x5 
 42F 8DVQaT+TJQ	"S!W5
zT1c$i8c$i
 # Mra   joinc                    [        U[        R                  5      (       a]  [        UR                  [        R                  5      (       a  S nU$ [        UR                  [        R
                  5      (       a  S nU$ g [        U[        R                  5      (       a  S nU$ [        U[        R                  5      (       a  S nU$ g )Nc                     [        X5      $ r   )r  )r  r.  s     r_   join_list_impl$unicode_join.<locals>.join_list_impl  s     ,,ra   c                 X    U Vs/ s H  n[        U5      PM     nn[        X5      $ s  snf r   )rH  r  )r  r.  r  _partss       r_   r  r    s*    */0%Q#a&%0 -- 1s   'c                 P    U Vs/ s H  o"PM     nnU R                  U5      $ s  snf r   )r  )r  r.  r  
parts_lists       r_   join_iter_impl$unicode_join.<locals>.join_iter_impl  s*    %*+U!UJ+88J'' ,s   #c                 n    [        [        U5      5       Vs/ s H  o!U   PM	     nn[        X5      $ s  snf r   )r,  rI  r  )r  r.  r   r  s       r_   join_str_impl#unicode_join.<locals>.join_str_impl  s3    ,1#e*,=>,=q(,=J>S-- ?s   2)rC  r   Listr	  rD  rT  IterableType)r  r.  r  r  r  s        r_   unicode_joinr    s     %$$ekk5#4#455-!!U%9%9::. "!	E5--	.	.	( 	E5,,	-	-	.  
.ra   zfillc                 `    [        U[        R                  5      (       d  [        S5      eS nU$ )Nz<width> must be an Integerc                     [        U 5      nX::  a  U $ U(       a  U S   OSnSX-
  -  nUS;   a  X4-   U SS  -   nU$ X@-   nU$ )Nr   r  0)+-r   rI  )rX  rY  ra  
first_charpaddingrv  s         r_   
zfill_impl!unicode_zfill.<locals>.zfill_impl  s`    f+M")VAYr
)#)F12J6F  %Fra   )rC  r   r  r!   )rX  rY  r  s      r_   unicode_zfillr    s,    eU]]++677" ra   c                     [        U 5      nSnUb   [        U5       H  nX   U;  d  M  Us  $    U$ [        U5       H  n[        X   5      (       a  M  Us  $    U$ r   rI  r,  r+   rX  charsra  r   s       r_   unicode_strip_left_boundr  '  sc    &kG	AwAy%   N	 wA%fi00   Nra   c                     [        U 5      nSnUb*  [        US-
  SS5       H  nX   U;  d  M  US-  n  U$     U$ [        US-
  SS5       H  n[        X   5      (       a  M  US-  n  U$    U$ r;  r  r  s       r_   unicode_strip_right_boundr  8  s    &kG	Aw{B+Ay%Q H , H w{B+A%fi00QH ,
 Hra   c                     [        U [        R                  5      (       a  U R                  n U bJ  [        U [        R                  [        R
                  [        R                  45      (       d  [        S5      eg g )Nz%The arg must be a UnicodeType or None)rC  r   rR  r   r  rD  r  r!   )r  s    r_   unicode_strip_types_checkr  J  sc    %((

MZ050A0A050@ A A ABBAMra   c                     [        U [        R                  5      (       a  U R                  n U bJ  [        U [        R                  [        R
                  [        R                  45      (       d  [        S5      eg g )Nz,The slice indices must be an Integer or None)rC  r   rR  r   r  r  r  r!   )args    r_   r  r  S  s]    #u~~&&hhK:cEMM,1MM,1NN,< = = HII=Kra   lstripc                 r    [        U[        R                  5      (       a  SS jnU$ [        U5        SS jnU$ )Nc                 6    U R                  [        U5      5      $ r   )r  rH  rX  r  s     r_   lstrip_impl#unicode_lstrip.<locals>.lstrip_impl`      ==U,,ra   c                     U [        X5      S  $ r   )r  r  s     r_   r  r  f  s    .v=>??ra   r   rC  r   rT  r  )rX  r  r  s      r_   unicode_lstripr  \  s6     %--..	-e$@ra   rstripc                 r    [        U[        R                  5      (       a  SS jnU$ [        U5        SS jnU$ )Nc                 6    U R                  [        U5      5      $ r   )r  rH  r  s     r_   rstrip_impl#unicode_rstrip.<locals>.rstrip_implo  r  ra   c                     U S [        X5       $ r   )r  r  s     r_   r  r  u  s    ?0?@@ra   r   r  )rX  r  r  s      r_   unicode_rstripr  k  s6     %--..	-e$Ara   stripc                 r    [        U[        R                  5      (       a  SS jnU$ [        U5        SS jnU$ )Nc                 6    U R                  [        U5      5      $ r   )r  rH  r  s     r_   
strip_impl!unicode_strip.<locals>.strip_impl~  s    <<E
++ra   c                 6    [        X5      n[        X5      nXU $ r   )r  r  )rX  r  lbrbs       r_   r  r    s     %f4&v5}ra   r   r  )rX  r  r  s      r_   unicode_stripr  z  s7     %--..	,e$ ra   c                 `    U c
  U(       a  gU$ U S:  a  X-  n U S:  d  X:  a  [        S5      eU $ )z
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
r   zstring index out of range)
IndexError)r   rN   is_starts      r_   normalize_str_idxr    s>    " {M	q
Qw#-455Jra   c                 H    U c  U$ U* U s=::  a
  U:  a   X-  $   U S:  a  S$ U $ )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)
r   rb   )r  	slice_lendefaults      r_   r  r    s;     {zS$9$ %a1 S ra   c                     U" X5      nS nX44$ )zFix slice object.
    c                     UR                   u  pEUu  pgU R                  XU5      n[        R                  " XXH5        [        R                  " XU5        UR                  5       $ r   )r   make_helperrC   guard_invalid_slice	fix_slicer   )	r   r   r   r   	slicetype
lengthtypesliceobjrN   slices	            r_   r   !_normalize_slice.<locals>.codegen  sU    "%((!##GA##GiG'&1  ra   rb   )r   r  rN   r   r   s        r_   _normalize_slicer    s     8
$C! <ra   c                 :    [         R                  " U5      nS nX#4$ )z2Compute the span from the given slice object.
    c                 z    UR                   u  nUu  nU R                  XU5      n[        R                  " X5      nU$ r   )r   r  rC   get_slice_length)r   r   r   r   r  r  r  result_sizes           r_   r   _slice_span.<locals>.codegen  s<    hh
##GA..w>ra   )r   rU   )r   r  r   r   s       r_   _slice_spanr    s!     **X
C <ra   c           
         UR                   U R                   :X  aB  [        UR                   5      nXS-  nXQ-  nXE-  n[        U R                  XrR                  XhSS9  g [	        U5       H  n	[        XU	-   [        X#U	-   5      5        M      g )Nr   )align)rj   r   r    rh   r,  r   r   )
dstr  r  
src_offsetr0  
byte_widthsrc_byte_offsetdst_byte_offsetr   r   s
             r_   r  r    s{    
yyCII(3
$1$1cii))%Q	8 qACa+Ca@B ra   c                     U[         R                  :X  d   eS n[         R                  " [         R                  [         R                  [         R                  5      nXT4$ )zWCreate a slice of a unicode string using a view of its data to avoid
extra allocation.
c                    Uu  pEn[         R                  " [        R                  5      " XUS9n[         R                  " [        R                  5      " X5      nUR                  Ul        UR
                  Ul        UR                  Ul        Xhl        U R                  [        S5      Ul
        U R                  R                  [        5      n	U	R                  U R                  [        R                  40 5      n
U R!                  X5      nU" XR
                  45      nUR#                  X\5      nUR%                  UR&                  U/5      Ul        [         R(                  " UR*                  R,                  5      Ul        U R.                  (       a)  U R0                  R3                  XR4                  S   U5        UR7                  5       $ )Nr   r   r   )r   r   r   r   rR   rO   rP   rN   r   r   rQ   typing_contextresolve_value_typer   get_call_typerV   get_functionr   r   rM   r   rS   r   
enable_nrtr   increfr   r   )r   r   r   r   r  r  rN   in_strview_strbw_typbw_sigbw_implr  r   s                 r_   r   $_get_str_slice_view.<locals>.codegen  s\   !F,,  '=..  '2!>>"OO ,,Z<''::;NO%%""U[[NB8&&v6W{{n5
U/FKK&:!001E1EFKKwS9!!##ra   )r   r   rU   )r   src_tstart_tlength_tr   r   s         r_   _get_str_slice_viewr
    sI    
 E&&&&&$6 

U//UZZ
HC<ra   c                     [        U [        R                  5      (       aI  [        U[        R                  5      (       a  S nU$ [        U[        R                  5      (       a  S nU$ g g )Nc                     [        U[        U 5      5      n[        X5      n[        U5      nX0R                  :X  a  [        XS5      $ [        U5      n[        USU5      n[        USU5        U$ r!  )	r  rI  r   r9  rj   r
  r<  r   r   )r   r   r6  rO   rP   rets         r_   getitem_char%unicode_getitem.<locals>.getitem_char  se    'SV4$Q,)"-77?.qq99226H'a:C#CB/Jra   c           	         [        U[        U 5      5      n[        U5      n[        XR                  5      n[        U5      n[        U5      n[        UR                  UR                  -   UR                  UR                  5       H9  n[        X5      nU[        U5      -  n[        U5      nXX:w  d  M.  [        XX5      nM;     UR                  S:X  a%  XPR                  :X  a  [        XR                  U5      $ [        XSU5      n	UR                  n
[        U5       H&  n[        X[        X
5      5        XR                  -  n
M(     U	$ r  )r  rI  r  r   r  r9  r<  r,  stepstopr  rj   r
  r   r   )r   r   	slice_idxspanr6  rO   rP   r   new_kindr  curs              r_   getitem_slice&unicode_getitem.<locals>.getitem_slice*  s   ,S#a&9	"9-$Q8)"-.r2 y?(~~y~~?A(.B 3B 77H1"5H')$9? >>Q&477? /q//4HH (H=C#//C"4['0GH~~- ) Jra   )rC  r   rD  r  	SliceType)r   r   r  r  s       r_   unicode_getitemr    s]    !U&&''c5==))
  U__--"H ! K . (ra   c                    [        U [        R                  5      (       a$  [        U[        R                  5      (       a  S nU$ [        U [        R                  5      (       a%  [        U[        R                  5      (       a  S nU$ g g )Nc           	         U R                   UR                   -   n[        U R                  UR                  5      n[        U R                  UR                  5      n[        X2U5      n[        [        U 5      5       H  n[        XV[        X5      5        M     [        [        U5      5       H%  n[        U[        U 5      U-   [        X5      5        M'     U$ r   )
ri   r  rj   r$  rk   r   r,  rI  r   r   )r   r.  
new_lengthr  	new_asciir  r   r  s           r_   concat_impl#unicode_concat.<locals>.concat_implZ  s    QYY.J!!''1773H#AKK=I"8CF3q6]?1+@A #3q6]A
OA4IJ #Mra   c                     U [        U5      -   $ r   )rH  rP  s     r_   r  r   g  s    s1v:ra   )rC  r   rD  rT  )r   r.  r  s      r_   unicode_concatr"  V  so     !U&&''Jq%:K:K,L,L		 !U&&''Jq%:N:N,O,O	 -P'ra   c                 T   U S:X  d  US:  a  gUS:X  a  U $ U R                   U-  nU R                  n[        X2U R                  5      n[	        U 5      n[        USU SU5        UnSU-  U::  a  [        XFUSU5        US-  nSU-  U::  a  M  SU-  U:X  d  X&-
  n[        XFXFU-
  U5        U$ g )Nr  r   r   r&  )ri   rj   r   rk   rI  r  )str_argmult_argr  r  r  len_a	copy_sizerests           r_   _repeat_implr)  l  s    "}1	Q__x/
==xW5F5FGGGQ.	)mz)V9=NI )mz) 9}
* )DVD0@$GM +ra   c                    [        U [        R                  5      (       a$  [        U[        R                  5      (       a  S nU$ [        U [        R                  5      (       a%  [        U[        R                  5      (       a  S nU$ g g )Nc                     [        X5      $ r   r)  rP  s     r_   wrapunicode_repeat.<locals>.wrap      %%ra   c                     [        X5      $ r   r,  rP  s     r_   r-  r.    r/  ra   )rC  r   rD  r  )r   r.  r-  s      r_   unicode_repeatr1    se    !U&&''Jq%--,H,H	&	Au}}	%	%*Q8I8I*J*J	& +K	%ra   c                 L    [        U [        R                  5      (       a  S nU$ g )Nc                     [        U 5      S:H  $ r   r  r   s    r_   r  unicode_not.<locals>.impl  s    q6Q;ra   rB  r   r  s     r_   unicode_notr7    s$    !U&&''	 (ra   replacec                 D   Un[        U[        R                  5      (       a  UR                  nO+[        U[        R                  5      (       a  UR
                  n[        U[        [        R                  45      (       d  [        SR                  U5      5      e[        U[        R                  [        R                  45      (       d  [        SR                  U5      5      e[        U[        R                  5      (       d  [        SR                  U5      5      eSS jnU$ )NzGUnsupported parameters. The parameters must be Integer. Given count: {}z+The object must be a UnicodeType. Given: {}c                    US:X  a  U $ US:X  a  [        U 5      nUS:X  a  X"R                  U5      -   U-   $ U/n[        [        U5      U5      n[	        U5       HW  nUR                  XG   5        US-   U:w  a  UR                  U5        M2  UR                  SR                  XGS-   S  5      5        MY     U[        U5      :  a  UR                  U5        SR                  U5      $ U R                  X5      nUR                  U5      nU$ )Nr   r  r   r   )listr  re  rI  r,  r+  r$  )	r   old_strnew_strr  scharssplit_result	min_countr   r  s	            r_   r  unicode_replace.<locals>.impl  s    A:Hb=!WF{f!55??#9LCK/I9%##FI.q5I% ''0 ''Ax0@(AB & s6{"##G,77<(((f%ra   r   )rC  r   r  r   rR  r   r"  r  r!   r  rD  r  )r   r<  r=  r  r  r  s         r_   unicode_replacerC    s    E%''	E5>>	*	*

ec5==122 ==CVE]L 	L g 1 15>>BCC ''-vg8 	8 gu0011 ''-vg8 	8, Kra   c                    ^ ^ U U4S jnU$ )Nc                    > UU4S jnU$ )Nc                 b  > [        U 5      nUS:X  a  gUS:X  a-  [        U S5      nU R                  (       a  T" U5      $ T" U5      $ U R                  (       a,  [        U5       H  n[        X5      nT" U5      (       a  M    g   [        U5       H  n[        X5      nT" U5      (       a  M    g   g)Nr   Fr   T)rI  r   rk   r,  )rM   rN   r  r   
ascii_funcunicode_funcs       r_   r  .gen_isAlX.<locals>.unicode_isAlX.<locals>.impl  s    YF{{,T15
>>%j11'
33~~vA!0!9J%j11$ '
 6],T5
#J//  #
 ra   rb   )rM   r  rG  rH  s     r_   unicode_isAlX gen_isAlX.<locals>.unicode_isAlX  s    	2 ra   rb   )rG  rH  rJ  s   `` r_   	gen_isAlXrL    s    8 ra   isalphac                 <    [        U 5      =(       d    [        U 5      $ r   )r?   r>   xs    r_   <lambda>rQ    s    &:1&= '<&8&;'<ra   isalnumc                    ^ ^^ U UU4S jnU$ )Nc                   > [        U 5      nUS:X  a  T" [        U S5      5      S:g  $ US:X  a  gSn[        U5       HD  n[        X5      nT" U5      (       d  T" U5      (       a    gU(       a  M3  T" U5      (       d  MB  SnMF     U$ Nr   r   FTrI  r   r,  )r   lcasedr   r  is_loweris_titleis_uppers        r_   r  _is_upper.<locals>.impl  s    F6OAq12a7768C(0J
##x
';';e 4 4  ra   rb   )rY  r[  rZ  r  s   ``` r_   	_is_upperr]    s    
 Kra   c                     grO  rb   rO  s    r_   rQ  rQ    s    5ra   isupperc                     S nU$ )z
Implements .isupper()
c                 P    U R                   (       a  [        U 5      $ [        U 5      $ r   )rk   _ascii_is_upper_unicode_is_upperr4  s    r_   r  unicode_isupper.<locals>.impl  s    ;;"1%%$Q''ra   rb   r6  s     r_   unicode_isupperre    s    
(
 Kra   isasciic                     S nU$ )z Implements UnicodeType.isascii()c                     U R                   $ r   )rk   rM   s    r_   r  unicode_isascii.<locals>.impl)  s    ~~ra   rb   rM   r  s     r_   unicode_isasciirl  %  s    Kra   istitlec                     S nU$ )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                 j   [        U 5      nUS:X  a)  [        U S5      n[        U5      =(       d    [        U5      $ US:X  a  gSnSn[	        U5       H^  n[        X5      n[        U5      (       d  [        U5      (       a  U(       a    gSnSnM=  [        U5      (       a  U(       d    gSnSnM\  SnM`     U$ rU  )rI  r   r1   r7   r,  r2   )rM   rN   charrX  previous_is_casedr   s         r_   r  unicode_istitle.<locals>.impl6  s    TQ;"4+D)$/O3I$3OOQ;!=C"4-D%d++/Ed/K/K$ $(!'--( $(!$)! ! ra   rb   rk  s     r_   unicode_istitlers  .  s    6 Kra   islowerc                     S nU$ )a<  
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                    [        U 5      nUS:X  a  [        [        U S5      5      $ US:X  a  gSn[        U5       HM  n[        X5      n[	        U5      (       d  [        U5      (       a    gU(       a  M9  [        U5      (       d  MK  SnMO     U$ rU  )rI  r2   r   r,  r1   r7   )rM   rN   rX  r   r6  s        r_   r  unicode_islower.<locals>.impl]  s    TQ;)/$*BCCQ;=C +B%b))-CB-G-GU5b99 ! ra   rb   rk  s     r_   unicode_islowerrx  T  s     Kra   isidentifierc                     S nU$ )z%Implements UnicodeType.isidentifier()c                     [        U 5      nUS:X  a  g[        U S5      n[        U5      (       d  US:w  a  g[        SU5       H   n[        X5      n[	        U5      (       a  M     g   g)Nr   F_   r   T)rI  r   r-   r,  r.   )rM   rN   first_cpr   r  s        r_   r  "unicode_isidentifier.<locals>.implt  sd    TQ;"4+$X..8t3Cq&!A(1J+J77 "
 ra   rb   rk  s     r_   unicode_isidentifierr  p  s      Kra   c                    ^ ^ U U4S jnU$ )Nc                    > UU4S jnU$ )Nc                    > [        U 5      nUS:X  a  T" [        U S5      5      $ T(       a  US:X  a  g[        U5       H  n[        X5      nT" U5      (       a  M    g   grU  rV  )rM   rN   r   r  _PyUnicode_IS_funcempty_is_falses       r_   r  *gen_isX.<locals>.unicode_isX.<locals>.impl  s\    YF{)/$*BCC&A+6],T5
)*55  #
 ra   rb   )rM   r  r  r  s     r_   unicode_isXgen_isX.<locals>.unicode_isX  s    	 ra   rb   )r  r  r  s   `` r_   gen_isXr    s    " ra   isspace	isnumericisdigit	isdecimalisprintablec                    ^ ^ U U4S jnU$ )z)Generate common case operation performer.c           	        > [        U 5      nUS:X  a   [        U R                  XR                  5      $ U R                  (       a!  [        U R                  US5      nT	" X5        U$ [        [        SU-  U R                  5      nS/nT
" XX45      nUS   n[        U5      n[        Xu[        U5      5      n[        U5       H  n[        X([        X85      5        M     U$ )Nr   r   rD   )
rI  r   rj   rk   r   r9  r<  r,  r   r   )rM   rN   r   tmpmaxchars	newlengthmaxcharnewkindr   rG  rH  s            r_   r  case_operation.<locals>.impl  s    TQ; V^^DD>>

FA6Ct!J 11v:t~~N3 s=	1+$W-G0CG0LMy!ACOC$;< " 
ra   rb   )rG  rH  r  s   `` r_   case_operationr    s    . Kra   c                 Z   SnUS-
  nUS:  a)  [        X5      n[        U5      (       d  OUS-  nUS:  a  M)  US:  =(       a    [        U5      nU(       aM  US-   nXA:  a(  [        X5      n[        U5      (       d  OUS-  nXA:  a  M(  XA:H  =(       d    [        U5      (       + nU(       a  S$ S$ )zEThis is a translation of the function that handles the capital sigma.r   r   i  i  )r   r0   r/   )rM   rN   r   r   r  final_sigmas         r_   _handle_capital_sigmar    s     	
AaA
q&D$)!,,	Q	 q&
 6303K!Gj(A-a00FA	 j
 {A+=a+@'@5*U*ra   c                 D    U S:X  a  [        XU5      US'   g[        X5      $ )z>This is a translation of the function that lowers a character.i  r   r   )r  r'   )r  rM   rN   r   mappeds        r_   _lower_ucs4r    s*     U)$<q	!*55ra   c                    ^  U 4S jnU$ )Nc                   > Sn[        U5       Hv  n[        R                  " S[        S9n[	        X5      nT
(       a  [        XpXU5      nO[        Xv5      nUS U  H&  n	[        US   U	5      US'   [        X$U	5        US-  nM(     Mx     U$ Nr   rD   r	  r   )	r,  r   zerosr$   r   r  r&   maxr   )rM   rN   r   r  kr   r  r  n_resr  lowers             r_   _do_upper_or_lower7_gen_unicode_upper_or_lower.<locals>._do_upper_or_lower  s    =CXXax0F(3J#Jf6J /zBFU^!(1+q1*Q $ ! ra   rb   )r  r  s   ` r_   _gen_unicode_upper_or_lowerr    s     ra   c                    ^  U 4S jnU$ )Nc                 v   > [        [        U 5      5       H   n[        X5      n[        XT" U5      5        M"     g r   )r,  rI  r   r   )rM   r   r   r  funcs       r_   _ascii_upper_or_lower8_gen_ascii_upper_or_lower.<locals>._ascii_upper_or_lower	  s/    T#C(3JCd:&67 $ra   rb   )r  r  s   ` r_   _gen_ascii_upper_or_lowerr  
	  s    8 ! ra   r  c                 *    [        [        [        5      $ )zImplements .lower())r  _ascii_lower_unicode_lowerri  s    r_   unicode_lowerr  	       ,77ra   upperc                 *    [        [        [        5      $ )zImplements .upper())r  _ascii_upper_unicode_upperri  s    r_   unicode_upperr  	  r  ra   c                    Sn[         R                  " S[        S9n[        U5       HZ  nUR	                  S5        [        X5      n[        Xu5      nUS U  H'  n	US   n
[        X5      US'   [        X$U	5        US-  nM)     M\     U$ r  )	r   r  r$   r,  fillr   r(   r  r   )rM   rN   r   r  r  r  r   r  r  r  r  s              r_   _unicode_casefoldr  #	  s    	AXXax(FV}A$T/
'
;AqkGg/HQKCA&FA	  	  Hra   c                 z    [        [        U 5      5       H#  n[        X5      n[        X[	        U5      5        M%     g r   )r,  rI  r   r   r#   rM   r   r   r  s       r_   _ascii_casefoldr  4	  s.    SY$T/
+j"9:  ra   casefoldc                 *    [        [        [        5      $ )zImplements str.casefold())r  r  r  ri  s    r_   unicode_casefoldr  ;	  s     /+<==ra   c                    SnSn[         R                  " S[        S9n[        U S5      n[	        Xv5      nUS U  H  n	[        XY5      n[        X$U	5        US-  nM!     [        SU5       HT  n
UR                  S5        [        X
5      n[        XpXU5      nUS U  H  n	[        XY5      n[        X$U	5        US-  nM!     MV     XSS'   U$ r  )
r   r  r$   r   r)   r  r   r,  r  r  )rM   rN   r   r  r  r  r  r  r  r  r   s              r_   _unicode_capitalizer  B	  s    	AGXXax(F q)J":6EFU^g/"	Q  QA$T/
Jf6BA'oGCA&FA  	   QKHra   c                     [        U S5      n[        US[        U5      5        [        S[	        U 5      5       H#  n[        X5      n[        X[        U5      5        M%     g r  )r   r   r"   r,  rI  r#   )rM   r   r  r   s       r_   _ascii_capitalizer  \	  sM     q)JCK
34QD	"$T/
+j"9: #ra   
capitalizec                 *    [        [        [        5      $ r   )r  r  r  ri  s    r_   unicode_capitalizer  f	  s    +-@AAra   c                 v   SnSn[         R                  " S[        S9n[        U5       H  nUR	                  S5        [        X5      nU(       a  [        XXU5      n	O[        [        U5      U5      n	USU	  H&  n
Uu  n[        X5      US'   [        X$U
5        US-  nM(     [        [        U5      5      nM     U$ )zCThis is a translation of the function that titles a unicode string.r   FrD   r  Nr   )r   emptyr$   r,  r  r   r  r)   r  r   r/   )rM   rN   r   r  r  previous_casedr  r   r  r  r  r  s               r_   _unicode_titler  l	  s     	
ANXXax(FV}A$T/

&vFE*8J+?HEAHGg/HQKCA&FA	  
 ,HZ,@A  Hra   c                    Sn[        [        U 5      5       Hf  n[        X5      n[        U5      (       a  U(       d  [	        U5      nSnO'[        U5      (       a  U(       a  [        U5      nSnOSn[        XU5        Mh     g)z!Does .title() on an ASCII string FTN)r,  rI  r   r8   r"   r9   r#   r   )rM   r   rq  r   r  s        r_   _ascii_titler  	  ss     SY$T/
z""$(4
 $$$ (4
 $ %*-  ra   titlec                 *    [        [        [        5      $ )zImplements str.title())r  r  r  ri  s    r_   unicode_titler  	  s     ,77ra   c                     [        [        U 5      5       HQ  n[        X5      n[        U5      (       a  [	        U5      nO[        U5      (       a  [        U5      n[        XU5        MS     g r   )r,  rI  r   r9   r#   r8   r"   r   r  s       r_   _ascii_swapcaser  	  sS    SY$T/
z""$Z0J$$$Z0J*-  ra   c                 t   SnSn[         R                  " S[        S9n[        U5       H  nUR	                  S5        [        X5      n[        U5      (       a  [        XXU5      n	O"[        U5      (       a  [        X5      n	OSn	XS'   US U	  H  n
[        XZ5      n[        X$U
5        US-  nM!     M     XSS'   U$ r  )r   r  r$   r,  r  r   r1   r  r2   r&   r  r   )rM   rN   r   r  r  r  r  r   r  r  r  s              r_   _unicode_swapcaser  	  s    	AGXXax(FV}A$T/
!*--
&vFE#J//*:>EE"1IA'oGCA&FA    QKHra   swapcasec                 *    [        [        [        5      $ r   )r  r  r  ri  s    r_   unicode_swapcaser  	  s    /+<==ra   c                 L    [        U [        R                  5      (       a  S nU$ g )Nc                 R    [        U 5      nUS:w  a  [        S5      e[        U S5      $ )Nr   zord() expected a characterr   )rI  	TypeErrorr   )r   lcs     r_   r  ol_ord.<locals>.impl	  s+    QBQw <=="1a((ra   rB  )r   r  s     r_   ol_ordr  	  s&    !U&&''	)  (ra   c                 v    U [         ::  d   e[        U 5      n[        USU[        :H  5      n[	        USU 5        U$ r!  )_MAX_UNICODEr9  r   r   r   )r   rO   r  s      r_   _unicode_charr  	  s?    b!D
a)>!>
?CCBJra   zchr() arg not in range(0x%hx)c                 h    U S:  d
  U [         :  a  [        [        5      e[        [	        U 5      5      $ r   )r  r   _out_of_range_msgr  r$   )ordinals    r_   _PyUnicode_FromOrdinalr  	  s,    !w-*++'*++ra   c                 L    [        U [        R                  5      (       a  S nU$ g )Nc                     [        U 5      $ r   )r  )r   s    r_   r  ol_chr.<locals>.impl	  s    )!,,ra   )rC  r   r  )r   r  s     r_   ol_chrr  	  s"    !U]]##	- $ra   __str__c                     S $ )Nc                     U $ r   rb   r?  s    r_   rQ  unicode_str.<locals>.<lambda>	  s    Qra   rb   r?  s    r_   unicode_strr  	  s    ra   __repr__c                     S $ )Nc                     SU -   S-   $ )N'rb   r?  s    r_   rQ  unicode_repr.<locals>.<lambda>
  s    S1Ws]ra   rb   r?  s    r_   unicode_reprr  	  s
     #"ra   c                 $   ^ U " S5      mU4S jnU$ )NrE   c                   > SnU S:  a  U * n SnU S:X  a  gUS-   [        [        R                  " [        R                  " U 5      5      5      -   n[        n[        U5      n[        X4US5      nU(       a  [        US[        S5      5        US-
  nU S:  a5  [        U T	5      u  p[        S5      U-   n[        XVU5        US-  nU S:  a  M5  U$ )NFr   Tr  r   r  )
r"  r   floorlog10r   r   r   r   orddivmod)
r0  flagrN   rO   r   r   r   digitr   tens
            r_   r  integer_str.<locals>.impl	
  s    q5AD6C! 566$(.
4VT:Aq#c(+qj!ea~HAC5 AAA&1HC	 !e
 ra   rb   )r0  r  r  s     @r_   integer_strr  
  s     B%C( Kra   c                     S $ )Nc                 "    U R                  5       $ r   )r  r0  s    r_   rQ  integer_repr.<locals>.<lambda>"
  s
    QYY[ra   rb   r  s    r_   integer_reprr   
  s      ra   c                     S $ )Nc                     U (       a  S$ S$ )NTrueFalserb   r.  s    r_   rQ  boolean_str.<locals>.<lambda>(
  s    qV-g-ra   rb   r	  s    r_   boolean_strr  %
  s
     .-ra   getiterc                    UR                   u  nUu  nU R                  XR                  5      nU R                  [        R
                  S5      n[        R                  " X5      nXl        XVl	        U R                  (       a  U R                  R                  XU5        UR                  5       n	[        XUR                  U	5      $ r   )r   r  return_typer   r   rs   r   alloca_once_valuerq   rM   r  r   r   r   r   )
r   r   r   r   r  rM   iterobjr  indexptrr   s
             r_   getiter_unicoder  0
  s    88DRFT!!'??;G Q/D((7HM L 7-



CGcoosCCra   iternextc                 X   UR                   u  nUu  nU R                  nUR                  [        R                  5      nUR                  U[        R                  [        R                  40 5      n	U R                  X5      n
UR                  [        5      nUR                  U[        R                  40 5      nU R                  X5      nU R                  XUS9nU" XR                  45      nUR                  UR                  5      nUR                  SX5      nUR!                  U5        UR#                  U5         U
" XR                  U45      nUR%                  U5        [&        R(                  " X5      nUR+                  UUR                  5        S S S 5        g ! , (       d  f       g = f)Nr   <)r   r  r  operatorgetitemr  r   r   rs   r  rI  r  rM   r   rq   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  strlenrq   is_validgotitemnindexs                      r_   iternext_unicoder(  H
  sh    xxHVFT""E ##H$4$45D$$UU-?-?,M%')K'':L ##C(D  ););(=rBG##D2H !!'!>G g/F LL'E $$S%8H
X		"wu(>?g ((8fgmm, 
#	"	"s   :AF
F))r   r  r!  r  rg  r  r   )TrB  )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.utilsr   numba.core.pythonapir   r   r   numba._helperlibr   numba.cpython.hashingr   numba.core.unsafe.bytesr    numba.core.errorsr!   numba.cpython.unicode_supportr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   numba.cpythonrC   rG   r  rU   bitwidthr  rD  rJ   UnicodeIteratorTypern   r   r   rS  r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r  NotImplementedErrorr$  r   r3  r9  r<  rI  rE  eqrZ  nera  ltrl  gtrr  lerx  ger~  containsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r#  r8  r?  rG  rF  rQ  ri  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r   iaddr"  r)  r   r1  not_r7  rC  rL  _unicode_is_alnumr]  _always_falserb  rc  re  rl  rs  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  chrr  r  r  r  r  r  r  r  r  NEWr(  rb   ra   r_   <module>rH     s   
   ) *  K K > % & 
 ' , 1 )F F F F F F F F F> """:  zz""
 !!"A6%% A #A u((&' : u(((I > u((&' : u((*k B u((&' : %++,J; J -J;8( E!3!34 5 ""#C $C u? ?, U $ & &
 ' '
 ' '
  <   u
 
	 $ $
 % %
 % %
 uD D$ ++C C $$C C" i
((   ++L L $$
L 
L i
(( u & % %"   
#  
(++# #L 
(++ " 
(++  
(++  
(++  
(++  
(

 P(  
 3 3
 + +\ - -`& 	78	/.9	: ""F+ , ""G, - ""H- ." ""G, -" ""K0  1 F ""G, 3 - 3H ""L1  2 H   ""L11I 21Ih ""J/- 0-b ""L1= 2=@ ""G,Q% -Q%h)"X "2#$67"9 /#K0 2 
 ""H-N .Nb ""H-" ."J&R !!7 +,=e,D E !!7 +,=d,C D F %%=o%NO &'?(  
 ""L1 20  > ""F+ ,6 ""G, -6     "CJ ""H- . ""H- . ""G, -(  < ! !(      uB B " "J 
(

4! 4!x 
(,,	(--  (  4 
(,,  
(--  ""I.) /)bB !!9 -i8J/L M % &= > 
 !!9 -i8I/K L, !1"9[+-:$< =$Y/E/E/E&G H 
 ""I.	 /	 ""I. / ""I." /"J ""I. /6 ""N3 4., !!9 -g6H.I J !!; /8L0M N !!9 -g6H.I J !!; /%&( !!= 1"E*,: + +. 6 6& ""=e"DE!"=d"CD!   9+ FG 9+ FG ""G,8 -8
 ""G,8 -8    ; ; ""J/> 0>  2 ; ; ""L1B 2B
  , . .& ""G,8 -8 . .  , ""J/> 0>
 
# "   4lB  , , 
#  ""I. / ""J/# 0# 	* +6 
+! ,! 
+	*. + ,. y%++,D -D. z5445w{{%-  6%-ra   