ó
\K]c           @` s6  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 Z d  d l	 Z	 d  d l
 Z d  d l m Z m Z d  d l m Z m Z m Z m Z d  d l m Z m Z d  d l Td „  Z d e f d	 „  ƒ  YZ d
 e e f d „  ƒ  YZ d e e f d „  ƒ  YZ e d k r2e j ƒ  n  d S(   i    (   t   print_functiont   absolute_importt   divisionN(   t   unittestt   SerialMixin(   t   cudat   typest   utilst   numpy_support(   t   TestCaset   compile_function(   t   *c         ` s  t  d „  ˆ  Dƒ ƒ s t ‚ t ˆ t j ƒ s6 t ‚ t j ˆ ˆ  Œ  d t ƒ|  ƒ ‰ g  ˆ g t ˆ  ƒ D] } t j | d d ƒ ^ qk } t	 ˆ  ƒ d k r° ‡ f d †  } n0 t	 ˆ  ƒ d k rÔ ‡ f d †  } n d sà t ‚ t j t
 | ƒ ƒ | ƒ ‰ ‡  ‡ ‡ f d	 †  } | S(
   Nc         s` s!   |  ] } t  | t j ƒ Vq d  S(   N(   t
   isinstanceR   t   Array(   t   .0t   tp(    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pys	   <genexpr>   s    t   devicei   t   Cc         ` s=   t  j d ƒ } | |  j d k  r9 ˆ  | | ƒ |  | <n  d  S(   Ni   i    (   R   t   gridt   shape(   t   outt   at   i(   t   device_func(    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   kernel_func   s    i   c         ` sD   t  j d ƒ } | |  j d k  r@ ˆ  | | | | ƒ |  | <n  d  S(   Ni   i    (   R   R   R   (   R   R   t   bR   (   R   (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyR   !   s    i    c   
      ` sà   t  |  ƒ } g  ˆ  D]$ } t j | d t j | ƒ ƒ^ q } t j | d t j ˆ ƒ ƒ} xD t |  ƒ D]6 \ } } x' t | | ƒ D] \ } } | | | <q„ Wqh W| g | }	 ˆ t t j	 | d ƒ ƒ d f |	 Œ  t
 | ƒ S(   Nt   dtypei   (   t   lent   npt   emptyR   t   as_dtypet	   enumeratet   zipt   intt   matht   ceilt   list(
   t   valuest   nR   t   inputst   outputR   t   vst   vt   inpt   args(   t   argtypest   kernelt   restype(    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   kernel_wrapper*   s    .'(   t   anyt   AssertionErrorR   R   R   R   t   jitt   TrueR$   R   t   tuple(   t   pyfuncR-   R/   R   t   kernel_typesR   R0   (    (   R-   R   R.   R/   sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   compile_scalar_func   s    !2t   BaseComplexTestc           B` s>   e  Z d  „  Z d „  Z d „  Z d e d „ Z e Z e Z RS(   c      
   C` sg   d d 
d d d 
d t  d ƒ t  d ƒ t  d	 ƒ g	 } g  t j | | ƒ D] \ } } t | | ƒ ^ qH S(
   Ng       €g        i   iÿÿÿÿg      ø?g      Às   -infs   +inft   nan(   t   floatt	   itertoolst   productt   complex(   t   selft   realst   xt   y(    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   basic_values:   s    !c      
   C` sn   d d 
d d t  j t  j 
t d ƒ t d ƒ t d ƒ g	 } g  t j | | ƒ D] \ } } t | | ƒ ^ qO S(   Ng        i   iÿÿÿÿs   -infs   +infR:   (   R"   t   piR;   R<   R=   R>   (   R?   R@   RA   RB   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   more_values?   s    !c      	   C` se   d d 
d d t  j t  j 
t d ƒ t d ƒ g } g  t j | | ƒ D] \ } } t | | ƒ ^ qF S(   Ng       €g        i   iÿÿÿÿt   infs   -inf(   R"   RD   R;   R<   R=   R>   (   R?   R@   RA   RB   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   non_nan_valuesD   s    i   c         C` s“  xŒ| D]„} t  | t j ƒ r+ | f } n  t  | t ƒ rM | d | Œ  } n  | j d t j t j f k rr d n d } t | | j | j ƒ } g  }	 g  }
 x‚ | D]z } t  | t	 t f ƒ sÊ | f } n  y$ |
 j
 | | Œ  ƒ |	 j
 | ƒ Wq£ t k
 r} |  j d t | ƒ ƒ q£ q£ Xq£ W| |	 ƒ } x[ t | |
 |	 ƒ D]G \ } } } d | | f } |  j | | d | d | d | d	 | ƒq@Wq Wd  S(
   Ni    t   singlet   doubles   math domain errors   for input %r with prec %rt   prect   ulpst   ignore_sign_on_zerot   msg(   R   R   t   TypeR5   R,   t   float32t	   complex64R8   t   return_typeR$   t   appendt
   ValueErrort   assertInt   strR    t   assertPreciseEqual(   R?   R6   t   sigsR%   RK   RL   t   sigRJ   t   cudafunct	   ok_valuest   expected_listR,   t   et   got_listt   gott   expectedRM   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   run_funcI   s4    %"(	   t   __name__t
   __module__RC   RE   RG   t   FalseR`   t	   run_unaryt
   run_binary(    (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyR9   8   s   			t   TestComplexc           B` s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C` sK   |  j  ƒ  } |  j | g  t j t j f D] } | j | ƒ ^ q( | ƒ d  S(   N(   RC   Rd   R   RP   t
   complex128t   underlying_float(   R?   R6   R%   R   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   check_real_imagem   s
    	(c         C` s   |  j  t ƒ d  S(   N(   Ri   t   real_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt	   test_realt   s    c         C` s   |  j  t ƒ d  S(   N(   Ri   t   imag_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt	   test_imagw   s    c         C` s5   t  } |  j ƒ  } |  j | t j t j g | ƒ d  S(   N(   t   conjugate_usecaseRC   Rd   R   RP   Rg   (   R?   R6   R%   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   test_conjugatez   s
    	(   Ra   Rb   Ri   Rk   Rm   Ro   (    (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyRf   k   s   			t	   TestCMathc           B` s  e  Z d  Z d „  Z d d e e d „ Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z e j e j d k  d ƒ d „  ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! RS(    s)   
    Tests for cmath module support.
    c         C` sE   |  j  | g  t j t j f D] } t j | ƒ ^ q |  j ƒ  ƒ d  S(   N(   Rd   R   Rg   RP   t   booleanRC   (   R?   R6   R   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   check_predicate_func‡   s    	+i   c         C` s   | r d „  } n	 d „  } |  j  | | t j ƒ g | pB |  j ƒ  d | d | ƒ|  j  | | t j ƒ g | py |  j ƒ  d | d | ƒd  S(   Nc         S` s   |  j  |  ƒ S(   N(   Rh   (   R   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyRX      s    c         S` s
   |  |  ƒ S(   N(    (   R   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyRX   ’   s    RK   RL   (   Rd   R   Rg   RE   RP   RC   (   R?   R6   RK   R%   t   returns_floatRL   RX   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   check_unary_funcŒ   s    	c         C` s   |  j  t d t ƒd  S(   NRs   (   Rt   t   phase_usecaseR4   (   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt
   test_phasež   s    c         C` s   |  j  t ƒ d  S(   N(   Rt   t   polar_as_complex_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt
   test_polar¡   s    c         ` s?   ‡  f d †  } | t  j ˆ  j ƒ  ƒ | t  j ˆ  j ƒ  ƒ d  S(   Nc         ` ss   g  | D]: } t  j | j ƒ s/ | j d k r | j | j f ^ q } |  j } ˆ  j t |  | | ƒ g | ƒ d  S(   Ni    (   R"   t   isinft   imagt   realRh   Re   t   rect_usecase(   R   t   seed_valuest   zR%   t
   float_type(   R?   (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   do_test¥   s
    :	(   R   Rg   RE   RP   RC   (   R?   R€   (    (   R?   sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt	   test_rect¤   s    c         C` s   |  j  t ƒ d  S(   N(   Rr   t   isnan_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt
   test_isnan±   s    c         C` s   |  j  t ƒ d  S(   N(   Rr   t   isinf_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt
   test_isinf´   s    i   i   s   needs Python 3.2+c         C` s   |  j  t ƒ d  S(   N(   Rr   t   isfinite_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   test_isfinite·   s    c         C` s   |  j  t d d ƒd  S(   NRK   i   (   Rt   t   exp_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   test_exp½   s    c         C` s   |  j  t ƒ d  S(   N(   Rt   t   log_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   test_logÀ   s    c         C` se   t  t j |  j ƒ  |  j ƒ  ƒ ƒ } t j t j f t j t j f g } |  j t | | d d ƒd  S(   NRK   i   (	   R$   R<   R=   RE   R   Rg   RP   Re   t   log_base_usecase(   R?   R%   t   value_types(    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   test_log_baseÃ   s
    $c         C` s   |  j  t ƒ d  S(   N(   Rt   t   log10_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt
   test_log10Ê   s    c         C` s   |  j  t ƒ d  S(   N(   Rt   t   sqrt_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt	   test_sqrtÍ   s    c         C` s   |  j  t d d ƒd  S(   NRK   i   (   Rt   t   acos_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt	   test_acosÒ   s    c         C` s   |  j  t d d ƒd  S(   NRK   i   (   Rt   t   asin_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt	   test_asinÕ   s    c         C` s#   |  j  t d d d |  j ƒ  ƒd  S(   NRK   i   R%   (   Rt   t   atan_usecaseRG   (   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt	   test_atanØ   s    c         C` s   |  j  t d d ƒd  S(   NRK   i   (   Rt   t   cos_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   test_cosÜ   s    c         C` s   |  j  t d d ƒd  S(   NRK   i   (   Rt   t   sin_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   test_sinß   s    c         C` s   |  j  t d d d t ƒd  S(   NRK   i   RL   (   Rt   t   tan_usecaseR4   (   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   test_tanã   s    c         C` s   |  j  t ƒ d  S(   N(   Rt   t   acosh_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt
   test_acoshé   s    c         C` s   |  j  t d d ƒd  S(   NRK   i   (   Rt   t   asinh_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt
   test_asinhì   s    c         C` s   |  j  t d d d t ƒd  S(   NRK   i   RL   (   Rt   t   atanh_usecaseR4   (   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt
   test_atanhï   s    c         C` s   |  j  t d d ƒd  S(   NRK   i   (   Rt   t   cosh_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt	   test_coshó   s    c         C` s   |  j  t d d ƒd  S(   NRK   i   (   Rt   t   sinh_usecase(   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt	   test_sinhö   s    c         C` s   |  j  t d d d t ƒd  S(   NRK   i   RL   (   Rt   t   tanh_usecaseR4   (   R?   (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt	   test_tanhù   s    N(   i   i   ("   Ra   Rb   t   __doc__Rr   t   NoneRc   Rt   Rv   Rx   R   Rƒ   R…   R   t   skipIfR   t	   PYVERSIONR‡   R‰   R‹   RŽ   R   R’   R”   R–   R˜   Rš   Rœ   Rž   R    R¢   R¤   R¦   R¨   Rª   (    (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyRp   ‚   s6   						$																t   __main__(   t
   __future__R    R   R   t   cmathR"   R<   t   stringt   syst   textwrapt   numpyR   t   numba.cuda.testingR   R   t   numbaR   R   R   R   t   numba.tests.supportR	   R
   t   numba.tests.complex_usecasesR8   R9   Rf   Rp   Ra   t   main(    (    (    sC   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_complex.pyt   <module>   s"   "
	&3|