
    sh3                        S 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rSSK	J
r
JrJrJr  SSKJrJrJr  SSKJs  Js  Jr  SSKJrJrJrJr  SSKrSSKJr  S rS	 rS
 r Sr!Sr"Sr#S r$Sr%S r&\&" \5      r'\&" \5      r(S r)\)" \5      r*\)" \5      r+\RX                  " \RZ                  " \R\                  5      \RZ                  " \R\                  5      \R^                  \R^                  5      r0\RX                  " \RZ                  " \Rb                  5      \RZ                  " \Rb                  5      \R^                  \R^                  5      r2\RX                  " \Rf                  \Rf                  \R^                  \R^                  5      r4 " S S\5      r5 " S S\5      r6\ " S S\5      5       r7\8S:X  a  \Rr                  " 5         gg)z
Tests for @cfunc and friends.
    N)
namedtuple)cfunccarrayfarraynjit)typestypingutils)TestCaseskip_unless_cffitagcaptured_stderr)numpy_supportc                 
    X-   $ N abs     j/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_cfunc.pyadd_usecaser      s	    5L    c                     X-  nU$ r   r   )r   r   cs      r   div_usecaser      s    	AHr   c                     U S-  $ )N   r   )r   s    r   square_usecaser      s    6Mr   zfloat64(float64, float64)zfloat64(int64, int64)zfloat64(float64)c                     [        5         X-   $ r   )objectr   s     r   objmode_usecaser!   '   s    
H5Lr      c                    ^  U 4S jnU$ )Nc                 V  > T	" XU45      nT	" U[         5      nUR                  US'   UR                  USS& UR                  USS& UR                  R
                  US'   UR                  R                  US'   Sn[        R                  " X#5       H  u  pxXdXx4   Xx-
  -  -  nM     XeS'   g )Nr                  )	CARRAY_USECASE_OUT_LENndimshapestridesflagsc_contiguousf_contiguousnpndindex
in_ptrout_ptrmnin_outsijfuncs
            r   cfarray_usecase-make_cfarray_usecase.<locals>.cfarray_usecase1   s    6q6"723A99Aa;;Aa''A''AJJq$DAQTae$$A %Ar   r   r=   r>   s   ` r   make_cfarray_usecaserA   /   s     r   c                    ^  U 4S jnU$ )Nc                   > T	" XU4[         R                  S9nT	" U[        [         R                  5      nUR                  US'   UR                  USS& UR
                  USS& UR                  R                  US'   UR                  R                  US'   Sn[         R                  " X#5       H  u  pxXdXx4   Xx-
  -  -  nM     XeS'   g )Ndtyper   r%   r&   r'   r(   r)   )
r1   float32r*   r+   r,   r-   r.   r/   r0   r2   r3   s
            r   r>   3make_cfarray_dtype_usecase.<locals>.cfarray_usecaseI   s    6q6472BJJ?A99Aa;;Aa''A''AJJq$DAQTae$$A %Ar   r   r@   s   ` r   make_cfarray_dtype_usecaserH   F   s     r   c                   B    \ rS rSrS r\S 5       rS rS rS r	S r
Srg	)
	TestCFunci   c                 Z   [        [        5      " [        5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  [        5        UR                  nU R                  U[        5        U R                  SU5        UR                  nU R                  U[        5        UR                  nU R                  [        R                  " U[        R                   5      R"                  U5        U R%                  U" SS5      S5        g)z(
Basic usage and properties of a cfunc.
r          @g      @g      @N)r   add_sigr   assertEqual__name____qualname__assertIs__wrapped__native_nameassertIsInstancestrassertInaddressintctypescastc_void_pvalueassertPreciseEqual)selffsymboladdrcts        r   
test_basicTestCFunc.test_basick   s     'N;']37amm[1fc*mV,yydC(XXR9??F3c2r   c                     SSK Jn  UR                  5       u  p#[        [        5      " [
        5      nUR                  UR                  5      nU R                  US5        g )Nr   )cffi_usecasesg      @)	numba.testsrg   load_inline_moduler   
square_sigr   _numba_test_funcptrcffir^   )r_   rg   ffilibr`   ress         r   	test_cffiTestCFunc.test_cffi   sH    - 335*n-%%aff-T*r   c                     [        [        S[        R                  0S9" [        5      nU R                  UR                  SS5      S5        g )Nr   )localsr"   r&   rM   )r   div_sigr   int64r   r^   rZ   )r_   r`   s     r   test_localsTestCFunc.test_locals   s8     '3"45kBA4r   c                    [        [        5      " [        5      n[        5        nU R	                  UR                  SS5      S5        S S S 5        U R                  WR                  5       S5        [        5        nUR                  SS5      nU R	                  US5        S S S 5        UR                  5       nU R                  SU5        U R                  SU5        g ! , (       d  f       N= f! , (       d  f       NT= f)	Nr'   r   g      @ r   g        zZeroDivisionError:zException ignored)	r   rt   r   r   r^   rZ   rO   getvaluerW   )r_   r`   errro   s       r   test_errorsTestCFunc.test_errors   s    'N;'###AHHQNC8 ,#((1a.C ##C-	 
 lln*C0)3/  s   #C9%C,
C),
C:c                     [        [        5      " [        5      nUR                  5       nU R	                  UR
                  U5        U R	                  SU5        g )Nzfadd double)r   rN   r   inspect_llvmrW   rT   )r_   r`   irs      r   test_llvm_irTestCFunc.test_llvm_ir   s<    'N;'^^ammR(mR(r   c                 b   U R                  [        5         [        [        SS9" [        5        SSS5        U R                  5        n[        [        5      " [        5        SSS5        U R                  S[        WR                  5      5        g! , (       d  f       Nf= f! , (       d  f       NE= f)z'
Object mode is currently unsupported.
T)forceobjNzUntyped global name 'object')
assertRaisesNotImplementedErrorr   rN   r   assertTypingErrorr!   rW   rV   	exception)r_   raisess     r   test_object_modeTestCFunc.test_object_mode   sp     23'D)+6 4##%'N?+ &4c&:J:J6KL	 43%%s   BB 
B 
B.r   N)rP   
__module__rQ   __firstlineno__rd   r   rp   rv   r|   r   r   __static_attributes__r   r   r   rJ   rJ   i   s0    3, + +50 )Mr   rJ   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Srg)
TestCArray   z"
Tests for carray() and farray().
c                    [         R                  " SS5      R                  S5      R                  [         R                  5      n[         R
                  " [        [         R                  S9nU" U" U5      U" U5      /UR                  Q76   U$ )N
      r   r&   rD   )r1   arangereshapeastyperF   emptyr*   r,   )r_   pointer_factoryr=   r   r9   s        r   run_carray_usecaseTestCArray.run_carray_usecase   sc    IIb"%%f-44RZZ@hh-RZZ@_Q!5@@
r   c                 j    U R                  X5      nU R                  X5      nU R                  XE5        g r   )r   r^   )r_   r   pyfuncr   expectedgots         r   check_carray_usecaseTestCArray.check_carray_usecase   s0    **?C%%o=.r   c                 T    UR                   R                  [         R                  5      $ r   )rZ   data_asr\   r_   arrs     r   make_voidptrTestCArray.make_voidptr   s    zz!!&//22r   c                 |    UR                   R                  [         R                  " [         R                  5      5      $ r   )rZ   r   POINTERc_floatr   s     r   make_float32_pointerTestCArray.make_float32_pointer   s$    zz!!&.."@AAr   c                 |    UR                   R                  [         R                  " [         R                  5      5      $ r   )rZ   r   r   c_doubler   s     r   make_float64_pointerTestCArray.make_float64_pointer   s$    zz!!&.."ABBr   c                   ^  U 4S jn[         R                  " S5      R                  S5      R                  [         R                  5      R                  US9nU" T R                  U5      UR                  5      nU" XT5        U" T R                  U5      UR                  5      nU" XTR                  S5      5        U" T R                  U5      UR                  UR                  5      nU" XT5        U" T R                  U5      UR                  [         R                  5      nU" XT5        U" T R                  U5      UR                  UR                  5      nU" XT5        U" T R                  U5      UR                  [         R                  5      nU" XTR                  [         R                  5      5        T R                  [        5         U" T R                  U5      UR                  5        S S S 5        T R                  [        5         U" UR                   R"                  UR                  5        S S S 5        T R                  [        5       nU" T R                  U5      UR                  [         R                  5        S S S 5        T R%                  S['        WR(                  5      5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NV= f)Nc                    > TR                  X5        TR                  U R                  R                  UR                  R                  5        g r   )r^   rO   rZ   data)r   r   r_   s     r   eq*TestCArray.check_carray_farray.<locals>.eq   s3    ##C2SZZ__hoo.B.BCr   r(   r   )orderKz%mismatching dtype 'int32' for pointer)r1   r   r   r   rF   copyr   r,   sizeravelrE   r   int32viewr   	TypeErrorrZ   r   rW   rV   r   )r_   r=   r   r   baser   r   s   `      r   check_carray_farrayTestCArray.check_carray_farray   s
   	D yy|##F+222::>CC%CP **40$**=
1**40$))<
1jjo **40$**djjI
1**40$**bjjI
1 ""4($**djjA
1""4($**bhh?
1ii!" y)""4($**5 * y)!!4::. * y)V**40$**bhhG *=&**+	- *) *) *)s$   #J-(J>2K-
J;>
K
Kc                 0    U R                  [        S5        g)z
Test pure Python carray().
CN)r   r   r_   s    r   test_carrayTestCArray.test_carray        	  -r   c                 0    U R                  [        S5        g)z
Test pure Python farray().
FN)r   r   r   s    r   test_farrayTestCArray.test_farray   r   r   c              #   4  ^#    [         R                  [         R                  [         R                  [         R                  [         R
                  [         R                  4 H3  m[        U4S jUR                   5       5      nUR                  " U6 v   M5     g7f)zr
Generate a bunch of concrete signatures by varying the width
and signedness of size arguments (see issue #1923).
c              3   T   >#    U  H  nU[         R                  :X  a  TOUv   M     g 7fr   )r   intp).0r   actual_sizes     r   	<genexpr>.TestCArray.make_carray_sigs.<locals>.<genexpr>  s'      3"1Q )*UZZQ>"1s   %(N)
r   r   r   intcuintpuint32uintctupleargsreturn_type)r_   
formal_sigr   r   s      @r   make_carray_sigsTestCArray.make_carray_sigs   sh     
 "JJUZZ!KKu{{DK 3",//3 3D(($//	Ds   BBc                    UnU R                  [        5       H:  n[        U5      " U5      nU R                  U R                  X5R
                  5        M<     UnU R                  [        5       H:  n[        U5      " U5      nU R                  U R                  X5R
                  5        M<     U R                  5        n[        [        5      " U5      nS S S 5        U R                  S[        WR                  5      5        UnU R                  [        5       H:  n[        U5      " U5      nU R                  U R                  X5R
                  5        M<     g ! , (       d  f       N= f)Nz7mismatching dtype 'float32' for pointer type 'float64*')r   carray_float32_usecase_sigr   r   r   rZ   r   carray_float64_usecase_sigrW   rV   r   carray_voidptr_usecase_sig)r_   usecasedtype_usecaser   sigr`   r   s          r   check_numba_carray_farray$TestCArray.check_numba_carray_farray
  s   (()CDCc
6"A%%d&?&?R E
 (()CDCc
6"A%%d&?&?R E ##%01&9A &O&**+	- (()CDCc
6"A%%d&?&?R E &%s   ;E
E"c                 8    U R                  [        [        5        g)z;
Test Numba-compiled carray() against pure Python carray()
N)r   carray_usecasecarray_dtype_usecaser   s    r   test_numba_carrayTestCArray.test_numba_carray"       	&&~7KLr   c                 8    U R                  [        [        5        g)z;
Test Numba-compiled farray() against pure Python farray()
N)r   farray_usecasefarray_dtype_usecaser   s    r   test_numba_farrayTestCArray.test_numba_farray(  r   r   r   N)rP   r   rQ   r   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sI    /
3BC&-P..	0S0MMr   r   c                   6    \ rS rSrSr\4S jrS rS rS rSr	g)	TestCffiStructi/  z
typedef struct _big_struct {
    int    i1;
    float  f2;
    double d3;
    float  af4[9];
} big_struct;

typedef struct _error {
    int bits:4;
} error;

typedef double (*myfunc)(big_struct*, size_t);
c                 B    SSK Jn  U" 5       nUR                  U5        U$ )Nr   )FFI)rl   r   cdef)r_   srcr   rm   s       r   get_ffiTestCffiStruct.get_ffi@  s    e
r   c                 $   U R                  5       nUR                  S5      n[        R                  " USS9nU R	                  U[
        R                  5        U R                  [        U5      S5        U R                  UR                  S5      [
        R                  5        U R                  UR                  S5      [
        R                  5        U R                  UR                  S5      [
        R                  5        U R                  UR                  S5      [
        R                  " [
        R                  S	S
95        UR                  S5      n[        R                  " USS9nU R	                  U[        R                  5        U R                  UR                  S   [
        R                   " U5      5        U R                  UR                  S   [
        R"                  5        U R                  UR$                  [
        R                  5        g )N
big_structTuse_record_dtype   i1f2d3af4)	   )rE   r,   myfuncr   r%   )r   typeofcffi_supportmap_typerU   r   RecordrO   lenr   rF   float64NestedArrayr	   	Signaturer   CPointerr   r   )r_   rm   r   nbtyper  r   s         r   test_type_parsing TestCffiStruct.test_type_parsingG  sg   llnZZ-
&&zDIfell3Va(t,ekk:t,emm<t,emm<MM% EMM>	
 H%##FTBc6#3#34!ennV&<=!ekk2%--8r   c                   ^ U R                  5       nUR                  S5      n[        R                  " USS9n[        R                  " UR                  S5      SS9n[        S 5       m[        U5      U4S j5       nUR                  S5      nUR                  SU5      n[        S	5       HS  nUS
-  Xx   l	        US-  Xx   l
        SU-   S-  Xx   l        [        S5       H  n	US-  U	-   Xx   R                  U	'   M     MU     [        UR                  SU5      5      n
UR                  U
S	5      n[        R                   " UR#                  U5      [$        R&                  " U5      S	S9nT" U5      nU R)                  X5        g )Nr   Tr   r  c                     Sn[        U R                  5       HN  nX   nXR                  UR                  -  UR                  -  -  nXU   R
                  R                  5       -  nMP     U$ )Nr   )ranger   r   r   r  r  sum)r   tmpr;   elems       r   calc0TestCffiStruct.test_cfunc_callback.<locals>.calcd  s]    C499%www(47722Aw{{(( & Jr   c                 *   > [        X5      nT" U5      $ r   )r   )ptrr7   r   r  s      r   foo/TestCffiStruct.test_cfunc_callback.<locals>.foom  s    #>D:r   zbig_struct[3]zbig_struct*r&   {      r%   r  r   size_t)bufferrE   r,   )r   r  r  r  r   r   newr[   r  r   r   r  r  rY   rZ   r1   ndarrayr   r   as_dtyperO   )r_   rm   r   nb_big_structr   r  mydatar  r;   r<   rb   r   arrayexpectr  s                 @r   test_cfunc_callback"TestCffiStruct.test_cfunc_callback^  s^   llnZZ-
$--j4P##CJJx$84P		 
	 
s	 
	
 )hh}f-qACCFICCFIQ#CFI1X !B


1 	  388Hc*+jjq! 

::f%((7
 e%r   c                    U R                  5       nU R                  [        5       n[        R                  " UR                  S5      SS9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)NerrorTr   z0field 'bits' has bitshift, this is not supported)	r   r   
ValueErrorr  r  r  rO   rV   r   )r_   rm   r   s      r   test_unsupport_bitsize%TestCffiStruct.test_unsupport_bitsize  si    llnz*f!!

7#!% + 	>  !	
 +*s   %A99
Br   N)
rP   r   rQ   r   c_sourcer   r  r(  r-  r   r   r   r   r   r   /  s#    H # 9.)&V
r   r   __main__):r   rZ   os
subprocesssyscollectionsr   numpyr1   numbar   r   r   r   
numba.corer   r	   r
   numba.core.typing.cffi_utilscore
cffi_utilsr  numba.tests.supportr   r   r   r   unittestnumba.npr   r   r   r   rN   rt   rj   r!   r*   rA   r   r   rH   r   r   voidr  rF   r   r   r
  r   voidptrr   rJ   r   r   rP   mainr   r   r   <module>rA     s  
  	  
 "  - - + + 3 32 2  " &
!
  & &f-%f-( 2&9 1&9 "ZZu}}(E(-u}}(E(-

EJJ@  #ZZu}}(E(-u}}(E(-

EJJ@  #ZZu}}(-

EJJ@ FM FMRzM zMz d
X d
 d
N zMMO r   