
    shCj                     P   S SK Jr  S SKrS SKJrJr  S SKJr  S SK	J
r
Jr  S SKJr  S SKJrJr  \" S/ S	Q5      rS
 rS rS rS rS rS r " S S\5      r\" S5      r " S S\5      r " S S\5      rS rS r " S S\5      r " S S\5      r  " S S\5      r! " S S \!5      r"g)!    )
namedtupleN)Constant	IRBuilder)ir)typescgutils)global_compiler_lock)make_library_cache	NullCache_wrapper_infolibraryenvnamec                    U " 5       nUR                   R                  XCU	R                  U	R                  U5      u  pUR	                  UR
                  SS9 u  nnU   U" U5        S S S 5        U   U
R                  5       nUR                   R                  XJU5        U
R                  U5        S S S 5        S S S 5        [        Xu5       HA  u  nnUR                  UR                  UR                  U5      UR                  5      U5        MC     UR                  UR                  UR                  U5      UR                  5      U5        UR                  $ ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= fNTlikely)	call_convcall_functionreturn_typeargsif_elseis_ok
gil_ensureraise_errorgil_releasezipstoreaddloadstepcode)r!   r   contextfuncbuilderarraysoutoffsetsstore_offset	signaturepyapir   elemsstatusretvalif_okif_errorgiloffarys                       k/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/np/ufunc/wrappers.py_build_ufunc_loop_bodyr6      s,   FE &&44W5>5J5J5>^^ULNF
 
d	37Hx&M ""$C))'&Ac"  
4 (Sgkk',,s"3SXX>D ) MM'++gll<8#((C  ;; UX 
4	3s<   E6	E%
E6/>E%-E6
E"	E6%
E3	/E66
Fc                 |   U " 5       n[         R                  /[        U	R                  5      -  nUR	                  SS9   UR
                  R                  XC[         R                  X5      u  pU H  nUR                  U5        M     S S S 5        U" W5        [        Xu5       HA  u  nnUR                  UR                  UR                  U5      UR                  5      U5        MC     UR                  UR                  UR                  U5      UR                  5      U5        WR                  $ ! , (       d  f       N= f)NT)keep_new)r   pyobjectlenr   err_pushr   r   decrefr   r   r    r!   r"   r#   )r!   r   r$   r%   r&   r'   r(   r)   r*   r+   r   r,   r-   _objargsr.   r/   elemr3   r4   s                      r5   _build_ufunc_loop_body_objmoder?   ,   s     FE #inn"55H 
	& **889>9AJ DLL  
' 
&M (Sgkk',,s"3SXX>D ) MM'++gll<8#((C  ;;' 
'	&s   AD--
D;c
                 N   ^^^^^ UUU4S jn
UUU4S jn[        XXTTTTTXxU	S9$ )Nc            	         > [        TT5       V Vs/ s H%  u  pUR                  TR                  U 5      5      PM'     nn nU$ s  snn f N)r   load_directr!   )r3   r4   r-   r'   r&   r)   s      r5   r!   "build_slow_loop_body.<locals>.loadN   sH    !$Wf!57!5XS c!23!5 	 77s   ,Ac                 H   > TR                  U TR                  T5      5        g rB   )store_directr!   )r/   r&   r(   r*   s    r5   r   #build_slow_loop_body.<locals>.storeS   s    l!;<    r   r6   )r$   r%   r&   r'   r(   r)   r*   r+   r,   r   r!   r   s     `````     r5   build_slow_loop_bodyrK   L   s0    
= "$wgv"%wi&)+ +rH   c                    ^^^^^^^^ U R                  TU	5      nTR                  XU	5      mUUUUUU4S jnUUUUU4S jn[        XXTTTTTTU	T5      $ )Nc            	        > [        TT5       V Vs/ s H%  u  pUR                  TR                  U 5      5      PM'     nn n[        UT
R                  5       VVs/ s H  u  p4T	R	                  XCT5      PM     nnnU$ s  snn f s  snnf rB   )r   rC   r!   r   from_native_value)r3   r4   r-   vtr'   r&   env_managerr)   r,   r+   s        r5   r!   !build_obj_loop_body.<locals>.load`   s     "%Wf!57!5XS c!23!5 	 7 !	797TQ (({;7 	 979s   ,A<Bc                 V  > [         R                  " TU 5      nTR                  USS9   TR                  TR                  U 5      nUR
                  b   eTR                  UR                  TR                  T5      5        TR                  U 5        S S S 5        g ! , (       d  f       g = fr   )
r   is_not_nullif_thento_native_valuer   cleanuprF   valuer!   r<   )r/   r   nativer&   r(   r,   r+   r*   s      r5   r   "build_obj_loop_body.<locals>.storei   s    ##GV4 __U4_0**9+@+@&IF>>)))V\\7<<+EFLL  100s   A(B
B()get_env_bodyget_env_managerr?   )r$   r%   r&   r'   r(   r)   r*   r+   r,   envptrr   env_bodyr!   r   rQ   s     ```````     @r5   build_obj_loop_bodyr_   [   sb    ##GV4H''v>K ! ! *$wg*0#w*3VUD DrH   c                 D   ^^^ UU4S jnUU4S jn[        XXUTTXVXyU
S9$ )Nc                  T   > T V s/ s H  n U R                  T5      PM     nn U$ s  sn f rB   )load_aligned)r4   r-   r'   inds     r5   r!   "build_fast_loop_body.<locals>.load}   s8    "$"S !!#&" 	 $$s   %c                 *   > TR                  U T5        g rB   )store_aligned)r/   rc   r(   s    r5   r   #build_fast_loop_body.<locals>.store   s    &#&rH   rI   rJ   )r$   r%   r&   r'   r(   r)   r*   r+   rc   r,   r   r!   r   s      ``   `    r5   build_fast_loop_bodyrh   {   s.    
' "$wgv"%wi&)+ +rH   c                 
   [        U[        5      (       d   e[        R                  " S5      n[        R                  " U5      n[        R                  " U5      nUR                  [        R                  5      n	[        R                  " U	5      n
[        R                  " [        R                  " 5       XX/5      nUR                  5       R                  S5      nUR                  S5      nU(       aP  UR                  R                  [        R                  [        R                  /[!        UR"                  5      -  5      nO0UR                  R                  UR$                  UR"                  5      n[        R&                  " XUS9nUR(                  R+                  S5        [        R&                  " XSUR,                  -   5      nUR"                  u  nnnnSUl        SUl        S	Ul        S
Ul        [/        UR1                  S5      5      nUR3                  UR4                  5      nUR6                  nUR9                  UR;                  UR<                  U5      5      nUR9                  USS9n/ n[?        UR"                  5       H%  u  nnURA                  [C        UUUUUU5      5        M'     [C        UUUU[!        U5      UR$                  5      n/ nURE                  [        R                  S5      nU H=  n [F        RH                  " UU	5      n!URA                  U!5        URK                  UU!5        M?     [F        RH                  " UU	5      n"URK                  UU"5        [F        RL                  n#U H  n$URO                  U#U$RP                  5      n#M!     URS                  U5      n%U(       ae  U%RU                  5       n&[F        RV                  " UUU	S9   [Y        XUUUUU"UU%UU5        SSS5        U%R[                  U&5        UR]                  5         OUR_                  U#5       u  n'n(U'   [F        RV                  " UUU	S9 n)[a        XUUUUU"UU)Rb                  U%US9  SSS5        SSS5        U(   [F        RV                  " UUU	S9   [e        XUUUUU"UU%US9
  SSS5        SSS5        SSS5        UR]                  5         AURg                  U5        URi                  U 5        [k        UUUR,                  S9$ ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f)zm
Wrap the scalar function with a loop that iterates over the arguments

Returns
-------
(library, env, name)
   ufunc_wrapper r   alwaysinlinez
__ufunc__.r   dimsstepsdataentry	loopcountr   intpNrI   r   )6
isinstancestrr   IntTypePointerTypeget_value_typer   ru   FunctionTypeVoidTypecodegencreate_librarycreate_ir_moduler   get_function_typer9   r:   r   r   Function
attributesr    r   r   append_basic_blockget_env_namefndescenvironmentr!   declare_env_globalmodule	enumerateappend	UArrayArgget_constantr   alloca_oncer   true_bitand_is_unit_stridedget_python_apir   	for_ranger_   r   ret_voidr   rh   indexrK   add_ir_moduleadd_linking_libraryr   )*r   r$   fnamer+   objmodecresbyte_t
byte_ptr_tbyte_ptr_ptr_tintp_t
intp_ptr_tfnty
wrapperlibwrapper_module	func_typer%   wrapperarg_argsarg_dims	arg_stepsarg_datar&   envnamer   r]   rs   r'   itypr(   r)   zero_pr*   unit_stridedr4   r,   r2   r   
is_stridedloops*                                             r5   build_ufunc_wrapperr      si    eS!!!!ZZ]F'J^^J/N##EJJ/F'J??2;;=>+5+C DD "11/BJ004N%%77NNU^^,s9>>/BBD	 %%77!!9>>3	 ;;~u=DOO'kk.tyy0HIG.5ll+Hh	8HMHMINHM227;<G ""4;;/G


C\\'44W^^WMNF XK8I FINN+3i(Iq#NO , GWh	3v;))+C G

A.D0qdA 
 &&w7LMM$%##L||L#2E2EF  ""7+E w	?wWi @
 	# __\*.K
 &&w	G4(wW$iU" H ! &&w	G(wW$i" H  +$ 	 ^,""7+7<<HHC @? HG ! HG  +*sx   S8#U)T T
T%
U/T=T,T= U8
T

TT
T)	%U,
T:6T==
U	U
Uc                   2    \ rS rSrS rS rS rS rS rSr	g)	r      c                    Xl         X l        X`l        U R                   R                  [        R
                  U5      nU R                  R                  UR                  X7/5      5      nUR                  U5      n	U R                  R                  UU	R                  5       5      U l        U R                   R                  U	5      n
U R                   R                  [        R
                  U
5      U l        U R                  R                  XG/5      nU R                  R                  U5      U l        UR                  SU R                  U R                  5      U l        X l        g )Nz==)r$   r&   fe_typer   r   ru   r!   gepget_data_typebitcast
as_pointerdataptrget_abi_sizeofabisizer"   icmp_unsignedr   )selfr$   r&   r   rp   r   r   offsetoffseted_args	data_typesizeofoffseted_steps               r5   __init__UArrayArg.__init__   s   **5::q9))'++dH*EF))'2	||++M,5,@,@,BD,,Y7||00VD((9LL%%m4	&44T59\\499 NrH   c                     [         R                  " U R                  U R                  U5      nU R                  R                  U R                  U R                  U5      $ )zU
Generic load from the given *byteoffset*.  load_aligned() is
preferred if possible.
)r   pointer_addr&   r   r$   unpack_valuer   )r   
byteoffsetptrs      r5   rC   UArrayArg.load_direct  sA    
 !!$,,jI||((t||SIIrH   c                     U R                   R                  U R                  U/5      nU R                  R	                  U R                   U R
                  U5      $ rB   )r&   r   r   r$   r   r   )r   rc   r   s      r5   rb   UArrayArg.load_aligned  sA     llt||cU3||((t||SIIrH   c                     [         R                  " U R                  U R                  U5      nU R                  R                  U R                  U R                  X5        g rB   )r   r   r&   r   r$   
pack_valuer   )r   rX   r   r   s       r5   rF   UArrayArg.store_direct  s<    !!$,,jIdllEGrH   c                     U R                   R                  U R                  U/5      nU R                  R	                  U R                   U R
                  X5        g rB   )r&   r   r   r$   r   r   )r   rX   rc   r   s       r5   rf   UArrayArg.store_aligned  s<    llt||cU3dllEGrH   )r   r&   r$   r   r   r   r"   N)
__name__
__module____qualname____firstlineno__r   rC   rb   rF   rf   __static_attributes__ rH   r5   r   r      s    "JJHHrH   r   gufc                       \ rS rSrS r\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       rS	 rS
 rS r\S 5       rS rS rS rSrg)_GufuncWrapperi%  c                     Xl         X l        X0l        X@l        U R                  R
                  [        R                  :H  U l        U(       a  [        U R                   S9O	[        5       U l        [        U5      U l        g)a  
The *is_parfors* argument is a boolean that indicates if the GUfunc
being built is to be used as a ParFors kernel. If True, it disables
the caching on the wrapper as a separate unit because it will be linked
into the caller function and cached along with it.
)py_funcN)r   r   sinsoutr+   r   r   r9   is_objectmodeGufWrapperCacher   cachebool
is_parfors)r   r   r   r   r   r   r   s          r5   r   _GufuncWrapper.__init__&  s\     		!^^775>>I &dll;$-K 	
z*rH   c                 .    U R                   R                  $ rB   )r   r   r   s    r5   r   _GufuncWrapper.library6  s    yy   rH   c                 .    U R                   R                  $ rB   )r   target_contextr   s    r5   r$   _GufuncWrapper.context:  s    yy'''rH   c                 .    U R                   R                  $ rB   )r$   r   r   s    r5   r   _GufuncWrapper.call_conv>  s    ||%%%rH   c                 .    U R                   R                  $ rB   )r   r+   r   s    r5   r+   _GufuncWrapper.signatureB  s    yy"""rH   c                 .    U R                   R                  $ rB   )r   r   r   s    r5   r   _GufuncWrapper.fndescF  s    yyrH   c                 .    U R                   R                  $ rB   )r   r   r   s    r5   r   _GufuncWrapper.envJ  s    yy$$$rH   c                 `   [         R                  " S5      n[         R                  " U5      n[         R                  " U5      nU R                  R	                  [
        R                  5      n[         R                  " U5      n[         R                  " [         R                  " 5       X5XR/5      nU$ )Nrj   )	r   rx   ry   r$   rz   r   ru   r{   r|   )r   r   r   r   r   r   r   s          r5   _wrapper_function_type%_GufuncWrapper._wrapper_function_typeN  sx    A^^F+

3,,UZZ8^^F+
r{{}~/9/G HrH   c                 4   U R                   R                  [        R                  5      nU R	                  5       nUR                  S5      nU R                  R                  U R                  R                  U R                  R                  5      nU R                  R                  n[        R                  " XVUS9nUR                  R                  S5        [        R                  " XTU5      n	SU	l        U	R"                  u  ppSU
l        SUl        SUl        SUl        ['        U	R)                  S	5      5      nUR+                  US
S9nU R                   R-                  U5      n[/        5       nU R0                  U R2                  4 H  nU H  nU[/        U5      -  nM     M     0 nU R0                   H"  nU H  nUU;  d  M  [5        U5      UU'   M     M$     0 nUR7                  5        HV  u  nnUR+                  UR9                  UU R                   R;                  [        R                  US-   5      /5      5      UU'   MX     / n[5        U R0                  5      [5        U R2                  5      -   n[=        [?        U R@                  R"                  U R0                  U R2                  -   5      5       HD  u  nu  nn[C        U R                   XUUUUUU5	      nU[5        U5      -  nURE                  U5        MF     UR)                  S5      nU RG                  UU5        [H        RJ                  " XUS9 nU Vs/ s H  nURM                  URN                  5      PM      n nU RQ                  UUUU 5      u  n!n"[H        RR                  " UU"U5        SSS5        URU                  U5        URW                  U5        U RY                  UU5        UR[                  5         UR]                  U5        UR_                  U R`                  5        gs  snf ! , (       d  f       N= f)z
The LLVM IRBuilder code to create the gufunc wrapper.
The *library* arg is the CodeLibrary to which the wrapper should
be added.  The *name* arg is the name of the wrapper function being
created.
_gufunc_wrapperrm   rn   weak_odrr   ro   rp   rq   rr   rs      z.returnrt   N)1r$   rz   r   ru   r   r   r   r   r   restypeargtypesllvm_func_namer   r   r   r    linkager   r   r   r   r!   r   setr   r   r:   itemsr   r   r   r   r+   
GUArrayArgr   gen_prologuer   r   get_array_at_offsetr   gen_loop_bodycbranch_or_continuebranchposition_at_endgen_epiloguer   r   r   r   )#r   r   r   r   r   r   r   r   r%   r   r   r   r   r   r&   rs   r,   unique_symsgrpsymssym_mapssym_dimr   r'   step_offsetr   symr4   bbreturnr   ar   	innercallerrors#                                      r5   _build_wrapper_GufuncWrapper._build_wrapperY  sv    ,,UZZ8**, 112CDNN44T[[5H5H59[[5I5IK	**{{>5AN+++nD9 %29,,/I 	G66w?@LLL<	++G4 eHHdii(Cs4y(  ) HHDG#!$WGAJ  
 MMODAq gkk(37<<3L3L6;jj67!e4= 3>'? @GAJ $ $((mc$))n4&s4>>+>+>+/88dii+?(A BMAzST\\7&;S'KC3s8#KMM#B --i8 	'5) w?4?EFv!A))$**5vDF#11'5$MIu''A	 @ 	x ) 	'5) 	n-##DLL1 G @?s   0P	5%P1P	P		
Pc                 F   U R                   (       aE  U R                  R                  5       R                  [	        U 5      5      nU R                  X!5        U$ U R                  R                  U R                  R                  U R                  R                  5      nUc  U R                  R                  5       R                  [	        U 5      5      nUR                  5         U R                  X!5        U R                  R                  U R                  R                  U5        U$ rB   )r   r$   r}   r~   rw   r  r   load_overloadr   r+   r   enable_object_cachingsave_overloadr   wrapper_namer   s      r5   _compile_wrapper_GufuncWrapper._compile_wrapper  s    ??--/>>s4yIJ
9   11		##TYY%=%=J !!\\113BB3t9M
002##J=

(()<)<jIrH   c                 ~    SU R                   R                  -   nU R                  U5      n[        X R                  US9$ )Nz__gufunc__.r   )r   mangled_namer  r   r   r  s      r5   build_GufuncWrapper.build  s<    $t{{'?'??**<8
HH<
 	
rH   c                    U R                   R                  XU R                  R                  U R                  R                  U5      u  pVUR                  UR                  SS9   UR                  5       nU R                  R                   R                  XU5        UR                  U5        S S S 5        UR                  UR                  4$ ! , (       d  f       N&= f)NFr   )r   r   r+   r   r   rU   is_errorr   r$   r   r   r#   )r   r&   r,   r%   r   r.   r/   r2   s           r5   r  _GufuncWrapper.gen_loop_body  s    554>>55t~~7J7J __V__U_;""$CLL""..wvFc" <
 {{FOO++ <;s   #AC
Cc                     g rB   r   r   r&   r,   s      r5   r  _GufuncWrapper.gen_prologue      rH   c                     g rB   r   r'  s      r5   r  _GufuncWrapper.gen_epilogue  r)  rH   )r   r   r   r   r   r   r   N)r   r   r   r   r   propertyr   r$   r   r+   r   r   r   r  r  r	   r!  r  r  r  r   r   rH   r5   r   r   %  s    +  ! ! ( ( & & # #     % %	R2h0 
 

,rH   r   c                   &    \ rS rSrS rS rS rSrg)_GufuncObjectWrapperi  c                 R    [        U R                  XUU R                  U5      u  pVXV4$ rB   )_prepare_call_to_object_moder$   r+   )r   r&   r,   r%   r   r  r  s          r5   r  "_GufuncObjectWrapper.gen_loop_body  s/    78?8<8<>	 rH   c                 .    UR                  5       U l        g rB   )r   r2   r'  s      r5   r  !_GufuncObjectWrapper.gen_prologue  s    ##%rH   c                 :    UR                  U R                  5        g rB   )r   r2   r'  s      r5   r  !_GufuncObjectWrapper.gen_epilogue  s    $((#rH   )r2   N)r   r   r   r   r  r  r  r   r   rH   r5   r.  r.    s     &$rH   r.  c           	          UR                   nUR                  [        R                  :X  a  [        O[
        nU" XX#XES9R                  5       $ )N)r   )r+   r   r   r9   r.  r   r!  )r   r   r   r   r   r   r+   wrapclss           r5   build_gufunc_wrapperr8    sG    I''5>>9 $"  s%egrH   c           
      
   UR                   nUR                  S5      nU R                  [        R                  5      nU R                  [        R
                  5      n	[        R                  " U	5      n
U R                  [        R                  5      nU R                  [        R                  5      n[        R                  " XU
XX/5      n[        R                  " XmS5      n[        R                  " U[        R                  " S5      SS9nUR                  [        R                   U5        / n/ n[#        [%        XTR&                  5      5       GH  u  nu  nn[        R                  " XSS9nUR)                  U5        [+        U[        R,                  5      (       Ga
  U R/                  U5      nU" XUS9n[1        US	5      n[1        UUR2                  5      nUR5                  UR7                  S
5      UU/5      nUR5                  UR7                  S5      UU/5      nUR9                  UR:                  U5      n[<        R>                  " [A        UR>                  5      5      n[1        UURB                  5      n[1        UURD                  5      nURG                  UUUUUUU/5      n OURI                  UU5      n UR                  U U5        UR)                  U 5        [        RJ                  " UU 5      n!UR                  U!U5        [        RL                  " UU!U5        GM     [        R                  /[O        U5      -  n"U RP                  RS                  X[        R                  U"U5      u  n#n$UR                  U#RT                  U5        URW                  U$5        URY                  U5        UR[                  U5        U H#  nURW                  UR]                  U5      5        M%     U#R^                  n%U%UR]                  U5      4$ )Nzufunc.core.returnnumba_ndarray_newr   r  rm   T)zfill)rX   r   shapestrides)0r   r   rz   r   int32ru   r   ry   voidptrr9   r{   r   get_or_insert_functionr   rx   r   r   r   r   r   r   rv   Array
make_arrayr   ndimr   _get_ptr_by_namer   rq   npdtyperw   numitemsizecallrN   is_nullr  r:   r   r   r$  r<   r  r  r!   r#   )&r$   r&   r,   r%   r+   r   modbb_core_returnll_intll_intpll_intp_ptr
ll_voidptrll_pyobjr   fn_array_newerror_pointerobject_argsobject_pointersr   argargtyobjptraryclsarrayr   ndro   r=  rq   rF  type_numrH  objobj_is_null
object_sigr.   r/   r  s&                                         r5   r0  r0    sO   
..C//0CDN ##EKK0F$$UZZ0G..)K''6J%%enn5H??8k&1&,&6 7D 11#2EGL ''AWMMMM'""M2 KO$S~~%>?<C$$WdCv&eU[[)) ''.F737EFA&D &%**-B;;u55g>tMDkk%"8"8"C#',0G??5::z:DHHS-.E  		2H7H ,,|b$.6.B CC ))%5Cc6"3oogs3k=1##G[.IK @P ..!C$44J&&44u~~zNFF MM&//=1 
LLNN>"N+ "W\\&)* " Igll=111rH   c                        \ rS rSrS rS rSrg)r  i[  c
           	         Xl         X l        UR                  [        R                  U5      n
UR                  UR                  X:/SS9SS9nXl        UR                  XJ/SS9nUR                  U5      n[        U[        R                  5      (       Ga  U(       + n[        U5      UR                  :w  a=  [        U5      S:X  a  UR                  S:X  a  O[        SR                  US-   5      5      eUR                  nU Vs/ s H  nU	U   PM
     nn/ n[        U5       HX  nUR                  UUR                  [        R                  UU-   5      /SS9nUR                  U5      nUR                  U5        MZ     U(       a  [         O["        nU" UR$                  UUUUUS	9U l        g U(       a  [        S
R                  XuS-   5      5      e[)        X}S9U l        g s  snf )Nzdata.ptrrm   rq   zcore.step.ptrr   r   z.type and shape signature mismatch for arg #{0}zstep.ptrrF  rC  	core_step	as_scalarr<  r=  z2scalar type {0} given for non scalar argument #{1}rF  stride)r$   r&   r   r   ru   r!   r   rq   rv   rA  r:   rC  	TypeErrorformatranger   _ArrayAsScalarArgLoader_ArrayArgLoaderrF  _loader_ScalarArgLoader)r   r$   r&   r   rp   r   r  r   r  r  r   rq   core_step_ptrrc  rd  rC  r  r<  r=  jstepptrr"   ldclss                          r5   r   GUArrayArg.__init__\  s    %%ejj!4||GKKhZKH!'  )	E8/JLL/	c5;;'' I 4yCHH$t9>chh!m # %++16!a%=: : 88D)-.AWQZE.G4[!++e'.';';EJJ<G!O(M 'N+5 & 7 ||G,t$ ! " -)  !syy&*+4+4',)02DL  !006sE0BD D+#HDL5 /s   Gc                 v    U R                   R                  U R                  U R                  U R                  US9$ )N)r$   r&   rq   rc   )rl  r!   r$   r&   rq   )r   rc   s     r5   r  GUArrayArg.get_array_at_offset  s3    ||  t||&*iiS ! : 	:rH   )rl  r&   r$   rq   N)r   r   r   r   r   r  r   r   rH   r5   r  r  [  s    9Iv:rH   r  c                   $    \ rS rSrSrS rS rSrg)rm  i  z
Handle GFunc argument loading where a scalar type is used in the core
function.
Note: It still has a stride because the input to the gufunc can be an array
      for this argument.
c                     Xl         X l        g rB   re  )r   rF  rf  s      r5   r   _ScalarArgLoader.__init__  s    
rH   c                     UR                  X2R                  X@R                  5      /5      nUR                  UUR	                  U R
                  5      R                  5       5      nUR                  U5      $ rB   )r   mulrf  r   r   rF  r   r!   )r   r$   r&   rq   rc   dptrs         r5   r!   _ScalarArgLoader.load  s[    {{4++c;;"?!@At&44TZZ@KKMO||D!!rH   re  N)r   r   r   r   __doc__r   r!   r   r   rH   r5   rm  rm    s    "rH   rm  c                   *    \ rS rSrSrS rS rS rSrg)rk  i  z<
Handle GUFunc argument loading where an array is expected.
c                 L    Xl         X l        X0l        X@l        XPl        X`l        g rB   rb  )r   rF  rC  rc  rd  r<  r=  s          r5   r   _ArrayArgLoader.__init__  s     
	""
rH   c           
      2   [         R                  " U R                  U R                  SS9nUR	                  U5      nU" X5      n[
        R                  " UUUR                  U R                  U5      5      nU R                  X5      u  pUR                  UR                  U R                  5      5      nUR                  UUR                  UUR                  R                  5      U	U
UR!                  [         R"                  U5      S S9  UR%                  5       $ )NA)rF  rC  layout)rq   r<  r=  rH  meminfo)r   rA  rF  rC  rB  r   r   ry  rc  _shape_and_stridesr   r   populate_arrayr   rq   typer   ru   	_getvalue)r   r$   r&   rq   rc   arytyprY  rZ  offseted_datar<  r=  rH  s               r5   r!   _ArrayArgLoader.load  s    4::DIIcJ##F+w(++G,0,3KK8;-=>
 00B))'*?*?

*KLu$+OOM49JJOO%E%*'.(/(<(<UZZ=E)G'+ 	 	-   rH   c                     [         R                  " X R                  5      n[         R                  " X R                  5      nX44$ rB   )r   
pack_arrayr<  r=  )r   r$   r&   r<  r=  s        r5   r  "_ArrayArgLoader._shape_and_strides  s2    ""7JJ7$$Wll;~rH   )rd  rc  rF  rC  r<  r=  N)	r   r   r   r   r|  r   r!   r  r   r   rH   r5   rk  rk    s    !0rH   rk  c                       \ rS rSrSrS rSrg)rj  i  z
Handle GUFunc argument loading where the shape signature specifies
a scalar "()" but a 1D array is used for the type of the core function.
c                     UR                  [        R                  S5      nUR                  [        R                  S5      n[        R                  " X#/5      n[        R                  " X$/5      nXV4$ )Nr   r   )r   r   ru   r   r  )r   r$   r&   oner   r<  r=  s          r5   r  *_ArrayAsScalarArgLoader._shape_and_strides  sZ    ""5::q1##EJJ2""7E2$$Wf5~rH   r   N)r   r   r   r   r|  r  r   r   rH   r5   rj  rj    s    
rH   rj  )#collectionsr   numpyrE  llvmlite.irr   r   llvmliter   
numba.corer   r   numba.core.compiler_lockr	   numba.core.cachingr
   r   r   r6   r?   rK   r_   rh   r   objectr   r   r   r.  r8  r0  r  rm  rk  rj  r   rH   r5   <module>r     s    "  +  % 9 < ?,FG8@+D@+lI^&H &HR %U+xV xv$> $"]2@>: >:B"v "((f (Vo rH   