
    ܙdj                        d Z ddlmZ ddlm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 ddlmZ  ed	d
          Ze
j        ZdZdZdZdZ G d de          Zd Zed             Z ee          d             Zed             Zed             Z ed             Z!ed             Z"ed             Z#ed             Z$ed             Z%ed             Z&ed             Z'ed             Z(ed             Z)ed             Z*ed              Z+ed!             Z,ed"             Z-ed#             Z.ed$             Z/ed%             Z0ed&             Z1ed'             Z2ed(             Z3ed)             Z4ed*             Z5ed+             Z6 G d, d-e          Z7 ej8        g ddddddddde7j9        e7j9        e7j9        e7j9        e7j9        dddddddddddddddddde7j9        ddddddddddddddde7j:        e7j;        z  e7j:        e7j;        z  e7j:        e7j;        z  e7j:        e7j;        z  e7j:        e7j;        z  e7j:        e7j;        z  e7j:        e7j;        z  e7j:        e7j;        z  e7j:        e7j;        z  e7j:        e7j;        z  ddddddde7j<        e7j;        z  e7j<        e7j;        z  e7j<        e7j;        z  e7j<        e7j;        z  e7j<        e7j;        z  e7j<        e7j;        z  e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        e7j<        dddddde7j=        e7j;        z  e7j=        e7j;        z  e7j=        e7j;        z  e7j=        e7j;        z  e7j=        e7j;        z  e7j=        e7j;        z  e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        e7j=        dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddej>        .          Z? ej8        g d/ej@        .          ZA ej8        g d0ej@        .          ZB G d1 d2e          ZC ej8        g ddddddddddeCjD        eCjE        z  eCjD        eCjD        eCjD        eCjF        z  ddddddddddddddeCjD        eCjD        eCjD        ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeCjD        ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddej>        .          ZGed3             ZHed4             ZIed5             ZJed6             ZKed7             ZLed8             ZMed9             ZNed:             ZOed;             ZPed<             ZQed=             ZRed>             ZSed?             ZTdS )@z
This module contains support functions for more advanced unicode operations.
This is not a public API and is for Numba internal use only. Most of the
functions are relatively straightforward translations of the functions with the
same name in CPython.
    )
namedtuple)IntEnumN)typescgutils)impl_ret_untracked)overload	intrinsicregister_jitable)TypingError
typerecordz%upper lower title decimal digit flags	   
          c                   J    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdS )_PyUnicode_TyperecordMasks               r   @         i   i   i   i   i    i @  N)__name__
__module____qualname__
ALPHA_MASKDECIMAL_MASK
DIGIT_MASK
LOWER_MASKLINEBREAK_MASK
SPACE_MASK
TITLE_MASK
UPPER_MASKXID_START_MASKXID_CONTINUE_MASKPRINTABLE_MASKNUMERIC_MASKCASE_IGNORABLE_MASK
CASED_MASKEXTENDED_CASE_MASK     =lib/python3.11/site-packages/numba/cpython/unicode_support.pyr   r   ;   s^        JLJJNJJJNNL Jr.   r   c                      t          d          )Nz(Calling the Python definition is invalid)RuntimeErroras    r/   _PyUnicode_gettyperecordr4   M   s    
A
B
BBr.   c                 :   t          |t          j                  st          d          d }t          j        t          j        t          j        t          j        t          j        t          j        t          j        gt                    } |t                    }||fS )z~
    Provides the binding to numba_gettyperecord, returns a `typerecord`
    namedtuple of properties from the codepoint.
    zcodepoint must be an integerc           
      n   |                      t          j                  }|                      t                    }|                      t          j                  }|                                }|                      t          j                  }|                                }	|                      t          j                  }
|
                                }t          j	        
                    ||||||	|	|g          }t          j        |j        |d          }t          j        ||d          }t          j        ||d          }t          j        ||d          }t          j        ||d          }t          j        ||d          }t          j        ||
d          }||||||g}|                    ||d	         g|z              g }|D ]*}|                    |                    |                     +|                     ||j        t)          |                    }t+          | ||j        |          S )
Nnumba_gettyperecordnameupperlowertitledecimaldigitflagsr   )get_value_typer   void_Py_UCS4intc
as_pointerucharushortllvmliteirFunctionTyper   get_or_insert_functionmodulealloca_oncecallappendload
make_tuplereturn_typetupler   )contextbuilder	signatureargsll_void
ll_Py_UCS4ll_intcll_intc_ptrll_ucharll_uchar_ptr	ll_ushortll_ushort_ptrfntyfnr:   r;   r<   r=   r>   r?   byrefbufxress                           r/   detailsz$_gettyperecord_impl.<locals>.detailsZ   s   ((44++H55
((44((**))%+66**,,**5<88	!,,..{''2
   +N,. . . #GW7CCC#GW7CCC#GW7CCC%gxiHHH#GXGDDD#GYWEEEwu=R$q'U*+++ 	( 	(AJJw||A''''  )*?sLL!'7I4I3OOOr.   )

isinstancer   Integerr   
NamedTuplerC   rE   rF   r   rB   )	typingctx	codepointre   tuptysigs        r/   _gettyperecord_implrm   Q   s     i// :8999#P #P #PJ ej%*ej%+#k5<9:DF FE
%//C<r.   c                     t          | t          j                  rddlm fd}|S t          | t          j                  rd S dS )z
    Provides a _PyUnicode_gettyperecord binding, for convenience it will accept
    single character strings and code points.
    r   )_get_code_pointc                     t          |           dk    rd}t          |           | d          }t          t          |                    }|S )Nr   z.gettyperecord takes a single unicode characterr   )len
ValueErrorrm   rB   )r3   msg
code_pointdataro   s       r/   implz gettyperecord_impl.<locals>.impl   sN    1vvzzF oo%(A..J&x
';';<<DKr.   c                 :    t          t          |                     S N)rm   rB   r2   s    r/   <lambda>z$gettyperecord_impl.<locals>.<lambda>   s    ,Xa[[99 r.   N)rf   r   UnicodeTypenumba.cpython.unicodero   rg   )r3   rv   ro   s     @r/   gettyperecord_implr|      ss     !U&'' 
999999	 	 	 	 	 !U]## :999: :r.   c                     t          |t          j                  st          d          d }t	          t          j                  }||fS )z
    Accessor function for the _PyUnicode_ExtendedCase array, binds to
    numba_get_PyUnicode_ExtendedCase which wraps the array and does the lookup
    zExpected an indexc                 (   |                      t                    }|                      t          j                  }t          j                            ||g          }t          j        |j	        |d          }|
                    ||d         g          S )N numba_get_PyUnicode_ExtendedCaser8   r   )r@   rB   r   rC   rG   rH   rI   r   rJ   rK   rM   )rS   rT   rU   rV   rX   rY   r_   r`   s           r/   re   z(_PyUnicode_ExtendedCase.<locals>.details   s    ++H55
((44{''
WI>>+N9; ; ; ||Ba	***r.   )rf   r   rg   r   rB   rC   )ri   indexre   rl   s       r/   _PyUnicode_ExtendedCaser      sQ     eU]++ /-...+ + + 5:

C<r.   c                     t          |           }|j        t          j        z  rt	          |j        dz            S | |j        z   S )N  )r4   r?   r   r,   r   r<   chctypes     r/   _PyUnicode_ToTitlecaser      sD    $R((E0CC =&u{V';<<<r.   c                 P    t          |           }|j        t          j        z  dk    S Nr   )r4   r?   r   r$   r   s     r/   _PyUnicode_IsTitlecaser      %    $R((E;3>>!CCr.   c                 P    t          |           }|j        t          j        z  dk    S r   )r4   r?   r   r&   r   s     r/   _PyUnicode_IsXidStartr      %    $R((E;3BBaGGr.   c                 P    t          |           }|j        t          j        z  dk    S r   )r4   r?   r   r'   r   s     r/   _PyUnicode_IsXidContinuer      s%    $R((E;3EEJJr.   c                 Z    t          |           }|j        t          j        z  r|j        S dS N)r4   r?   r   r   r=   r   s     r/   _PyUnicode_ToDecimalDigitr      s/    $R((E{/<< }2r.   c                 Z    t          |           }|j        t          j        z  r|j        S dS r   )r4   r?   r   r    r>   r   s     r/   _PyUnicode_ToDigitr      s/    $R((E{/:: {2r.   c                 P    t          |           }|j        t          j        z  dk    S r   )r4   r?   r   r)   r   s     r/   _PyUnicode_IsNumericr      s%    $R((E;3@@AEEr.   c                 P    t          |           }|j        t          j        z  dk    S r   )r4   r?   r   r(   r   s     r/   _PyUnicode_IsPrintabler      r   r.   c                 P    t          |           }|j        t          j        z  dk    S r   )r4   r?   r   r!   r   s     r/   _PyUnicode_IsLowercaser      r   r.   c                 P    t          |           }|j        t          j        z  dk    S r   )r4   r?   r   r%   r   s     r/   _PyUnicode_IsUppercaser      r   r.   c                 P    t          |           }|j        t          j        z  dk    S r   )r4   r?   r   r"   r   s     r/   _PyUnicode_IsLineBreakr      r   r.   c                     t           rx   NotImplementedErrorr   s    r/   _PyUnicode_ToUppercaser         
r.   c                     t           rx   r   r   s    r/   _PyUnicode_ToLowercaser     r   r.   c                     t          |           }|j        t          j        z  r=|j        dz  }|j        dz	  }t          |          D ]}t          ||z             ||<   |S | |j        z   |d<   dS Nr      r   r   )r4   r?   r   r,   r;   ranger   r   rd   r   r   nis         r/   _PyUnicode_ToLowerFullr         $R((E0CC f$K2q 	8 	8A,UQY77CFF%+CF1r.   c                     t          |           }|j        t          j        z  r=|j        dz  }|j        dz	  }t          |          D ]}t          ||z             ||<   |S | |j        z   |d<   dS r   )r4   r?   r   r,   r<   r   r   r   s         r/   _PyUnicode_ToTitleFullr     r   r.   c                     t          |           }|j        t          j        z  r=|j        dz  }|j        dz	  }t          |          D ]}t          ||z             ||<   |S | |j        z   |d<   dS r   )r4   r?   r   r,   r:   r   r   r   s         r/   _PyUnicode_ToUpperFullr   -  s    $R((E0CC f$K2q 	8 	8A,UQY77CFF%+CF1r.   c                    t          |           }t          j        }|j        |z  rX|j        dz	  dz  rK|j        dz  |j        dz	  z   }|j        dz	  dz  }t          |          D ]}t          ||z             ||<   |S t          | |          S )N      r   r   )r4   r   r,   r?   r;   r   r   r   )r   rd   r   extended_case_maskr   r   r   s          r/   _PyUnicode_ToFoldedFullr   <  s    $R((E3F{'' U[B->!,C v%%+*;<[B!#q 	8 	8A,UQY77CFF!"c***r.   c                 P    t          |           }|j        t          j        z  dk    S r   )r4   r?   r   r+   r   s     r/   _PyUnicode_IsCasedr   J  r   r.   c                 P    t          |           }|j        t          j        z  dk    S r   )r4   r?   r   r*   r   s     r/   _PyUnicode_IsCaseIgnorabler   Q  s%    $R((E;3GG1LLr.   c                 0    t          |           dk     rdS dS Nr   r   )r   r   s    r/   _PyUnicode_IsDigitr   X  s    "!!q1r.   c                 0    t          |           dk     rdS dS r   )r   r   s    r/   _PyUnicode_IsDecimalDigitr   `  s     $$q((q1r.   c                 P    t          |           }|j        t          j        z  dk    S r   )r4   r?   r   r#   r   s     r/   _PyUnicode_IsSpacer   h  r   r.   c                 P    t          |           }|j        t          j        z  dk    S r   )r4   r?   r   r   r   s     r/   _PyUnicode_IsAlphar   n  r   r.   c                   *    e Zd ZdZdZdZdZdZdZdZ	dS )	_PY_CTFr   r      r   r   r   r   N)
r   r   r   LOWERUPPERALPHADIGITALNUMSPACEXDIGITr-   r.   r/   r   r   }  s1        EEEEEEFFFr.   r   )dtype(   r   r   r   r   r         r   r   r   r         r         r            r            r                        r   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   r   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y   z   [   \   ]   ^   _   `   r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  {   |   }   ~      r                                                                                                                                                                                                                                                                                                                                                                                                (   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z   r  r   r!  r"  r#  r$  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r&  r'  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  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  c                       e Zd ZdZdZdZdS )
_PY_CTF_LBr   r   r   N)r   r   r   
LINE_BREAK	LINE_FEEDCARRIAGE_RETURNr-   r.   r/   r  r  a  s        JIOOOr.   r  c                 T    t          j        |           t          j        d          z  S )zk
    Equivalent to the CPython macro `Py_CHARMASK()`, masks off all but the
    lowest 256 bits of ch.
    r  )r   uint8r   s    r/   _Py_CHARMASKr    s!     ;r??U[....r.   c                 6    t           t          |                    S )zw
    Equivalent to the CPython macro `Py_TOUPPER()` converts an ASCII range
    code point to the upper equivalent
    )_Py_ctype_toupperr  r   s    r/   _Py_TOUPPERr         \"--..r.   c                 6    t           t          |                    S )zw
    Equivalent to the CPython macro `Py_TOLOWER()` converts an ASCII range
    code point to the lower equivalent
    )_Py_ctype_tolowerr  r   s    r/   _Py_TOLOWERr    r  r.   c                 P    t           t          |                    t          j        z  S )z8
    Equivalent to the CPython macro `Py_ISLOWER()`
    )_Py_ctype_tabler  r   r   r   s    r/   _Py_ISLOWERr        
 <++,w}<<r.   c                 P    t           t          |                    t          j        z  S )z8
    Equivalent to the CPython macro `Py_ISUPPER()`
    )r  r  r   r   r   s    r/   _Py_ISUPPERr    r  r.   c                 P    t           t          |                    t          j        z  S )z8
    Equivalent to the CPython macro `Py_ISALPHA()`
    )r  r  r   r   r   s    r/   _Py_ISALPHAr    r  r.   c                 P    t           t          |                    t          j        z  S )z8
    Equivalent to the CPython macro `Py_ISDIGIT()`
    )r  r  r   r   r   s    r/   _Py_ISDIGITr    r  r.   c                 P    t           t          |                    t          j        z  S )z9
    Equivalent to the CPython macro `Py_ISXDIGIT()`
    )r  r  r   r   r   s    r/   _Py_ISXDIGITr    s    
 <++,w~==r.   c                 P    t           t          |                    t          j        z  S )z8
    Equivalent to the CPython macro `Py_ISALNUM()`
    )r  r  r   r   r   s    r/   _Py_ISALNUMr    r  r.   c                 P    t           t          |                    t          j        z  S )z8
    Equivalent to the CPython macro `Py_ISSPACE()`
    )r  r  r   r   r   s    r/   _Py_ISSPACEr    r  r.   c                 P    t           t          |                    t          j        z  S )z&Check if character is ASCII line break)_Py_ctype_islinebreakr  r  r  r   s    r/   _Py_ISLINEBREAKr    s     !b!1!12Z5JJJr.   c                 P    t           t          |                    t          j        z  S )z#Check if character is line feed `
`)r  r  r  r  r   s    r/   _Py_ISLINEFEEDr    s     !b!1!12Z5IIIr.   c                 P    t           t          |                    t          j        z  S )z)Check if character is carriage return ``)r  r  r  r  r   s    r/   _Py_ISCARRIAGERETURNr    s     !b!1!12Z5OOOr.   )U__doc__collectionsr   enumr   llvmlite.irrG   numpynp
numba.corer   r   numba.core.imputilsr   numba.core.extendingr   r	   r
   numba.core.errorsr   r   uint32rB   _Py_TAB_Py_LINEFEED_Py_CARRIAGE_RETURN	_Py_SPACEr   r4   rm   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   arrayr   r   r   r   r   rC   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/   <module>r     s    # " " " " "               % % % % % % % % 4 4 4 4 4 4 F F F F F F F F F F ) ) ) ) ) ) Z?A A

 <6  	               $C C C 0 0 0f 

"##: : $#:,   2    D D D H H H K K K
       F F F H H H D D D D D D
 H H H
      
 	 	 	 	 	 	 
 
 
 	+ 	+ 	+ D D D M M M       D D D
 D D D    g    "( III I 	I
 I I I I I MI MI MI MI MI I  !I" #I$ %I& 'I( )I* +I, -I. /I0 1I2 3I4 5I6 7I8 9I: ;I< =I> ?I@ AIB MCID EIF GIH IIJ KIL MIN OIP QIR SIT UIV WIX YIZ [I\ ]I^ _I` aIb MGN"cId MGN"eIf MGN"gIh MGN"iIj MGN"kIl MGN"mIn MGN"oIp MGN"qIr MGN"sIt MGN"uIv wIx yIz {I| }I~ I@ AIB CID MGN"EIF MGN"GIH MGN"IIJ MGN"KIL MGN"MIN MGN"OIP MQIR MSIT MUIV MWIX MYIZ M[I\ M]I^ M_I` MaIb McId MeIf MgIh MiIj MkIl MmIn MoIp MqIr MsIt MuIv MwIx yIz {I| }I~ I@ AIB CID MGN"EIF MGN"GIH MGN"IIJ MGN"KIL MGN"MIN MGN"OIP MQIR MSIT MUIV MWIX MYIZ M[I\ M]I^ M_I` MaIb McId MeIf MgIh MiIj MkIl MmIn MoIp MqIr MsIt MuIv MwIx yIz {I| }I~ I@ AIB CIB 	CIB CIB CIB CIB CIB CIB CIB CIB  !CIB #$CIB &'CIB )*CIB ,-CIB /0CIB 23CID EID 	EID EID EID EID EID EID EID EID  !EID #$EID &'EID )*EID ,-EID /0EID 23EIF GIF 	GIF GIF GIF GIF GIF GIF GIF GIF  !GIF #$GIF &'GIF )*GIF ,-GIF /0GIF 23GIH IIH 	IIH IIH IIH IIH IIH IIH IIH IIH  !IIH #$IIH &'IIH )*IIH ,-IIH /0IIH 23IIJ KIJ 	KIJ KIJ KIJ KIJ KIJ KIJ KIJ KIJ  !KIJ #$KIJ &'KIJ )*KIJ ,-KIJ /0KIJ 23KIL MIL 	MIL MIL MIL MIL MIL MIL MIL MIL  !MIL #$MIL &'MIL )*MIL ,-MIL /0MIL 23MIN OIN 	OIN OIN OIN OIN OIN OIN OIN OIN  !OIN #$OIN &'OIN )*OIN ,-OIN /0OIN 23OIP QIP 	QIP QIP QIP QIP QIP QIP QIP QIP  !QIP #$QIP &'QIP )*QIP ,-QIP /0QIP 23QIR 
SI I I\ BH ! ! !B 
C! ! ! L BH ! ! !B 
C! ! ! H        ! """
""""""" "J00" " 	"
 J66" " 	" " " " " " " "  !" #$" &'" )*" ,-" " " " " 	" " " " " " " "  !" #$" &'" )*" ,-" /0" 23" 56" " 	" " " " " " " "  !" #$" &'" )*" ,-" /0" 23" 56" " 	" " " " " " " "  !" #$" &'" )*" ,-" /0" 23" 56" " 	" " " " " " " "  !" #$" &'" )*" ,-" /0" 23" 56" " 	" " " " " " " "  !" #$" &'" )*" ,-" /0" 23" 56" " 	" " " " " " " "  !" #$" &'" )*" ,-" /0" 23" 56"  !"" #"" 	#"" #"" #"" #"" #"" #"" #"" #""  !#"" #$#"" &'#"" )*#"" ,-#"" /0#"" 23#"" 56#"$ %"$ 	%"$ %"$ %"$ %"$ %"$ %"$ %"$ %"$  !%"$ #$%"$ &'%"$ )*%"$ ,-%"$ /0%"$ 23%"$ 56%"& '"& 	'"& '"& '"& '"& '"& '"& '"& '"&  !'"& #$'"& &''"& )*'"& ,-'"& /0'"& 23'"& 56'"( )"( 	)"( )"( )"( )"( )"( )"( )"( )"(  !)"( #$)"( &')"( )*)"( ,-)"( /0)"( 23)"( 56)"* +"* 	+"* +"* +"* +"* +"* +"* +"* +"*  !+"* #$+"* &'+"* )*+"* ,-+"* /0+"* 23+"* 56+", -", 	-", -", -", -", -", -", -", -",  !-", #$-", &'-", )*-", ,--", /0-", 23-", 56-". /". 	/". /". /". /". /". /". /". /".  !/". #$/". &'/". )*/". ,-/". /0/". 23/". 56/"0 1"0 	1"0 1"2 
3   < / / / / / / / / / = = = = = = = = = = = = > > > = = = = = = K K K
 J J J
 P P P P Pr.   