
    sh                    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    h/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/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                    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        [6        R8                  (       a/  U R                   R;                  [        R<                  5      U l        O.U R                   R;                  [        R@                  5      U l        [        R                  " [        R                  " S5      5      U l!        [        R                  " [D        RF                  S-  5      U l$        [        RJ                  " [        R                  " S5      [D        RL                  5      U l'        U R>                  U l(        [D        RR                  U l)        [D        RT                  U l*        [D        RV                  U l+        g! [         a    0 U R                  l         GNf = 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doubler	   USE_LEGACY_TYPE_SYSTEMget_value_typeintp
py_ssize_tc_intp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(("ll99%**EDO"ll99%,,GDO~~bjjm4J$@$@1$DE<<

1z7P7PQ%/%E%E"%/%E%E"%/%E%E"-  	*')DKK$	*s   K K<;K<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_object5  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_noneG  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_unraisableN  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_fetchS  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_restoreX  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   r2  r   r   r  r   r   r8  )r   keep_newir/  r0  r1  r6  rA   r7  	new_errorif_errorif_oks               r   err_pushPythonAPI.err_push]  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_objectz  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 definedrJ  rK  rL  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   rM  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   rM  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      $ )r[  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   rm  r   ro  r   r   rM  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)rh  if_object_okrt  )r   	keyvaluesrm  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_operator1  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_operator6  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_add<      ))%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_multiplyB  r  r   c                 $    U R                  SXUS9$ )N
TrueDivider  r  r  s       r   number_truedividePythonAPI.number_truedivideE  s    )),')RRr   c                 $    U R                  SXUS9$ )NFloorDivider  r  r  s       r   number_floordividePythonAPI.number_floordivideH  s    ))-7)SSr   c                 $    U R                  SXUS9$ )N	Remainderr  r  r  s       r   number_remainderPythonAPI.number_remainderK  s    ))+s)QQr   c                 $    U R                  SXUS9$ )NMatrixMultiplyr  r  r  s       r   number_matrix_multiply PythonAPI.number_matrix_multiplyN  s    ))*:Cg)VVr   c                 $    U R                  SXUS9$ )NLshiftr  r  r  s       r   number_lshiftPythonAPI.number_lshiftQ      ))(Cg)NNr   c                 $    U R                  SXUS9$ )NRshiftr  r  r  s       r   number_rshiftPythonAPI.number_rshiftT  r  r   c                 $    U R                  SXUS9$ )NAndr  r  r  s       r   
number_andPythonAPI.number_andW  r  r   c                 $    U R                  SXUS9$ )NOrr  r  r  s       r   	number_orPythonAPI.number_orZ  s    ))$')JJr   c                 $    U R                  SXUS9$ )NXorr  r  r  s       r   
number_xorPythonAPI.number_xor]  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_negativef  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_positivek  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_floatp  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_invertu  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_doublez  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   r6  r7  s       r   complex_imag_as_double PythonAPI.complex_imag_as_double  r;  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   rF  rG  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   rM  )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   rl  )r   rc  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   rc  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   rc  rm  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   rc  rF  rG  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   rr  r   r   rH   r   )r   tuprm  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   rr  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   rb  )r   rz  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   rM  )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   Nrl  )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   rl  )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   rl  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   rb  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   rl  )r   r  r  r   r   s        r   
set_updatePythonAPI.set_update2  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_entry7  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_breakL  s    NN6"r   Fr;  )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_ensure]  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_releasei  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_threads  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_thread|  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   rl  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   rl  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   rr  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  rT  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   attrrM  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   r3  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   r3  rA   rM  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   rl  )r   rN   r3  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   r3  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   rC  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   rl  )r   rN   rL  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   rl  rK  s        r   object_delitemPythonAPI.object_delitem6  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   rZ  p_lengthr   r  r   bufferoks           r   string_as_string_and_size#PythonAPI.string_as_string_and_sizeD  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   rZ  r_  p_kindp_asciip_hashr   r  r   r`  ra  s              r   string_as_string_size_and_kind(PythonAPI.string_as_string_size_and_kindX  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_sizev  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   ro  r   r  r   s        r   string_from_stringPythonAPI.string_from_string|  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   kindro  rp  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   rY  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  ra  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   rm  rn  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_attributerr  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                 D    [         R                  " U R                  X5      $ r   )r   r  r   )r   r   r   s      r   r   PythonAPI._get_function  s    --dkk4FFr   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   rw  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  r[  rG   r   r   r  r   )r   rN   rZ  rM  r   s        r   print_objectPythonAPI.print_object0  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_string7  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   rr  r   r   rw  r=  r   rn  )r   r  r  seqr?  rm  s         r   	list_packPythonAPI.list_packB  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.unserializeL  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_structZ  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_uncachedd  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   r8  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   rQ  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   rR  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   rl  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   rl  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   rh  ri  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   pdatarp  dtyper>   r   r   	dtypeaddrs           r   recreate_recordPythonAPI.recreate_record2  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   rr  r   r   ry   rq  )r   ro  rM  szs       r   string_from_constant_string%PythonAPI.string_from_constant_string9  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!  rE  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+  r2  r8  
contextlibcontextmanagerrC  r  rN  rQ  rX  r^  rb  rh  rp  rt  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r)  r&  r2  r9  r>  rI  rN  rR  rY  r^  rd  rh  rn  r   rv  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/  r4  r8  r<  r@  rD  rG  rM  rQ  rU  r[  rb  ri  rq  ru  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  rw  r  r  r   r  r  r  r  r  r  r  rM   r   r=   r]   r-  r@  rD  rH  rM  rS  rW  r[  r`  rd  rk  ro  rv  rz  r  r5   r6   r   r   r   r      s   
!F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G/  
#*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V Vr.A Ar   