
    xKg?                         d dl Z d dlZd dlmc mc mZ d dlm	Z	m
Z
 d dlmZ d Zd Zd Zd Zdxaad Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zy)    N)import_dynamictemp_directory)
complex128c                      ddl m}  d} |        }|j                  |       ddlm} ||j                  |j                        fS )zP
    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       ]/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/cffi_usecases.pyload_inline_moduler   
   s?     
D %CHHTN 

:..///    c                  J   ddl m}  d}d}|dz   }||z   dz   } |        }|j                  d|       |j                  |d	       t	        d
      }|j                  |       t        j                  j                  |       	 t        d      }t        j                  |       t        j                  |j                  j                  d      t               |j                  |ft        j                  j!                  |       S # t        j                  j!                  |       w xY w)z]
    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 D !D"c                  v    t         3t               \  a } | j                  a| j                  a| j                  a~ yy)z
    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                     t         t               \  a } | j                  j                  a| j                  j
                  a| j                  j                  a| j                  j                  a
| j                  j                  a| j                  j                  a| j                  j                  a| j                  j                  a~ yy)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                     t        |       dz  S N   )r*   xs    r   use_cffi_sinrF      s    A;?r   c                 0    t        |       t        |       z
  S N)r*   r,   rD   s    r   use_two_funcsrI      s    A;!$$r   c                     t        |       dz  S rB   )r5   rD   s    r   use_cffi_sin_oolrK      s    ?Qr   c                      t               S rH   )r;    r   r   use_cffi_boolean_truerN      s
    ?r   c                 0    t        |       t        |       z
  S rH   )r5   r7   rD   s    r   use_two_funcs_oolrP      s    ?\!_,,r   c                 ,    |dkD  r | |      S  ||      S )Nr   rM   )fafbrE   s      r   use_func_pointerrT      s    1u!u!ur   c                      t        ddd      S )N   rC      )r9   rM   r   r   use_user_defined_symbolsrX      s    Aq!r   c                 |    t        t        |       t        j                  |       t        j                  |             y rH   )r<   lenr   from_bufferr2   rE   ys     r   vector_sin_float32r^      &    	#a&#//!$g&9&9!&<=r   c                 |    t        t        |       t        j                  |       t        j                  |             y rH   )r=   rZ   r   r[   r2   r\   s     r   vector_sin_float64ra      r_   r   c                 |    t        t        j                  |       t        j                  |      t        |              y rH   )r>   r   r[   rZ   r\   s     r   vector_extract_realrc      $    "COOA$6A?r   c                 |    t        t        j                  |       t        j                  |      t        |              y 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   