
    sh?                         S SK r S SKrS SKJs  Js  Jr  S SKJ	r	J
r
  S SKJr  S rS rS rS rS=qqS rS	 rS
 rS rS rS rS rS rS rS rS rg)    N)import_dynamictemp_directory)
complex128c                      SSK Jn   SnU " 5       nUR                  U5        SSKJn  X"R                  UR                  5      4$ )zH
Create an inline module, return the corresponding ffi and dll objects.
r   FFIz
    double _numba_test_sin(double x);
    double _numba_test_cos(double x);
    double _numba_test_funcptr(double (*func)(double));
    bool _numba_test_boolean(void);
    )
_helperlib)cffir   cdefnumbar	   dlopen__file__)r   defsffir	   s       m/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/cffi_usecases.pyload_inline_moduler   
   s=     
D %CHHTN 

:..///    c                  @   SSK Jn   SnSnUS-   nX-   S-   nU " 5       nUR                  SU5        UR                  USS	9  [	        S
5      nUR                  US9  [        R                  R                  U5         [        S5      n[        R                  " U5        [        R                  " UR                  R                  S5      [        5        UR                  U4[        R                  R!                  U5        $ ! [        R                  R!                  U5        f = f)zQ
Compile an out-of-line module, return the corresponding ffi and
module objects.
r   r   zh
    typedef struct _numba_complex {
        double real;
        double imag;
    } numba_complex;
    z
    #ifdef _MSC_VER
        #define false 0
        #define true 1
        #define bool int
    #else
        #include <stdbool.h>
    #endif
    aE  
    bool boolean(void);
    double sin(double x);
    double cos(double x);
    int foo(int a, int b, int c);
    void vsSin(int n, float* x, float* y);
    void vdSin(int n, double* x, double* y);
    void vector_real(numba_complex *c, double *real, int n);
    void vector_imag(numba_complex *c, double *imag, int n);
    a  
    static bool boolean(void)
    {
        return true;
    }

    static int foo(int a, int b, int c)
    {
        return a + b * c;
    }

    void vsSin(int n, float* x, float* y) {
        int i;
        for (i=0; i<n; i++)
            y[i] = sin(x[i]);
    }

    void vdSin(int n, double* x, double* y) {
        int i;
        for (i=0; i<n; i++)
            y[i] = sin(x[i]);
    }

    static void vector_real(numba_complex *c, double *real, int n) {
        int i;
        for (i = 0; i < n; i++)
            real[i] = c[i].real;
    }

    static void vector_imag(numba_complex *c, double *imag, int n) {
        int i;
        for (i = 0; i < n; i++)
            imag[i] = c[i].imag;
    }
    cffi_usecases_oolT)override	test_cffi)tmpdirzstruct _numba_complex)r
   r   
set_sourcer   r   compilesyspathappendr   cffi_supportregister_moduleregister_typer   typeofr   remove)r   numba_complexbool_definer   sourcer   r   mods           r   load_ool_moduler'   !   s    
 MK  	 	D ( ", "FH %CNN&/HHTDH!K(FKKvKHHOOF 01$$S)""377>>2I#J#-	/ww|s   :A"C< <!Dc                  x    [         c3  [        5       u  q n U R                  qU R                  qU R                  qA gg)zw
Initialize module globals.  This can invoke external utilities, hence not
being executed implicitly at module import.
N)r   r   _numba_test_sincffi_sin_numba_test_coscffi_cos_numba_test_boolean	cffi_bool)dlls    r   initr0   x   s>     {%'S&&&&++	 r   c                     [         c  [        5       u  q n U R                  R                  qU R                  R
                  qU R                  R                  qU R                  R                  q
U R                  R                  qU R                  R                  qU R                  R                  qU R                  R                  qA gg)z
Same as init() for OOL mode.
N)ffi_oolr'   libsincffi_sin_oolcoscffi_cos_oolfoocffi_foobooleancffi_bool_oolvsSinvdSinvector_realvector_imag)r&   s    r   init_oolr@      s     &(ww{{ww{{77;;gg))gg)) r   c                     [        U 5      S-  $ N   )r*   xs    r   use_cffi_sinrF      s    A;?r   c                 0    [        U 5      [        U 5      -
  $ N)r*   r,   rD   s    r   use_two_funcsrI      s    A;!$$r   c                     [        U 5      S-  $ rB   )r5   rD   s    r   use_cffi_sin_oolrK      s    ?Qr   c                      [        5       $ rH   )r;    r   r   use_cffi_boolean_truerN      s
    ?r   c                 0    [        U 5      [        U 5      -
  $ rH   )r5   r7   rD   s    r   use_two_funcs_oolrP      s    ?\!_,,r   c                 .    US:  a  U " U5      $ U" U5      $ )Nr   rM   )fafbrE   s      r   use_func_pointerrT      s    1u!u!ur   c                      [        SSS5      $ )N   rC      )r9   rM   r   r   use_user_defined_symbolsrX      s    Aq!r   c                 |    [        [        U 5      [        R                  U 5      [        R                  U5      5        g rH   )r<   lenr   from_bufferr2   rE   ys     r   vector_sin_float32r^      &    	#a&#//!$g&9&9!&<=r   c                 |    [        [        U 5      [        R                  U 5      [        R                  U5      5        g rH   )r=   rZ   r   r[   r2   r\   s     r   vector_sin_float64ra      r_   r   c                 |    [        [        R                  U 5      [        R                  U5      [        U 5      5        g rH   )r>   r   r[   rZ   r\   s     r   vector_extract_realrc      $    "COOA$6A?r   c                 |    [        [        R                  U 5      [        R                  U5      [        U 5      5        g rH   )r?   r   r[   rZ   r\   s     r   vector_extract_imagrf      rd   r   )r   numpynpnumba.core.typing.cffi_utilscoretyping
cffi_utilsr   numba.tests.supportr   r   numba.core.typesr   r   r'   r0   r@   r   r2   rF   rI   rK   rN   rP   rT   rX   r^   ra   rc   rf   rM   r   r   <module>ro      sr    
  3 3 > '0.T n&  g%->>@@r   