
    J/Ph3                     &   d Z ddlZddlZddlZddlZddlmZ ddlZddl	m
Z
mZmZmZ ddlmZmZmZ ddlmc mc mZ ddlmZmZmZmZ ddlZddlmZ d Zd	 Zd
 Z dZ!dZ"dZ#d Z$dZ%d Z& e&e          Z' e&e          Z(d Z) e)e          Z* e)e          Z+ ej,         ej-        ej.                   ej-        ej.                  ej/        ej/                  Z0 ej,         ej-        ej1                   ej-        ej1                  ej/        ej/                  Z2 ej,        ej3        ej3        ej/        ej/                  Z4 G d de          Z5 G d de          Z6e G d de                      Z7e8dk    r ej9                     dS dS )z
Tests for @cfunc and friends.
    N)
namedtuple)cfunccarrayfarraynjit)typestypingutils)TestCaseskip_unless_cffitagcaptured_stderr)numpy_supportc                     | |z   S N abs     V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_cfunc.pyadd_usecaser      s    q5L    c                     | |z  }|S r   r   )r   r   cs      r   div_usecaser      s    	AAHr   c                     | dz  S )N   r   )r   s    r   square_usecaser      s    6Mr   zfloat64(float64, float64)zfloat64(int64, int64)zfloat64(float64)c                 (    t                       | |z   S r   )objectr   s     r   objmode_usecaser!   '   s    
HHHq5Lr      c                       fd}|S )Nc                 0    	| ||f          } 	|t                     }|j        |d<   |j        |dd<   |j        |dd<   |j        j        |d<   |j        j        |d<   d}t          j        ||          D ]\  }}||||f         ||z
  z  z  }||d<   d S )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_usecasez-make_cfarray_usecase.<locals>.cfarray_usecase1   s    d6Aq6""d7233A9AaC;AaC'A'AJq!$$ 	% 	%DAqQTa!e$$AAAr   r   r=   r>   s   ` r   make_cfarray_usecaser@   /   s$         r   c                       fd}|S )Nc                 ^    	| ||ft           j                  } 	|t          t           j                  }|j        |d<   |j        |dd<   |j        |dd<   |j        j        |d<   |j        j        |d<   d}t          j	        ||          D ]\  }}||||f         ||z
  z  z  }||d<   d S )Ndtyper   r%   r&   r'   r(   r)   )
r1   float32r*   r+   r,   r-   r.   r/   r0   r2   r3   s
            r   r>   z3make_cfarray_dtype_usecase.<locals>.cfarray_usecaseI   s    d6Aq6444d72BJ??A9AaC;AaC'A'AJq!$$ 	% 	%DAqQTa!e$$AAAr   r   r?   s   ` r   make_cfarray_dtype_usecaserF   F   s$         r   c                   B    e Zd Zd Zed             Zd Zd Zd Zd Z	dS )	TestCFuncc                 h    t          t                    t                    }|                     |j        d           |                     |j        d           |                     |j        t                     |j        }| 	                    |t                     |                     d|           |j        }| 	                    |t                     |j        }|                     t          j        |t          j                  j        |           |                      |dd          d           dS )z8
        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_basiczTestCFunc.test_basick   s    E'NN;'']333777am[111fc***mV,,,ydC(((XR99?FFF3c22222r   c                     ddl m} |                                \  }} t          t                    t
                    }|                    |j                  }|                     |d           d S )Nr   )cffi_usecasesg      @)	numba.testsrc   load_inline_moduler   
square_sigr   _numba_test_funcptrcffir[   )r\   rc   ffilibr]   ress         r   	test_cffizTestCFunc.test_cffi   sq    ------ 3355SE*n--%%af--T*****r   c                      t          t          dt          j        i          t                    }|                     |                    dd          d           d S )Nr   )localsr"   r&   rJ   )r   div_sigr   int64r   r[   rW   )r\   r]   s     r   test_localszTestCFunc.test_locals   sO     6E'3"4555kBBA44444r   c                 ^    t          t                    t                    }t                      5 }|                     |                    dd          d           d d d            n# 1 swxY w Y   |                     |                                d           t                      5 }|                    dd          }|                     |d           d d d            n# 1 swxY w Y   |                                }|                     d|           |                     d|           d S )	Nr'   r   g      @ r   g        zZeroDivisionError:zException ignored)	r   ro   r   r   r[   rW   rL   getvaluerT   )r\   r]   errrk   s       r   test_errorszTestCFunc.test_errors   s{   E'NN;'' 	9###AHHQNNC888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9,,, 	.#((1a..C ##C---		. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.
 llnn*C000)3/////s#   +A((A,/A,)-C""C&)C&c                      t          t                    t                    }|                                }|                     |j        |           |                     d|           d S )Nzfadd double)r   rK   r   inspect_llvmrT   rQ   )r\   r]   irs      r   test_llvm_irzTestCFunc.test_llvm_ir   sV    E'NN;''^^amR(((mR(((((r   c                    |                      t                    5   t          t          d          t                     ddd           n# 1 swxY w Y   |                                 5 } t          t                    t                     ddd           n# 1 swxY w Y   |                     dt          |j	                             dS )z7
        Object mode is currently unsupported.
        T)forceobjNzUntyped global name 'object')
assertRaisesNotImplementedErrorr   rK   r   assertTypingErrorr!   rT   rS   	exception)r\   raisess     r   test_object_modezTestCFunc.test_object_mode   s+    233 	7 	7)E'D)))+666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7##%% 	,E'NN?+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,4c&:J6K6KLLLLLs#   %AAA+#BB!BN)
rM   
__module__rN   ra   r   rl   rq   rv   rz   r   r   r   r   rH   rH   i   s        3 3 3, + + +5 5 50 0 0 ) ) )M M M M Mr   rH   c                   Z    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdS )
TestCArrayz*
    Tests for carray() and farray().
    c                    t          j        dd                              d                              t           j                  }t          j        t          t           j                  } | ||           ||          g|j        R   |S )N
      r   r&   rC   )r1   arangereshapeastyperE   emptyr*   r,   )r\   pointer_factoryr=   r   r9   s        r   run_carray_usecasezTestCArray.run_carray_usecase   s}    Ib"%%f--44RZ@@h-RZ@@@__Q!5!5@@@@@
r   c                     |                      ||          }|                      ||          }|                     ||           d S r   )r   r[   )r\   r   pyfuncr   expectedgots         r   check_carray_usecasezTestCArray.check_carray_usecase   sH    **?FCC%%ou==#.....r   c                 J    |j                             t           j                  S r   )rW   data_asrY   r\   arrs     r   make_voidptrzTestCArray.make_voidptr   s    z!!&/222r   c                 n    |j                             t          j        t           j                            S r   )rW   r   POINTERc_floatr   s     r   make_float32_pointerzTestCArray.make_float32_pointer   s$    z!!&."@"@AAAr   c                 n    |j                             t          j        t           j                            S r   )rW   r   r   c_doubler   s     r   make_float64_pointerzTestCArray.make_float64_pointer   s$    z!!&."A"ABBBr   c                      fd}t          j        d                              d                              t           j                                      |          } |                     |          |j                  } |||            |                     |          |j                  } |||	                    d                      |                     |          |j        |j
                  } |||            |                     |          |j        t           j                  } |||            |                     |          |j        |j
                  } |||            |                     |          |j        t           j                  } |||                    t           j                                                  t                    5   |                     |          |j                   d d d            n# 1 swxY w Y                        t                    5   ||j        j        |j                   d d d            n# 1 swxY w Y                        t                    5 } |                     |          |j        t           j                   d d d            n# 1 swxY w Y                        dt'          |j                             d S )Nc                                          | |                               | j        j        |j        j                   d S r   )r[   rL   rW   data)r   r   r\   s     r   eqz*TestCArray.check_carray_farray.<locals>.eq   s>    ##C222SZ_ho.BCCCCCr   r(   r   )orderKz%mismatching dtype 'int32' for pointer)r1   r   r   r   rE   copyr   r,   sizeravelrD   r   int32viewr}   	TypeErrorrW   r   rT   rS   r   )r\   r=   r   r   baser   r   s   `      r   check_carray_farrayzTestCArray.check_carray_farray   s   	D 	D 	D 	D 	D y||##F++222:>>CC%CPP D**400$*==
1dD**400$)<<
1djjoo D**400$*djII
1dD**400$*bjII
1d D""4(($*djAA
1dD""4(($*bh??
1dii!!""" y)) 	6 	6D""4(($*555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 y)) 	/ 	/D!4:...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ y)) 	HVD**400$*bhGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H=&*++	- 	- 	- 	- 	-s6   +%HH #H I))I-0I-0K

KKc                 <    |                      t          d           dS )z,
        Test pure Python carray().
        CN)r   r   r\   s    r   test_carrayzTestCArray.test_carray         	  -----r   c                 <    |                      t          d           dS )z,
        Test pure Python farray().
        FN)r   r   r   s    r   test_farrayzTestCArray.test_farray   r   r   c              #      K   t           j        t           j        t           j        t           j        t           j        t           j        fD ].t          fd|j        D                       } |j	        | V  /dS )z
        Generate a bunch of concrete signatures by varying the width
        and signedness of size arguments (see issue #1923).
        c              3   @   K   | ]}|t           j        k    rn|V  d S r   )r   intp).0r   actual_sizes     r   	<genexpr>z.TestCArray.make_carray_sigs.<locals>.<genexpr>  sE       3 3 )*UZQ 3 3 3 3 3 3r   N)
r   r   r   intcuintpuint32uintctupleargsreturn_type)r\   
formal_sigr   r   s      @r   make_carray_sigszTestCArray.make_carray_sigs   s      
 "JUZ!Ku{D 	0 	0K 3 3 3 3",/3 3 3 3 3D(*($/////		0 	0r   c                    |}|                      t                    D ];} t          |          |          }|                     | j        ||j                   <|}|                      t                    D ];} t          |          |          }|                     | j        ||j                   <|                                 5 } t          t                    |          }d d d            n# 1 swxY w Y   |                     dt          |j
                             |}|                      t                    D ];} t          |          |          }|                     | j        ||j                   <d S )Nz7mismatching dtype 'float32' for pointer type 'float64*')r   carray_float32_usecase_sigr   r   r   rW   r   carray_float64_usecase_sigrT   rS   r   carray_voidptr_usecase_sig)r\   usecasedtype_usecaser   sigr]   r   s          r   check_numba_carray_farrayz$TestCArray.check_numba_carray_farray
  s   (()CDD 	S 	SCc

6""A%%d&?RRRR (()CDD 	S 	SCc

6""A%%d&?RRRR##%% 	:1011&99A	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:O&*++	- 	- 	- (()CDD 	S 	SCc

6""A%%d&?RRRR	S 	Ss   C//C36C3c                 F    |                      t          t                     dS )zK
        Test Numba-compiled carray() against pure Python carray()
        N)r   carray_usecasecarray_dtype_usecaser   s    r   test_numba_carrayzTestCArray.test_numba_carray"  !     	&&~7KLLLLLr   c                 F    |                      t          t                     dS )zK
        Test Numba-compiled farray() against pure Python farray()
        N)r   farray_usecasefarray_dtype_usecaser   s    r   test_numba_farrayzTestCArray.test_numba_farray(  r   r   N)rM   r   rN   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s           / / /
3 3 3B B BC C C&- &- &-P. . .. . .	0 	0 	0S S S0M M MM M M M Mr   r   c                   .    e Zd ZdZefdZd Zd Zd ZdS )TestCffiStructz
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                 P    ddl m}  |            }|                    |           |S )Nr   )FFI)rh   r   cdef)r\   srcr   ri   s       r   get_ffizTestCffiStruct.get_ffi@  s3    cee
r   c                 f   |                                  }|                    d          }t          j        |d          }|                     |t
          j                   |                     t          |          d           |                     |                    d          t
          j	                   |                     |                    d          t
          j
                   |                     |                    d          t
          j                   |                     |                    d          t          j        t
          j
        d	
                     |                    d          }t          j        |d          }|                     |t          j                   |                     |j        d         t          j        |                     |                     |j        d         t
          j                   |                     |j        t
          j                   d S )N
big_structTuse_record_dtype   i1f2d3af4)	   )rD   r,   myfuncr   r%   )r   typeofcffi_supportmap_typerR   r   RecordrL   lenr   rE   float64NestedArrayr	   	Signaturer   CPointerr   r   )r\   ri   r   nbtyper   r   s         r   test_type_parsingz TestCffiStruct.test_type_parsingG  s   llnnZZ--
&zDIIIfel333Va(((t,,ek:::t,,em<<<t,,em<<<MM%  EM>>>	
 	
 	
 H%%#FTBBBc6#3444!enV&<&<===!ek222%-88888r   c                    |                                  }|                    d          }t          j        |d          }t          j        |                    d          d          }t          d             t          |          fd            }|                    d          }|                    d|          }t          d	          D ]]}|d
z  ||         _	        |dz  ||         _
        d|z   dz  ||         _        t          d          D ]}	|dz  |	z   ||         j        |	<   ^t          |                    d|                    }
|                    |
d	          }t          j        |                    |          t%          j        |          d	          } |          }|                     ||           d S )Nr   Tr   r   c                     d}t          | j                  D ]F}| |         }||j        |j        z  |j        z  z  }|| |         j                                        z  }G|S )Nr   )ranger   r   r   r   r   sum)r   tmpr;   elems       r   calcz0TestCffiStruct.test_cfunc_callback.<locals>.calcd  sd    C49%% ) )Awtw(4722tAw{(((Jr   c                 :    t          | |          } |          S r   )r   )ptrr7   r   r   s      r   fooz/TestCffiStruct.test_cfunc_callback.<locals>.foom  s    #q>>D4::r   zbig_struct[3]zbig_struct*r&   {      r%   r   r   size_t)bufferrD   r,   )r   r   r   r   r   r   newrX   r   r   r   r   r   rV   rW   r1   ndarrayr  r   as_dtyperL   )r\   ri   r   nb_big_structr   r   mydatar   r;   r<   r_   r   arrayexpectr   s                 @r   test_cfunc_callbackz"TestCffiStruct.test_cfunc_callback^  s   llnnZZ--
$-j4PPP#CJJx$8$84PPP		 	 
	 
s	 	 	 	 
	
 ))hh}f--q 	+ 	+ACCFICCFIQ#CFI1XX + + !B
A
1+ 388Hc**++jjq!! 
::f%%(77  
 ef%%%%%r   c                 4   |                                  }|                     t                    5 }t          j        |                    d          d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )NerrorTr   z0field 'bits' has bitshift, this is not supported)	r   r}   
ValueErrorr   r   r   rL   rS   r   )r\   ri   r   s      r   test_unsupport_bitsizez%TestCffiStruct.test_unsupport_bitsize  s    llnnz** 	f!

7##!%   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	> !!	
 	
 	
 	
 	
s   *A%%A),A)N)rM   r   rN   c_sourcer   r   r
  r  r   r   r   r   r   /  sb        H #    9 9 9.)& )& )&V
 
 
 
 
r   r   __main__):r   rW   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   rK   ro   rf   r!   r*   r@   r   r   rF   r   r   voidr   rE   r   r   r   r   voidptrr   rH   r   r   rM   mainr   r   r   <module>r!     sS   
  				     



 " " " " " "     - - - - - - - - - - - - + + + + + + + + + + 3 3 3 3 3 3 3 3 3 3 3 32 2 2 2 2 2 2 2 2 2 2 2  " " " " " "       &
!
      & &%f--%%f--  ( 21&99 11&99 'UZu}(E(E(6u}(E(E(-
EJ@ @  (UZu}(E(E(6u}(E(E(-
EJ@ @  (UZu}(-
EJ@ @ FM FM FM FM FM FM FM FMRzM zM zM zM zM zM zM zMz d
 d
 d
 d
 d
X d
 d
 d
N zHMOOOOO r   