
\K]c           @` s  d  Z  d d l m Z m Z m Z d d l Z d d l Z d d l Z d d l Z d d l	 m
 Z
 d d l Z d d l m Z d d l m Z m Z m Z m Z m Z m Z m Z d d l m Z m Z d d	 l m Z m Z m Z d d
 l m Z e j e j  d  Z! d   Z" d   Z# d   Z$ d Z% d Z& d Z' d   Z( d Z) d   Z* e* e  Z+ e* e  Z, d   Z- e- e  Z. e- e  Z/ e j0 e j1 e j2  e j1 e j2  e j3 e j3  Z4 e j0 e j1 e j5  e j1 e j5  e j3 e j3  Z6 e j0 e j7 e j7 e j3 e j3  Z8 d e f d     YZ9 d e f d     YZ: d e f d     YZ; e! d e f d     Y Z< e= d k re j>   n  d S(   s   
Tests for @cfunc and friends.
i    (   t   divisiont   print_functiont   absolute_importN(   t
   namedtuple(   t   unittest_support(   t   cfunct   carrayt   farrayt   typest   typingt   utilst   njit(   t   cffi_supportt   numpy_supporti   (   t   TestCaset   tagt   captured_stderr(   t   BaseCacheTests4   CFFI not supported -- please install the cffi modulec         C` s   |  | S(   N(    (   t   at   b(    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   add_usecase   s    c         C` s   |  | } | S(   N(    (   R   R   t   c(    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   div_usecase   s    
c         C` s   |  d S(   Ni   (    (   R   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   square_usecase"   s    s   float64(float64, float64)s   float64(int64, int64)s   float64(float64)c         C` s   t    |  | S(   N(   t   object(   R   R   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   objmode_usecase+   s    i   c         ` s     f d   } | S(   Nc   	      ` s     |  | | f  }   | t   } | j | d <| j | d d +| j | d d +| j j | d <| j j | d <d } x< t j | |  D]( \ } } | | | | f | | 7} q W| | d <d  S(   Ni    i   i   i   i   i   (	   t   CARRAY_USECASE_OUT_LENt   ndimt   shapet   stridest   flagst   c_contiguoust   f_contiguoust   npt   ndindex(	   t   in_ptrt   out_ptrt   mt   nt   in_t   outt   st   it   j(   t   func(    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   cfarray_usecase5   s     (    (   R,   R-   (    (   R,   s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   make_cfarray_usecase3   s    c         ` s     f d   } | S(   Nc   	      ` s     |  | | f d t  j }   | t t  j  } | j | d <| j | d d +| j | d d +| j j | d <| j j | d <d } x< t  j	 | |  D]( \ } } | | | | f | | 7} q W| | d <d  S(   Nt   dtypei    i   i   i   i   i   (
   R!   t   float32R   R   R   R   R   R   R    R"   (	   R#   R$   R%   R&   R'   R(   R)   R*   R+   (   R,   (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyR-   M   s     (    (   R,   R-   (    (   R,   s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   make_cfarray_dtype_usecaseJ   s    t	   TestCFuncc           B` sh   e  Z e d   d    Z e d   e d     Z d   Z e d   d    Z d   Z d   Z	 RS(   t	   importantc         C` s   t  t  t  } |  j | j d  |  j | j d  |  j | j t  | j } |  j	 | t
  |  j d |  | j } |  j	 | t j  | j } |  j t j | t j  j |  |  j | d d  d  d S(   s8   
        Basic usage and properties of a cfunc.
        R   g       @g      @g      @N(   R   t   add_sigR   t   assertEqualt   __name__t   __qualname__t   assertIst   __wrapped__t   native_namet   assertIsInstancet   strt   assertInt   addressR
   t	   INT_TYPESt   ctypest   castt   c_void_pt   valuet   assertPreciseEqual(   t   selft   ft   symbolt   addrt   ct(    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt
   test_basico   s    			"c         C` sZ   d d l  m } | j   \ } } t t  t  } | j | j  } |  j | d  d  S(   Ni   (   t   cffi_usecasesg      @(	   t    RK   t   load_inline_moduleR   t
   square_sigR   t   _numba_test_funcptrt   cffiRD   (   RE   RK   t   ffit   libRF   t   res(    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt	   test_cffi   s
    c         C` sB   t  t d i t j d 6t  } |  j | j d d  d  d  S(   Nt   localsR   i   i   g       @(   R   t   div_sigR   t   int64R   RD   R@   (   RE   RF   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   test_locals   s    "c         C` s   t  t  t  } t   # } |  j | j d d  d  Wd  QX|  j | j   d  t   ) } | j d d  } |  j | d  Wd  QX| j   } |  j d |  t	 j
 d k r |  j d	 |  n |  j d
 |  d  S(   Ni   i   g      @RL   i    g        s(   ZeroDivisionError: ('division by zero',)i   s   Exception ignoreds    ignored(   i   (   R   RV   R   R   RD   R@   R5   t   getvalueR=   t   syst   version_info(   RE   RF   t   errRS   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   test_errors   s    "c         C` sE   t  t  t  } | j   } |  j | j |  |  j d |  d  S(   Ns   fadd double(   R   R4   R   t   inspect_llvmR=   R:   (   RE   RF   t   ir(    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   test_llvm_ir   s    c         C` sn   |  j  t   t t d t t  Wd QX|  j    } t t  t  Wd QX|  j d t	 | j
   d S(   s7   
        Object mode is currently unsupported.
        t   forceobjNs   Untyped global name 'object'(   t   assertRaisest   NotImplementedErrorR   R4   t   TrueR   t   assertTypingErrorR   R=   R<   t	   exception(   RE   t   raises(    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   test_object_mode   s
    (
   R6   t
   __module__R   RJ   t   skip_cffi_unsupportedRT   RX   R]   R`   Rh   (    (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyR2   m   s   	
		t   TestCFuncCachec           B` s\   e  Z e j j e  Z e j j e d   Z d Z	 d   Z
 d   Z e d  d    Z RS(   s   cfunc_cache_usecases.pyt   cfunc_caching_test_fodderc         C` s   d t  d |  j d |  j  } t j t j d | g d t j d t j } | j   \ } } | j	 d k r t
 d | j	 | j   f   n  d  S(	   Nsf  if 1:
            import sys

            sys.path.insert(0, %(tempdir)r)
            mod = __import__(%(modname)r)
            mod.self_test()

            f = mod.add_usecase
            assert f.cache_hits == 1
            f = mod.outer
            assert f.cache_hits == 1
            f = mod.div_usecase
            assert f.cache_hits == 1
            t   tempdirt   modnames   -ct   stdoutt   stderri    s/   process failed with code %s: stderr follows
%s
(   t   dictRm   Rn   t
   subprocesst   PopenRZ   t
   executablet   PIPEt   communicatet
   returncodet   AssertionErrort   decode(   RE   t   codet   popenR(   R\   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   run_in_separate_process   s    c         C` s   | j    d  S(   N(   t	   self_test(   RE   t   mod(    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   check_module   s    R3   c         C` s  |  j  d  |  j   } |  j  d  |  j | j j d  |  j | j j d  |  j | j j d  |  j | j j d  |  j |  |  j   } |  j  d  |  j | j j d  |  j | j j d  |  j | j j d  |  j | j j d  |  j |  |  j	   d  S(   Ni    i   i   (
   t   check_pycachet   import_moduleR5   R   t
   cache_hitst   outert   add_nocache_usecaseR   R   R|   (   RE   R~   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   test_caching   s     (   R6   Ri   t   ost   patht   dirnamet   __file__t   heret   joint   usecases_fileRn   R|   R   R   R   (    (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyRk      s   		t
   TestCArrayc           B` s   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z e	 d  d    Z
 d	   Z d
   Z d   Z e	 d  d    Z d   Z RS(   s*   
    Tests for carray() and farray().
    c         C` sb   t  j d d  j d  j t  j  } t  j t d t  j } | | |  | |  | j  | S(   Ni
   i   i   i   R/   (   i   i   (   R!   t   aranget   reshapet   astypeR0   t   emptyR   R   (   RE   t   pointer_factoryR,   R   R(   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   run_carray_usecase   s    'c         C` s8   |  j  | |  } |  j  | |  } |  j | |  d  S(   N(   R   RD   (   RE   R   t   pyfuncR   t   expectedt   got(    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   check_carray_usecase  s    c         C` s   | j  j t  j  S(   N(   R@   t   data_asRB   (   RE   t   arr(    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   make_voidptr  s    c         C` s   | j  j t  j t  j   S(   N(   R@   R   t   POINTERt   c_float(   RE   R   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   make_float32_pointer	  s    c         C` s   | j  j t  j t  j   S(   N(   R@   R   R   t   c_double(   RE   R   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   make_float64_pointer  s    c      
   ` s    f d   } t  j d  j d  j t  j  j d |  } |   j |  | j  } | | |  |   j |  | j  } | | | j	 d   |   j |  | j | j
  } | | |  |   j |  | j t  j  } | | |  |   j |  | j | j
  } | | |  |   j |  | j t  j  } | | | j t  j     j t   |   j |  | j  Wd  QX  j t   | | j j | j  Wd  QX  j t  & } |   j |  | j t  j  Wd  QX  j d t | j   d  S(	   Nc         ` s0     j  |  |    j |  j j | j j  d  S(   N(   RD   R5   R@   t   data(   R   R   (   RE   (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   eq  s    i   i   i   t   ordert   Ks%   mismatching dtype 'int32' for pointer(   i   i   (   R!   R   R   R   R0   t   copyR   R   t   sizet   ravelR/   R   t   int32t   viewRb   t	   TypeErrorR@   R   R=   R<   Rf   (   RE   R,   R   R   t   baseR   Rg   (    (   RE   s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   check_carray_farray  s,    0!!!!%	R3   c         C` s   |  j  t d  d S(   s,   
        Test pure Python carray().
        t   CN(   R   R   (   RE   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   test_carray7  s    c         C` s   |  j  t d  d S(   s,   
        Test pure Python farray().
        t   FN(   R   R   (   RE   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   test_farray>  s    c         #` sf   x_ t  j t  j t  j t  j t  j t  j f D]3   t   f d   | j D  } | j	 |   Vq+ Wd S(   s   
        Generate a bunch of concrete signatures by varying the width
        and signedness of size arguments (see issue #1923).
        c         3` s*   |  ]  } | t  j k r   n | Vq d  S(   N(   R   t   intp(   t   .0R   (   t   actual_size(    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pys	   <genexpr>K  s   N(
   R   R   R   t   intct   uintpt   uint32t   uintct   tuplet   argst   return_type(   RE   t
   formal_sigR   (    (   R   s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   make_carray_sigsD  s
    c         C` s%  | } xB |  j  t  D]1 } t |  |  } |  j |  j | | j  q W| } xB |  j  t  D]1 } t |  |  } |  j |  j | | j  qa W|  j    } t t  |  } Wd  QX|  j d t	 | j
   | } xB |  j  t  D]1 } t |  |  } |  j |  j | | j  q Wd  S(   Ns7   mismatching dtype 'float32' for pointer type 'float64*'(   R   t   carray_float32_usecase_sigR   R   R   R@   Re   t   carray_float64_usecase_sigR=   R<   Rf   t   carray_voidptr_usecase_sig(   RE   t   usecaset   dtype_usecaseR   t   sigRF   Rg   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   check_numba_carray_farrayO  s     	c         C` s   |  j  t t  d S(   sK   
        Test Numba-compiled carray() against pure Python carray()
        N(   R   t   carray_usecaset   carray_dtype_usecase(   RE   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   test_numba_carrayg  s    c         C` s   |  j  t t  d S(   sK   
        Test Numba-compiled farray() against pure Python farray()
        N(   R   t   farray_usecaset   farray_dtype_usecase(   RE   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   test_numba_farrayn  s    (   R6   Ri   t   __doc__R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyR      s   						(			t   TestCffiStructc           B` s5   e  Z d  Z e d  Z d   Z d   Z d   Z RS(   s   
typedef struct _big_struct {
    int    i1;
    float  f2;
    double d3;
    float  af4[9];
} big_struct;

typedef struct _error {
    int bits:4;
} error;

typedef double (*myfunc)(big_struct*, size_t);
c         C` s*   d d l  m } |   } | j |  | S(   Ni    (   t   FFI(   RP   R   t   cdef(   RE   t   srcR   RQ   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   get_ffi  s    	c         C` sf  |  j    } | j d  } t j | d t } |  j | t j  |  j t	 |  d  |  j | j d  t j
  |  j | j d  t j  |  j | j d  t j  |  j | j d  t j d t j d	 d   | j d  } t j | d t } |  j | t j  |  j | j d t j |   |  j | j d t j  |  j | j t j  d  S(   Nt
   big_structt   use_record_dtypei   t   i1t   f2t   d3t   af4R/   R   i	   t   myfunci    i   (   i	   (   R   t   typeofR   t   map_typeRd   R;   R   t   RecordR5   t   lenR   R0   t   float64t   NestedArrayR	   t	   SignatureR   t   CPointerR   R   (   RE   RQ   R   t   nbtypeR   R   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   test_type_parsing  s"     c         ` s  |  j    } | j d  } t j | d t } t j | j d  d t } t d      t |    f d    } | j d  } | j d |  } x{ t	 d  D]m } | d	 | | _
 | d
 | | _ d | d
 | | _ x- t	 d  D] }	 | d |	 | | j |	 <q Wq Wt | j d |   }
 | j |
 d  } t j d | j |  d t j |  d d  }   |  } |  j | |  d  S(   NR   R   R   c         S` s`   d } xS t  |  j  D]B } |  | } | | j | j | j 7} | |  | j j   7} q W| S(   Ni    (   t   rangeR   R   R   R   R   t   sum(   R   t   tmpR*   t   elem(    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   calc  s    
c         ` s   t  |  |  }   |  S(   N(   R   (   t   ptrR&   R   (   R   (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   foo  s    s   big_struct[3]s   big_struct*i   i{   i   i   i	   i
   t   size_tt   bufferR/   R   (   R   R   R   R   Rd   R   R   t   newRA   R   R   R   R   R   t   intR@   R!   t   ndarrayR   R   t   as_dtypeR5   (   RE   RQ   R   t   nb_big_structR   R   t   mydataR   R*   R+   RH   R   t   arrayt   expect(    (   R   s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   test_cfunc_callback  s,    	!		c         C` s]   |  j    } |  j t  # } t j | j d  d t Wd  QX|  j d t | j	   d  S(   Nt   errorR   s0   field 'bits' has bitshift, this is not supported(
   R   Rb   t
   ValueErrorR   R   R   Rd   R5   R<   Rf   (   RE   RQ   Rg   (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   test_unsupport_bitsize  s    (   R6   Ri   t   c_sourceR   R   R   R   (    (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyR   u  s
   		+t   __main__(?   R   t
   __future__R    R   R   R@   R   Rr   RZ   t   collectionsR   t   numpyR!   t   numbaR   t   unittestR   R   R   R   R	   R
   R   R   R   t   supportR   R   R   t   test_dispatcherR   t
   skipUnlesst	   SUPPORTEDRj   R   R   R   R4   RV   RN   R   R   R.   R   R   R1   R   R   t   voidR   R0   R   R   R   R   t   voidptrR   R2   Rk   R   R   R6   t   main(    (    (    s5   lib/python2.7/site-packages/numba/tests/test_cfunc.pyt   <module>   sX   4							O:g