ó
\K]c           @` sÿ   d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l m Z d  d l	 m
 Z
 m Z d  d l m Z d „  Z d „  Z d „  Z d	 „  Z d 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(   i    (   t   print_functiont   divisiont   absolute_importN(   t   cffi_support(   t   import_dynamict   temp_directory(   t
   complex128c          C` sR   d d l  m }  d } |  ƒ  } | j | ƒ d d l m } | | j | j ƒ f S(   sP   
    Create an inline module, return the corresponding ffi and dll objects.
    i    (   t   FFIs©   
    double _numba_test_sin(double x);
    double _numba_test_cos(double x);
    double _numba_test_funcptr(double (*func)(double));
    bool _numba_test_boolean();
    (   t
   _helperlib(   t   cffiR   t   cdeft   numbaR   t   dlopent   __file__(   R   t   defst   ffiR   (    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   load_inline_module   s    
	c          C` sê   d d l  m }  d } d } | d } | | d } |  ƒ  } | j d | ƒ | j | d t ƒt d	 ƒ } | j d
 | ƒ t j j	 | ƒ zF t
 d ƒ } t j | ƒ t j | j j d ƒ t ƒ | j | f SWd t j j | ƒ Xd S(   s]   
    Compile an out-of-line module, return the corresponding ffi and
    module objects.
    i    (   R   sh   
    typedef struct _numba_complex {
        double real;
        double imag;
    } numba_complex;
    s“   
    #ifdef _MSC_VER
        #define false 0
        #define true 1
        #define bool int
    #else
        #include <stdbool.h>
    #endif
    sA  
    bool boolean();
    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);
    sÁ  
    static bool boolean()
    {
        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;
    }
    t   cffi_usecases_oolt   overridet	   test_cffit   tmpdirs   struct _numba_complexN(   R	   R   t
   set_sourceR
   t   TrueR   t   compilet   syst   patht   appendR   R   t   register_modulet   register_typeR   t   typeofR   t   remove(   R   t   numba_complext   bool_defineR   t   sourceR   R   t   mod(    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   load_ool_module#   s(    
	"	c          C` s@   t  d k r< t ƒ  \ a  }  |  j a |  j a |  j a ~  n  d S(   sƒ   
    Initialize module globals.  This can invoke external utilities, hence not
    being executed implicitly at module import.
    N(	   R   t   NoneR   t   _numba_test_sint   cffi_sint   _numba_test_cost   cffi_cost   _numba_test_booleant	   cffi_bool(   t   dll(    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   initz   s    			c          C` s…   t  d k r 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 ~  n  d S(   s&   
    Same as init() for OOL mode.
    N(   t   ffi_oolR$   R#   t   libt   sint   cffi_sin_oolt   cost   cffi_cos_oolt   foot   cffi_foot   booleant   cffi_bool_oolt   vsSint   vdSint   vector_realt   vector_imag(   R"   (    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   init_oolˆ   s    c         C` s   t  |  ƒ d S(   Ni   (   R&   (   t   x(    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   use_cffi_sinž   s    c         C` s   t  |  ƒ t |  ƒ S(   N(   R&   R(   (   R<   (    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   use_two_funcs¡   s    c         C` s   t  |  ƒ d S(   Ni   (   R0   (   R<   (    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   use_cffi_sin_ool¤   s    c           C` s   t  ƒ  S(   N(   R6   (    (    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   use_cffi_boolean_true§   s    c         C` s   t  |  ƒ t |  ƒ S(   N(   R0   R2   (   R<   (    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   use_two_funcs_oolª   s    c         C` s$   | d k r |  | ƒ S| | ƒ Sd  S(   Ni    (    (   t   fat   fbR<   (    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   use_func_pointer­   s    
c           C` s   t  d d d ƒ S(   Ni   i   i   (   R4   (    (    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   use_user_defined_symbols³   s    c         C` s,   t  t |  ƒ t j |  ƒ t j | ƒ ƒ d  S(   N(   R7   t   lenR   t   from_bufferR-   (   R<   t   y(    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   vector_sin_float32º   s    c         C` s,   t  t |  ƒ t j |  ƒ t j | ƒ ƒ d  S(   N(   R8   RF   R   RG   R-   (   R<   RH   (    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   vector_sin_float64½   s    c         C` s,   t  t j |  ƒ t j | ƒ t |  ƒ ƒ d  S(   N(   R9   R   RG   RF   (   R<   RH   (    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   vector_extract_realÃ   s    c         C` s,   t  t j |  ƒ t j | ƒ t |  ƒ ƒ d  S(   N(   R:   R   RG   RF   (   R<   RH   (    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   vector_extract_imagÆ   s    (    t
   __future__R    R   R   R   t   numpyt   npR   R   t   numba.tests.supportR   R   t   numba.typesR   R   R#   R,   R;   R$   R   R-   R=   R>   R?   R@   RA   RD   RE   RI   RJ   RK   RL   (    (    (    s8   lib/python2.7/site-packages/numba/tests/cffi_usecases.pyt   <module>   s*   		W		
										