
    sh?                     >   S r SSKJr  SSKJr  SSKrSSKrSSKJr  SSK	J
r
JrJr  SSKJrJr  \" SS	S
/5      r\" SS5      r\R$                  " S5      r\R$                  " S5      r\rS r\" S5      r\" S5      r\" S5      r\" S5      rSr\" \5      r " S S\5      r " S S\5      r " S S\5      r Sr!Sr"Sr#Sr$Sr%\RL                  " \\\\\/5      r'\RP                  " \'5      r) " S S\5      r* " S S \5      r+ " S! S"\+5      r, " S# S$\+5      r-\,\-S%.r.S& r/g)'z3
Calling conventions for Numba-compiled functions.
    )
namedtuple)IterableN)ir)typescgutilserrors)PYOBJECTGENERIC_POINTER	TryStatusin_tryexcinfoStatus)codeis_okis_noneis_erroris_stop_iterationis_python_excis_user_exc
excinfoptr    @   c                 8    [         R                  " [        U 5      $ N)r   Constant	errcode_t)r   s    g/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/core/callconv.py
_const_intr   +   s    ;;y$''       c                   \    \ 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rg)BaseCallConv:   c                     Xl         g r   context)selfr)   s     r   __init__BaseCallConv.__init__<   s    r   c                    U[         R                  :X  a  U R                  U5        g X#:X  a  U R                  R	                  XUS9n[
        R                  " XR                  5      nUR                  U5         U R                  R                  XR                  UR                  5      nU R                  X5        S S S 5        U R                  U5        g [        U[         R                  5      (       dl  X2R                  :w  a%  U R                  R                  XUUR                  S9nU R                  R                  XR                  U5      nU R                  X5        g [!        SR#                  UU5      5      e! , (       d  f       N= f)N)value)fromtytotyzreturning {0} for {1})r   nonereturn_native_noner)   make_helperr   as_bool_bitvalidif_thenget_return_valuetypedatareturn_value
isinstanceOptionalcastNotImplementedErrorformat)r*   builderrettyvaltyr.   optvalvalidbitretvals           r   return_optional_value"BaseCallConv.return_optional_value?   s4   EJJ##G,^\\--gE-JF**7LLAH*66w

7={{D!!'2 +
 ##G,E5>>22

"))'/4zz * ;\\227JJNFg. &&=&D&DUEJ'L M M! +*s   7AE99
Fc                 0    U R                  U[        5        g r   )_return_errcode_rawRETCODE_NONEr*   r@   s     r   r2   BaseCallConv.return_native_none\   s      ,7r   c                 0    U R                  U[        5        g r   )rI   RETCODE_EXCrK   s     r   
return_excBaseCallConv.return_exc_   s      +6r   c                 0    U R                  U[        5        g r   )rI   RETCODE_STOPITrK   s     r   return_stop_iteration"BaseCallConv.return_stop_iterationb   s      .9r   c                 p    U R                   R                  U   R                  5       nUR                  5       $ )zA
Get the actual type of the return argument for Numba type *ty*.
)r)   data_model_managerget_return_type
as_pointer)r*   tyrestypes      r   rW   BaseCallConv.get_return_typee   s0     ,,11"5EEG!!##r   c                 4    U R                  U5      nX!l        U$ )zC
Initialize and return a call helper object for the given builder.
)_make_call_helper_BaseCallConv__call_helper)r*   r@   chs      r   init_call_helperBaseCallConv.init_call_helperl   s     ##G, "	r   c                     UR                   $ r   )r^   rK   s     r   _get_call_helperBaseCallConv._get_call_helpert   s    $$$r   c                 8    UR                  UR                  5      $ r   )unserializer   )r*   r@   pyapistatuss       r   unpack_exceptionBaseCallConv.unpack_exceptionw   s      !2!233r   c                 V   UR                   R                  5       nUR                  UR                  5         UR	                  5         U R                  XU5      n[        R                  " U[        R                  " X5      5         UR                  U5        SSS5        UR                  U5        SSS5        UR                  UR                  5         UR                  S5        UR                  U5        SSS5        UR                  UR                  5         UR                  U5        SSS5        UR                  SS5        UR                  U5        UR                  U5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nv= f)zD
Given a non-ok *status*, raise the corresponding Python exception.
NPyExc_StopIterationPyExc_SystemErrorz*unknown error when calling native function)functionappend_basic_blockr6   r   	err_clearri   r   	if_likelyis_not_nullraise_objectbranchr   err_set_noner   err_set_stringposition_at_end)r*   r@   rg   rh   bbendexcs         r   raise_errorBaseCallConv.raise_errorz   s@      335__V//0 OO''?C""7#*#6#6w#DF""3'F NN5! 1 __V55645NN5! 7 __V112NN5! 3 	0I	Ku&#F F 10 76 32s<   AE8E'E8#F	F'
E5	1E88
F	
F
F(c                 h    U R                  U5      nU R                  U5      nUR                  X5      $ )z}
Get the decoded (unpacked) Python arguments with *argtypes*
from LLVM function *func*.  A tuple of LLVM values is returned.
)get_arguments_get_arg_packerfrom_arguments)r*   r@   argtypesfuncraw_argsarginfos         r   decode_argumentsBaseCallConv.decode_arguments   s5    
 %%d+&&x0%%g88r   c                 8    U R                   R                  U5      $ )z6
Get an argument packer for the given argument types.
)r)   get_arg_packer)r*   r   s     r   r~   BaseCallConv._get_arg_packer   s     ||**844r   r(   N)__name__
__module____qualname____firstlineno__r+   rF   r2   rO   rS   rW   r`   rc   ri   rz   r   r~   __static_attributes__ r   r   r%   r%   :   s?    M:87:$%4'<95r   r%   c                   `    \ rS rSrSrS rS r  SS jrS rS r	S	 r
S
 rSS jrS rS rSrg)MinimalCallConv   a  
A minimal calling convention, suitable for e.g. GPU targets.
The implemented function signature is:

    retcode_t (<Python return type>*, ... <Python arguments>)

The return code will be one of the RETCODE_* constants or a
function-specific user exception id (>= RETCODE_USEREXC).

Caller is responsible for allocating a slot for the return value
(passed as a pointer in the first argument).
c                     [        5       $ r   )_MinimalCallHelperrK   s     r   r]   !MinimalCallConv._make_call_helper   s    !##r   c                 >   UR                   R                  S   nUR                  UR                  R                  :X  d9   [	        UR                  5      [	        UR                  R                  5      45       eUR                  X#5        U R                  U[        5        g Nr   )rn   argsr8   pointeestrstorerI   
RETCODE_OKr*   r@   rE   retptrs       r   r:   MinimalCallConv.return_value   sw    !!&&q){{fkk111 	9s6;;#6#678	91f%  *5r   Nc                    Ub$  [        U[        5      (       d  [        SU< 35      eUb$  [        U[        5      (       d  [        SU< 35      eUb6  UR                  5       nUc  UnXdR                  UR                  4nS U;   a  S nOS nU R                  U5      nUR                  X#U5      n	U R                  U[        U	5      5        g )N+exc should be None or exception class, got &exc_args should be None or tuple, got )
issubclassBaseException	TypeErrorr;   tuple_raw_function_namefilenamelinerc   _add_exceptionrI   r   )
r*   r@   ry   exc_argsloc	func_namefnamelocinfocall_helperexc_ids
             r   return_user_excMinimalCallConv.return_user_exc   s    ?:c=#A#A"% & &
8U(C(C'* + + ?**,E}!llCHH5GwG++G4++C7C  *V*<=r   c                 :    U R                  XR                  5        g r   )rI   r   )r*   r@   rh   s      r   return_status_propagate'MinimalCallConv.return_status_propagate   s      ++6r   c                 f    [        U[        5      (       a  [        U5      nUR                  U5        g r   )r;   intr   retr*   r@   r   s      r   rI   #MinimalCallConv._return_errcode_raw   s%    dC  d#DDr   c                 P   UR                  SU[        5      nUR                  SU[        5      nUR                  X45      nUR	                  U5      nUR                  SU[
        5      nUR                  SU[        5      nUR                  SU[        5      n	[        UUUUUU	USS9n
U
$ )z/
Given a return *code*, get a Status instance.
==>=Nr   r   r   r   r   r   r   r   )	icmp_signedr   rJ   or_not_rN   rR   RETCODE_USEREXCr   )r*   r@   r   normr1   okerrry   r   r   rh   s              r   _get_return_status"MinimalCallConv._get_return_status   s     ""4z:""4|<[[$ll2!!$k:#//dNK))$oFT !$&) $$/*;#') r   c                     U R                  U5      n[        UR                  5      nU R                  U5      n[        R
                  " [        U/U-   5      nU$ zA
Get the implemented Function type for *restype* and *argtypes*.
)r~   listargument_typesrW   r   FunctionTyper   r*   rZ   r   r   resptrfntys         r   get_function_type!MinimalCallConv.get_function_type   sP     &&x0../%%g.y6(X*=>r   c                     U(       a   eU R                  U5      nUR                  U R                  U5      U Vs/ s H  nSU-   PM
     sn5        SUR                  S   l        gs  snf )z1
Set names and attributes of function arguments.
arg.z.retr   N)r~   assign_namesr}   r   name)r*   fnr   fe_argtypesnoaliasr   as          r   decorate_function!MinimalCallConv.decorate_function  sa     {&&{3T//3267$Qfqj$7	9 
 8s   A%
c                      UR                   SS $ )0
Get the Python-level arguments of LLVM *func*.
r#   Nr   r*   r   s     r   r}   MinimalCallConv.get_arguments       yy}r   c                    UR                   S   R                  R                  n[        R                  " X5      nUR                  [        R                  " U5      U5        U R                  U5      nUR                  X5      nU/[        U5      -   n	UR                  X)5      n
U R                  X5      nUR                  U5      nU R                  R                  XU5      nX4$ )z#
Call the Numba-compiled *callee*.
r   )r   r8   r   r   alloca_oncer   get_null_valuer~   as_argumentsr   callr   loadr)   get_returned_value)r*   r@   calleerestyargtysr   rA   	retvaltmpr   realargsr   rh   rE   outs                 r   call_functionMinimalCallConv.call_function  s     A##++''7	g,,U3Y?&&v.##G2;d+||F-((7i(ll--gfE{r   r   NNNF)r   r   r   r   __doc__r]   r:   r   r   rI   r   r   r   r}   r   r   r   r   r   r   r      sC    $6 @D"&>47
,!r   r   c                   *    \ rS rSrSrS rS rS rSrg)r   i%  z
A call helper object for the "minimal" calling convention.
User exceptions are represented as integer codes and stored in
a mapping for retrieval from the caller.
c                     0 U l         g r   
exceptions)r*   s    r   r+   _MinimalCallHelper.__init__,  s	    r   c                 `    [        U R                  5      [        -   nXU4U R                  U'   U$ )z
Add a new user exception to this helper. Returns an integer that can be
used to refer to the added exception in future.

Parameters
----------
exc :
    exception type
exc_args : None or tuple
    exception args
locinfo : tuple
    location information
)lenr   FIRST_USEREXC)r*   ry   r   r   r   s        r   r   !_MinimalCallHelper._add_exception/  s/     T__%5"%"8r   c                 j     U R                   U   $ ! [         a    SU-  n[        nU4nSnX4U4s $ f = f)z
Get information about a user exception. Returns a tuple of
(exception type, exception args, location information).

Parameters
----------
id : integer
    The ID of the exception to look up
z#unknown error %d in native functionN)r   KeyErrorSystemError)r*   r   msgry   r   r   s         r   get_exception _MinimalCallHelper.get_exceptionA  sK    	*??6** 	*7&@CCvHG'))	*s    22r   N)	r   r   r   r   r   r+   r   r  r   r   r   r   r   r   %  s    $*r   r            c                       \ rS rSrSr\R                  " S5      rS rS r	S r
  SS jr  SS	 jrS
 rS rS rS r  SS jr SS jrS rS rS rS rS rS rS rS rS S jrS rS rS r S!S jrSr g)"CPUCallConvia  a  
The calling convention for CPU targets.
The implemented function signature is:

    retcode_t (<Python return type>*, excinfo **, ... <Python arguments>)

The return code will be one of the RETCODE_* constants.
If RETCODE_USEREXC, the exception info pointer will be filled with
a pointer to a constant struct describing the raised exception.

Caller is responsible for allocating slots for the return value
and the exception info pointer (passed as first and second arguments,
respectively).
r#   c                     g r   r   rK   s     r   r]   CPUCallConv._make_call_helperr  s    r   c                 B   U R                  UR                  5      nUR                  UR                  R                  :X  d9   [	        UR                  5      [	        UR                  R                  5      45       eUR                  X#5        U R                  U[        5        g r   )_get_return_argumentrn   r8   r   r   r   rI   r   r   s       r   r:   CPUCallConv.return_valueu  sw    **7+;+;<{{fkk111 	9s6;;#6#678	91f%  *5r   c                     Ub6  UR                  5       nUc  UnXSR                  UR                  4nS U;   a  S nOS nXU4nU$ r   )r   r   r   )r*   ry   r   r   r   r   r   s          r   build_excinfo_struct CPUCallConv.build_excinfo_struct|  sR    ?**,E}!llCHH5GwGg&
r   Nc                    Ub$  [        U[        5      (       d  [        SU< 35      eUb$  [        U[        5      (       d  [        SU< 35      eUc
  [	        5       nU R
                  R                  U5      nU R                  X#XE5      nUR                  U5      nU R                  UR                  5      nUR                  Xx5      n	UR                  R                  [        R                  " S5      " S5      /5      n
U	R!                  SU
5        g )Nr   r   r#   numba_exception_output)r   r   r   r;   r   r)   get_python_apir  serialize_object_get_excinfo_argumentrn   r   moduleadd_metadatar   IntTypeset_metadata)r*   r@   ry   r   r   r   rg   	struct_gvexcptrr   mds              r   set_static_user_excCPUCallConv.set_static_user_exc  s    ?:c=#A#A"% & &
8U(C(C'* + +
 wHJ ++G4''sF**3/	++G,<,<=i0^^(("**Q-*:);<3R8r   c                     [        USS5      nU R                  XUXES9  U R                  U5        U(       a  UR                  US   5        g U R	                  U[
        5        g )N_in_try_blockF)r   r   r   target)getattrr  check_try_statusrt   rI   r   )r*   r@   ry   r   r   r   try_infos          r   r   CPUCallConv.return_user_exc  s`    7OU;  %( 	! 	?g& NN8H-. $$Wo>r   c                    UR                   nUR                  UR                  U5      [        5      nUR                  UR                  U5      [        5      nUR                  XQR                  XbR                  5      5      nUR                  UR                  U5      [        5      nUR                  UR                  U5      [        5      n	[        R                  " [        [        /5      n
UR                  XR                  5       5      nUR!                  X/5      n["        R$                  " X5      n["        R&                  " X5         SnUR)                  SU5        UR*                  R,                  n
[/        U
R0                  [        R2                  5      (       d0  UR5                  ["        R6                  " U
R0                  5      5        OUR9                  5         S S S 5        UR;                  X|5      nU R<                  R>                  (       a>  U R<                  R@                  RC                  XR                  XBRD                  5      5        U$ ! , (       d  f       Nz= f)Nz<Error creating Python tuple from runtime exception argumentsPyExc_RuntimeError)#r   extract_valuer   PICKLE_BUF_IDXPICKLE_BUFSZ_IDXbytes_from_string_and_sizesext
py_ssize_tHASH_BUF_IDXUNWRAP_FUNC_IDXr   r   r	   r
   bitcastrX   r   r   is_nullif_unlikelyrv   rn   function_typer;   return_typeVoidTyper   r   ret_voidbuild_dynamic_excinfo_structr)   
enable_nrtnrtfreevoidptr)r*   r@   rg   rh   excinfo_ptr	picklebufpicklebuf_szstatic_exc_bytesdyn_argsfunc_ptrr   r   py_tuplefailedr   r   s                   r   unpack_dynamic_exception$CPUCallConv.unpack_dynamic_exception  s   '' ))LL%~7	,,LL%'79 ;;||L2B2BCE ((LL%|5((LL%8 x/):;__X'89<<J/
 3  1C  !5s;##11Dd..<<G2243C3CDE  " 2 445EP <<"" LL!!mmDF+ 21s   BI
Ic                 ^   UR                   nUR                  UR                  U5      [        5      nUR	                  SU[        S5      5      nUR                  U5       u  pxU   U R                  XU5      n	UR                  n
S S S 5        U   UR                  U5      nUR                  nS S S 5        S S S 5        UR                  WR                  5      nUR                  W	W
5        UR                  UW5        U$ ! , (       d  f       N= f! , (       d  f       Nh= f! , (       d  f       Nq= f)N>r   )r   r'  r   ALLOC_FLAG_IDXr   int32_tif_elserC  blockrf   phir8   add_incoming)r*   r@   rg   rh   r;  
alloc_flaggtthen	otherwisedyn_excbb_then
static_excbb_elserK  s                 r   ri   CPUCallConv.unpack_exception  s     ''**7<<+D+9;
  j'!*=__R $5T77O!--  "..{;
!-- 	 ! kk*//*'*W-
  	 ! s<   D$C<
DD+D<
D
	D
D	D
D,c                    [         R                  " [        U5      R                  5       5      R	                  5       nSU 3nXQR
                  ;   a  UR
                  R                  U5      $ [        R                  " [        [        /5      n[        R                  " XU5      nUR                  R                  S5        UR                  R                  S5        UR                  S5      n[        R                  " U5      n	U R                  R!                  U	5      n
UR#                  5       nU	R%                  UR&                  S   U5      nU Vs/ s H	  oc  M  UPM     nn/ nU R                  R)                  U	SS9n[+        U5       H  u  nnU	R-                  U	R/                  U5      U5      nU
R1                  UUUS9nU[2        R4                  " UR6                  5      :X  a  S	U S
3n[8        R:                  " U5      eUR=                  U5        M     U R                  R>                  RA                  U	U RC                  U	RD                  5      5        U
RG                  U5      nU	RI                  U5        U$ s  snf )N__excinfo_unwrap_argsnounwindnoinline r   T)return_pyobject)env_managerzCannot convert native z to a Python object.)%hashlibsha1r   encode	hexdigestglobalsgetr   r   r
   Function
attributesaddro   	IRBuilderr)   r  rX   r/  r   get_env_manager	enumerater'  r   from_native_valuer   r   r8   r   TypingErrorappendr8  r9  r  rn   
tuple_packr   )r*   r  st_typenb_types_hashr   r   r   bb_entryr@   rg   st_type_ptrst_ptrtypobjsr\  ivalobjr   tups                        r    emit_unwrap_dynamic_exception_fn,CPUCallConv.emit_unwrap_dynamic_exception_fn   s     S\0023==?&ug.>>!>>%%d++0AB[[t, 	*%
*%((,,,x(++G4 ((*[9#+?8CC8? ll227CG 3 I)FAs''V(<a@C))#s)LC g,,SXX66.se3GH((--KK * 	g"778H8HI	K t$C	5 @s   I6I6c                    UR                  U R                  R                  U5      5      nUR                  U R                  R                  R                  X5      UR                  5       5      nU Vs/ s H&  n[        U[        R                  5      (       d  M$  UPM(     nn[        S5      n[        U5       H0  u  pUR                  XqR                  Xh[        U	5      /5      5        M2     U$ s  snf )z@
Create an anonymous struct containing the given LLVM *values*.
r   )r,  r)   get_abi_sizeofr/  r8  allocaterX   r;   r   ValuerH  rh  r   gep)
r*   r@   rg   struct_typer   st_sizerr  argzeroidxs
             r   emit_wrap_args_insts CPUCallConv.emit_wrap_args_insts`  s     ""4<<#>#>{#KLLL%%g7""$&
 $,I8Cz#rxx/HC8Iqz!(+HCMM#{{6'#,3GHI ,  Js   2#C-C-c                    [        U[        5      (       d  [        SU< 35      eUb$  [        U[        5      (       d  [        SU< 35      eU R
                  R                  U5      nU R
                  R                  5       n[	        U V	s/ s H&  n	[        U	[        R                  5      (       a  UOU	PM(     sn	5      n
U R                  X*XV5      nU R                  UR                  5      nUR                  UR                  U5      5      n[        R                  " U V	s/ s H0  n	[        U	[        R                  5      (       d  M$  U	R                   PM2     sn	5      nU R#                  XUU5      nU R%                  UR&                  X5      nUR)                  U R
                  R+                  [,        5      5      nUR/                  U R
                  R0                  R3                  UU5      [4        5      n[7        S5      nUR9                  U[:        5      UR9                  U[<        5      UR/                  U[>        5      UR/                  U[>        5      [7        [A        U5      5      4n[C        U5       H2  u  nn	URE                  XRG                  UU[7        U5      /5      5        M4     URE                  UU5        gs  sn	f s  sn	f )zN
Compute the required bits to emit an exception with dynamic (runtime)
values
z&exc should be an exception class, got Nr   r   )$r   r   r   r;   r   r)   r  get_dummy_valuer   r~  r  r  rn   r   r  LiteralStructTyper8   r  ry  r  r,  r|  	excinfo_tr/  r8  r}  excinfo_ptr_trH  r'  r(  r)  r
   r   rh  r   r  )r*   r@   ry   r   rn  r   r   rg   dummyr  exc_args_static
excinfo_ppr  r  rr  	unwrap_fnexc_size	excinfo_pr  
exc_fieldsr  s                        r   set_dynamic_user_exc CPUCallConv.set_dynamic_user_excs  sQ    #}--"% & &
8U(C(C'* + +b ++G4,,.DLMHSjbhh//US8HMO''cM//0@0@A
LL!7!7!<=	 ** ,G,6sBHH,E -5CHH ,G H**7;+3599NNK3	 ##DLL$?$?	$JKOOLL%%gx8	
 qz++I~F++I7GHoofo>ooiAc+./	1

 "*-HCMM#{{9tWS\6JKL .i,; N,Gs   
-J<#KKc           	      R    U R                  XX4XVS9  U R                  U[        5        g)z6
Same as ::return_user_exc but for dynamic exceptions
)r   r   N)r  rI   r   )r*   r@   ry   r   rn  r   r   s          r   return_dynamic_user_exc#CPUCallConv.return_dynamic_user_exc  s/    
 	!!'&) 	" 	@  /:r   c                      UR                   $ ! [         a0    [        R                  " U[        R                  SSS9nX!l         Us $ f = f)N	try_stateT)r   zfill)_CPUCallConv__eh_try_stateAttributeErrorr   r   intp_t)r*   r@   ptrs      r   _get_try_stateCPUCallConv._get_try_state  sL    	))) 	%%kC &)"J	s    7AAc                     U R                  U5      nUR                  U5      nUR                  SX3R                  S5      5      nU R	                  UR
                  5      nUR                  U5      n[        XFS9$ )NrF  r   )r   r   )r  r   icmp_unsignedr8   r  rn   r   )r*   r@   try_state_ptr	try_depthr   r   r   s          r   r"  CPUCallConv.check_try_status  sj    ++G4LL/	&&sI~~a7HI//0@0@A
,,z*88r   c                     U R                  U5      nUR                  U5      nUR                  X3R                  S5      5      nUR	                  XB5        g Nr#   )r  r   re  r8   r   )r*   r@   r  oldnews        r   set_try_statusCPUCallConv.set_try_status  sB    ++G4ll=)kk#xx{+c)r   c                 V   U R                  U5      nUR                  U5      nUR                  X3R                  S5      5      nUR	                  XB5        U R                  UR                  5      n[        R                  " UR                  R                  5      nUR	                  Xe5        g r  )
r  r   subr8   r   r  rn   r   r   r   )r*   r@   r  r  r  r   nulls          r   unset_try_statusCPUCallConv.unset_try_status  s    ++G4ll=)kk#xx{+c) //0@0@A
%%joo&=&=>d'r   c                 R   U R                  U5      nU R                  UR                  5      nUR                  UR                  U5        UR                  UR                  UR                  5      5         U R                  XR                  5        S S S 5        g ! , (       d  f       g = fr   )
r"  r  rn   r   r   r6   r   r   rI   r   )r*   r@   rh   	trystatusr  s        r   r   #CPUCallConv.return_status_propagate  su    ))'2	++G,<,<=f''0__W\\)*:*:;<$$Wkk: =<<s   3B
B&c                 &    UR                  U5        g r   )r   r   s      r   rI   CPUCallConv._return_errcode_raw	  s    Dr   c                    UR                  SU[        5      nUR                  SU[        5      nUR                  SU[        5      nUR                  SU[        5      nUR                  XE5      nUR                  U5      n	UR                  SU[        5      n
UR                  X[        R                  " [        [        R                  5      5      n[        UUU	UUU
UUS9nU$ )z@
Given a return *code* and *excinfoptr*, get a Status instance.
r   r   r   )r   r   rJ   rN   rR   r   r   r   selectr   r   r  	Undefinedr   )r*   r@   r   r   r   r1   ry   r   r   r   r   rh   s               r   r   CPUCallConv._get_return_status  s     ""4z:""4|<!!$k:#//dNK[[$ll2))$oF^^K$&KKr||$LN
 T !$&) $$/*;#-/ r   c                     U R                  U5      n[        UR                  5      nU R                  U5      n[        R
                  " [        U[        R                  " [        5      /U-   5      nU$ r   )	r~   r   r   rW   r   r   r   PointerTyper  r   s         r   r   CPUCallConv.get_function_type$  sd     &&x0../%%g.y &}(EF!) *+ r   c                 0  ^  T R                  U5      nUR                  T R                  U5      U Vs/ s H  nSU-   PM
     sn5        T R                  U5      nSUl        UR                  S5        UR                  S5        T R                  U5      nSUl        UR                  S5        UR                  S5        U(       ag  T R                  U5      nU HP  n[        UR                  [        R                  5      (       d  M.  UR                  S5        UR                  S5        MR     U 4S jn	[        [        X5      5      n
U
(       aG  UR                  R                  S5      nUR                  UR                  R!                  U/5      5        ggs  snf )	zE
Set names of function arguments, and add useful attributes to them.
r   r   	nocapturer   r   c                    > [        U [        R                  5      (       d.  TR                  R                  nX   R                  5       (       a  ggNTF)r;   r   Arrayr)   rV   contains_nrt_meminfo)rY   dmmr*   s     r   type_may_always_need_nrt?CPUCallConv.decorate_function.<locals>.type_may_always_need_nrtI  s:    b%++..ll557//11r   numba_args_may_always_need_nrtN)r~   r   r}   r  r   add_attributer  r;   r8   r   r  anymapr  add_named_metadatare  r  )r*   r   r   r   r   r   r   retargexcargr  args_may_always_need_nrtnmds   `           r   r   CPUCallConv.decorate_function0  sV    &&{3T//3267$Qfqj$7	9**2.[)Y'++B/[)Y'%%b)Daffbnn55OOK0OOI. 	 $'(6$
  $))..0C GGBII**B401	 $? 8s   F
c                      UR                   SS $ )r   r  Nr   r   s     r   r}   CPUCallConv.get_arguments[  r   r   c                      UR                   S   $ r   r   r   s     r   r   CPUCallConv._get_return_argumenta      yy|r   c                      UR                   S   $ r  r   r   s     r   r  !CPUCallConv._get_excinfo_argumentd  r  r   c                 :   U R                  U5      R                  nU R                  UR                  5      R                  nXx:w  a  SU SU 3n	[	        U	5      e[
        R                  " X5      n
UR                  [
        R                  " U5      U
5        [
        R                  " U[        R                  " [        5      SS9nU R                  U5      n[        UR                  X5      5      nX/U-   nUc  SnOA[        U[         5      (       a!  [        U["        5      (       d  [%        U5      nO['        S5      eUR)                  X-US9nU R+                  XUR-                  U5      5      nUR-                  U
5      nU R.                  R1                  XU5      nUU4$ )a  
Call the Numba-compiled *callee*.
Parameters:
-----------
attrs: LLVM style string or iterable of individual attributes, default
       is None which specifies no attributes. Examples:
       LLVM style string: "noinline fast"
       Equivalent iterable: ("noinline", "fast")
zFunction type returns z but resty=r   )r   r   z,attrs must be an iterable of strings or None)attrs)rW   r   r  r2  
ValueErrorr   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  rA   actual_rettymr   r   r   r   _attrsr   rh   rE   r   s                      r   r   CPUCallConv.call_functiong  sn    $$U+33001E1EFNN (k%IAQ-''7	g,,U3Y?(("..2K.79
 &&v.G((78*T1 =Fx((E31G1G5\FJKK||FF|;(()0j)ACi(ll--gfEs{r   r   r   NNr   r   )!r   r   r   r   r   	itertoolscount_status_idsr]   r:   r  r  r   rC  ri   ry  r  r  r  r  r"  r  r  r   rI   r   r   r   r}   r  r  r   r   r   r   r   r  r  a  s     //!$K6" DH&*79r @D"&?2h0>@& JN'+[-| 59;	9*(;0
)2V !)r   r  c                   $    \ rS rSrS rSS jrSrg)
ErrorModeli  c                     Xl         g r   	call_conv)r*   r  s     r   r+   ErrorModel.__init__  s    "r   Nc                 l    U R                   (       a#  U R                  R                  U[        UU5        ggr  )raise_on_fp_zero_divisionr  r   ZeroDivisionError)r*   r@   r   r   s       r   fp_zero_divisionErrorModel.fp_zero_division  s-    ))NN**74Ex+.0r   r  r  )r   r   r   r   r+   r  r   r   r   r   r  r    s    #r   r  c                       \ rS rSrSrSrSrg)PythonErrorModeli  zD
The Python error model.  Any invalid FP input raises an exception.
Tr   Nr   r   r   r   r   r  r   r   r   r   r  r    s     !%r   r  c                       \ rS rSrSrSrSrg)NumpyErrorModeli  a  
In the Numpy error model, floating-point errors don't raise an
exception.  The FPU exception state is inspected by Numpy at the
end of a ufunc's execution and a warning is raised if appropriate.

Note there's no easy way to set the FPU exception state from LLVM.
Instructions known to set an FP exception can be optimized away:
    https://llvm.org/bugs/show_bug.cgi?id=6050
    http://lists.llvm.org/pipermail/llvm-dev/2014-September/076918.html
    http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20140929/237997.html
Fr   Nr  r   r   r   r  r    s    
 !&r   r  )pythonnumpyc                 4    [         U    " UR                  5      $ )z>
Create an error model instance for the given target context.
)error_modelsr  )
model_namer)   s     r   create_error_modelr    s     
#G$5$566r   )0r   collectionsr   collections.abcr   r  r]  llvmliter   
numba.corer   r   r   numba.core.baser	   r
   r   r   r  rH  int64_tr   r   r   rN   rJ   rR   r   r   objectr%   r   r   r(  r)  r-  r.  rG  r  r  r  r  r  r  r  r  r  r  r   r   r   <module>r     s`   # $    - - 5 {Xy$9:	 
H
& **R.
**R.	( ]
n"~B]+k56 k5\zl zz-* -*d    gIK	y)o, od %z %&j &  7r   