ó
\K]c           @` s  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l m	 Z
 d  d l m Z m Z m Z m Z d  d l m Z m Z d  d l m Z m Z d  d l j j Z e ƒ  Z e j d ƒ e ƒ  Z e
 j e j d ƒ d	 e f d
 „  ƒ  Yƒ Z e d k re
 j  ƒ  n  d S(   i    (   t   print_functiont   divisiont   absolute_importN(   t   unittest_support(   t   jitt   cffi_supportt   typest   errors(   t   compile_isolatedt   Flags(   t   TestCaset   tagt   enable_pyobjects4   CFFI not supported -- please install the cffi modulet   TestCFFIc           B` s  e  Z e Z d  „  Z d „  Z e d „ Z d „  Z d „  Z	 e
 d ƒ d „  ƒ Z e d „ Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z e
 d ƒ d „  ƒ Z d „  Z d „  Z e j e j d k  d ƒ d „  ƒ Z d „  Z d „  Z d „  Z RS(   c         C` s   t  j ƒ  t  j ƒ  d  S(   N(   t   modt   initt   init_ool(   t   self(    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   setUp   s    
c         C` sU   t  j t j j t j ƒ ƒ } |  j t | j ƒ d ƒ |  j | j d t	 j
 ƒ d  S(   Ni   i    (   R   t   map_typeR   t   ffit   typeoft   cffi_sint   assertEqualt   lent   argsR   t   double(   R   t	   signature(    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_type_map!   s    c         C` sd   t  | t j g d | ƒ} | j } x9 d d d d d g D]" } |  j | | ƒ | | ƒ ƒ q: Wd  S(   Nt   flagsg333333ó¿iÿÿÿÿi    gš™™™™™¹?g…ëQ¸	@(   R   R   R   t   entry_pointt   assertPreciseEqual(   R   t   pyfuncR   t   crest   cfunct   x(    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   _test_function&   s    	c         C` s   |  j  t j ƒ d  S(   N(   R$   R   t   use_cffi_sin(   R   (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_sin_function-   s    c         C` sQ   t  j } t | d d t ƒ} | j } |  j | ƒ  t ƒ |  j | ƒ  t ƒ d  S(   NR   (    (   R   t   use_cffi_boolean_trueR   t   no_pyobj_flagsR   R   t   True(   R   R    R!   R"   (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_bool_function_ool0   s
    		t	   importantc         C` s   |  j  t j d t ƒd  S(   NR   (   R$   R   R%   R(   (   R   (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_sin_function_npm7   s    c         C` s   |  j  t j ƒ d  S(   N(   R$   R   t   use_cffi_sin_ool(   R   R   (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_sin_function_ool;   s    c         C` s   |  j  t j d t ƒd  S(   NR   (   R$   R   R-   R(   (   R   (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_sin_function_npm_ool>   s    c         C` s   |  j  t j ƒ d  S(   N(   R$   R   t   use_two_funcs(   R   (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_two_funcsA   s    c         C` s   |  j  t j ƒ d  S(   N(   R$   R   t   use_two_funcs_ool(   R   (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_two_funcs_oolE   s    c         C` sg  t  j } t d t ƒ | ƒ } x#t  j t  j d f t  j t  j d f t  j t  j d f t  j t  j d f t  j t  j d f t  j t  j d f t  j t  j d f t  j t  j d f t  j t  j d f t  j t  j d f t  j t  j d f t  j t  j d f g D]C \ } } } | | | | ƒ } | | | | ƒ } |  j | | ƒ qý W|  j t	 | j
 ƒ d | j
 ƒ d  S(   Nt   nopythong      ð?g      ð¿i   (   R   t   use_func_pointerR   R)   R   t   cffi_cost   cffi_sin_oolt   cffi_cos_oolR   R   t	   overloads(   R   R    R"   t   fat   fbR#   t   expectedt   got(    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_function_pointerH   s&    	%c         C` s8   t  j } t d t ƒ | ƒ } |  j | ƒ  | ƒ  ƒ d  S(   NR4   (   R   t   use_user_defined_symbolsR   R)   R   (   R   R    R"   (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_user_defined_symbols^   s    	c         C` s-   | | | ƒ t  j j | t  j | ƒ ƒ d  S(   N(   t   npt   testingt   assert_allcloset   sin(   R   R"   R#   t   y(    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   check_vector_sinc   s    c         C` sS   t  j d ƒ j | ƒ } t  j | ƒ } t d t ƒ | ƒ } |  j | | | ƒ d  S(   Ni
   R4   (   RA   t   aranget   astypet
   zeros_likeR   R)   RF   (   R   R    t   dtypeR#   RE   R"   (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   _test_from_buffer_numpy_arrayg   s    c         C` s   |  j  t j t j ƒ d  S(   N(   RK   R   t   vector_sin_float32RA   t   float32(   R   (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_from_buffer_float32m   s    c         C` s   |  j  t j t j ƒ d  S(   N(   RK   R   t   vector_sin_float64RA   t   float64(   R   (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_from_buffer_float64q   s    c         C` sº   d } t  j | ƒ t  j | d | d ƒ d } t  j | ƒ } t d t ƒ t j ƒ } | | | ƒ t  j j | j	 | ƒ t d t ƒ t j
 ƒ } | | | ƒ t  j j | j | ƒ d  S(   Ni
   i   i   y              ð?R4   (   RA   RG   t   zerosR   R)   R   t   vector_extract_realRB   t   assert_equalt   realt   vector_extract_imagt   imag(   R   t   nR#   RE   t
   real_cfunct
   imag_cfunc(    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_from_buffer_structt   s    +i   s.   buffer protocol on array.array needs Python 3+c         C` sl   t  j } t d t ƒ | ƒ } t j d t d ƒ ƒ } t j d d g t | ƒ ƒ } |  j | | | ƒ d  S(   NR4   t   fi
   i    (   R   RL   R   R)   t   arrayt   rangeR   RF   (   R   R    R"   R#   RE   (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_from_buffer_pyarray   s
    	c         C` sš   t  j } t d t ƒ | ƒ } t j d ƒ j t j ƒ d  d  d … } t j | ƒ } |  j	 t
 j ƒ  } | | | ƒ Wd  QX|  j d t | j ƒ ƒ d  S(   NR4   i
   i   s3   from_buffer() unsupported on non-contiguous buffers(   R   RL   R   R)   RA   RG   RH   RM   RI   t   assertRaisesR   t   TypingErrort   assertInt   strt	   exception(   R   R    R"   R#   RE   t   raises(    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_from_buffer_errorˆ   s    	(	c         C` sÎ  t  j d d g d d d t  j ƒ} t  j | ƒ } t  j d d g d d g g d d d t  j ƒ} t  j | ƒ } t  j d d g d d d t  j ƒ} t  j | ƒ } t  j d d g d d g g d d d t  j ƒ} t  j | ƒ } | j d	 ƒ }	 t j }
 t d
 t ƒ |
 ƒ } |  j	 | | | ƒ | | | ƒ t  j
 | ƒ } d d g | d <t  j j | | ƒ |  j	 | | | ƒ |  j t j ƒ  } | | | ƒ Wd  QXt  j j | |	 ƒ |  j d t | j ƒ ƒ d  S(   Ni   i   t   ordert   CRJ   i   i   t   Ft   KR4   i    sA   from_buffer() only supports multidimensional arrays with C layout(   RA   R]   RM   RI   t   copyR   RL   R   R)   RF   RD   RB   RC   R`   R   Ra   Rb   Rc   Rd   (   R   t   c1t   c1_zerost   c2t   c2_zerost   f1t   f1_zerost   f2t   f2_zerost   f2_copyR    R"   t   sin_c2Re   (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt"   test_from_buffer_numpy_multi_array“   s,    $0$0		c         ` s|   t  j ‰ t d t ƒ ‡ f d †  ƒ ‰  t d t ƒ ‡  ‡ f d †  ƒ } d } |  j | | ƒ ˆ | ƒ ˆ | d ƒ ƒ d S(   sj   
        Issue #2263

        Linkage error due to multiple definition of global tracking symbol.
        R4   c         ` s
   ˆ  |  ƒ S(   N(    (   R#   (   t   my_sin(    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   inner¹   s    c         ` s   ˆ  |  ƒ ˆ |  d ƒ S(   Ni   (    (   R#   (   Rx   Rw   (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   foo½   s    g+‡ÙÎ÷ñ?i   N(   R   R   R   R)   R   (   R   Ry   R#   (    (   Rx   Rw   s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   test_indirect_multiple_use¯   s
    	!(   i   (   t   __name__t
   __module__t   Falset   _numba_parallel_test_R   R   t   enable_pyobj_flagsR$   R&   R*   R   R,   R.   R/   R1   R3   R>   R@   RF   RK   RN   RQ   R[   t   unittestt   skipIft   syst   version_infoR_   Rf   Rv   Rz   (    (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyR      s.   															t   __main__(!   t
   __future__R    R   R   R]   t   numpyRA   R‚   t   numbaR   R€   R   R   R   R   t   numba.compilerR   R	   t   numba.tests.supportR
   R   t   numba.tests.cffi_usecasest   testst   cffi_usecasesR   R   t   setR(   t
   skipUnlesst	   SUPPORTEDR   R{   t   main(    (    (    s4   lib/python2.7/site-packages/numba/tests/test_cffi.pyt   <module>   s    "			¯