
    xKgP_                       d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZmZ d dlmZmZ d dlmZm Z  d dl!m"Z" d d	l#m$Z$m%Z%m&Z& d d
l'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP d dlQmRZR e"dv rd dl#mSZS dZTej                  j                  ZW eej                         G d de
j:                               ZY eej                  dd        eej                  dd        eej                  dd        eej                  dd        eej                  dd        eej                         G d d e             Z[d! Z\d" Z] eej                  ej                        d#        Z` eej                        d$        Za eej                        d%        Zb eej                        d&        Zcd' Zded(        Zeed)        Zfed*        Zged+        Zhedd,       Zi ed-.      d/        Zjd0 Zked1        Zled2        Zmed3        Zn ed-.      d4        Zoe"d5v r	ed6        Zpne"dv r	ed7        Zpn eqe"      ed8        Zre"d5v r	ed9        Zsne"dv r	ed:        Zsn eqe"       ed-.      d;        Zted<        Zued=        Zv eew      d>        Zx eej                        d?        Zz eej                        d@        Z| eej                        dA        Z~ eej                        dB        Z eej                        dC        Z eej                        dD        Z eej
                        dE        ZdF ZdG ZedH        ZedI        ZedJ        ZedK        ZdL Z e ee            Z e ee            Z eej                  dM      ddN       Z eej                  dO      ddP       Z eej                  dQ      ddR       Z eej                  dS      ddT       Z eej                  dU      dV        Z eej                  dW      ddX       Z eej                  dY      dZ        Zed[        Z eej                  d\      dd]       Z eej                  d^      dd_       Z eej                  d`      dda       Z eej                  db      ddc       Zdd Z e ee9            Z e ee:            Z eej                  de      ddf       Z eej                  dg      ddh       Zdi Z  eej                  dj       ed-               eej                  dk       edl             dm Z e eeB            Z e eeA            Z eej                  dn      ddo       Zedp        Z eej                  dq      dr        Z eej                  ds      dt        Zedu        Zedv        Zdw Zdx Z eej                  dy      ddz       Z eej                  d{      dd|       Z eej                  d}      dd~       Zedd       Zed        Zed        Zed        Z ed-.      d        Zed        Z eejl                        d        Z eejp                         eejr                        d               Zed        Z eejx                        d        Z eej|                        d        Z eej                  d      dd       Zd Z  eej                  d       eeNeL              ed       Z  eej                  d       ee3e«             d Z ed       Z e eeFeGeī            Z e ee@e?eE            Z eej                  d      d        Z eej                  d      d        Z eej                  d      d        Z eej                  d      d        Z eej                  d      d        ZddZ  eej                  d       ee9               eej                  d       eeM               eej                  d       eeO               eej                  d       eeP               eej                  d       ee8d-             d Zed        Zed        Zd Z e ed-            Z e edl            Zd Z e ee0            Z e ee1            Z eej                  d      d        Z eej                  d      d        Zed        Zed        Z eej                  d      d        Zed        Zed        Z eej                  d      d        Zed        Zed        Z eej                  d      d        Zed        Zed        Z eej                  d      d        Z ee      d        Zed        ZdeTz  Zed        Z ee      d        Z eej                  d      d        Z eej                  d«      dÄ        Z eej                  d      dĄ        Z eej                  d«      dń        Z eej                  d«       eej                  d      dƄ               Z edej                        dȄ        Z edej                         eej                        dʄ               Zy)    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   
   )rD      )PY_UNICODE_WCHAR_KIND c                       e Zd Zd Zy)UnicodeModelc           	      L   dt         j                  fdt         j                  fdt         j                  fdt         j                  fdt
        fdt        j                  t         j                        fdt         j                  fg}t        j                  j                  | |||       y )Ndatalengthkindis_asciihashmeminfoparent)r   voidptrintpint32uint32r   MemInfoPointerpyobjectr   r   __init__)selfdmmfe_typememberss       Y/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/cpython/unicode.pyrZ   zUnicodeModel.__init__Q   s    U]]#uzz"U[[!&Z ,,U]];<u~~&	
 	##D#w@    N)__name__
__module____qualname__rZ    r`   r_   rK   rK   O   s    Ar`   rK   rM   _datarN   _lengthrO   _kindrP   	_is_asciirQ   _hashc                        e Zd Z fdZ xZS )UnicodeIteratorModelc                     dt        j                  t         j                        fd|j                  fg}t        t
        |   |||       y )NindexrM   )r   EphemeralPointeruintprM   superrk   rZ   )r[   r\   r]   r^   	__class__s       r_   rZ   zUnicodeIteratorModel.__init__h   sA    U33EKK@AGLL)+"D23Ir`   )ra   rb   rc   rZ   __classcell__)rq   s   @r_   rk   rk   f   s    J Jr`   rk   c           
         ddl m}m}m}m}m}m}m}m}m	}	 t        d   }
 ||| ||       ||       ||       ||            } ||
      } |       } |       } |       } |       } ||  |	|       |	|       |	|       |	|            }|t        d      |j                  }|j                  }|j                  }|dz   t        |      z  }||z  j                  |      }t        |      ||||j                  fS )ztGet string data from a python string for use at compile-time to embed
    the string data into the LLVM module.
    r   )		CFUNCTYPEc_void_pc_intc_uint	c_ssize_tc_ubyte	py_objectPOINTERbyrefextract_unicodez1cannot extract unicode data from the given string   )ctypesrt   ru   rv   rw   rx   ry   rz   r{   r|   r   
ValueErrorvalue_kind_to_byte_widthfrom_addressbytes)objrt   ru   rv   rw   rx   ry   rz   r{   r|   extract_unicode_fnprotofnrN   rO   rP   hashvrM   nbytesouts                       r_   compile_time_get_string_datar   p   s      
 ##45h	79+=wu~fowy'9;E	!	"B[F7DxHKEc5=%+uXeMD|LMM\\F::D~~Hqj/55FV
)
)$
/C:vtXu{{::r`   c                    t        |      \  }}}}}|j                  }	| j                  |	|      }
 t        j                  |      | |      }|
|_        |j                  j                  |      |_        |j                  j                  |      |_        |j                  j                  |      |_	        |j                  j                  d      |_
        |j                         S )zf
    Get string data by `compile_time_get_string_data()` and return a
    unicode_type LLVM value
    )r   moduleinsert_const_bytesr   create_struct_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 -IvtXu
..C		#	#C	3B.g))#.w@GGL^^((0GN<<$$T*GL'',,X6G <<$$R(GLr`   c                 2    t        | |||j                        S N)r   literal_value)r   r   fromtytotyvals        r_   cast_from_literalr      s    $$ 4 4 r`   c                     t        | |||      S r   )r   )r   r   r   pyvals       r_   constant_unicoder      s    $WgsEBBr`   c                    |j                   j                  |      \  }}}}}} t        j                  |       |j                  |j
                        }	||	_        ||	_        ||	_        ||	_	        ||	_
        |j                   j                  ||      |	_        ||	_        t        j                  |j
                  |j                   j                               }
t!        |	j#                         |
      S )zE
    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 ,BfdHe.g))#.qyy!))DGGLGNGLGGLgg;;GO GN""199agg.B.B.DEHw((*X>>r`   c                 x    t        j                  |       |j                  |j                  |      }|j                  j                  |j                  |j                  |j                        }|j                  j                  |       |j                  j                  j                  |j                  | |       |S )z@
    Convert a native unicode structure to a unicode string
    r   )r   r   r   r   r   string_from_kind_and_datarO   rM   rN   object_hashnrtdecref)r   r   r   r   ress        r_   box_unicode_strr      s    
 /g))#.qyy!))3OG
''
+
+gllGNN4C
 GGIIMMC-Jr`   c                       fd}|S )Nc                     |\  }}|j                  |t              j                               }|j                  |j	                  ||g            }|j                  |t        d            S N    )bitcastr   
as_pointerloadgepzext)	r   r   	signatureargsrM   idxptrchbitsizes	           r_   codegenz#make_deref_codegen.<locals>.codegen   sZ    	coodGG$4$?$?$AB\\'++cC512||B,,r`   rd   r   r   s   ` r_   make_deref_codegenr      s    - Nr`   c                     t        j                  t         j                  t         j                        }|t	        d      fS N   r   rW   rT   rU   r   	typingctxrM   offsetsigs       r_   deref_uint8r      s+    
,,u}}ejj
1C"1%%%r`   c                     t        j                  t         j                  t         j                        }|t	        d      fS N   r   r   s       r_   deref_uint16r      +    
,,u}}ejj
1C"2&&&r`   c                     t        j                  t         j                  t         j                        }|t	        d      fS r   r   r   s       r_   deref_uint32r      r   r`   c                     d }t        j                  t         j                  t         j                  t         j                  t         j                        }||fS )zmake empty string with data buffer of size alloc_bytes.

    Must set length and kind values for string after it is returned
    c           
      H   |\  }}}}t        j                  t        j                        } || |      }	|j	                  ||j                  |t        |j                  d                  }
| j                  j                  ||
      |	_
        ||	_        ||	_        ||	_        | j                  t        d      |	_        | j                  j#                  ||	j                        |	_        t        j&                  |	j(                  j                        |	_        |	j+                         S )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_   detailsz_malloc_string.<locals>.details   s    ?C<>:| 2253E3EFw0[[!(Z-5jooq-I"KL
 "++33GZH'#++J;{{//I //0C0CD  ""r`   )r   r   rV   rU   rW   )r   rO   
char_bytesrN   rP   r   r   s          r_   _malloc_stringr      s9    #* 

U[[%**ejj%,,
OC<r`   c                 x    t        |       }t        | |||      }t        ||t        j                  d             |S Nr   )r   r   _set_code_pointnprW   )rO   rN   rP   
char_widthss        r_   _empty_stringr     s5    $T*JtZ:AAvryy|,Hr`   F)_nrtc                     | j                   t        k(  rt        | j                  |      S | j                   t        k(  rt        | j                  |      S | j                   t        k(  rt        | j                  |      S yr   )rg   r   r   re   r   r   r   r   )ais     r_   _get_code_pointr     sa    ww''177A&&	
)	)AGGQ''	
)	)AGGQ'' r`   c                       fd}|S )Nc                    |\  }}}dk  r|j                  |t                    }|j                  |t              j                               }|j	                  ||j                  ||g             | j                         S r   )truncr   r   r   storer   get_dummy_value)	r   r   r   r   rM   r   r   r   r   s	           r_   r   z!make_set_codegen.<locals>.codegen0  sr    c2R<r77#34BoodGG$4$?$?$ABb'++cC512&&((r`   rd   r   s   ` r_   make_set_codegenr   /  s    ) Nr`   c                     t        j                  t         j                  t         j                  t         j                        }|t        d      fS r   r   voidrT   int64rW   r   r   rM   r   r   r   s        r_   	set_uint8r  ;  s1    
**U]]EKK
>C ###r`   c                     t        j                  t         j                  t         j                  t         j                        }|t        d      fS r   r   r  s        r_   
set_uint16r  A  1    
**U]]EKK
>C $$$r`   c                     t        j                  t         j                  t         j                  t         j                        }|t        d      fS r   r   r  s        r_   
set_uint32r	  G  r  r`   c                    | j                   t        k(  rt        | j                  ||       y | j                   t        k(  rt        | j                  ||       y | j                   t        k(  rt        | j                  ||       y t        d      )Nz4Unexpected unicode representation in _set_code_point)	rg   r   r  re   r   r  r   r	  AssertionError)r   r   r   s      r_   r   r   M  sm     	ww''!''1b!	
)	)177Ar"	
)	)177Ar"BD 	Dr`   ))rD      c                 p    | t         k(  r|S | t        k(  r|t        k(  r|S | S | t        k(  r| S t        d      )N/Unexpected unicode representation in _pick_kindr   r   r   r  kind1kind2s     r_   
_pick_kindr  a  sL    ))L++--++L AC Cr`   c                     | t         k(  s	|t         k(  rt        d      | t        k(  r|S | t        k(  r|t        k(  r|S | S | t        k(  r| S t        d      )N!PY_UNICODE_WCHAR_KIND unsupportedr  )rH   r  r   r   r   r  s     r_   r  r  p  si    **e7L.L !DEE))L++--++L AC Cr`   c                 j    | dk(  r|dk(  rt        j                  d      S t        j                  d      S Nr~   r   )r   rW   )	is_ascii1	is_ascii2s     r_   _pick_asciir    s+    A~)q.||A<<?r`   c                 T    | t         k(  ry| t        k(  ry| t        k(  ryt        d      )Nr~         'Unexpected unicode encoding encounteredr  rO   s    r_   r   r     s2    ((**** !JKKr`   c                 |    | t         k(  ry| t        k(  ry| t        k(  ry| t        k(  rt	        d      t	        d      )Nr~   r  r  r  r  )r   r   r   rH   r  r  s    r_   r   r     sG    ((****** !DEE !JKKr`   c                     |dk(  ry||z   | j                   kD  ry||z   |j                   kD  ryt        |      D ].  }t        | ||z         }t        |||z         }||k  r y||kD  s. y y)Nr   r   r~   )rf   ranger   )r   a_offsetbb_offsetnr   a_chrb_chrs           r_   _cmp_regionr)    sy    Av	A			!	A			!1X8a<08a<05=U]  r`   c                 b    | dk  rt         S | dk  rt        S d}| |kD  rd}t        |      t        S )zK
    Compute the minimum unicode kind needed to hold a given codepoint
       i   rI   z;Invalid codepoint. Found value greater than Unicode maximum)r   r   r   r   )cpMAX_UNICODEmsgs      r_   _codepoint_to_kindr/    sB    
 
Cx$$	e$$ OCS/!$$r`   c                     | dk  S )z;
    Returns true if a codepoint is in the ASCII range
       rd   )r   s    r_   _codepoint_is_asciir2    s    
 8Or`   c                 B    t        | t        j                        rd }|S y )Nc                     | j                   S r   )rf   r   s    r_   len_implzunicode_len.<locals>.len_impl  s    99r`   
isinstancer   UnicodeType)r   r6  s     r_   unicode_lenr:    s!    !U&&'	 (r`   c                    | j                   r|j                   sy t        | t        j                        r| j                  }n| }t        |t        j                        r|j                  }n|}t        j
                  t        j                  t        j                  f}t        ||      }t        ||      }|r|rd }|S ||z  rd }|S y )Nc           	          | d u }|d u }|s|r|r|ryyt        |       } t        |      }t        |       t        |      k7  ryt        | d|dt        |             dk(  S )NTFr   )strlenr)  )r   r$  a_noneb_nones       r_   eq_implzunicode_eq.<locals>.eq_impl  se    $YF$YFf AAAA1vQq!Q3q62a77r`   c                      yNFrd   r   r$  s     r_   rA  zunicode_eq.<locals>.eq_impl  s    r`   )is_internalr8  r   Optionalr   r9  StringLiteralUnicodeCharSeq)r   r$  check_acheck_baccept	a_unicode	b_unicoderA  s           r_   
unicode_eqrN    s    MMamm!U^^$&&!U^^$&&!4!4e6J6JKF7F+I7F+IY	8 	Y			 
r`   c                     | j                   r|j                   sy t        j                  t        j                  t        j                  f}t        | |      }t        ||      }|r|rd }|S ||z  rd }|S y )Nc                     | |k(   S r   rd   rD  s     r_   ne_implzunicode_ne.<locals>.ne_impl  s    Q<r`   c                      y)NTrd   rD  s     r_   rA  zunicode_ne.<locals>.eq_impl  s    r`   )rE  r   r9  rG  rH  r8  )r   r$  rK  rL  rM  rQ  rA  s          r_   
unicode_nerS    sn    MMamm!4!4e6J6JKF1f%I1f%IY	 	Y			 
r`   c                     t        | t        j                  t        j                  f      }t        |t        j                  t        j                  f      }|r|rd }|S y y )Nc                     t        t        |       t        |            }t        | d|d|      }|dk(  ry|dk(  rt        |       t        |      k  S y)Nr   r   TFminr>  r)  r   r$  minleneqcodes       r_   lt_implzunicode_lt.<locals>.lt_impl  sN    QQ(F Aq!V4F|11vA&r`   r8  r   r9  rG  )r   r$  rL  rM  r[  s        r_   
unicode_ltr]    T    1u00%2E2EFGI1u00%2E2EFGIY	  yr`   c                     t        | t        j                  t        j                  f      }t        |t        j                  t        j                  f      }|r|rd }|S y y )Nc                     t        t        |       t        |            }t        | d|d|      }|dk(  ry|dk(  rt        |       t        |      kD  S y)Nr   r~   TFrV  rX  s       r_   gt_implzunicode_gt.<locals>.gt_impl/  sN    QQ(F Aq!V4F{11vA&r`   r\  )r   r$  rL  rM  ra  s        r_   
unicode_gtrb  *  r^  r`   c                     t        | t        j                  t        j                  f      }t        |t        j                  t        j                  f      }|r|rd }|S y y )Nc                     | |kD   S r   rd   rD  s     r_   le_implzunicode_le.<locals>.le_impl?      A;r`   r\  )r   r$  rL  rM  re  s        r_   
unicode_lerg  :  R    1u00%2E2EFGI1u00%2E2EFGIY	 yr`   c                     t        | t        j                  t        j                  f      }t        |t        j                  t        j                  f      }|r|rd }|S y y )Nc                     | |k   S r   rd   rD  s     r_   ge_implzunicode_ge.<locals>.ge_implI  rf  r`   r\  )r   r$  rL  rM  rk  s        r_   
unicode_gerl  D  rh  r`   c                 x    t        | t        j                        r t        |t        j                        rd }|S y y )Nc                      t        | |      dkD  S Nr   )_findrD  s     r_   contains_implz'unicode_contains.<locals>.contains_implQ  s    A;##r`   r7  )r   r$  rq  s      r_   unicode_containsrr  N  s7    !U&&'Jq%:K:K,L	$ 	 -M'r`   c                 8   | }t        | t        j                        r| j                  }n&t        | t        j                        r| j
                  }t        j                  t        j                  f}|)t        ||      st        dj                  |||             yy)zCheck object belongs to one of specific types
    ty: type
        Type of the object
    name: str
        Name of the object
    N"{}" must be {}, not {})
r8  r   Omittedr   rF  r   IntegerNoneTyper!   format)tynamethetyaccepteds       r_   unicode_idx_check_typer}  W  s{     E"emm$	B	'u~~.HE8!<3::42NOO "=r`   c                     t        | t        j                        s,dj                  |t        j                  |       }t	        |      y)z$Check object belongs to unicode typert  N)r8  r   r9  rx  r!   )ry  rz  r.  s      r_   unicode_sub_check_typer  k  s<    b%++,'..tU5F5FK# -r`   c                 *    | d|t         dz
  z  z  z  } | S Nr~   _BLOOM_WIDTHmaskr   s     r_   
_bloom_addr  t  s     Q2)*+,DKr`   c                 &    | d|t         dz
  z  z  z  S r  r  r  s     r_   _bloom_checkr  z  s    1|a/0122r`   c                 n   t        |      }|dk(  r|S |dz
  x}}t        ||      }t        j                  d      }t	        ||      }	t        |      D ](  }
t        ||
      }t	        |	|      }	||k(  s!||
z
  dz
  }* |}
|
||z
  k  rt        | ||
z         }||k(  rgd}||k  r,t        | |
|z         }t        ||      }||k7  rn|dz  }||k  r,||k(  r|
S t        | ||
z   dz         }t        |	|      dk(  r|
|z  }
n,|
|z  }
n&t        | ||
z   dz         }t        |	|      dk(  r|
|z  }
|
dz  }
|
||z
  k  ry)zLeft finder.r   r~   r   )r>  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    s~    	FAAva%C%65)D::a=DdD!D5\VQ'$#:!)a-C	  	A
sQw,T519-:Ae)-dAE:+FA6	)+Q e) Ez uqy1}5BD"%*QS uqy1}5BD"%*Q	Q/ sQw,2 r`   c                 <   t        |      }|dk(  r|S |dz
  x}}t        |d      }t        d|      }|}	|	dkD  r-t        ||	      }
t        ||
      }|
|k(  r|	dz
  }|	dz  }	|	dkD  r-||z
  }	|	|k\  rt        | |	      }
|
|k(  ri|}|dkD  r,t        | |	|z         }t        ||      }||k7  rn|dz  }|dkD  r,|dk(  r|	S t        | |	dz
        }
|	|kD  rt        ||
      dk(  r|	|z  }	n.|	|z  }	n(t        | |	dz
        }
|	|kD  rt        ||
      dk(  r|	|z  }	|	dz  }	|	|k\  ry)zRight finder.r   r~   r   )r>  r   r  r  )rM   r  r  r  r  skipr  mfirstr  r   r   r  r  r  s                 r_   _default_rfindr    s{    	FAAv
q5D5VQ'Fa DA
a%VQ'$#<q5D	Q a% 	aA
u*T1%<Aa%-dAE:+FA6	)+Q a% Av q1u-B5y\$3q8QT	 !q1u-B5y\$3q8Q	Q3 u*6 r`   c                      d fd	}|S )z%Generate finder either left or right.c                     t        |       }t        |      }|d}||}t        |||      \  }}||z
  |k  ry | |||      S )Nr   r   )r>  _adjust_indices)rM   r  r  r  rN   
sub_length	find_funcs         r_   implzgenerate_finder.<locals>.impl  s[    T[
=E;C$VUC8
s;#vuc22r`   NNrd   )r  r  s   ` r_   generate_finderr    s    3 Kr`   findc                     t        |t        j                        rdd}|S t        |d       t        |d       t	        |d       t
        S )zImplements str.find()c                 6    | j                  t        |            S r   )r  r=  rM   r  r  r  s       r_   	find_implzunicode_find.<locals>.find_impl  s    99S[))r`   r  r  r  r  )r8  r   rH  r}  r  rp  )rM   r  r  r  r  s        r_   unicode_findr    sB     &%../	*5'*3&68,Lr`   rfindc                     t        |t        j                        rdd}|S t        |d       t        |d       t	        |d       t
        S )zImplements str.rfind()c                 6    | j                  t        |            S r   )r  r=  r  s       r_   
rfind_implz!unicode_rfind.<locals>.rfind_impl
  s    ::c&k**r`   r  r  r  r  )r8  r   rH  r}  r  _rfind)rM   r  r  r  r  s        r_   unicode_rfindr    sB     &%../	+5'*3&68,Mr`   rindexc                 V    t        |d       t        |d       t        |d       dd}|S )zImplements str.rindex()r  r  subc                 L    | j                  |||      }|dk  rt        d      |S Nr   zsubstring not found)r  r   r   r  r  r  results        r_   rindex_implz#unicode_rindex.<locals>.rindex_impl  s,    eS)A:233r`   r  r}  r  )r   r  r  r  r  s        r_   unicode_rindexr    s/     5'*3&3& r`   rm   c                 V    t        |d       t        |d       t        |d       dd}|S )zImplements str.index()r  r  r  c                 L    | j                  |||      }|dk  rt        d      |S r  )r  r   r  s        r_   
index_implz!unicode_index.<locals>.index_impl/  s,    UC(A:233r`   r  r  )r   r  r  r  r  s        r_   unicode_indexr  (  s/     5'*3&3& r`   	partitionc                 B   |}t        |t        j                        r|j                  }n&t        |t        j                        r|j
                  }t        j                  t        j                  f}|*t        ||      sdj                  d||      }t        |      d }|S )zImplements str.partition()rt  sepc                 L   t        |      }t        | j                  d| j                        }t	        |      }| j                  |j                  k  st	        |       |k  r| ||fS |dk(  rt        d      | j                  |      }|dk  r| ||fS | d| || ||z   t	        |        fS Nr   empty separator)r=  r   rg   rh   r>  r   r  rM   r  	empty_str
sep_lengthposs        r_   r  zunicode_partition.<locals>.implJ  s    #h!$**a@	X
::		!SY%;I--?.//iin7I--Ac{CcJ&6s4y!AAAr`   
r8  r   ru  r   rF  r   r9  rH  rx  r!   rM   r  r{  r|  r.  r  s         r_   unicode_partitionr  :       E#u}}%			C	(!!5#7#78HE8!<'..uhD#B" Kr`   countc                     t        |       t        |       t        |t        j                        rdd}|S d}t	        |j                  t        |                  )Nc                    d}t        |       }t        |      }t        ||d      }t        |||      }||z
  dk  s||kD  ry| || } t        |       }d|}}|dk(  r|dz   S ||z   |k  r$| |||z    |k(  r|dz  }||z  }n|dz  }||z   |k  r$|S Nr   r~   )r>  _normalize_slice_idx_count)srcr  r  r  r  src_lensub_lens          r_   
count_implz!unicode_count.<locals>.count_imple  s    E#hG#hG.ugqAE,S'7CCU{Q%'/ec"C#hGG3E!|{"7?g-uuw/36QJEW$EQJE 7?g- Lr`   z+The substring must be a UnicodeType, not {}r  )_count_args_types_checkr8  r   r9  r!   rx  r   )r  r  r  r  r  	error_msgs         r_   unicode_countr  ^  sP     E"C #u(()	0 =I
i&&tCy1
22r`   
rpartitionc                 B   |}t        |t        j                        r|j                  }n&t        |t        j                        r|j
                  }t        j                  t        j                  f}|*t        ||      sdj                  d||      }t        |      d }|S )zImplements str.rpartition()rt  r  c                 L   t        |      }t        | j                  d| j                        }t	        |      }| j                  |j                  k  st	        |       |k  r||| fS |dk(  rt        d      | j                  |      }|dk  r||| fS | d| || ||z   t	        |        fS r  )r=  r   rg   rh   r>  r   r  r  s        r_   r  z unicode_rpartition.<locals>.impl  s    #h!$**a@	X
::		!SY%;i--?.//jjo7i--Ac{CcJ&6s4y!AAAr`   r  r  s         r_   unicode_rpartitionr    r  r`   c                 \    || kD  r| }|dk  r|| z  }|dk  rd}|dk  r|| z  }|dk  rd}||fS r   rd   )rN   r  r  s      r_   r  r    sP    
V|
Qwv7Cqy19E#:r`   
startswithc                    t        |      s%t        |t        j                        st	        d      t        |      s%t        |t        j                        st	        d      t        |t        j
                        r*t        |j                  t        j                        rdd}|S t        |t        j                        rdd}|S t        |t        j                        rdd}|S t	        d      )Nz:When specified, the arg 'start' must be an Integer or Nonez8When specified, the arg 'end' must be an Integer or Nonec                 <    |D ]  }| j                  |||      s y yNTF)r  )r   prefixr  r  items        r_   startswith_tuple_implz1unicode_startswith.<locals>.startswith_tuple_impl  s$    <<eS1  r`   c                 :    | j                  t        |      ||      S r   )r  r=  )r   r  r  r  s       r_   startswith_char_seq_implz4unicode_startswith.<locals>.startswith_char_seq_impl  s    <<FUC88r`   c                     t        |       t        |      }}|d}||}t        |||      \  }}||z
  |k  ry|dk(  ry| || }t        |d|d|      dk(  S Nr   FTr>  r  r)  )r   r  r  r  rN   prefix_lengths_slices          r_   startswith_unicode_implz3unicode_startswith.<locals>.startswith_unicode_impl  sv    $'FCKMF}{(<JE3U{]*!clGw61mDIIr`   z9The arg 'prefix' should be a string or a tuple of stringsr  )	r   r8  r   rv  r!   UniTupledtyper9  rH  )r   r  r  r  r  r  r  s          r_   unicode_startswithr    s    uj&FHJ 	J sJsEMM$BFH 	H &%..)v||U%6%67	 %$	FE00	1	9 ('	FE--	.	J$ '& GI 	Ir`   endswithc                    |Dt        |t        j                  t        j                  t        j                  f      st        d      |Dt        |t        j                  t        j                  t        j                  f      st        d      t        |t        j                  t        j                  f      rdd}|S t        |t        j                        rdd}|S t        |t        j                        rdd}|S y )Nz!The arg must be a Integer or Nonec                 @    |D ]  }| j                  |||      du s y yr  )r  )r   r  r  r  r  s        r_   endswith_implz'unicode_endswith.<locals>.endswith_impl  s)    ::dE3/47  r`   c                     t        |       }t        |      }|d}||}t        |||      \  }}||z
  |k  ry|dk(  ry| || } t        |       |z
  }t        | ||d|      dk(  S r  r  )r   r  r  r  rN   r  r   s          r_   r  z'unicode_endswith.<locals>.endswith_impl  s    VFVJ}{(<JE3U{Z'Q%AVj(Fq&&!Z@AEEr`   c                 :    | j                  t        |      ||      S r   )r  r=  )r   r  r  r  s       r_   r  z'unicode_endswith.<locals>.endswith_impl  s    ::c&k5#66r`   r  )
r8  r   ru  rv  rw  r!   Tupler  r9  rH  )r   r  r  r  r  s        r_   unicode_endswithr    s    MZ05050@ A =>>K:cEMM,1MM,1NN,< = =>>&5;;78	 &%++,	F& &%../	7 0r`   
expandtabsc                 *   |}t        |t        j                        r|j                  }n&t        |t        j                        r|j
                  }t        j                  t        f}|'t        ||      st        dj                  ||            dd}|S )zImplements str.expandtabs()z"tabsize" must be {}, not {}c                    t        |       }dx}}d}t        |      D ]  }t        | |      }|t        k(  r<d}|dkD  s |||z  z
  }|t        j
                  |z
  kD  rt        d      ||z  }||z  }T|t        j
                  dz
  kD  rt        d      |dz  }|dz  }|t        t        fv sd} |s| S t        | j                  || j                        }	dx}}t        |      D ]}  }t        | |      }|t        k(  r>|dkD  s|||z  z
  }||z  }t        |||z         D ]  }
t        |	|
t                ||z  }V|dz  }t        |	||       |dz  }|t        t        fv s|d} |	S )Nr   FTznew string is too longr~   )r>  r"  r   r:   sysmaxsizeOverflowErrorr;   r<   r   rg   rh   r   r=   )rM   tabsizerN   r  line_posfoundr   
code_pointincrr   r   s              r_   expandtabs_implz+unicode_expandtabs.<locals>.expandtabs_impl/  s   THvA(q1JW$Q;"h&89D3;;--+,DEE$HIAs{{Q&'(@AAAQ,0C!DD H# & KDJJ4>>:HvA(q1JW$Q;"h&89D$H$QD1'S)<  2IAAQ
3Q,0C!DD H   
r`   r   )
r8  r   ru  r   rF  r   rv  intr!   rx  )rM   r  r{  r|  r   s        r_   unicode_expandtabsr    s     E'5==)	GU^^	,s#HE8!<*11(GDF 	F,\ r`   splitc                 `   |dk(  s:t        |t        j                  t        j                  t        j                  f      sy t        |t        j
                        rdd}|S t        |t        j                        rdd}|S |'t        |t        j                        st        |dd      dd}|S y )Nr   c                 :    | j                  t        |      |      S )N)maxsplit)r  r=  )r   r  r  s      r_   
split_implz!unicode_split.<locals>.split_implh  s    773s8h777r`   c                    t        |       }t        |      }|dk(  rt        d      g }d}d}|dk(  rK|dk(  rFt        |d      }t        |      D ]+  }t        | |      |k(  s|j	                  | ||        |dz   }- nZd}	||k  rS|dk(  s|	|k  rIt        | ||d|      dk(  r!|j	                  | ||        ||z  }|}|	dz  }	n|dz  }||k  r|dk(  rC|	|k  rI||k  r|j	                  | |d         |S )Nr   r  r~   r   )r>  r   r   r"  appendr)  )
r   r  r  a_lensep_lenpartsr  r   sep_code_pointsplit_counts
             r_   r  z!unicode_split.<locals>.split_implm  s"   FE#hG!| !233EDC!|B!0a!8 <C&q#..@QtC[1"Qw (
  Ekx2~'2X'="1c37;q@QtC[1w"#q(q Ekx2~'2X'= u}QtuX&Lr`   r   Fc                    t        |       }g }d}d}d}d}t        |      D ]N  }t        | |      }	t        |	      }
|r|
r|}d}$|
s'|j	                  | ||        d}|dz  }|dk7  sH||k(  sN n ||k  r|s|j	                  | |d         |S )Nr   TFr~   r   )r>  r"  r   r+   r
  )r   r  r  r  r  r  r   r  in_whitespace_blockr  is_whitespaces              r_   split_whitespace_implz,unicode_split.<locals>.split_whitespace_impl  s    FEEDCK"&U|,Q4
 2: >&$".3+(QtC[1.2+#q(#r>kX.E!# $& u}%8QtuX&Lr`   ro  )	r8  r   ru  rv  IntegerLiteralrH  r9  rw  getattr)r   r  r  r  r  s        r_   unicode_splitr  `  s    Nx%--"'"6"6"8 9#u++,	8#u(()!	D 	
37C%(0	@ %$C 1r`   c                      d fd	}|S )z@Generate whitespace rsplit func based on either ascii or unicodec                    |dk  rt         j                  }g }t        |       dz
  }|dkD  r||dk\  r t        | |      } |      sn|dz  }|dk\  r |dk  rnQ|}|dz  }|dk\  r t        | |      } |      rn|dz  }|dk\  r |j	                  | |dz   |dz           |dz  }|dkD  r||dk\  rA|dk\  r t        | |      } |      sn|dz  }|dk\  r |dk\  r|j	                  | d|dz           |d d d   S Nr   r~   r   )r  r  r>  r   r
  )rM   r  r  r  r   r  r  isspace_funcs          r_   rsplit_whitespace_implz?generate_rsplit_whitespace_impl.<locals>.rsplit_whitespace_impl  s=   a<{{HIMlq&,T15
#J/Q	 q&
 1uAFAq&,T15

+Q	 q&
 MM$q1uQU+,MH! l$ 6 q&,T15
#J/Q	 q&
 Avd1QUm,dd|r`   ro  rd   )r  r  s   ` r_   generate_rsplit_whitespace_implr    s    $L "!r`   rsplitc                 "   d } ||dt         j                  t         j                  t         j                  f        ||dt         j                  t
        f       |*t        |t         j                  t         j                  f      rdd}|S dd}|S )zImplements str.unicode_rsplit()c                     | }t        | t        j                        r| j                  }n&t        | t        j                        r| j
                  }|)t        ||      st        dj                  |||             yy)z.Check object belongs to one of specified typesNrt  )r8  r   ru  r   rF  r   r!   rx  )ry  rz  r|  r{  s       r_   _unicode_rsplit_check_typez2unicode_rsplit.<locals>._unicode_rsplit_check_type  sn    b%--(HHEENN+GGEZx%@)00xDF F &Ar`   r  r  c                 N    | j                   rt        | ||      S t        | ||      S r   )rh   ascii_rsplit_whitespace_implunicode_rsplit_whitespace_impl)rM   r  r  s      r_   r  z.unicode_rsplit.<locals>.rsplit_whitespace_impl  s'    ~~3D#xHH1$XFFr`   c                    t        |      }| j                  |j                  k  st        |       t        |      k  r| gS d }|dk  rt        j                  }t        |      }|dk(  rt        d      |dk(  r
 || ||      S g }t        |       }|dkD  r>| j                  |d|      }|dk  rn$|j                  | ||z   |        |}|dz  }|dkD  r>|j                  | d|        |d d d   S )Nc                 (   g }t        |d      }t        |       dz
  x}}|dk\  rL|dkD  rGt        | |      }||k(  r&|j                  | |dz   |dz           |dz
  x}}|dz  }|dz  }|dk\  r|dkD  rG|dk\  r|j                  | d|dz           |d d d   S r  )r   r>  r
  )rM   r   r  r  ch_code_pointr   r  data_code_points           r_   _rsplit_charz9unicode_rsplit.<locals>.rsplit_impl.<locals>._rsplit_char  s    F+B2MIM!Aq&X\"1$":"m3MM$q1uq1u"56EMAMHQ q&X\ Bwd1q1uo.$B$<r`   r   r  r~   )r  r  r   )r=  rg   r>  r  r  r   r  r
  )rM   r  r  r(  r  r  r  r  s           r_   rsplit_implz#unicode_rsplit.<locals>.rsplit_impl  s    #h::		!SYS%96M	 " a<{{HX
?.//?c844Il**Sq*1CQwMM$sZ/23AMH l 	d1Qi dd|r`   ro  )r   r9  rH  rw  rv  r  r8  ru  )rM   r  r  r   r  r)  s         r_   unicode_rsplitr*    s    F sEE,=,=,1,@,@,1NN,< = xemmS5IJ
{ju~~u}}&EF	G
 &%-^ r`   centerc                    t        |t        j                        st        d      t        |t        j                        rdd}|S |dk(  s5t        |t        j
                  t        j                  f      st        d      dd}|S )NThe width must be an Integer c                 8    | j                  |t        |            S r   )r+  r=  stringwidthfillchars      r_   center_implz#unicode_center.<locals>.center_impl@  s    ==H66r`   "The fillchar must be a UnicodeTypec                     t        |       }t        |      }|dk7  rt        d      ||k  r| S ||z
  }|dz  ||z  dz  z   }||z
  }||z  }||k(  r|| z   |z   S || z   ||z  z   S )Nr~   5The fill character must be exactly one character longr  r>  r   )	r1  r2  r3  str_lenfillchar_len	allmarginlmarginrmarginl_strings	            r_   r4  z#unicode_center.<locals>.center_implH  s    f+8}1 . / / GMGO	>i%&7!&;<g%g%gf$x//f$7(:;;r`   r.  r8  r   rv  r!   rH  ru  r9  )r1  r2  r3  r4  s       r_   unicode_centerrA  :  sp    eU]]+899(E001	7Ox%--1B1B!CD>??<* r`   c                      d fd	}|S )Nc                 "   t        |t        j                        st        d      t        |t        j                        rrdd}|S dd}|S |dk(  s5t        |t        j
                  t        j                  f      st        d      dfd	}|S )Nr-  r.  c                 8    | j                  |t        |            S r   )ljustr=  r0  s      r_   
ljust_implz<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.ljust_implg      !<<s8}==r`   c                 8    | j                  |t        |            S r   )rjustr=  r0  s      r_   
rjust_implz<gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.rjust_implk  rG  r`   r5  c                     t        |       }t        |      }|dk7  rt        d      ||k  r| S |||z
  z  }r| |z   S || z   S )Nr~   r7  r8  )r1  r2  r3  r9  r:  newstrSTRING_FIRSTs         r_   r  z6gen_unicode_Xjust.<locals>.unicode_Xjust.<locals>.impls  sc    &kGx=Lq   "2 3 3 %'/2F&&r`   r?  r@  )r1  r2  r3  rF  rJ  r  rM  s         r_   unicode_Xjustz(gen_unicode_Xjust.<locals>.unicode_Xjusta  s~    %/<==h 4 45>!!>!!C8emmU5F5F%GHBCC	'" r`   r?  rd   )rM  rN  s   ` r_   gen_unicode_XjustrO  `  s    #J r`   rI  rE  Tc                       fd}|S )zDGenerate splitlines performer based on ascii or unicode line breaks.c                 R   t        |       }g }dx}}||k  r||k  r t        | |      } 
|      rn|dz  }||k  r |}||k  rG|dz   |k  r6t        | |      }t        | |dz         }	t        |      rt        |	      r|dz  }|dz  }|r|}|j	                  | ||        |}||k  r|S r  )r>  r   r6   r5   r
  )rM   keependsrN   r  r   r  r  eolcur_cpnext_cpis_line_break_funcs             r_   r  z&generate_splitlines_func.<locals>.impl  s    T	A&jf*,T15
%j1Q	 f* C6zq56>,T15F-dAE:G+F3w8OQQCMM$q+&A+ &j. r`   rd   )rV  r  s   ` r_   generate_splitlines_funcrW    s    < Kr`   
splitlinesc                 T   |}t        |t        j                        r|j                  }n&t        |t        j                        r|j
                  }t        j                  t        t        j                  t        f}|(t        ||      st        dj                  d||            dd}|S )zImplements str.splitlines()rt  rR  c                 J    | j                   rt        | |      S t        | |      S r   )rh   _ascii_splitlines_unicode_splitlines)rM   rR  s     r_   splitlines_implz+unicode_splitlines.<locals>.splitlines_impl  s#    >>$T844"422r`   F)r8  r   ru  r   rF  r   rv  r  Booleanboolr!   rx  )rM   rR  r{  r|  r]  s        r_   unicode_splitlinesra    s     E(EMM*	Henn	-sEMM48HE8!<%,,Z8LN 	N3 r`   c           
      
   t        |      }|dk(  ryt        |       }|dz
  |z  }| j                  }| j                  }|D ]<  }|t        |      z  }t        ||j                        }t	        ||j                        }> t        |||      }|d   }	t        |d|	dt        |	             t        |	      }
t        d|      D ]A  }t        ||
| d|       |
|z  }
||   }	t        ||
|	dt        |	             |
t        |	      z  }
C |S )Nr    r~   )r>  rg   rh   r  r  r   _strncpyr"  )r  r  	parts_lenr  rN   rO   rP   pr  part
dst_offsetr   s               r_   	join_listri    s   E
IA~ #hG!mw&F99D}}H#a&$(x5 
 42F 8DVQaT+TJQ	"S!W5g
SzT1c$i8c$i
 # Mr`   joinc                 Z   t        |t        j                        rSt        |j                  t        j                        rd }|S t        |j                  t        j
                        rd }|S y t        |t        j                        rd }|S t        |t        j                        rd }|S y )Nc                     t        | |      S r   )ri  )r  r  s     r_   join_list_implz$unicode_join.<locals>.join_list_impl  s     e,,r`   c                 T    |D cg c]  }t        |       }}t        | |      S c c}w r   )r=  ri  )r  r  rf  _partss       r_   rm  z$unicode_join.<locals>.join_list_impl  s,    */0%Q#a&%0 f-- 1s   %c                 L    |D cg c]  }| }}| j                  |      S c c}w r   )rj  )r  r  rf  
parts_lists       r_   join_iter_implz$unicode_join.<locals>.join_iter_impl  s*    %*+U!UJ+88J'' ,s   	!c                 l    t        t        |            D cg c]  }||   	 }}t        | |      S c c}w r   )r"  r>  ri  )r  r  r   rq  s       r_   join_str_implz#unicode_join.<locals>.join_str_impl  s7    ,1#e*,=>,=q%(,=J>S*-- ?s   1)r8  r   Listr  r9  rH  IterableType)r  r  rm  rr  rt  s        r_   unicode_joinrw    s     %$ekk5#4#45-!!U%9%9:. "!	E5--	.	( 	E5,,	-	.  
.r`   zfillc                 V    t        |t        j                        st        d      d }|S )Nz<width> must be an Integerc                 x    t        |       }||k  r| S |r| d   nd}d||z
  z  }|dv r||z   | dd  z   }|S || z   }|S )Nr   rc  0)+-r~   r>  )r1  r2  r9  
first_charpaddingrL  s         r_   
zfill_implz!unicode_zfill.<locals>.zfill_impl  sh    f+GM")VAYr
)#')F12J6F  v%Fr`   )r8  r   rv  r!   )r1  r2  r  s      r_   unicode_zfillr    s)    eU]]+677" r`   c                     t        |       }d}|t        |      D ]  }| |   |vs|c S  |S t        |      D ]  }t        | |         r|c S  |S r   r>  r"  r+   r1  charsr9  r   s       r_   unicode_strip_left_boundr  '  sd    &kG	AwAay%   N	 wA%fQi0   Nr`   c                     t        |       }d}|&t        |dz
  dd      D ]  }| |   |vs|dz  } |S  |S t        |dz
  dd      D ]  }t        | |         r|dz  } |S  |S r  r  r  s       r_   unicode_strip_right_boundr  8  s    &kG	Aw{B+Aay%Q H , H w{B+A%fQi0QH ,
 Hr`   c                     t        | t        j                        r| j                  } | Et        | t        j                  t        j
                  t        j                  f      st        d      y y )Nz%The arg must be a UnicodeType or None)r8  r   rF  r   ru  r9  rw  r!   )r  s    r_   unicode_strip_types_checkr  J  sZ    %(

MZ050A0A050@ A ABBAMr`   c                     t        | t        j                        r| j                  } | Et        | t        j                  t        j
                  t        j                  f      st        d      y y )Nz,The slice indices must be an Integer or None)r8  r   rF  r   ru  rv  rw  r!   )args    r_   r  r  S  sU    #u~~&hhK:cEMM,1MM,1NN,< = HII=Kr`   lstripc                 d    t        |t        j                        rdd}|S t        |       dd}|S )Nc                 6    | j                  t        |            S r   )r  r=  r1  r  s     r_   lstrip_implz#unicode_lstrip.<locals>.lstrip_impl`      ==U,,r`   c                      | t        | |      d  S r   )r  r  s     r_   r  z#unicode_lstrip.<locals>.lstrip_implf  s    .vu=>??r`   r   r8  r   rH  r  )r1  r  r  s      r_   unicode_lstripr  \  s3     %--.	-e$@r`   rstripc                 d    t        |t        j                        rdd}|S t        |       dd}|S )Nc                 6    | j                  t        |            S r   )r  r=  r  s     r_   rstrip_implz#unicode_rstrip.<locals>.rstrip_implo  r  r`   c                      | d t        | |       S r   )r  r  s     r_   r  z#unicode_rstrip.<locals>.rstrip_implu  s    ?0?@@r`   r   r  )r1  r  r  s      r_   unicode_rstripr  k  s3     %--.	-e$Ar`   stripc                 d    t        |t        j                        rdd}|S t        |       dd}|S )Nc                 6    | j                  t        |            S r   )r  r=  r  s     r_   
strip_implz!unicode_strip.<locals>.strip_impl~  s    <<E
++r`   c                 <    t        | |      }t        | |      }| || S r   )r  r  )r1  r  lbrbs       r_   r  z!unicode_strip.<locals>.strip_impl  s&    %fe4&vu5b}r`   r   r  )r1  r  r  s      r_   unicode_stripr  z  s4     %--.	,e$ r`   c                 R    | |ry|S | dk  r| |z  } | dk  s| |k\  rt        d      | S )a%  
    Parameters
    ----------
    idx : int or None
        the index
    length : int
        the string length
    is_start : bool; optional with defaults to True
        Is it the *start* or the *stop* of the slice?

    Returns
    -------
    norm_idx : int
        normalized index
    r   zstring index out of range)
IndexError)r   rN   is_starts      r_   normalize_str_idxr    sB    " {M	qv
Qw#-455Jr`   c                 @    | |S | | cxk  r	|k  r| |z  S  | dk  rdS | S )a%  
    Used for unicode_count

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

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

    If arg > slice_len, returns arg (in this case count must
    return 0 if it is start index)
    r   rd   )r  	slice_lendefaults      r_   r  r    s=     {zS$9$Y %a1 S r`   c                 "     |||      }d }||fS )zFix slice object.
    c                     |j                   \  }}|\  }}| j                  |||      }t        j                  | |||       t        j                  |||       |j                         S r   )r   make_helperrC   guard_invalid_slice	fix_slicer   )	r   r   r   r   	slicetype
lengthtypesliceobjrN   slices	            r_   r   z!_normalize_slice.<locals>.codegen  sa    "%((J!6##GYA##GWiG'5&1  r`   rd   )r   r  rN   r   r   s        r_   _normalize_slicer    s!     8V
$C! <r`   c                 :    t        j                  |      }d }||fS )z2Compute the span from the given slice object.
    c                 |    |j                   \  }|\  }| j                  |||      }t        j                  ||      }|S r   )r   r  rC   get_slice_length)r   r   r   r   r  r  r  result_sizes           r_   r   z_slice_span.<locals>.codegen  s@    hh
##GYA..w>r`   )r   rU   )r   r  r   r   s       r_   _slice_spanr    s#     **X
C <r`   c           
      $   |j                   | j                   k(  rJt        |j                         }||z  }||z  }||z  }t        | j                  ||j                  ||d       y t	        |      D ]  }	t        | ||	z   t        |||	z                ! y )Nr~   )align)rg   r   r    re   r"  r   r   )
dstrh  r  
src_offsetr&  
byte_widthsrc_byte_offsetdst_byte_offsetr   r   s
             r_   rd  rd    s    
yyCII(3
$z1$z1Zcii#))%vQ	8 qACa+Ca@B r`   c                     |t         j                  k(  sJ d }t        j                  t         j                  t         j                  t         j                        }||fS )z_Create a slice of a unicode string using a view of its data to avoid
    extra allocation.
    c                    |\  }}} t        j                  t        j                        | ||      } t        j                  t        j                        | |      }|j                  |_        |j
                  |_        |j                  |_        ||_        | j                  t        d      |_
        | j                  j                  t              }	|	j                  | j                  t        j                  fi       }
| j!                  |	|
      } |||j
                  f      }|j#                  ||      }|j%                  |j&                  |g      |_        t        j(                  |j*                  j,                        |_        | j.                  r*| j0                  j3                  ||j4                  d   |       |j7                         S )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   z$_get_str_slice_view.<locals>.codegen  st   !UF ,,  '= 7..  '2!>>"OO ,,Z<''::;NO%%""U[[NB8&&vv6Wv{{n5
UJ/FKK&:!001E1EFKKwS9!!##r`   )r   r   rU   )r   src_tstart_tlength_tr   r   s         r_   _get_str_slice_viewr    sK    
 E&&&&&$6 

U//UZZ
HC<r`   c                     t        | t        j                        r?t        |t        j                        rd }|S t        |t        j                        rd }|S y y )Nc                     t        |t        |             }t        | |      }t        |      }|| j                  k(  rt        | |d      S t        |      }t        |d|      }t        |d|       |S r  )	r  r>  r   r/  rg   r  r2  r   r   )r   r   r,  rO   rP   rets         r_   getitem_charz%unicode_getitem.<locals>.getitem_char  sk    'SV4$Q,)"-177?.q#q99226H'a:C#CB/Jr`   c           	         t        |t        |             }t        |      }t        | |j                        }t        |      }t        |      }t        |j                  |j                  z   |j                  |j                        D ]9  }t        | |      }|t        |      z  }t        |      }||k7  s.t        ||      }; |j                  dk(  r&|| j                  k(  rt        | |j                  |      S t        |||      }	|j                  }
t        |      D ](  }t        |	|t        | |
             |
|j                  z  }
* |	S r  )r  r>  r  r   r  r/  r2  r"  stepstopr  rg   r  r   r   )r   r   	slice_idxspanr,  rO   rP   r   new_kindr  curs              r_   getitem_slicez&unicode_getitem.<locals>.getitem_slice*  s#   ,S#a&9	"9-$Q	8)"-.r2 y?(~~y~~?A(A.B 3B 77H1"5Hx')$9? >>Q&4177? /q)//4HH (dH=C#//C"4['Q30GHy~~- ) Jr`   )r8  r   r9  rv  	SliceType)r   r   r  r  s       r_   unicode_getitemr    sT    !U&&'c5==)
  U__-"H ! K . (r`   c                     t        | t        j                        rt        |t        j                        rd }|S t        | t        j                        r t        |t        j                        rd }|S y y )Nc           	         | j                   |j                   z   }t        | j                  |j                        }t        | j                  |j                        }t        |||      }t        t        |             D ]  }t        ||t        | |              t        t        |            D ]%  }t        |t        |       |z   t        ||             ' |S r   )
rf   r  rg   r  rh   r   r"  r>  r   r   )r   r$  
new_lengthr  	new_asciir  r   r  s           r_   concat_implz#unicode_concat.<locals>.concat_implZ  s    QYY.J!!''1773H#AKK=I"8ZCF3q6]?1a+@A #3q6]A
OAq4IJ #Mr`   c                     | t        |      z   S r   )r=  rD  s     r_   r  z#unicode_concat.<locals>.concat_implg  s    s1v:r`   )r8  r   r9  rH  )r   r$  r  s      r_   unicode_concatr  V  sc     !U&&'Jq%:K:K,L		 !U&&'Jq%:N:N,O	 -P'r`   c                 P   | dk(  s|dk  ry|dk(  r| S | j                   |z  }| j                  }t        ||| j                        }t	        |       }t        |d| d|       |}d|z  |k  rt        |||d|       |dz  }d|z  |k  rd|z  |k(  s||z
  }t        |||||z
  |       |S y )Nrc  r~   r   r  )rf   rg   r   rh   r>  rd  )str_argmult_argr  r  r  len_a	copy_sizerests           r_   _repeat_implr  l  s    "}1	Q__x/
==xW5F5FGGGQ.	)mz)VY9=NI )mz) 9}
* 	)DVY	D0@$GM +r`   c                     t        | t        j                        rt        |t        j                        rd }|S t        | t        j                        r t        |t        j                        rd }|S y y )Nc                     t        | |      S r   r  rD  s     r_   wrapzunicode_repeat.<locals>.wrap      1%%r`   c                     t        ||       S r   r  rD  s     r_   r  zunicode_repeat.<locals>.wrap  r  r`   )r8  r   r9  rv  )r   r$  r  s      r_   unicode_repeatr    sY    !U&&'Jq%--,H	&	Au}}	%*Q8I8I*J	& +K	%r`   c                 B    t        | t        j                        rd }|S y )Nc                     t        |       dk(  S r   r~  r   s    r_   r  zunicode_not.<locals>.impl  s    q6Q;r`   r7  r   r  s     r_   unicode_notr    s!    !U&&'	 (r`   replacec                    |}t        |t        j                        r|j                  }n&t        |t        j                        r|j
                  }t        |t        t        j                  f      st        dj                  |            t        |t        j                  t        j                  f      st        dj                  |            t        |t        j                        st        dj                  |            dd}|S )NzGUnsupported parameters. The parameters must be Integer. Given count: {}z+The object must be a UnicodeType. Given: {}c                 
   |dk(  r| S |dk(  rt        |       }|dk(  r||j                  |      z   |z   S |g}t        t        |      |      }t	        |      D ]V  }|j                  ||          |dz   |k7  r|j                  |       1|j                  dj                  ||dz   d               X |t        |      kD  r|j                  |       dj                  |      S | j                  ||      }|j                  |      }|S )Nr   rc  r   r~   )listrj  rW  r>  r"  r
  r  )	r   old_strnew_strr  scharssplit_result	min_countr   r  s	            r_   r  zunicode_replace.<locals>.impl  s    A:Hb=!WF{f!55??#9LCK/I9%##F1I.q5I% ''0 ''Ax0@(AB & s6{"##G,77<((%(f%r`   r   )r8  r   ru  r   rF  r   r  rv  r!   rx  r9  rw  )r   r  r   r  r{  r  s         r_   unicode_replacer    s    E%'	E5>>	*

ec5==12 ==CVE]L 	L g 1 15>>BC ''-vg8 	8 gu001 ''-vg8 	8, Kr`   c                       fd}|S )Nc                     fd}|S )Nc                 2   t        |       }|dk(  ry|dk(  r(t        | d      }| j                  r |      S  |      S | j                  r&t        |      D ]  }t        | |      } |      r y t        |      D ]  }t        | |      } |      r y y)Nr   Fr~   T)r>  r   rh   r"  )rM   rN   r  r   
ascii_funcunicode_funcs       r_   r  z.gen_isAlX.<locals>.unicode_isAlX.<locals>.impl  s    YF{{,T15
>>%j11'
33~~vA!0q!9J%j1$ '
 6],T15
#J/  #
 r`   rd   )rM   r  r	  r
  s     r_   unicode_isAlXz gen_isAlX.<locals>.unicode_isAlX  s    	2 r`   rd   )r	  r
  r  s   `` r_   	gen_isAlXr    s    8 r`   isalphac                 2    t        |       xs t        |       S r   )r?   r>   xs    r_   <lambda>r    s    &:1&= '<&8&;'<r`   isalnumc                       fd}|S )Nc                     t        |       }|dk(  r t        | d            S |dk(  ryd}t        |      D ].  }t        | |      } |      s |      r y|r$ |      s-d}0 |S Nr~   r   FTr>  r   r"  )r   lcasedr   r  is_loweris_titleis_uppers        r_   r  z_is_upper.<locals>.impl  sv    F6OAq12268C(C0J
#x
'; 4  r`   rd   )r  r  r  r  s   ``` r_   	_is_upperr    s    
 Kr`   c                      yrC  rd   r  s    r_   r  r    s    5r`   isupperc                     d }|S )z
    Implements .isupper()
    c                 F    | j                   rt        |       S t        |       S r   )rh   _ascii_is_upper_unicode_is_upperr  s    r_   r  zunicode_isupper.<locals>.impl  s    ;;"1%%$Q''r`   rd   r  s     r_   unicode_isupperr#    s    
(
 Kr`   isasciic                     d }|S )z Implements UnicodeType.isascii()c                     | j                   S r   )rh   rM   s    r_   r  zunicode_isascii.<locals>.impl)  s    ~~r`   rd   rM   r  s     r_   unicode_isasciir)  %  s    Kr`   istitlec                     d }|S )z
    Implements UnicodeType.istitle()
    The algorithm is an approximate translation from CPython:
    https://github.com/python/cpython/blob/1d4b6ba19466aba0eb91c4ba01ba509acf18c723/Objects/unicodeobject.c#L11829-L11885 # noqa: E501
    c                 $   t        |       }|dk(  r$t        | d      }t        |      xs t        |      S |dk(  ryd}d}t	        |      D ]C  }t        | |      }t        |      st        |      r	|r yd}d}.t        |      r	|s yd}d}Bd}E |S r  )r>  r   r1   r7   r"  r2   )rM   rN   charr  previous_is_casedr   s         r_   r  zunicode_istitle.<locals>.impl6  s    TQ;"4+D)$/O3I$3OOQ;!=C"4-D%d+/Ed/K$ $(!'-( $(!$)! ! r`   rd   r(  s     r_   unicode_istitler/  .  s    6 Kr`   islowerc                     d }|S )aP  
    impl is an approximate translation of:
    https://github.com/python/cpython/blob/201c8f79450628241574fba940e08107178dc3a5/Objects/unicodeobject.c#L11900-L11933    # noqa: E501
    mixed with:
    https://github.com/python/cpython/blob/201c8f79450628241574fba940e08107178dc3a5/Objects/bytes_methods.c#L131-L156    # noqa: E501
    c                     t        |       }|dk(  rt        t        | d            S |dk(  ryd}t        |      D ]7  }t        | |      }t	        |      st        |      r y|r*t        |      s6d}9 |S r  )r>  r2   r   r"  r1   r7   )rM   rN   r  r   r,  s        r_   r  zunicode_islower.<locals>.impl]  sw    TQ;)/$*BCCQ;=C s+B%b)-CB-G5b9 ! r`   rd   r(  s     r_   unicode_islowerr3  T  s     Kr`   isidentifierc                     d }|S )z%Implements UnicodeType.isidentifier()c                     t        |       }|dk(  ryt        | d      }t        |      s|dk7  ryt        d|      D ]  }t        | |      }t	        |      r y y)Nr   F_   r~   T)r>  r   r-   r"  r.   )rM   rN   first_cpr   r  s        r_   r  z"unicode_isidentifier.<locals>.implt  s`    TQ;"4+$X.8t3Cq&!A(q1J+J7 "
 r`   rd   r(  s     r_   unicode_isidentifierr9  p  s      Kr`   c                       fd}|S )Nc                     fd}|S )Nc                     t        |       }|dk(  r t        | d            S r|dk(  ryt        |      D ]  }t        | |      } |      r y yr  r  )rM   rN   r   r  _PyUnicode_IS_funcempty_is_falses       r_   r  z*gen_isX.<locals>.unicode_isX.<locals>.impl  s[    YF{)/$*BCC&A+6],T15
)*5  #
 r`   rd   )rM   r  r=  r>  s     r_   unicode_isXzgen_isX.<locals>.unicode_isX  s    	 r`   rd   )r=  r>  r?  s   `` r_   gen_isXr@    s    " r`   isspace	isnumericisdigit	isdecimalisprintablec                       fd}|S )z)Generate common case operation performer.c           	         t        |       }|dk(  r!t        | j                  || j                        S | j                  r"t        | j                  |d      } 	| |       |S t        t        d|z  | j                        }dg} 
| |||      }|d   }t        |      }t        ||t        |            }t        |      D ]  }t        ||t        ||              |S )Nr   r~   rD   )
r>  r   rg   rh   r   r/  r2  r"  r   r   )rM   rN   r   tmpmaxchars	newlengthmaxcharnewkindr   r	  r
  s            r_   r  zcase_operation.<locals>.impl  s    TQ; VT^^DD>>

FA6CtS!J 11v:t~~N3 vsH=	1+$W-GY0CG0LMy!ACOC$;< " 
r`   rd   )r	  r
  r  s   `` r_   case_operationrM    s    . Kr`   c                    d}|dz
  }|dk\  r#t        | |      }t        |      sn|dz  }|dk\  r#|dk\  xr t        |      }|r@|dz   }||k  r#t        | |      }t        |      sn|dz  }||k  r#||k(  xs t        |       }|rdS d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_sigmarP    s     	
AaA
q&D!$)!,	Q	 q&
 6303K!G&ja(A-a0FA	 &j
 F{A+=a+@'@5*U*r`   c                 F    | dk(  rt        |||      |d<   yt        | |      S )z>This is a translation of the function that lowers a character.i  r   r~   )rP  r'   )r  rM   rN   r   mappeds        r_   _lower_ucs4rS    s.     U)$<q	!*f55r`   c                       fd}|S )Nc                    d}t        |      D ]u  }t        j                  dt              }t	        | |      }
rt        || |||      }nt        ||      }|d | D ]&  }	t        |d   |	      |d<   t        |||	       |dz  }( w |S Nr   rD   r  r~   )	r"  r   zerosr$   r   rS  r&   maxr   )rM   rN   r   rI  kr   rR  r  n_resr  lowers             r_   _do_upper_or_lowerz7_gen_unicode_upper_or_lower.<locals>._do_upper_or_lower  s    =CXXax0F(s3J#Jfc6J /z6BFU^!(1+q1Q*Q $ ! r`   rd   )r\  r]  s   ` r_   _gen_unicode_upper_or_lowerr^    s     r`   c                       fd}|S )Nc                 v    t        t        |             D ]!  }t        | |      }t        || |             # y r   )r"  r>  r   r   )rM   r   r   r  funcs       r_   _ascii_upper_or_lowerz8_gen_ascii_upper_or_lower.<locals>._ascii_upper_or_lower	  s3    T#C(s3JCd:&67 $r`   rd   )ra  rb  s   ` r_   _gen_ascii_upper_or_lowerrc  
	  s    8 ! r`   r\  c                 *    t        t        t              S )zImplements .lower())rM  _ascii_lower_unicode_lowerr'  s    r_   unicode_lowerrg  	       ,77r`   upperc                 *    t        t        t              S )zImplements .upper())rM  _ascii_upper_unicode_upperr'  s    r_   unicode_upperrm  	  rh  r`   c                    d}t        j                  dt              }t        |      D ][  }|j	                  d       t        | |      }t        ||      }|d | D ](  }	|d   }
t        |
|	      |d<   t        |||	       |dz  }* ] |S rV  )	r   rX  r$   r"  fillr   r(   rY  r   )rM   rN   r   rI  rZ  rR  r   r  r[  r  rK  s              r_   _unicode_casefoldrp  #	  s    	AXXax(FV}A$T3/
'
F;AqkGgq/HQKCA&FA	  	  Hr`   c                 z    t        t        |             D ]$  }t        | |      }t        ||t	        |             & y r   )r"  r>  r   r   r#   rM   r   r   r  s       r_   _ascii_casefoldrs  4	  s2    SY$T3/
S+j"9:  r`   casefoldc                 *    t        t        t              S )zImplements str.casefold())rM  rs  rp  r'  s    r_   unicode_casefoldrv  ;	  s     /+<==r`   c                    d}d}t        j                  dt              }t        | d      }t	        ||      }|d | D ]   }	t        ||	      }t        |||	       |dz  }" t        d|      D ]V  }
|j                  d       t        | |
      }t        || ||
|      }|d | D ]   }	t        ||	      }t        |||	       |dz  }" X ||d<   |S rV  )
r   rX  r$   r   r)   rY  r   r"  ro  rS  )rM   rN   r   rI  rZ  rK  rR  r  r[  r  r   s              r_   _unicode_capitalizerx  B	  s    	AGXXax(F q)J":v6EFU^gq/Q"	Q  QA$T3/
Jfc6BA'1oGCA&FA  	   HQKHr`   c                     t        | d      }t        |dt        |             t        dt	        |             D ]$  }t        | |      }t        ||t        |             & y r  )r   r   r"   r"  r>  r#   )rM   r   r  r   s       r_   _ascii_capitalizerz  \	  sQ     q)JCK
34QD	"$T3/
S+j"9: #r`   
capitalizec                 *    t        t        t              S r   )rM  rz  rx  r'  s    r_   unicode_capitalizer}  f	  s    +-@AAr`   c                 r   d}d}t        j                  dt              }t        |      D ]  }|j	                  d       t        | |      }|rt        || |||      }	nt        t        |      |      }	|d|	 D ]'  }
|\  }t        ||
      |d<   t        |||
       |dz  }) t        t        |            } |S )zCThis is a translation of the function that titles a unicode string.r   FrD   rW  Nr~   )r   emptyr$   r"  ro  r   rS  r)   rY  r   r/   )rM   rN   r   rI  rZ  previous_casedrR  r   r  r[  r  rK  s               r_   _unicode_titler  l	  s     	
ANXXax(FV}A$T3/

D&#vFE*8J+?HEAHGgq/HQKCA&FA	  
 ,HZ,@A  Hr`   c                     d}t        t        |             D ]S  }t        | |      }t        |      r|st	        |      }d}nt        |      r|rt        |      }d}nd}t        |||       U y)z" Does .title() on an ASCII string FTN)r"  r>  r   r8   r"   r9   r#   r   )rM   r   r.  r   r  s        r_   _ascii_titler  	  sq     SY$T3/
z"$(4
 $$ (4
 $ %S*-  r`   titlec                 *    t        t        t              S )zImplements str.title())rM  r  r  r'  s    r_   unicode_titler  	  s     ,77r`   c                     t        t        |             D ]H  }t        | |      }t        |      rt	        |      }nt        |      rt        |      }t        |||       J y r   )r"  r>  r   r9   r#   r8   r"   r   rr  s       r_   _ascii_swapcaser  	  sQ    SY$T3/
z"$Z0J$$Z0JS*-  r`   c                 l   d}d}t        j                  dt              }t        |      D ]  }|j	                  d       t        | |      }t        |      rt        || |||      }	nt        |      rt        ||      }	nd}	||d<   |d |	 D ]   }
t        ||
      }t        |||
       |dz  }"  ||d<   |S rV  )r   r  r$   r"  ro  r   r1   rS  r2   r&   rY  r   )rM   rN   r   rI  rZ  rK  rR  r   r  r[  r  s              r_   _unicode_swapcaser  	  s    	AGXXax(FV}A$T3/
!*-
D&#vFE#J/*:v>EE"F1IA'1oGCA&FA    HQKHr`   swapcasec                 *    t        t        t              S r   )rM  r  r  r'  s    r_   unicode_swapcaser  	  s    /+<==r`   c                 B    t        | t        j                        rd }|S y )Nc                 P    t        |       }|dk7  rt        d      t        | d      S )Nr~   zord() expected a characterr   )r>  	TypeErrorr   )r   lcs     r_   r  zol_ord.<locals>.impl	  s+    QBQw <=="1a((r`   r7  )r   r  s     r_   ol_ordr  	  s#    !U&&'	)  (r`   c                 t    | t         k  sJ t        |       }t        |d|t        k(        }t	        |d|        |S r  )_MAX_UNICODEr/  r   r   r   )r   rO   r  s      r_   _unicode_charr  	  s?    b!D
a)>!>
?CCBJr`   zchr() arg not in range(0x%hx)c                 d    | dk  s	| t         kD  rt        t              t        t	        |             S r   )r  r   _out_of_range_msgr  r$   )ordinals    r_   _PyUnicode_FromOrdinalr  	  s,    !w-*++'*++r`   c                 B    t        | t        j                        rd }|S y )Nc                     t        |       S r   )r  )r   s    r_   r  zol_chr.<locals>.impl	  s    )!,,r`   )r8  r   rv  )r   r  s     r_   ol_chrr  	  s    !U]]#	- $r`   __str__c                     d S )Nc                     | S r   rd   r5  s    r_   r  zunicode_str.<locals>.<lambda>	  s    Qr`   rd   r5  s    r_   unicode_strr  	  s    r`   __repr__c                     d S )Nc                     d| z   dz   S )N'rd   r5  s    r_   r  zunicode_repr.<locals>.<lambda>
  s    S1Ws]r`   rd   r5  s    r_   unicode_reprr  	  s
     #"r`   c                 "     | d      fd}|S )NrF   c                    d}| dk  r|  } d}| dk(  ry|dz   t        t        j                  t        j                  |                   z   }t        }t        |      }t        |||d      }|rt        |dt        d             |dz
  }| dkD  r5t        | 	      \  } }t        d      |z   }t        |||       |dz  }| dkD  r5|S )NFr   Tr{  r~   r}  )
r  r   floorlog10r   r   r   r   orddivmod)
r&  flagrN   rO   r   r   r   digitr   tens
            r_   r  zinteger_str.<locals>.impl	
  s    q5AD6C! 566$(.
4VT:Aq#c(+qj!ea~HAuC5 AAsA&1HC	 !e
 r`   rd   )r&  r  r  s     @r_   integer_strr  
  s     B%C( Kr`   c                     d S )Nc                 "    | j                         S r   )r  r&  s    r_   r  zinteger_repr.<locals>.<lambda>"
  s
    QYY[r`   rd   r  s    r_   integer_reprr   
  s      r`   c                     d S )Nc                     | rdS dS )NTrueFalserd   r$  s    r_   r  zboolean_str.<locals>.<lambda>(
  s    qV-g-r`   rd   r  s    r_   boolean_strr  %
  s
     .-r`   getiterc                    |j                   \  }|\  }| j                  ||j                        }| j                  t        j
                  d      }t        j                  ||      }||_        ||_	        | j                  r| j                  j                  |||       |j                         }	t        | ||j                  |	      S r   )r   r  return_typer   r   ro   r   alloca_once_valuerm   rM   r  r   r  r   r   )
r   r   r   r   ry  rM   iterobjr  indexptrr   s
             r_   getiter_unicoder  0
  s    88DRFT!!'3??;G Q/D(($7HGM GL 7B-



CGWcoosCCr`   iternextc                 `   |j                   \  }|\  }| j                  }|j                  t        j                        }|j                  |t        j                  t        j                  fi       }	| j                  ||	      }
|j                  t              }|j                  |t        j                  fi       }| j                  ||      }| j                  |||      } |||j                  f      }|j                  |j                        }|j                  d||      }|j!                  |       |j#                  |      5   |
||j                  |f      }|j%                  |       t'        j(                  ||      }|j+                  ||j                         d d d        y # 1 sw Y   y xY w)Nr   <)r   r  r  operatorgetitemr  r   r   ro   r  r>  r  rM   r   rm   icmp_unsigned	set_validif_thenyield_r   increment_indexr   )r   r   r   r   r  itertyitertyctxfntygetitem_siggetitem_impllen_sigr6  r  strlenrm   is_validgotitemnindexs                      r_   iternext_unicoder  H
  sv    xxHVFT""E ##H$4$45D$$UU-?-?,M%')K''k:L ##C(D  ););(=rBG##D'2H !!'6!>G g/F LL'E $$S%8H
X		"wu(>?g ((%8fgmm, 
#	"	"s   AF$$F-)r   r  r  ro  r?  r^  r   )Tr  )r  r  numpyr   llvmlite.irr   r   numba.core.cgutilsr   numba.core.extendingr   r   r   r	   r
   r   r   r   r   r   numba.core.imputilsr   r   r   r   r   r   numba.core.datamodelr   r   
numba.corer   r   numba.core.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   rH   r  rU   bitwidthr  r9  rK   UnicodeIteratorTyperk   r   r   rG  r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r   r  NotImplementedErrorr  r   r)  r/  r2  r>  r:  eqrN  nerS  ltr]  gtrb  lerg  gerl  containsrr  r}  r  r  r  r  r  r  rp  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r"  r*  rA  rO  rW  r[  r\  ra  ri  rw  r  r  r  r  r  r  r  r  r  r  r  r  rd  r  r  r  r   iaddr  r  r   r  not_r  r  r  _unicode_is_alnumr  _always_falser!  r"  r#  r)  r/  r3  r9  r@  rM  rP  rS  r^  rl  rf  rc  rk  re  rg  rm  rp  rs  rv  rx  rz  r}  r  r  r  r  r  r  r  r  r  r  r  chrr  r  r  rv  r  r  r_  r  r  NEWr  rd   r`   r_   <module>r     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 0!!; /8L0M N .!!9 -g6H.I J 0!!; /%&( 2!!= 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%-r`   