
    "
3j                    T   S SK Jr  S SKrS SKrS SKrS SKrS SKJr  S SKJ	r	  S SK
r
S SKJr  S SKJrJrJrJrJrJrJr  S SKJr  \R.                  r\R2                  r\R6                  r\S;   a  \R:                  r " S	 S
\5      r \ " 5       r!\ " 5       r"\ " 5       r#\!RH                  r%\"RH                  r&\#RH                  r' " S S\" SS5      5      r( " S S\" SS5      5      r) " S S\" SS5      5      r* " S S\5      r+ " S S\5      r,\" SS5      r- " S S\5      r. " S S5      r/g)    )
namedtupleN)ir)Constant)
_helperlib)typesutilsconfigloweringcgutilsimputils	serialize)	PYVERSION))   
   )r      c                   *    \ rS rSrS rS rSS jrSrg)	_Registry   c                     0 U l         g N	functionsselfs    N/home/wildlama/miniconda3/lib/python3.13/site-packages/numba/core/pythonapi.py__init___Registry.__init__   s	        c                 Z   ^ ^ [        T[        R                  5      (       d   eU U4S jnU$ )Nc                 d   > TTR                   ;   a  [        ST< 35      eU TR                   T'   U $ )Nzduplicate registration for )r   KeyError)funcr   	typeclasss    r   	decorator%_Registry.register.<locals>.decorator   s0    DNN*)MNN(,DNN9%Kr   )
issubclassr   Type)r   r#   r$   s   `` r   register_Registry.register   s'    )UZZ0000	
 r   Nc                     [        U[        R                  5      (       d   eUR                   H%  nU R                  R                  U5      nUc  M#  Us  $    U$ r   )r&   r   r'   __mro__r   get)r   r#   defaultclsr"   s        r   lookup_Registry.lookup&   sO    )UZZ0000$$C>>%%c*D % r   r   r   )__name__
__module____qualname____firstlineno__r   r(   r/   __static_attributes__ r   r   r   r      s    r   r   c                   "    \ rS rSrSrSrS rSrg)_BoxContext7   z4
The facilities required by boxing implementations.
r6   c                 N    U R                   R                  XU R                  5      $ r   pyapifrom_native_valueenv_managerr   typvals      r   box_BoxContext.box>       zz++Cd6F6FGGr   N)r1   r2   r3   r4   __doc__	__slots__rB   r5   r6   r   r   r8   r8   7   s     IHr   r8   )contextbuilderr<   r>   c                   "    \ rS rSrSrSrS rSrg)_UnboxContextB   z6
The facilities required by unboxing implementations.
r6   c                 8    U R                   R                  X5      $ r   )r<   to_native_value)r   r@   objs      r   unbox_UnboxContext.unboxI   s    zz))#33r   N)r1   r2   r3   r4   rE   rF   rO   r5   r6   r   r   rJ   rJ   B   s     I4r   rJ   )rG   rH   r<   c                   .    \ rS rSrSrSrS rS rS rSr	g)_ReflectContextM   z8
The facilities required by reflection implementations.
r6   c                 l    U R                   R                  U R                  [        R                  5        g r   )rH   storeis_errorr   true_bitr   s    r   	set_error_ReflectContext.set_errorV   s     4=='*:*:;r   c                 N    U R                   R                  XU R                  5      $ r   r;   r?   s      r   rB   _ReflectContext.boxY   rD   r   c                 N    U R                   R                  XU R                  5      $ r   )r<   reflect_native_valuer>   r?   s      r   reflect_ReflectContext.reflect\   s    zz..s9I9IJJr   N)
r1   r2   r3   r4   rE   rF   rX   rB   r^   r5   r6   r   r   rR   rR   M   s     I<HKr   rR   )rG   rH   r<   r>   rV   c                   "    \ rS rSrSrSS jrSrg)NativeValue`   z
Encapsulate the result of converting a Python object to a native value,
recording whether the conversion was successful and how to cleanup.
Nc                 P    Xl         Ub  UO[        R                  U l        X0l        g r   )valuer   	false_bitrV   cleanup)r   rd   rV   rf   s       r   r   NativeValue.__init__f   s     
$,$8g>O>Or   )rf   rV   rd   NN)r1   r2   r3   r4   rE   r   r5   r6   r   r   ra   ra   `   s    
r   ra   c                   &    \ rS rSrS rS rS rSrg)EnvironmentManagerl   c                 v    [        U[        R                  5      (       d   eXl        X l        X0l        X@l        g r   )
isinstancer
   Environmentr<   envenv_bodyenv_ptr)r   r<   ro   rp   rq   s        r   r   EnvironmentManager.__init__n   s/    #x334444
 r   c                 B   [        U[        5      (       a  [        R                  " U5      n[	        U R
                  R                  5       H  u  p#X1L d  M    U$    [        U R
                  R                  5      nU R
                  R                  R                  U5        U$ )z6
Add a constant to the environment, return its index.
)	rm   strsysintern	enumeratero   constslenappend)r   constindexrA   s       r   	add_constEnvironmentManager.add_constu   sv    
 eS!!JJu%E#DHHOO4JE|  5 (EHHOO""5)r   c                    U[        U R                  R                  5      :  d   eU R                  R                  nU R
                  R                  n[        R                  " X R                  R                  SS9nUR                  [        R                  " X#5      5       u  pVU   U R                  R                  X15      nUR                  Xt5        SSS5        U   U R                  R                  SS5        SSS5        SSS5        UR                  U5      $ ! , (       d  f       NN= f! , (       d  f       N8= f! , (       d  f       NA= f)z
Look up constant number *index* inside the environment body.
A borrowed reference is returned.

The returned LLVM value may have NULL value at runtime which indicates
an error at runtime.
TzfillNPyExc_RuntimeErrorz$`env.consts` is NULL in `read_const`)ry   ro   rx   r<   rH   rp   r   alloca_oncepyobjif_elseis_not_nulllist_getitemrU   err_set_stringload)r   r|   rH   rx   retbr_not_nullbr_nullgetitems           r   
read_constEnvironmentManager.read_const   s     s488??++++**$$%%!!'::+;+;4H__W00AB&**11&@g+   

))(:  C ||C     CBs<    D<%-D
D<D+9D<
D(	$D<+
D9	5D<<
E
)ro   rp   rq   r<   N)r1   r2   r3   r4   r   r}   r   r5   r6   r   r   rj   rj   l   s    !r   rj   _IteratorLoop)rd   do_breakc                      \ rS rSrSrS rS r  SS jrS rS r	S r
S	 rS
 rS rS rS rS rS rSS jrS rS rS rS rS r\R2                  SS j5       rS rS rS rS rS rS r SS jr!S r"S  r#S! r$S" r%S# r&S$ r'S% r(S& r)S' r*S( r+S) r,S* r-S+ r.S, r/S- r0S. r1S/ r2S0 r3SS1 jr4SS2 jr5SS3 jr6SS4 jr7SS5 jr8SS6 jr9SS7 jr:SS8 jr;SS9 jr<SS: jr=SS; jr>SS< jr?SS= jr@SS> jrAS? rBS@ rCSA rDSB rESC rFSD rGSE rHSF rISG rJSH rKSI rLSJ rMSK rNSL rOSM rPSN rQSO rRSP rSSQ rTSR rUSS rVST rWSU rXSV rYSW rZSSX jr[SY r\SZ r]S[ r^S\ r_S] r`\R2                  S^ 5       raS_ rbS` rcSa rdSb reSc rfSd rgSe rhSf riSg rjSSh jrkSSi jrlSj rmSk rnSl roSm rpSn rqSo rrSp rsSq rtSr ruSs rvSt rwSu rxSv rySw rzSx r{Sy r|Sz r}S{ r~S| rS} rS~ rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r\R2                  S 5       rS rS rS rS rS rS rS rS rS rS rS rS rSS jrSS jrS rSS jrS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)	PythonAPI   zR
Code generation facilities to call into the CPython C API (and related
helpers).
c                 v   Xl         X l        UR                  R                  R                  U l         U R                  R
                    U R                   R                  [        R                  5      U l
        U R                  R                  5       U l        [        R                  " [        R                  " S5      5      U l        [        R                  " ["        R$                  " ["        R&                  5      S-  5      U l        U R(                  U l        [        R                  " ["        R$                  " ["        R,                  5      S-  5      U l        U R.                  U l        [        R2                  " 5       U l        U R                   R7                  [        R8                  5      U l        [        R                  " [        R                  " S5      5      U l        [        R                  " [>        R@                  S-  5      U l!        [        RD                  " [        R                  " S5      [>        RF                  5      U l$        U R:                  U l%        [>        RL                  U l&        [>        RN                  U l'        [>        RP                  U l(        g! [         a    0 U R                  l         GNnf = f)z<
Note: Maybe called multiple times when lowering a function
   N))rG   rH   basic_blockfunctionmodule_PythonAPI__serializedAttributeErrorget_argument_typer   pyobjectr   
as_pointerpyobjptrr   PointerTypeIntTypevoidptrctypessizeofc_longlongulongc_ulonglonglonglong	ulonglong
DoubleTypedoubleget_value_typeintp
py_ssize_tcstringr   py_gil_state_size	gil_state	ArrayTypepy_buffer_sizepy_buffer_t	py_hash_tpy_unicode_1byte_kindpy_unicode_2byte_kindpy_unicode_4byte_kind)r   rG   rH   s      r   r   PythonAPI.__init__   s    ))2299	*KK$$
 \\33ENNC


--/~~bjjm4JJv}}V]];a?@	YY


6==1C1C#Dq#HImmo,,55ejjA~~bjjm4J$@$@1$DE<<

1z7P7PQ%/%E%E"%/%E%E"%/%E%E"'  	*')DKK$	*s   J J87J8c                     [        XX#5      $ r   )rj   )r   ro   rp   rq   s       r   get_env_managerPythonAPI.get_env_manager   s    !$X??r   c                 F   [         R                  " U R                  U5      n[         R                  " U R                  U5         U(       a  U R                  R                  R
                  R                  nUR                  U R                  :X  d   eU R                  SSU 35        U R                  R                  U R                  5       5        O9U R                  R                  R                  U R                  [        SU 345        SSS5        g! , (       d  f       g= f)z;Emits LLVM code to ensure the `envptr` is not NULL
        r   zmissing Environment: N)r   is_nullrH   if_unlikelyr   typepointeereturn_typer   r   r   get_null_objectrG   	call_convreturn_user_excRuntimeError)r   envptrreturn_pyobject	debug_msgr   fntys         r   emit_environment_sentry!PythonAPI.emit_environment_sentry   s     //$,,7  w7||,,1199''4::555##(,A)*M   !5!5!78&&66LL,,YK8: 877s   CD
D c                     [         R                  " [         R                  " 5       U R                  /5      nU R	                  USS9nU R
                  R                  X1/5        g )N	Py_IncRefnamer   FunctionTypeVoidTyper   _get_functionrH   callr   rN   r   fns       r   increfPythonAPI.incref   G    r{{}tzzl;;7"e$r   c                     [         R                  " [         R                  " 5       U R                  /5      nU R	                  USS9nU R
                  R                  X1/5        g )N	Py_DecRefr   r   r   s       r   decrefPythonAPI.decref   r   r   c                     [         R                  " U R                  U R                  /5      nU R                  USS9nU R                  R                  X1/5      $ )Nnumba_py_typer   r   r   r   r   rH   r   r   s       r   get_typePythonAPI.get_type   sH    tzzDJJ<8?;||  U++r   c                 |   [         R                  " [         R                  " S5      5      n[         R                  " U5      nU R                  U R                  Xg/n[         R                  " [         R                  " S5      USS9n	U R                  U	SS9n
U R                  R                  XX#U/[        U5      -   5      $ )Nr       Tvar_argPyArg_ParseTupleAndKeywordsr   	r   r   r   r   r   r   rH   r   list)r   argskwsfmtkeywordsobjscharptr
charptraryargtypesr   r   s              r   parse_tuple_and_keywords"PythonAPI.parse_tuple_and_keywords   s    ..A/^^G,
JJ

G@rzz"~xF+HI||  Ch%?$t*%LMMr   c                 8   [         R                  " [         R                  " S5      5      nU R                  U/n[         R                  " [         R                  " S5      USS9nU R                  USS9nU R                  R                  XqU/[        U5      -   5      $ )Nr   r   Tr   PyArg_ParseTupler   r   )r   r   r   r   r   r   r   r   s           r   parse_tuplePythonAPI.parse_tuple   sx    ..A/JJ(rzz"~xF+=>||  C[4:%=>>r   c                 j   [         R                  " [         R                  " S5      5      nU R                  X`R                  U R                  /n[         R
                  " [         R                  " S5      USS9nU R                  USS9n	[        U R                  [        U5      5      n[        U R                  [        U5      5      n[        U[        5      (       a0  U R                  R                  U R                  R                  U5      nU R                  R                  XX#U/[!        U5      -   5      $ )Nr   r   Tr   PyArg_UnpackTupler   )r   r   r   r   r   r   r   r   intrm   rt   rG   insert_const_stringrH   r   r   r   )
r   r   r   n_minn_maxr   r   r   r   r   s
             r   unpack_tuplePythonAPI.unpack_tuple  s    ..A/JJ$//Jrzz"~xF+>?#e*5#e*5dC  <<33DLL4G4GND||  D%?$t*%LMMr   c                     [         R                  " U R                  S5      nU R                  USS9nU R                  R                  US5      $ )Nr6   PyErr_Occurredr   r   r   r   r   s      r   err_occurredPythonAPI.err_occurred  sC    tzz2.+;<||  R((r   c                     [         R                  " [         R                  " 5       S5      nU R                  USS9nU R                  R                  US5      $ )Nr6   PyErr_Clearr   )r   r   r   r   rH   r   r  s      r   	err_clearPythonAPI.err_clear  sD    r{{}b1=9||  R((r   c                    [         R                  " [         R                  " 5       U R                  U R                  /5      nU R                  USS9n[        U[        5      (       a  U R                  U5      n[        U[        5      (       a&  U R                  R                  U R                  U5      nU R                  R                  XAU45      $ )NPyErr_SetStringr   )r   r   r   r   r   r   rm   rt   get_c_objectrG   r   r   rH   r   )r   exctypemsgr   r   s        r   r   PythonAPI.err_set_string   s    r{{}tzz4<<.HI+<=gs##''0Gc3,,224;;DC||  s^44r   c                    [         R                  " [         R                  " 5       U R                  U R                  /SS9nU R                  USS9n[        U[        5      (       a  U R                  U5      n[        U[        5      (       a&  U R                  R                  U R                  U5      nU R                  R                  XQU4[        U5      -   5      $ )NTr   PyErr_Formatr   )r   r   r   r   r   r   rm   rt   r  rG   r   r   rH   r   tuple)r   r  r  format_argsr   r   s         r   
err_formatPythonAPI.err_format)  s    r{{}tzz4<<.HRVW>:gs##''0Gc3,,224;;DC||  s^eK6H%HIIr   Nc                     [         R                  " [         R                  " 5       U R                  /5      nU R	                  USS9nUc  U R                  5       nU R                  R                  X145      $ )z
Raise an arbitrary exception (type or value or (type, args)
or None - if reraising).  A reference to the argument is consumed.
numba_do_raiser   )r   r   r   r   r   	make_nonerH   r   )r   excr   r   s       r   raise_objectPythonAPI.raise_object2  s^    
 r{{}tzzl;+;<;.."C||  V,,r   c                 (   [         R                  " [         R                  " 5       U R                  U R                  /5      nU R	                  USS9n[        U[        5      (       a  U R                  U5      nU R                  R                  XAU45      $ )NPyErr_SetObjectr   
r   r   r   r   r   rm   rt   r  rH   r   )r   r  excvalr   r   s        r   err_set_objectPythonAPI.err_set_object=  sr    r{{}tzz4::.FG+<=gs##''0G||  v%677r   c                    [         R                  " [         R                  " 5       U R                  /5      nU R	                  USS9n[        U[        5      (       a  U R                  U5      nU R                  R                  X145      $ )NPyErr_SetNoner   r  )r   r  r   r   s       r   err_set_nonePythonAPI.err_set_noneD  sg    r{{}tzzl;?;gs##''0G||  Z00r   c                     [         R                  " [         R                  " 5       U R                  /5      nU R	                  USS9nU R
                  R                  X145      $ )NPyErr_WriteUnraisabler   r   r   s       r   err_write_unraisablePythonAPI.err_write_unraisableK  sK    r{{}tzzl;+BC||  V,,r   c                     [         R                  " [         R                  " 5       U R                  /S-  5      nU R	                  USS9nU R
                  R                  XQX#45      $ )Nr   PyErr_Fetchr   )r   r   r   r   r   rH   r   )r   ptypvalptbr   r   s         r   	err_fetchPythonAPI.err_fetchP  sR    r{{}t}}o.AB=9||  4%566r   c                     [         R                  " [         R                  " 5       U R                  /S-  5      nU R	                  USS9nU R
                  R                  XQX#45      $ )Nr   PyErr_Restorer   r   )r   tyrA   tbr   r   s         r   err_restorePythonAPI.err_restoreU  sQ    r{{}tzzlQ.>??;||  #]33r   c              #   l  #    [        S5       Vs/ s H.  n[        R                  " U R                  U R                  5      PM0     snu  p4nU R                  X4U5        Sv   U R                  R                  U5      nU R                  R                  U5      nU R                  R                  U5      nU(       a  [        R                  " U R                  U R                  5       5      n	U R                  R                  U	SS9 u  pU
   U R                  U5        U R                  U5        U R                  U5        SSS5        U   U R                  XgU5        SSS5        SSS5        gU R                  XgU5        gs  snf ! , (       d  f       NL= f! , (       d  f       N@= f! , (       d  f       g= f7f)z
Temporarily push the current error indicator while the code
block is executed.  If *keep_new* is True and the code block
raises a new error, the new error is kept, otherwise the old
error indicator is restored at the end of the block.
r   NFlikely)ranger   r   rH   r   r0  r   r   r  r   r   r6  )r   keep_newir-  r.  r/  r4  rA   r5  	new_errorif_errorif_oks               r   err_pushPythonAPI.err_pushZ  sG     $)8-#+a "--dllDJJG#+-3s#&\\s#ll%\\s#++DLL$:K:K:MNI%%i%>BS8KKOKK$KKO	 
 $$Rb1  ?> Rb)'- X
 U ?>sY   F45E<B=F4F#4F;
F#FF# !F4
F	F#
F 	F##
F1-F4c                 v    U R                   R                  U R                  U R                  R                  USS9$ )z
Get a Python object through its C-accessible *name*
(e.g. "PyExc_ValueError").  The underlying variable must be
a `PyObject *`, and the value of that pointer is returned.
T)	dllimport)rG   get_c_valuerH   r   r   )r   r   s     r   r  PythonAPI.get_c_objectw  s7     ||''djj6H6H$26 ( 8 	8r   c                 ~    SU-  nU R                   R                  U R                  U5      nU R                  SU5        g )Nzglobal name '%s' is not definedPyExc_NameErrorrG   r   r   r   r   r   r  cstrs       r   raise_missing_global_error$PythonAPI.raise_missing_global_error  s7    /$6||//SA-t4r   c                 ~    SU-  nU R                   R                  U R                  U5      nU R                  SU5        g )Nzname '%s' is not definedrH  rI  rJ  s       r   raise_missing_name_error"PythonAPI.raise_missing_name_error  s7    (4/||//SA-t4r   c                 H   [         R                  " [         R                  " 5       U R                  /5      nU R	                  USS9nUR
                  R                  S5        U R                  R                  U R                  U5      nU R                  R                  X445        g )NPy_FatalErrorr   noreturn)r   r   r   r   r   
attributesaddrG   r   r   rH   r   )r   r  r   r   rK  s        r   fatal_errorPythonAPI.fatal_error  ss    r{{}t||n=?;
*%||//SA"g&r   c                    [         R                  " U R                  U R                  U R                  /5      nU R	                  USS9nU R
                  R                  U R                  U5      nU R                  R                  XAU/5      $ )6Lookup name inside dict

Returns a borrowed reference
PyDict_GetItemStringr   )
r   r   r   r   r   rG   r   r   rH   r   )r   dicr   r   r   rK  s         r   dict_getitem_stringPythonAPI.dict_getitem_string  sn    
 tzzDJJ+EF+AB||//TB||  4[11r   c                     [         R                  " U R                  U R                  U R                  /5      nU R                  USS9nU R                  R                  XAU/5      $ )rY  PyDict_GetItemr   r   )r   r[  r   r   r   s        r   dict_getitemPythonAPI.dict_getitem  sT    
 tzzDJJ

+CD+;<||  4[11r   c           	         US:X  aM  [         R                  " U R                  S5      nU R                  USS9nU R                  R                  US5      $ [         R                  " U R                  U R                  /5      nU R                  USS9nU R                  R                  U[        U R                  [        U5      5      /5      $ )Nr   r6   
PyDict_Newr   _PyDict_NewPresized)	r   r   r   r   rH   r   r   r   r   )r   presizer   r   s       r   dict_newPythonAPI.dict_new  s    a<??4::r2D##D|#<B<<$$R,,??4::/@AD##D/D#EB<<$$R&.tG&M%NP Pr   c                     [         R                  " [         R                  " S5      U R                  U R                  U R                  45      nU R	                  USS9nU R
                  R                  XQX#45      $ )Nr   PyDict_SetItemr   r   r   r   r   r   rH   r   )r   dictobjnameobjvalobjr   r   s         r   dict_setitemPythonAPI.dict_setitem  sb    rzz"~

DJJ04

0< =+;<||  w%?@@r   c                 @   [         R                  " [         R                  " S5      U R                  U R                  U R                  45      nU R                  USS9nU R                  R                  U R                  U5      nU R                  R                  XQXc45      $ )Nr   PyDict_SetItemStringr   )r   r   r   r   r   r   rG   r   r   rH   r   )r   rk  r   rm  r   r   rK  s          r   dict_setitem_stringPythonAPI.dict_setitem_string  s|    rzz"~

DLL04

0< =+AB||//TB||  t%<==r   c                     U R                  5       nU R                  U5         U H  u  p4U R                  X#U5        M     SSS5        U$ ! , (       d  f       U$ = f)zB
Args
-----
keyvalues: iterable of (str, llvm.Value of PyObject*)
N)rf  if_object_okrr  )r   	keyvaluesrk  kvs        r   	dict_packPythonAPI.dict_pack  sU     --/w'!((Q7 " (  (' s   A


Ac                     [         R                  " U R                  U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )NPyFloat_FromDoubler   )r   r   r   r   r   rH   r   )r   fvalr   r   s       r   float_from_doublePythonAPI.float_from_double  sI    tzzDKK=9+?@||  V,,r   c                     [         R                  " U R                  U R                  U R                  /5      nU R	                  USS9nU R                  S5      nU R                  R                  X1U/5      $ )NPyNumber_AsSsize_tr   PyExc_OverflowError)r   r   r   r   r   r  rH   r   )r   numobjr   r   	exc_classs        r   number_as_ssize_tPythonAPI.number_as_ssize_t  sd    tTZZ0HI+?@%%&;<	||  i%899r   c                     [         R                  " U R                  U R                  /5      nU R                  USS9nU R                  R                  X1/5      $ )NPyNumber_Longr   r   r   r  r   r   s       r   number_longPythonAPI.number_long  sH    tzzDJJ<8?;||  X..r   c                     [         R                  " U R                  U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )NPyLong_AsUnsignedLongLongr   r   r   r   r   r   rH   r   r  s       r   long_as_ulonglongPythonAPI.long_as_ulonglong  sI    t~~

|<+FG||  X..r   c                     [         R                  " U R                  U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )NPyLong_AsLongLongr   r  r  s       r   long_as_longlongPythonAPI.long_as_longlong  sI    t~~

|<+>?||  X..r   c                     [         R                  " U R                  U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )z~
Convert the given Python integer to a void*.  This is recommended
over number_as_ssize_t as it isn't affected by signedness.
PyLong_AsVoidPtrr   r   r   r   r   r   rH   r   r  s       r   long_as_voidptrPythonAPI.long_as_voidptr  sK    
 t||djj\:+=>||  X..r   c                 z   [         R                  " U R                  U/5      nU R                  XRS9n[        R
                  " U R                  U R                  5      nU R                  XRS9nU R                  R                  U R                  R                  Xa/5      U5        U R                  R                  U5      $ )Nr   )
r   r   r   r   r   r   rH   rU   r   r   )r   ival	func_namenative_int_typesignedr   r   resptrs           r   _long_from_native_intPythonAPI._long_from_native_int  s    tzzO+<=5$$T\\4::>54<<,,R8&A||  ((r   c                     Sn[         R                  " U R                  U R                  /5      nU R	                  X2S9nU R
                  R                  XA/5      $ )NPyLong_FromLongr   r   r   r   r   r   rH   r   )r   r  r  r   r   s        r   long_from_longPythonAPI.long_from_long   sK    %	tzzDII;75||  V,,r   c                 :    U R                  USU R                  SS9$ )NPyLong_FromUnsignedLongFr  )r  r   r   r  s     r   long_from_ulongPythonAPI.long_from_ulong  s*    ))$0I*.))E * C 	Cr   c                 :    U R                  USU R                  SS9$ )NPyLong_FromSsize_tTr  )r  r   r  s     r   long_from_ssize_tPythonAPI.long_from_ssize_t
  s*    ))$0D*.//$ * H 	Hr   c                 :    U R                  USU R                  SS9$ )NPyLong_FromLongLongTr  )r  r   r  s     r   long_from_longlongPythonAPI.long_from_longlong  s*    ))$0E*.-- * F 	Fr   c                 :    U R                  USU R                  SS9$ )NPyLong_FromUnsignedLongLongFr  )r  r   r  s     r   long_from_ulonglongPythonAPI.long_from_ulonglong  s*    ))$0M*... * H 	Hr   c                 ~   UR                   R                  nX R                  R                  ::  a4  U R                  U R                  R                  XR                  5      5      $ X R                  R                  ::  a4  U R                  U R                  R                  XR                  5      5      $ [        SU-  5      e)z8
Return a Python integer from any native integer value.
integer too big (%d bits))	r   widthr   r  rH   sextr   r  OverflowErrorr   r  bitss      r   long_from_signed_intPythonAPI.long_from_signed_int  s     yy99??"&&t||'8'8yy'IJJ]](((**4<<+<+<T==+QRR ;t DEEr   c                 ~   UR                   R                  nX R                  R                  ::  a4  U R                  U R                  R                  XR                  5      5      $ X R                  R                  ::  a4  U R                  U R                  R                  XR                  5      5      $ [        SU-  5      e)z8
Same as long_from_signed_int, but for unsigned values.
r  )	r   r  r   r  rH   zextr   r  r  r  s      r   long_from_unsigned_int PythonAPI.long_from_unsigned_int"  s     yy::###''(9(9$

(KLL^^)))++DLL,=,=dNN,STT ;t DEEr   c                     [         R                  " U R                  U R                  U R                  /5      nU R                  USU-  S9nU$ )NzPyNumber_%sr   )r   r   r   r   )r   r   r   r   s       r   _get_number_operatorPythonAPI._get_number_operator.  sB    tzzDJJ

+CD=4+?@	r   c                 v    U(       a  SU-   nU R                  U5      nU R                  R                  XRU/5      $ )NInPlace)r  rH   r   )r   r   lhsrhsinplacer   s         r   _call_number_operatorPythonAPI._call_number_operator3  s8    t#D&&t,||  3Z00r   c                 $    U R                  SXUS9$ )NAddr  r  r   r  r  r  s       r   
number_addPythonAPI.number_add9      ))%7)KKr   c                 $    U R                  SXUS9$ )NSubtractr  r  r  s       r   number_subtractPythonAPI.number_subtract<      ))*c)PPr   c                 $    U R                  SXUS9$ )NMultiplyr  r  r  s       r   number_multiplyPythonAPI.number_multiply?  r  r   c                 $    U R                  SXUS9$ )N
TrueDivider  r  r  s       r   number_truedividePythonAPI.number_truedivideB  s    )),')RRr   c                 $    U R                  SXUS9$ )NFloorDivider  r  r  s       r   number_floordividePythonAPI.number_floordivideE  s    ))-7)SSr   c                 $    U R                  SXUS9$ )N	Remainderr  r  r  s       r   number_remainderPythonAPI.number_remainderH  s    ))+s)QQr   c                 $    U R                  SXUS9$ )NMatrixMultiplyr  r  r  s       r   number_matrix_multiply PythonAPI.number_matrix_multiplyK  s    ))*:Cg)VVr   c                 $    U R                  SXUS9$ )NLshiftr  r  r  s       r   number_lshiftPythonAPI.number_lshiftN      ))(Cg)NNr   c                 $    U R                  SXUS9$ )NRshiftr  r  r  s       r   number_rshiftPythonAPI.number_rshiftQ  r  r   c                 $    U R                  SXUS9$ )NAndr  r  r  s       r   
number_andPythonAPI.number_andT  r  r   c                 $    U R                  SXUS9$ )NOrr  r  r  s       r   	number_orPythonAPI.number_orW  s    ))$')JJr   c                 $    U R                  SXUS9$ )NXorr  r  r  s       r   
number_xorPythonAPI.number_xorZ  r  r   c                     [         R                  " U R                  U R                  /S-  5      nU(       a  SOSnU R                  XE5      nU R                  R                  XaX R                  5       /5      $ )Nr   PyNumber_InPlacePowerPyNumber_Power)r   r   r   r   rH   r   borrow_none)r   r  r  r  r   fnamer   s          r   number_powerPythonAPI.number_power]  s_    tzzDJJ<!+;<+2'8H,||  30@0@0B%CDDr   c                     [         R                  " U R                  U R                  /5      nU R                  USS9nU R                  R                  X145      $ )NPyNumber_Negativer   r   r   s       r   number_negativePythonAPI.number_negativec  I    tzzDJJ<8+>?||  V,,r   c                     [         R                  " U R                  U R                  /5      nU R                  USS9nU R                  R                  X145      $ )NPyNumber_Positiver   r   r   s       r   number_positivePythonAPI.number_positiveh  r  r   c                     [         R                  " U R                  U R                  /5      nU R                  USS9nU R                  R                  X1/5      $ )NPyNumber_Floatr   r   )r   rA   r   r   s       r   number_floatPythonAPI.number_floatm  sI    tzzDJJ<8+;<||  U++r   c                     [         R                  " U R                  U R                  /5      nU R                  USS9nU R                  R                  X145      $ )NPyNumber_Invertr   r   r   s       r   number_invertPythonAPI.number_invertr  sI    tzzDJJ<8+<=||  V,,r   c                     [         R                  " U R                  U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )NPyFloat_AsDoubler   )r   r   r   r   r   rH   r   )r   fobjr   r   s       r   float_as_doublePythonAPI.float_as_doublew  sI    t{{TZZL9+=>||  V,,r   c                 n    U R                   R                  XR                  5      nU R                  U5      $ )z(
Get a Python bool from a LLVM boolean.
)rH   r  r   bool_from_long)r   bvallongvals      r   bool_from_boolPythonAPI.bool_from_bool|  s-     ,,##D))4""7++r   c                     [         R                  " U R                  U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )NPyBool_FromLongr   r  )r   r  r   r   s       r   r$  PythonAPI.bool_from_long  sI    tzzDII;7+<=||  V,,r   c                     [         R                  " U R                  [         R                  " 5       [         R                  " 5       /5      nU R	                  USS9nU R
                  R                  XAU/5      $ )NPyComplex_FromDoublesr   )r   r   r   r   r   rH   r   )r   realvalimagvalr   r   s        r   complex_from_doublesPythonAPI.complex_from_doubles  sW    tzzBMMOR]]_+MN+BC||  w%788r   c                     [         R                  " [         R                  " 5       U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )NPyComplex_RealAsDoubler   r   r   r   r   r   rH   r   r   cobjr   r   s       r   complex_real_as_double PythonAPI.complex_real_as_double  K    r}}=+CD||  V,,r   c                     [         R                  " [         R                  " 5       U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )NPyComplex_ImagAsDoubler   r4  r5  s       r   complex_imag_as_double PythonAPI.complex_imag_as_double  r9  r   c                    [         R                  " U R                  U R                  5      n[         R                  " U R                  U R                  5      n[         R                  " U R                  U R                  5      n[        R
                  " [        R                  " S5      U R                  /U R                  R                  5       /S-  -   5      nU R                  USS9nU R                  R                  XaX#U45      nU R                  R                  U5      nU R                  R                  U5      n	U R                  R                  U5      n
[         R                  " U R                  U5      XU
4$ )z
Read the members of a slice of integers.

Returns a (ok, start, stop, step) tuple where ok is a boolean and
the following members are pointer-sized ints.
r   r   numba_unpack_slicer   )r   r   rH   r   r   r   r   r   r   r   r   r   r   )r   rN   pstartpstoppstepr   r   resstartstopsteps              r   slice_as_intsPythonAPI.slice_as_ints  s    $$T\\4??C##DLL$//B##DLL$//Brzz"~ $

|t/I/I/K.Lq.PPR+?@ll&$?@!!&)||  '||  't||S15DDr   c                     [         R                  " U R                  U R                  U R                  U R                  /5      nU R	                  USS9nU R
                  R                  XQX#45      $ )NPySequence_GetSlicer   r   r   r   r   r   rH   r   )r   rN   rD  rE  r   r   s         r   sequence_getslicePythonAPI.sequence_getslice  s^    tzzDJJ,0OO,= >+@A||  5%788r   c                     [         R                  " U R                  U R                  /5      nU R                  USS9nU R                  R                  X1/5      $ )NPySequence_Tupler   r   r   s       r   sequence_tuplePythonAPI.sequence_tuple  I    tzzDJJ<8+=>||  U++r   c                     [         R                  " U R                  U R                  U R                  /5      nU R                  USS9nU R                  R                  XAU/5      $ )NPySequence_Concatr   r   )r   obj1obj2r   r   s        r   sequence_concatPythonAPI.sequence_concat  sR    tzzDJJ

+CD+>?||  D\22r   c                     [         R                  " U R                  U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )N
PyList_Newr   rK  )r   szvalr   r   s       r   list_newPythonAPI.list_new  sI    tzzDOO+<=<8||  W--r   c                     [         R                  " U R                  U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )NPyList_Sizer   r   r   r   r   r   rH   r   )r   lstr   r   s       r   	list_sizePythonAPI.list_size  sH    t==9||  U++r   c                     [         R                  " [         R                  " S5      U R                  U R                  /5      nU R	                  USS9nU R
                  R                  XAU/5      $ )Nr   PyList_Appendr   rj  )r   ra  rA   r   r   s        r   list_appendPythonAPI.list_append  sU    rzz"~

DJJ/GH?;||  3Z00r   c                     [         R                  " [         R                  " S5      U R                  U R                  U R                  /5      nU R                  USS9nU R                  R                  XQX#/5      $ )z&
Warning: Steals reference to ``val``
r   PyList_SetItemr   r   r   r   r   r   r   rH   r   )r   ra  idxrA   r   r   s         r   list_setitemPythonAPI.list_setitem  sc     rzz"~

DOO04

0< =+;<||  3_55r   c                 H   [         R                  " U R                  U R                  U R                  /5      nU R	                  USS9n[        U[        5      (       a*  U R                  R                  [        R                  U5      nU R                  R                  XAU/5      $ )z
Returns a borrowed reference.
PyList_GetItemr   )r   r   r   r   r   rm   r   rG   get_constantr   r   rH   r   )r   ra  rk  r   r   s        r   r   PythonAPI.list_getitem  s{     tzzDJJ+HI+;<c3,,++EJJ<C||  3Z00r   c                 2   Uc  U R                  5       n[        R                  " [        R                  " S5      U R                  U R
                  U R
                  U R                  /5      nU R                  USS9nU R                  R                  XaX#U45      $ )Nr   PyList_SetSlicer   )	r   r   r   r   r   r   r   rH   r   )r   ra  rD  rE  rN   r   r   s          r   list_setslicePythonAPI.list_setslice  s    ;&&(Crzz"~

DOO040M N+<=||  5%<==r   c                    [         R                  " U R                  U R                  U R                  /5      nU R	                  USS9nU R
                  R                  [        R                  U5      nU R                  R                  XAU/5      $ )z
Borrow reference
PyTuple_GetItemr   )r   r   r   r   r   rG   rp  r   r   rH   r   )r   tuprk  r   r   s        r   tuple_getitemPythonAPI.tuple_getitem  sn     tzzDJJ+HI+<=ll''

C8||  3Z00r   c                 <   [         R                  " U R                  U R                  /SS9nU R	                  USS9nU R
                  R                  [        R                  [        U5      5      nU/nUR                  U5        U R                  R                  X55      $ )NTr   PyTuple_Packr   )r   r   r   r   r   rG   rp  r   r   ry   extendrH   r   )r   itemsr   r   nr   s         r   
tuple_packPythonAPI.tuple_pack  sz    tzzDOO+<dK>:LL%%ejj#e*=sE||  **r   c                     [         R                  " U R                  U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )NPyTuple_Sizer   r`  )r   rx  r   r   s       r   
tuple_sizePythonAPI.tuple_size  sH    t=>:||  U++r   c                     [         R                  " U R                  U R                  /5      nU R	                  USS9nU R
                  R                  X0R                  U5      /5      $ )NPyTuple_Newr   rK  )r   countr   r   s       r   	tuple_newPythonAPI.tuple_new  sS    tzzDOO+<==9||  ooe&<%=>>r   c                    [         R                  " [         R                  " S5      U R                  U R                  U R                  /5      nU R                  USS9nU R	                  U5      nU R                  R                  XQX#/5        g)z
Steals a reference to `item`.
r   PyTuple_SetItemr   Nrj  )r   	tuple_valr|   itemr   
setitem_fns         r   tuple_setitemPythonAPI.tuple_setitem  sn     rzz"~ $

DOOTZZHJ''3D'E
&*%&>?r   c                     Uc  U R                  5       n[        R                  " U R                  U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )N	PySet_Newr   )r   r   r   r   r   rH   r   )r   iterabler   r   s       r   set_newPythonAPI.set_new  s\    ++-HtzzDJJ<8;7||  Z00r   c                     [         R                  " [         R                  " S5      U R                  U R                  /5      nU R	                  USS9nU R
                  R                  XAU/5      $ )Nr   	PySet_Addr   rj  )r   setrd   r   r   s        r   set_addPythonAPI.set_add   sU    rzz"~

DJJ/GH;7||  5\22r   c                     [         R                  " [         R                  " S5      U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )Nr   PySet_Clearr   rj  r   r  r   r   s       r   	set_clearPythonAPI.set_clear%  sL    rzz"~

|<=9||  U++r   c                     [         R                  " U R                  U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )N
PySet_Sizer   r`  r  s       r   set_sizePythonAPI.set_size*  sH    t=<8||  U++r   c                     [         R                  " [         R                  " S5      U R                  U R                  /5      nU R	                  USS9nU R
                  R                  XAU/5      $ )Nr   _PySet_Updater   rj  )r   r  r  r   r   s        r   
set_updatePythonAPI.set_update/  sU    rzz"~

DJJ/GH?;||  8_55r   c                 `   [         R                  " [         R                  " S5      U R                  U R                  R                  5       U R                  R                  5       U R                  R                  5       /5      nU R                  USS9nU R                  R                  XaX#U45      $ )Nr   _PySet_NextEntryr   )
r   r   r   r   r   r   r   r   rH   r   )r   r  posptrkeyptrhashptrr   r   s          r   set_next_entryPythonAPI.set_next_entry4  s    rzz"~ $

DOO,F,F,H $

 5 5 79R9R9T VW +=>||  67%CDDr   c              #     ^	^
#    U R                   m
[        R                  " T
U R                  SS9n[        R                  " T
U R                  SS9n[        R
                  " T
[        U R                  S5      SS9nT
R                  S5      nT
R                  S5      m	T
R                  U5        U	U
4S jnT
R                  U5         U R                  XX25      n[        R                  " T
U5      nT
R                  US	S
9   T
R                  T	5        S S S 5        [        T
R                  U5      U5      v   T
R                  U5        S S S 5        T
R!                  T	5        g ! , (       d  f       NV= f! , (       d  f       N1= f7f)Nr  r   r  r   r  bb_bodybb_endc                  (   > TR                  T 5        g r   )branch)r  rH   s   r   r   'PythonAPI.set_iterate.<locals>.do_breakI  s    NN6"r   Fr9  )rH   r   r   r   r   alloca_once_valuer   r   append_basic_blockr  
goto_blockr  r   if_thenr   r   position_at_end)r   r  r  r  r  r  r   rfinishedr  rH   s            @@r   set_iteratePythonAPI.set_iterate;  s0    ,,%%gt~~IN$$WdjjxH**7+3DOOQ+G08: ,,Y7++H5w	# (##CAAw2H%8v& 9V 4h??NN7# ) 	' 98 )(s6   CF:E3 E"6E3F"
E0	,E33
F=Fc                 N   [         R                  " U R                  5      n[         R                  " [         R                  " 5       U/5      nU R                  US5      n[        R                  " U R                  U R                  5      nU R                  R                  X4/5        U$ )zS
Ensure the GIL is acquired.
The returned value must be consumed by gil_release().
numba_gil_ensure)
r   r   r   r   r   r   r   r   rH   r   )r   gilptrtyr   r   gilptrs        r   
gil_ensurePythonAPI.gil_ensureZ  st    
 >>$..1r{{}xj9&89$$T\\4>>B"h'r   c                     [         R                  " U R                  5      n[         R                  " [         R                  " 5       U/5      nU R                  US5      nU R                  R                  XA/5      $ )zO
Release the acquired GIL by gil_ensure().
Must be paired with a gil_ensure().
numba_gil_release)r   r   r   r   r   r   rH   r   )r   gilr  r   r   s        r   gil_releasePythonAPI.gil_releasef  sX    
 >>$..1r{{}xj9&9:||  U++r   c                     [         R                  " U R                  / 5      nU R                  USS9nU R                  R                  U/ 5      $ )zR
Release the GIL and return the former thread state
(an opaque non-NULL pointer).
PyEval_SaveThreadr   )r   r   r   r   rH   r   r  s      r   save_threadPythonAPI.save_threadp  sE    
 t||R0+>?||  R((r   c                     [         R                  " [         R                  " 5       U R                  /5      nU R	                  USS9nU R
                  R                  X1/5        g)z8
Restore the given thread state by reacquiring the GIL.
PyEval_RestoreThreadr   N)r   r   r   r   r   rH   r   )r   thread_stater   r   s       r   restore_threadPythonAPI.restore_thready  sJ     r{{}t||n=+AB"n-r   c                     [         R                  " U R                  U R                  /5      nU R	                  USS9nU R
                  R                  X145      $ )Nnumba_get_pyobject_private_datar   r  r   s       r   object_get_private_data!PythonAPI.object_get_private_data  sI    t||djj\:+LM||  V,,r   c                     [         R                  " [         R                  " 5       U R                  U R                  /5      nU R                  USS9nU R                  R                  XAU45      $ )Nnumba_set_pyobject_private_datar   )r   r   r   r   r   r   rH   r   )r   rN   ptrr   r   s        r   object_set_private_data!PythonAPI.object_set_private_data  sT    r{{}tzz4<<.HI+LM||  3Z00r   c                     [         R                  " [         R                  " 5       U R                  /5      nU R	                  USS9nU R
                  R                  X145      $ )N!numba_reset_pyobject_private_datar   r   r   s       r   object_reset_private_data#PythonAPI.object_reset_private_data  sK    r{{}tzzl;+NO||  V,,r   c                     [         R                  " U R                  U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )NPyImport_ImportModuler   r   r   r   r   r   rH   r   )r   modnamer   r   s       r   import_modulePythonAPI.import_module  sI    tzzDLL>:+BC||  Y//r   c                 <   [         R                  " U R                  U R                  /SS9nU R                  USS9nU/[	        U5      -   nUR                  U R                  R                  [        R                  5      5        U R                  R                  XE5      $ )NTr   PyObject_CallFunctionObjArgsr   )r   r   r   r   r   rz   rG   get_constant_nullr   r   rH   r   )r   calleeobjargsr   r   r   s         r   call_function_objargsPythonAPI.call_function_objargs  sx    tzzDJJ<F+IJx$w-'DLL225>>BC||  **r   c                 6   U R                   R                  U R                  U5      n[        R                  " U R
                  U R
                  U R                  U R                  /SS9nU R                  USS9nS[        U5      -  nU R                   R                  U R                  U5      nXU/n	U(       a  U	R                  U5        U	R                  U R                   R                  [        R                  5      5        U R                  R                  Xi5      $ )NTr   PyObject_CallMethodr   O)rG   r   r   r   r   r   r   r   ry   r}  rz   r  r   r   rH   r   )
r   r  methodr  cnamer   r   r   cfmtr   s
             r   call_methodPythonAPI.call_method  s    00fEtzzDJJdll+S%)++@ACL ||//SAt$KK DLL225>>BC||  **r   c                 L   US L =n(       a  U R                  S5      nUc  U R                  5       n[        R                  " U R                  U R                  /S-  5      nU R                  USS9nU R                  R                  XaX#45      nU(       a  U R                  U5        U$ )Nr   r   PyObject_Callr   )	r  r   r   r   r   r   rH   r   r   )r   r  r   r   args_was_noner   r   results           r   r   PythonAPI.call  s     DL(=(>>!$D;&&(CtzzDJJ<!+;<?;""2':;KKr   c                     [         R                  " U R                  U R                  /5      nU R                  USS9nU R                  R                  X145      $ )zJEmit a call to ``PyObject_Type(obj)`` to get the type of ``obj``.
        PyObject_Typer   r   r   s       r   object_typePythonAPI.object_type  sJ     tzzDJJ<8?;||  V,,r   c                     [         R                  " [         R                  " S5      U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )Nr   PyObject_IsTruer   rj  r   s       r   object_istruePythonAPI.object_istrue  sM    rzz"~

|<+<=||  U++r   c                     [         R                  " [         R                  " S5      U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )Nr   PyObject_Notr   rj  r   s       r   
object_notPythonAPI.object_not  sL    rzz"~

|<>:||  U++r   c                    / SQnX4;   a  UR                  U5      n[        R                  " U R                  U R                  U R                  [        R                  " S5      /5      nU R                  USS9nU R                  R                  [        R                  U5      nU R                  R                  XqX(45      $ US:X  a-  U R                  R                  SX5      n	U R                  U	5      $ US:X  a-  U R                  R                  SX5      n	U R                  U	5      $ US	;   Ga  [        R                  " [        R                  " S5      U R                  U R                  /5      nU R                  US
S9nU R                  R                  XrU45      n
U R                  R                  [        R                  S5      nU R                  R                  SX5      n[        R                  " U R                  [!        U R                  S5      5      n[        R"                  " U R                  U5         US:X  a  U R                  R%                  U
5      n
U R                  R'                  U
[        R                  " S5      5      nU R                  R)                  U R                  U5      U5        SSS5        U R                  R+                  U5      $ [-        SR/                  US95      e! , (       d  f       NA= f)zL
Refer to Python source Include/object.h for macros definition
of the opid.
)<z<===!=>z>=r   PyObject_RichComparer   isr  zis notr	  )innot inPySequence_ContainsNr     zUnknown operator {op!r})op)r|   r   r   r   r   r   rG   rp  r   int32rH   r   icmp_unsignedr'  r   r  r   	if_likelynot_truncrU   r   NotImplementedErrorformat)r   r  r  opstropsopidr   r   lopidbitflagstatusnegoneis_goodoutptr	truncateds                  r   object_richcomparePythonAPI.object_richcompare  s[   
 1<99U#D??4::

DJJ

SU/WXD##D/E#FBLL--ekk4@E<<$$Rs):;;d]ll00s@G&&w//hll00s@G&&w//&&??2::b>DJJ

3KLD##D/D#EB\\&&r:6F\\..u{{B?Fll00vFG..t||/7

D/IKF ""4<<9H$!\\..v6F LL..vrzz!}E	""4#6#6y#A#)+ : <<$$V,,%&?&F&F 'G '   :9s   5A=K--
K;c                     [         R                  " U R                  U R                  /5      nU R                  USS9nU R                  R                  X1/5      $ )NPyIter_Nextr   r   )r   iterobjr   r   s       r   	iter_nextPythonAPI.iter_next  sH    tzzDJJ<8=9||  Y//r   c                     [         R                  " U R                  U R                  /5      nU R                  USS9nU R                  R                  X1/5      $ )NPyObject_GetIterr   r   r   s       r   object_getiterPythonAPI.object_getiter  rR  r   c                    U R                   R                  U R                  U5      n[        R                  " U R
                  U R
                  U R                  /5      nU R                  USS9nU R                  R                  XQU/5      $ )NPyObject_GetAttrStringr   )
rG   r   r   r   r   r   r   r   rH   r   )r   rN   attrrK  r   r   s         r   object_getattr_stringPythonAPI.object_getattr_string  sl    ||//TBtzzDJJ+EF+CD||  4[11r   c                     [         R                  " U R                  U R                  U R                  /5      nU R                  USS9nU R                  R                  XAU/5      $ )NPyObject_GetAttrr   r   )r   rN   r1  r   r   s        r   object_getattrPythonAPI.object_getattr	  sR    tzzDJJ

+CD+=>||  4[11r   c                 @   U R                   R                  U R                  U5      n[        R                  " [        R
                  " S5      U R                  U R                  U R                  /5      nU R                  USS9nU R                  R                  XaXC/5      $ )Nr   PyObject_SetAttrStringr   )rG   r   r   r   r   r   r   r   r   rH   r   )r   rN   r1  rA   rK  r   r   s          r   object_setattr_stringPythonAPI.object_setattr_string  sw    ||//TBrzz"~

DLL$**/UV+CD||  4%566r   c                     [         R                  " [         R                  " S5      U R                  U R                  U R                  /5      nU R	                  USS9nU R
                  R                  XQX#/5      $ )Nr   PyObject_SetAttrr   rj  )r   rN   r1  rA   r   r   s         r   object_setattrPythonAPI.object_setattr  s]    rzz"~

DJJ

/ST+=>||  4%566r   c                 B    U R                  XU R                  5       5      $ r   )r:  r   r   rN   r1  s      r   object_delattr_stringPythonAPI.object_delattr_string  s      ))#T5I5I5KLLr   c                 B    U R                  XU R                  5       5      $ r   )r>  r   rA  s      r   object_delattrPythonAPI.object_delattr  s      ""3d.B.B.DEEr   c                     [         R                  " U R                  U R                  U R                  /5      nU R                  USS9nU R                  R                  XAU45      $ )z
Return obj[key]
PyObject_GetItemr   r   r   rN   keyr   r   s        r   object_getitemPythonAPI.object_getitem#  sT     tzzDJJ

+CD+=>||  3Z00r   c                     [         R                  " [         R                  " S5      U R                  U R                  U R                  /5      nU R	                  USS9nU R
                  R                  XQX#45      $ )z
obj[key] = val
r   PyObject_SetItemr   rj  )r   rN   rJ  rA   r   r   s         r   object_setitemPythonAPI.object_setitem+  s^     rzz"~

DJJ

/ST+=>||  3_55r   c                     [         R                  " [         R                  " S5      U R                  U R                  /5      nU R	                  USS9nU R
                  R                  XAU45      $ )z
del obj[key]
r   PyObject_DelItemr   rj  rI  s        r   object_delitemPythonAPI.object_delitem3  sX     rzz"~

DJJ/GH+=>||  3Z00r   c                     [         R                  " U R                  U R                  /5      nSnU R	                  X#S9nU R
                  R                  XA/5      $ )NPyUnicode_AsUTF8r   r   r   r   r   r   rH   r   )r   strobjr   r
  r   s        r   string_as_stringPythonAPI.string_as_string;  sK    t||djj\:"1||  X..r   c                    [         R                  " U R                  U R                  5      n[        R
                  " U R                  U R                  U R                  R                  5       /5      nSnU R                  X4S9nU R                  R                  XQU/5      nU R                  R                  S[        UR                  S5      U5      nXvU R                  R                  U5      4$ )z
Returns a tuple of ``(ok, buffer, length)``.
The ``ok`` is i1 value that is set if ok.
The ``buffer`` is a i8* of the output buffer.
The ``length`` is a i32/i64 (py_ssize_t) of the length of the buffer.
PyUnicode_AsUTF8AndSizer   r	  N)r   r   rH   r   r   r   r   r   r   r   r   r  r   r   r   )r   rX  p_lengthr   r
  r   bufferoks           r   string_as_string_and_size#PythonAPI.string_as_string_and_sizeA  s     &&t||T__Et||djj.2oo.H.H.J.L M)1""2'9:\\''(0d(C(.0 DLL--h788r   c           	      `   [         R                  " U R                  U R                  5      n[         R                  " U R                  [        R
                  " S5      5      n[         R                  " U R                  [        R
                  " S5      5      n[         R                  " U R                  U R                  5      n[        R                  " U R                  U R                  U R                  R                  5       [        R
                  " S5      R                  5       [        R
                  " S5      R                  5       U R                  R                  5       /5      nSnU R                  XgS9nU R                  R                  XX#XE/5      n	U R                  R                  S[        U	R                  S5      U	5      n
XU R                  R!                  U5      U R                  R!                  U5      U R                  R!                  U5      U R                  R!                  U5      4$ )aV  
Returns a tuple of ``(ok, buffer, length, kind)``.
The ``ok`` is i1 value that is set if ok.
The ``buffer`` is a i8* of the output buffer.
The ``length`` is a i32/i64 (py_ssize_t) of the length of the buffer.
The ``kind`` is a i32 (int32) of the Unicode kind constant
The ``hash`` is a long/uint64_t (py_hash_t) of the Unicode constant hash
r   numba_extract_unicoder   r	  N)r   r   rH   r   r   r   r   r   r   r   r   r   r   r  r   r   r   )r   rX  r]  p_kindp_asciip_hashr   r
  r   r^  r_  s              r   string_as_string_size_and_kind(PythonAPI.string_as_string_size_and_kindU  s    &&t||T__E$$T\\2::b>B%%dllBJJrNC$$T\\4>>Bt||djj.2oo.H.H.J.0jjn.G.G.I.0jjn.G.G.I.2nn.G.G.I	.K L
 (1""7;=\\''(0d(C(.0 DLL--h7!!&)4<<+<+<W+E!!&)+ 	+r   c                     [         R                  " U R                  U R                  U R                  /5      nSnU R                  X4S9nU R                  R                  XQU/5      $ )NPyString_FromStringAndSizer   r   r   r   r   r   r   rH   r   r   stringsizer   r
  r   s         r   string_from_string_and_size%PythonAPI.string_from_string_and_sizes  sT    tzzDLL$//+JK,1||  d^44r   c                     [         R                  " U R                  U R                  /5      nSnU R	                  X#S9nU R
                  R                  XA/5      $ )NPyUnicode_FromStringr   r  )r   rm  r   r
  r   s        r   string_from_stringPythonAPI.string_from_stringy  sK    tzzDLL>:&1||  X..r   c                     [         R                  " U R                  [         R                  " S5      U R                  U R
                  /5      nSnU R                  XES9nU R                  R                  XaX#/5      $ )Nr   PyUnicode_FromKindAndDatar   )	r   r   r   r   r   r   r   rH   r   )r   kindrm  rn  r   r
  r   s          r   string_from_kind_and_data#PythonAPI.string_from_kind_and_data  s_    tzzBJJrNDLL$//+Z[+1||  F%9::r   c                     [         R                  " U R                  U R                  /5      nSnU R	                  X#S9nU R
                  R                  XA/5      $ )NPyBytes_AsStringr   rW  r   rN   r   r
  r   s        r   bytes_as_stringPythonAPI.bytes_as_string  sK    t||djj\:"1||  U++r   c                    [         R                  " [         R                  " S5      U R                  U R                  R                  5       U R                  R                  5       /5      nSnU R                  XES9nU R                  R                  XaX#/5      nU R                  R                  S[        UR                  S5      U5      nU$ )Nr   PyBytes_AsStringAndSizer   r	  r  )r   r   r   r   r   r   r   r   rH   r   icmp_signedr   r   )	r   rN   p_bufferr]  r   r
  r   r  r_  s	            r   bytes_as_string_and_size"PythonAPI.bytes_as_string_and_size  s    JJrNZZ002DOO4N4N4PQ
 *1""2X'@A\\%%dHV[[",EvN	r   c                     [         R                  " U R                  U R                  U R                  /5      nSnU R                  X4S9nU R                  R                  XQU/5      $ )NPyBytes_FromStringAndSizer   rk  rl  s         r   bytes_from_string_and_size$PythonAPI.bytes_from_string_and_size  sT    tzzDLL$//+JK+1||  d^44r   c                     [         R                  " U R                  U R                  /5      nSnU R	                  X#S9nU R
                  R                  XA/5      $ )NPyObject_Hashr   )r   r   r   r   r   rH   r   r|  s        r   object_hashPythonAPI.object_hash  sK    t~~

~>1||  V,,r   c                     [         R                  " U R                  U R                  /5      nU R                  USS9nU R                  R                  X1/5      $ )NPyObject_Strr   r   r   s       r   
object_strPythonAPI.object_str  sH    tzzDJJ<8>:||  U++r   c                 H    U R                  5       nU R                  U5        U$ r   )r	  r   r   rN   s     r   r  PythonAPI.make_none  s!     C
r   c                 $    U R                  S5      $ )N_Py_NoneStruct)r  r   s    r   r	  PythonAPI.borrow_none  s      !122r   c                     [         R                  " [         R                  " 5       U R                  /SS9nU R	                  USS9nU R
                  R                  XA4U-   5      $ )NTr   PySys_FormatStdoutr   )r   r   r   r   r   rH   r   )r   r   r   r   r   s        r   sys_write_stdoutPythonAPI.sys_write_stdout  sQ    r{{}t||ndK+?@||  Vd]33r   c                     [         R                  " [         R                  " 5       U R                  /5      nU R	                  USS9nU R
                  R                  X145      $ )z<
Dump a Python object on C stderr.  For debugging purposes.
_PyObject_Dumpr   r   r   s       r   object_dumpPythonAPI.object_dump  sM     r{{}tzzl;+;<||  V,,r   c                 R   U R                   R                  (       d   S5       e[        R                  " S5      nU R	                  U R                  UR                  5      5      n[        R                  " U R                  U R                  U R                  XDU R                  /5      nU R                  USS9nUR                  S   R                  S5        U R                   R                  [        R                  UR                   5      nU R                   R                  [        R                  [#        UR$                  5      5      n	[&        R(                  " U R*                  U5      n
U R*                  R-                  XpR*                  R/                  U
U R                  5      UXU/5      $ )NzNRT requiredr   "NRT_adapt_ndarray_to_python_acqrefr   r   	nocapture)rG   
enable_nrtr   r   unserializeserialize_objectbox_typer   r   r   r   r   add_attributerp  r   r  ndimr   mutabler   r  rH   r   bitcast)r   arytyarydtypeptrinttyserial_aryty_pytyper   r   r  writablearyptrs              r   nrt_adapt_ndarray_to_python%PythonAPI.nrt_adapt_ndarray_to_python  s9   ||&&66&

2"..t/D/DU^^/TUtzz $djj%

SU+OP

  -||((ejjA<<,,U[[#emm:LM**4<<=||  ll&:&:6;?<<'I&9&*h&@ A 	Ar   c                    U R                   R                  n[        R                  " [        R
                  [        R
                  [        R
                  /5      n[        R                  " UUS5      nUR                  S   R                  S5        UR                  S   R                  S5        UR                  R                  S5        U R                   R                  XQU/5      $ )zI
Allocate a new MemInfo with data payload borrowed from a python
object.
NRT_meminfo_new_from_pyobjectr   r  r  noalias)rH   r   r   r   r   	voidptr_tget_or_insert_functionr   r  return_valuer   )r   datar   modr   r   s         r   nrt_meminfo_new_from_pyobject'PythonAPI.nrt_meminfo_new_from_pyobject  s    
 ll!! 1 12 +++
 	
  -

  -
%%i0||  E]33r   c                 ,   U R                   R                  n[        R                  " U R                  [
        R                  /5      n[
        R                  " UUS5      nUR                  R                  S5        U R                   R                  XA/5      $ )NNRT_meminfo_as_pyobjectr  )rH   r   r   r   r   r   r  r  r  r  r   )r   miptrr  r   r   s        r   nrt_meminfo_as_pyobject!PythonAPI.nrt_meminfo_as_pyobject  sx    ll!!JJ
 ++%

 	%%i0||  W--r   c                 ,   U R                   R                  n[        R                  " [        R
                  U R                  /5      n[        R                  " UUS5      nUR                  R                  S5        U R                   R                  XA/5      $ )NNRT_meminfo_from_pyobjectr  )rH   r   r   r   r   r  r   r  r  r  r   )r   miobjr  r   r   s        r   nrt_meminfo_from_pyobject#PythonAPI.nrt_meminfo_from_pyobject  sw    ll!!ZZL
 ++'

 	%%i0||  W--r   c                    U R                   R                  (       d   e[        R                  " [        R                  " S5      U R
                  U R                  /5      nU R                  USS9nUR                  S   R                  S5        UR                  S   R                  S5        U R                  R                  XAU45      $ )Nr   NRT_adapt_ndarray_from_pythonr   r   r  r  rG   r  r   r   r   r   r   r   r   r  rH   r   r   r  r  r   r   s        r   nrt_adapt_ndarray_from_python'PythonAPI.nrt_adapt_ndarray_from_python  s    ||&&&&rzz"~

DLL/IJ+JK

  -

  -||  3Z00r   c                    U R                   R                  (       d   e[        R                  " [        R                  " 5       [        R
                  " U R                  5      U R                  /5      nU R                  USS9nUR                  S   R                  S5        UR                  S   R                  S5        U R                  R                  XAU45      $ )NNRT_adapt_buffer_from_pythonr   r   r  r  )rG   r  r   r   r   r   r   r   r   r   r  rH   r   r   bufr  r   r   s        r   nrt_adapt_buffer_from_python&PythonAPI.nrt_adapt_buffer_from_python  s    ||&&&&r{{}r~~d>N>N/O/3||/= >+IJ

  -

  -||  3Z00r   c                 ~    [         R                  " U R                  X5      nU R                  R	                  U5        U$ r   )r   r  r   rG   apply_target_attributes)r   r   r   r   s       r   r   PythonAPI._get_function  s/    ++DKKD,,R0	r   c                 L    U R                   R                  U R                  5      $ r   )rH   allocar   r   s    r   
alloca_objPythonAPI.alloca_obj  s    ||""4::..r   c                 p    [         R                  " U R                  [        U R                  S5      5      nU$ )zD
Return a pointer to a stack-allocated, zero-initialized Py_buffer.
N)r   r  rH   r   r   )r   r  s     r   alloca_bufferPythonAPI.alloca_buffer   s0    
 ''(01A1A4(HJ
r   c              #      #    [         R                  " U R                  [         R                  " U R                  U5      5         S v   S S S 5        g ! , (       d  f       g = f7fr   )r   r  rH   r   r  s     r   ru  PythonAPI.if_object_ok)  sC     t||&224<<EGG G Gs   AA"A	A"
AA"c                     U R                  U5      nU R                  U5      nU R                  R                  U R                  S5      nU R                  XC5        U R                  U5        g )Nz%s)r  rY  rG   r   r   r  r   )r   rN   rX  rK  r   s        r   print_objectPythonAPI.print_object/  sT    %$$V,ll..t{{DAc(Fr   c                 r    U R                   R                  U R                  U5      nU R                  U5        g r   )rG   r   r   r  )r   textr   s      r   print_stringPythonAPI.print_string6  s*    ll..t{{DAc"r   c                 .    [        U R                  S 5      $ r   )r   r   r   s    r   r   PythonAPI.get_null_object:  s    

D))r   c                 Z    U R                  5       nU R                  R                  U5        g r   )r  rH   r   )r   nones     r   return_nonePythonAPI.return_none=  s     ~~r   c                    [        U5      nU R                  U R                  R                  [        R
                  U5      5      nU R                  U5         [        U5       HT  nU R                  R                  [        R
                  U5      nU R                  X   5        U R                  X5X   5        MV     S S S 5        U$ ! , (       d  f       U$ = fr   )
ry   r\  rG   rp  r   r   ru  r;  r   rl  )r   r~  r  seqr=  rk  s         r   	list_packPythonAPI.list_packA  s    JmmDLL55ejj!DEs#1Xll//

A>EH%!!#EH5  $
 
 $#
 
s   A$C
Cc                 2   [         R                  " U R                  U R                  [         R                  " S5      U R                  45      nU R                  USS9nU R                  R                  U R                  R                  U5      S5      nU R                  R                  U R                  R                  U5      S5      nU R                  R                  U R                  R                  U5      S5      nU R                  R                  X4XV45      $ )z
Unserialize some data.  *structptr* should be a pointer to
a {i8* data, i32 length, i8* hashbuf, i8* func_ptr, i32 alloc_flag}
structure.
r   numba_unpickler   r   r     )
r   r   r   r   r   r   rH   extract_valuer   r   )r   	structptrr   r   r  r  hasheds          r   r  PythonAPI.unserializeK  s     tzz"llBJJrNDLLIK+;<ll(():):9)EqILL&&t||'8'8'CQG++DLL,=,=i,H!L||  1%566r   c                     [         R                  " U R                  U R                  U R                  45      nU R                  USS9nU R                  R                  XAU45      $ )z
Serialize some data at runtime. Returns a pointer to a python tuple
(bytes_data, hash) where the first element is the serialized data as
bytes and the second its hash.
"numba_runtime_build_excinfo_structr   r   )r   	struct_gvexc_argsr   r   s        r   build_dynamic_excinfo_struct&PythonAPI.build_dynamic_excinfo_structY  sU     tzzDJJ

+CD+OP||  %:;;r   c                 b   [         R                  " U5      n[        U5      S:  d   eS[        R                  S:X  a  [        U5      OS-  n[        R                  " U5      n[        R                  " [        R                  " U5      R                  5       5      nU R                  R                  U R                  X45      nU R                  R                  U R                  U S3U5      n[        R                  " UR!                  U R"                  5      [        [$        R&                  " S5      UR(                  R*                  R,                  5      UR!                  U R"                  5      [        R.                  " U R"                  5      [        [$        R&                  " S5      S5      /5      nU$ )z
Same as serialize_object(), but don't create a global variable,
simply return a literal for structure:
{i8* data, i32 length, i8* hashbuf, i8* func_ptr, i32 alloc_flag}
l        z.const.pickledata.%sr   DIFF_IRz.sha1r   )r   dumpsry   r	   r  idr   make_bytearrayhashlibsha1digestrG   insert_unique_constr   r   literal_structr  r   r   r   r   r   r  get_null_value)	r   rN   r  r   bdatar  arrhasharrstructs	            r   serialize_uncachedPythonAPI.serialize_uncachedc  s6    s#4y5   %FNNa4GCYW&&t, ''T(:(A(A(CDll..t{{DH,,22KKD6
 ((KK%RZZ^SXX%5%5%;%;<OODLL)""4<<0RZZ^Q'*  r   c                 B    U R                   R                  U   nU$ ! [         aw    U R                  U5      nS[        R
                  S:X  a  [        U5      OS-  nU R                  R                  U R                   XC5      nX R                   R                  U'    U$ f = f)z
Serialize the given object in the bitcode, and return it
as a pointer to a
{i8* data, i32 length, i8* hashbuf, i8* fn_ptr, i32 alloc_flag},
structure constant (suitable for passing to unserialize()).
z.const.picklebuf.%sr   r  )	r   r   r!   r  r	   r  r   rG   r  )r   rN   gvr  r   s        r   r  PythonAPI.serialize_object  s    	/))#.B 	  	/,,S1F(v~~7JBsGPYZD11$++tLB,.KK$$S)		/s    A=BBc                 `    [         R                  " U R                  U R                  5       5      $ r   )r   r   rH   r  r   s    r   c_api_errorPythonAPI.c_api_error  s"    ""4<<1B1B1DEEr   c                     SSK Jn  [        R                  UR                  U5      n[        U R                  U R                  U 5      nU" XU5      $ )zV
Unbox the Python object as the given Numba type.
A NativeValue instance is returned.
r   )unbox_unsupported)numba.core.boxingr  	_unboxersr/   	__class__rJ   rG   rH   )r   r@   rN   r  implcs         r   rM   PythonAPI.to_native_value  sA    
 	8/@A$,,d;Ca  r   c                 v    [        U[        R                  5      (       a   S5       eU R                  XU5      nU$ )Nz;callconv should have prevented the return of optional value)rm   r   Optionalr=   )r   r@   rA   r>   outs        r   from_native_returnPythonAPI.from_native_return  sA    c5>>22 	E 5E 	E2 $$S{;
r   c                     SSK Jn  [        R                  UR                  U5      n[        U R                  U R                  X5      nU" XU5      $ )z
Box the native value of the given Numba type.  A Python object
pointer is returned (NULL if an error occurred).
This method steals any native (NRT) reference embedded in *val*.
r   )box_unsupported)r  r"  _boxersr/   r  r8   rG   rH   )r   r@   rA   r>   r"  r  r  s          r   r=   PythonAPI.from_native_value  s>     	6~~cmm_=dllDFCa  r   c                 d   [         R                  UR                  5      nUc  [        R                  $ [        R
                  " U R                  [        R                  5      n[        U R                  U R                  XU5      nU" XU5        U R                  R                  UR                  5      $ )zi
Reflect the native value onto its Python original, if any.
An error bit (as an LLVM value) is returned.
)_reflectorsr/   r  r   re   r  rH   rR   rG   r   rV   )r   r@   rA   r>   r  rV   r  s          r   r]   PythonAPI.reflect_native_value  s    
 !!#--0<$$$,,T\\7;L;LMDLL$,,$&Sq||  ,,r   c                     [         R                  " U R                  R                  U5      5      nU R                  R	                  U R
                  X5      n[        U5      $ )za
Extract the generator structure pointer from a generator *obj*
(a _dynfunc.Generator instance).
)r   r   rG   get_data_typeget_generator_staterH   ra   )r   rN   r@   
gen_ptr_tyrd   s        r   to_native_generatorPythonAPI.to_native_generator  sF    
 ^^DLL$>$>s$CD
00sO5!!r   c           	         U R                   R                  U5      nUR                  (       a   eU R                   R                  U5      nU R                   R	                  U5      n[
        R                  " U R                  U R                  U R                  U R                  /5      nU R                  XvR                  S9n[
        R                  " [
        R                  " 5       U R                  /5      n	UR                  (       a  U R                  XR                  S9n
O [        [
        R                  " U	5      S5      n
[
        R                  " U R                  U R                   U R                  [
        R                  " U5      [
        R                  " U	5      U R                  /5      nU R                  USS9n[        U R                   U5      nU R"                  R%                  XR                  5      nUc  U R'                  5       nU R"                  R%                  X0R                  5      nU R"                  R)                  UXXU45      $ )z
Make a Numba generator (a _dynfunc.Generator instance) from a
generator structure pointer *val*.
*env* is an optional _dynfunc.Environment instance to be wrapped
in the generator.
r   Nnumba_make_generator)rG   r)  
is_pointerget_abi_sizeofget_generator_descr   r   r   r   llvm_cpython_wrapper_namer   r   has_finalizerllvm_finalizer_namer   r   r   rH   r  r   r   )r   rA   r@   ro   lltygen_struct_sizegendescgenfntygenfnfinalizerty	finalizerr   r   
state_sizeinitial_states                  r   from_native_generatorPythonAPI.from_native_generator  s    ||))#.??"",,55d;,,11#6 //$**tzz4::tzz.RS""71R1R"S oobkkmdll^D**;=X=X*YI !<dCI tzzDOO,0LL,.NN7,C,.NN;,G,0LL	,: ;
 +ABdoo?
,,S,,?;&&(Cll""35||  ",Us!SU 	Ur   c                    U R                   R                  (       a   e[        R                  " [        R                  " S5      U R
                  U R                  /5      nU R                  USS9nUR                  S   R                  S5        UR                  S   R                  S5        U R                  R                  XAU45      $ )Nr   numba_adapt_ndarrayr   r   r  r  r  r  s        r   numba_array_adaptorPythonAPI.numba_array_adaptor  s    <<****rzz"~

DLL/IJ+@A

  -

  -||  3Z00r   c                 |   [         R                  " [         R                  " 5       [         R                  " U R                  5      U R
                  /5      nU R                  USS9nUR                  S   R                  S5        UR                  S   R                  S5        U R                  R                  XAU45      $ )Nnumba_adapt_bufferr   r   r  r  )r   r   r   r   r   r   r   r   r  rH   r   r  s        r   numba_buffer_adaptorPythonAPI.numba_buffer_adaptor  s    r{{} nnT-=-=>MO+?@

  -

  -||  3Z00r   c                     [         R                  " [         R                  " S5      U R                  UR                  /5      nU R                  USS9nU R                  R                  XAU/5      $ )Nr   numba_complex_adaptorr   )r   r   r   r   r   r   rH   r   )r   r6  cmplxr   r   s        r   complex_adaptorPythonAPI.complex_adaptor  sV    rzz"~

EJJ/GH+BC||  E]33r   c                     [         R                  " U R                  U R                  [         R                  " U R
                  5      /5      nU R                  USS9nU R                  R                  XAU/5      $ )Nnumba_extract_record_datar   )	r   r   r   r   r   r   r   rH   r   r   rN   pbufr   r   s        r   extract_record_dataPythonAPI.extract_record_data
  sa    t|| $

BNN4;K;K,LMO+FG||  4[11r   c                    [         R                  " [         R                  " S5      U R                  [         R                  " U R
                  5      /5      nU R                  USS9nU R                  R                  XAU/5      $ )Nr   numba_get_bufferr   )	r   r   r   r   r   r   r   rH   r   rP  s        r   
get_bufferPythonAPI.get_buffer  se    rzz"~ $

BNN4;K;K,LMO+=>||  4[11r   c                     [         R                  " [         R                  " 5       [         R                  " U R                  5      /5      nU R                  USS9nU R                  R                  X1/5      $ )Nnumba_release_bufferr   )r   r   r   r   r   r   rH   r   )r   rQ  r   r   s       r   release_bufferPythonAPI.release_buffer  sW    r{{}r~~d>N>N/O.PQ+AB||  V,,r   c                     [         R                  " [         R                  " S5      U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )N@   numba_extract_np_datetimer   rj  r   s       r   extract_np_datetimePythonAPI.extract_np_datetime  sM    rzz"~

|<+FG||  U++r   c                     [         R                  " [         R                  " S5      U R                  /5      nU R	                  USS9nU R
                  R                  X1/5      $ )Nr]  numba_extract_np_timedeltar   rj  r   s       r   extract_np_timedeltaPythonAPI.extract_np_timedelta   sM    rzz"~

|<+GH||  U++r   c                 D   [        [        R                  " S5      [        U5      5      n[        R                  " U R
                  [        R                  " S5      [        R                  " S5      /5      nU R                  USS9nU R                  R                  XAU/5      $ )Nr   r]  numba_create_np_datetimer   	r   r   r   r   r   r   r   rH   r   r   rA   	unit_coder   r   s        r   create_np_datetimePythonAPI.create_np_datetime%  ss    RZZ^S^<	tzzBJJrNBJJrN+KL+EF||  9%566r   c                 D   [        [        R                  " S5      [        U5      5      n[        R                  " U R
                  [        R                  " S5      [        R                  " S5      /5      nU R                  USS9nU R                  R                  XAU/5      $ )Nr   r]  numba_create_np_timedeltar   rg  rh  s        r   create_np_timedeltaPythonAPI.create_np_timedelta+  ss    RZZ^S^<	tzzBJJrNBJJrN+KL+FG||  9%566r   c                 p   [         R                  " U R                  [         R                  " [         R                  " S5      5      [         R                  " S5      U R                  /5      nU R                  USS9nUR                  UR                  U5      5      nU R                  R                  XaX'/5      $ )Nr   r   numba_recreate_recordr   )
r   r   r   r   r   r   r   r}   rH   r   )r   pdatarn  dtyper>   r   r   	dtypeaddrs           r   recreate_recordPythonAPI.recreate_record1  s    tzzBNN2::a=,I,.JJrNDJJ,H I+BC**;+@+@+GH	||  T%=>>r   c                     U R                   R                  U R                  U5      nU R                   R                  [        R
                  [        U5      5      nU R                  X#5      $ r   )rG   r   r   rp  r   r   ry   ro  )r   rm  rK  szs       r   string_from_constant_string%PythonAPI.string_from_constant_string8  sK    ||//VD\\&&uzz3v;?//99r   c           	         U R                   nU R                  R                  XAU5      nUR                  R                  nUR                  nXg:w  a  [
        R                  SU SU S35      eU R                  R                  XER                  X#5      u  p[        R                  " U[        R                  SS9n
U R                  R                  UR                  5      n[        R                  " XKSS9nUR                  UR                  5       u  pU   UR                  UR                  U
5        U R                  R                   R#                  X@U5        SSS5        U   [$        R&                  " U R                  XBX5      n	UR                  X5        SSS5        SSS5        UR)                  U
5      nUR)                  U5      n	X4$ ! , (       d  f       Ny= f! , (       d  f       NL= f! , (       d  f       NU= f)a  Calls into Numba jitted code and propagate error using the Python
calling convention.

Parameters
----------
func : function
    The Python function to be compiled. This function is compiled
    in nopython-mode.
sig : numba.typing.Signature
    The function signature for *func*.
args : Sequence[llvmlite.binding.Value]
    LLVM values to use as arguments.

Returns
-------
(is_error, res) :  2-tuple of llvmlite.binding.Value.
    is_error : true iff *func* raised an exception.
    res : Returned value from *func* iff *is_error* is false.

If *is_error* is true, this method will adapt the nopython exception
into a Python exception. Caller should return NULL to Python to
indicate an error.
zmismatching signature z != z.
Tr   N)rH   rG   compile_subroutine	signaturer   errorsLoweringErrorcall_internal_no_propagatefndescr   r   bool_tr   r   rV   rU   r   raise_errorr   fix_returning_optionalr   )r   r"   sigr   rH   cres	got_rettyrettyr  rC  is_error_ptrres_typeres_ptrhas_errno_errrV   s                   r   call_jit_codePythonAPI.call_jit_code=  s   2 ,,||..wcBNN..	 &&(4wcB  ll==[[#
 **7GNN$O<<..s?%%gtD __V__-1B'foo|<&&227&I  55LL' c+  . <<-ll7#}   .-s=   G*AG
G*4GG*
G	G*
G'	#G**
G8)rH   rG   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )F r   )F)r   )r6   rh   )r1   r2   r3   r4   rE   r   r   r   r   r   r   r   r   r   r  r	  r   r  r  r!  r%  r)  r0  r6  
contextlibcontextmanagerrA  r  rL  rO  rV  r\  r`  rf  rn  rr  ry  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r!  r'  r$  r0  r7  r<  rG  rL  rP  rW  r\  rb  rf  rl  r   rt  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r   r  r$  r)  r-  r2  r6  r:  r>  rB  rE  rK  rO  rS  rY  r`  rg  ro  rs  rx  r}  r  r  r  r  r  r	  r  r  r  r  r  r  r  r  r   r  r  ru  r  r  r   r  r  r  r  r  r  r  rM   r  r=   r]   r,  r?  rC  rG  rL  rR  rV  rZ  r_  rc  rj  rn  ru  ry  r  r5   r6   r   r   r   r      s   
F@@ ?D*,2%
%
,N?	N)
)
5J	-81-
7
4
 * *8	85
5
'22	PA>
 -
:/
/
/
/)-CHFH
F
F
1LQQSTRWOOLKLE-
-
,
-
-
,-
9
-
-E.9,
3
.
,
1
61>1+,
?
@13
,
,
6
E ( (<
,).-
1
-0
++
-,
,
'R0
,
22
77
M
F
161/9(+<5/;,	5-,

34
-A*4(..11
/  
#*7<:"F	!!- "'UR114
22-
,
,
77?:
;r   r   c                   4    \ rS rSrSrS rS r\S 5       rSr	g)ObjModeUtilsi{  zHInternal utils for calling objmode dispatcher from within NPM code.
    c                     Xl         g r   r<   )r   r<   s     r   r   ObjModeUtils.__init__~  s    
r   c                 :   U R                   R                  nU R                   R                  nUR                  n[        R
                  " XPR                   R                  UR                  S5      S9nUR                  R                  S 5      Ul
        SUl        UR                  S5      n[        R                  " UR                  5      (       a  U R                   R!                  UR                  [#        U5      45      nU R                   R%                  U5      n	[&        R(                  " X95      n
UR+                  U
5         UR-                  U5        S S S 5        UR/                  U5      nUR+                  [&        R(                  " X;5      5         [        R                  " UR                  5      (       a  [        U 5      nU R                   R%                  U R                   R!                  UR0                  5      5      nU R                   R3                  UW	/5      nU R                   R5                  U5        U R                   R5                  U	5        O>UR                  R7                  [#        U5      5      nUR9                  U[;        U5      SS9nU R                   R=                  U5        UR?                  X5        S S S 5        UR-                  U5        URA                  U5        UR/                  U5      nU$ ! , (       d  f       GN= f! , (       d  f       NU= f)Ncached_objmode_dispatcherr   internalr  with_objectmode)info)!r<   rH   rG   r   r   GlobalVariabler   get_unique_namer   r   initializerlinkager  r   is_serialiable
dispatcherr  r  r  r   r   r  r  r   _call_objmode_dispatcherr  r   compileadd_dynamic_addrr   r   rU   r  )r   r   r   rH   tyctxmr  r  serialized_dispatchercompile_argsfailed_unsercachedr.   compilerr  entry_pts                   r   load_dispatcherObjModeUtils.load_dispatcher  sS   **$$

""NN zz""#>?
 .
 ++H5##DOO44$(JJ$?$?%/2%!  ::112GHL"??7AL.v& / b!__W__W=>''884j::11JJ//0L0LM 99|n 

!!(+

!!,/??225?C//R\0A 0  JJf%MM&%' ?* 	v'b!= /.
 ?>s    K:D-L:
L	
Lc                 0    U u  pUR                  U5      nU$ r   )r  )r  r  r   entrypts       r   r  %ObjModeUtils._call_objmode_dispatcher  s    +
$$X.r   r  N)
r1   r2   r3   r4   rE   r   r  staticmethodr  r5   r6   r   r   r  r  {  s&    5n  r   r  )0collectionsr   r  pickler  ru   llvmliter   llvmlite.irr   r   numbar   
numba.corer   r   r	   r
   r   r   r   numba.core.utilsr   r   PY_UNICODE_1BYTE_KINDr   PY_UNICODE_2BYTE_KINDr   PY_UNICODE_4BYTE_KINDpy_unicode_wchar_kindPY_UNICODE_WCHAR_KINDobjectr   r#  r  r&  r(   rB   rO   r^   r8   rJ   rR   ra   rj   r   r   r  r6   r   r   <module>r     s>   "    
        '"88 "88 "88 ""&<< . +K	k


H*]@B H4J35 4Kj!2#$ K&	& 	1! 1!h ?,ABU Up.A Ar   