
    J/Ph?                         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dS )    N)import_dynamictemp_directory)
complex128c                      ddl m}  d} |             }|                    |           ddlm} ||                    |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       Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/cffi_usecases.pyload_inline_moduler   
   se     
D #%%CHHTNNN      

:.////    c                  j   ddl m}  d}d}|dz   }||z   dz   } |             }|                    d|           |                    |d	           t	          d
          }|                    |           t          j                            |           	 t          d          }t          j        |           t          j        |j                            d          t                     |j        |ft          j                            |           S # t          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HOOF 011$S)))"37>>2I#J#J#-	/ 	/ 	/w|s   AD !D2c                  f    t           )t                      \  a } | j        a| j        a| j        a~ dS dS )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&&+	CC {r   c                      t           tt                      \  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~ dS dS )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@      sp     &((w{w{7;g)g)CC r   c                 &    t          |           dz  S N   )r*   xs    r   use_cffi_sinrF      s    A;;?r   c                 @    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                 @    t          |           t          |           z
  S rH   )r5   r7   rD   s    r   use_two_funcs_oolrP      s    ??\!__,,r   c                 :    |dk    r | |          S  ||          S )Nr   rM   )fafbrE   s      r   use_func_pointerrT      s%    1uur!uur!uur   c                  $    t          ddd          S )N   rC      )r9   rM   r   r   use_user_defined_symbolsrX      s    Aq!r   c                     t          t          |           t                              |           t                              |                     d S rH   )r<   lenr   from_bufferr2   rE   ys     r   vector_sin_float32r^      :    	#a&&#//!$$g&9&9!&<&<=====r   c                     t          t          |           t                              |           t                              |                     d S rH   )r=   rZ   r   r[   r2   r\   s     r   vector_sin_float64ra      r_   r   c                     t          t                              |           t                              |          t          |                      d S rH   )r>   r   r[   rZ   r\   s     r   vector_extract_realrc      8    ""COOA$6$6A?????r   c                     t          t                              |           t                              |          t          |                      d S 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      sk   



     3 3 3 3 3 3 3 3 3 3 3 3 > > > > > > > > ' ' ' ' ' '0 0 0.T  T  T n    &  g  % % %    - - -    > > >> > >@ @ @@ @ @ @ @r   