ó
\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 m	 Z	 m
 Z
 d  d l m Z d  d l Z d  d l m Z m Z d  d l m Z m Z m Z m Z d Z d Z e j d	 „  ƒ Z e j d
 „  ƒ Z d e e j f d „  ƒ  YZ e d k r	e j ƒ  n  d S(   i    (   t   print_functiont   divisiont   absolute_importN(   t   cudat   configt   float32(   t   unittest(   t   skip_on_cudasimt   SerialMixin(   t   xoroshiro128p_uniform_float32t   xoroshiro128p_normal_float32t   xoroshiro128p_uniform_float64t   xoroshiro128p_normal_float64i   i   c         C` s~   t  j d ƒ } xh t | ƒ D]Z } | t k rL t |  | ƒ | | | | <q | t k r t |  | ƒ | | | | <q q Wd  S(   Ni   (   R   t   gridt   ranget   UNIFORMR	   t   NORMALR
   (   t   statest   outt   countt   distributiont	   thread_idt   i(    (    sB   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_random.pyt   rng_kernel_float32   s    c         C` s~   t  j d ƒ } xh t | ƒ D]Z } | t k rL t |  | ƒ | | | | <q | t k r t |  | ƒ | | | | <q q Wd  S(   Ni   (   R   R   R   R   R   R   R   (   R   R   R   R   R   R   (    (    sB   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_random.pyt   rng_kernel_float64!   s    t   TestCudaRandomXoroshiro128pc           B` sq   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z e d ƒ d „  ƒ Z d „  Z	 d „  Z
 e d ƒ d	 „  ƒ Z RS(
   c         C` sG   t  j j d d d ƒ} | j ƒ  } |  j t t j | ƒ ƒ d ƒ d  S(   Ni
   t   seedi   (   R   t   randomt   create_xoroshiro128p_statest   copy_to_hostt   assertEqualt   lent   npt   unique(   t   selfR   t   s(    (    sB   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_random.pyt   test_create-   s    c         C` sm   t  j j d d d ƒ} | j ƒ  } t  j j d d d d d ƒ} | j ƒ  } t j j | d | d  ƒ d  S(   Ni
   R   i   t   subsequence_starti   iýÿÿÿ(   R   R   R   R   R    t   testingt   assert_array_equal(   R"   R   t   s1t   s2(    (    sB   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_random.pyt   test_create_subsequence_start2   s    	c         C` sY   t  j ƒ  } t  j j d d d d | ƒ} | j ƒ  } |  j t t j | ƒ ƒ d ƒ d  S(   Ni
   R   i   t   stream(	   R   R+   R   R   R   R   R   R    R!   (   R"   R+   R   R#   (    (    sB   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_random.pyt   test_create_stream=   s    c         C` sÌ   t  j j d d d ƒ} t j d d t j ƒ} | d | | d t ƒ |  j | j ƒ  d d d ƒ|  j | j	 ƒ  d	 d d ƒ|  j | j
 ƒ  d
 d d ƒ|  j | j ƒ  d	 d t j d ƒ d d ƒd  S(   Ni    i   R   i   t   dtypeg        t   deltagü©ñÒMbP?g      ð?g      à?g¸…ëQ¸Ž?i   gú~j¼t“x?i@   i@   i   (   i   i    (   R   R   R   R    t   zerosR   R   t   assertAlmostEqualt   mint   maxt   meant   stdt   matht   sqrt(   R"   t   kernel_funcR-   R   R   (    (    sB   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_random.pyt   check_uniformC   s    c         C` s   |  j  t t j ƒ d  S(   N(   R8   R   R    R   (   R"   (    (    sB   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_random.pyt   test_uniform_float32M   s    s!   skip test for speed under cudasimc         C` s   |  j  t t j ƒ d  S(   N(   R8   R   R    t   float64(   R"   (    (    sB   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_random.pyt   test_uniform_float64P   s    c         C` s€   t  j j d d d ƒ} t j d d | ƒ} | d | | d t ƒ |  j | j ƒ  d d d ƒ|  j | j ƒ  d	 d d
 ƒd  S(   Ni    i   R   i   R-   g        R.   gü©ñÒMbp?g      ð?gü©ñÒMb`?i@   i@   i   (   i   i    (	   R   R   R   R    R/   R   R0   R3   R4   (   R"   R7   R-   R   R   (    (    sB   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_random.pyt   check_normalT   s
    c         C` s   |  j  t t j ƒ d  S(   N(   R<   R   R    R   (   R"   (    (    sB   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_random.pyt   test_normal_float32]   s    c         C` s   |  j  t t j ƒ d  S(   N(   R<   R   R    R:   (   R"   (    (    sB   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_random.pyt   test_normal_float64`   s    (   t   __name__t
   __module__R$   R*   R,   R8   R9   R   R;   R<   R=   R>   (    (    (    sB   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_random.pyR   ,   s   				
				t   __main__(   t
   __future__R    R   R   R5   t   numpyR    t   numbaR   R   R   t   numba.cuda.testingR   t   numba.cuda.randomR   R   R	   R
   R   R   R   R   t   jitR   R   t   TestCaseR   R?   t   main(    (    (    sB   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_random.pyt   <module>   s   "8