§
    ƒÛg?  ã                   ó¬   — 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       úO/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/cffi_usecases.pyÚload_inline_moduler   
   se   € ð ÐÐÐÐÐð
€Dð ˆ#‰%Œ%€CØ‡H‚HˆT�N„N€Nà Ð Ð Ð Ð Ð Ø�—
’
˜:Ô.Ñ/Ô/Ð/Ð/ó    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ð ˜[Ñ(ð ",ñ "€FðH ˆ#‰%Œ%€CØ‡N‚NÐ&¨Ñ/Ô/Ð/Ø‡H‚HˆT˜D€HÑ!Ô!Ð!Ý˜KÑ(Ô(€FØ‡K‚K�v€KÑÔÐÝ„H‡O‚O�FÑÔÐð ÝÐ0Ñ1Ô1ˆÝÔ$ SÑ)Ô)Ð)ÝÔ" 3¤7§>¢>Ð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ØÔ&ˆØÔ&ˆØÔ+ˆ	ØˆCˆCð €{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Ô)ˆØˆCˆCð €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%   € Øˆ1‚u€uØˆr�!‰uŒuˆàˆr�!‰uŒuˆr   c                  ó$   — t          ddd¦  «        S )Né   rC   é   )r9   rM   r   r   Úuse_user_defined_symbolsrX   ±   s   € Ý�A�q˜!ÑÔÐ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   € Ý•—’ Ñ"Ô"¥C§O¢O°AÑ$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   