U
    ,‰d‹  ã                   @   s˜   d dl Z d dlZd dlmZ d dlm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d	„ ƒZejd
d„ ƒZG dd„ deƒZedkr”e ¡  dS )é    N)Úcuda)Úunittest)Úskip_on_cudasimÚCUDATestCase)Úxoroshiro128p_uniform_float32Úxoroshiro128p_normal_float32Úxoroshiro128p_uniform_float64Úxoroshiro128p_normal_float64é   é   c                 C   sV   t  d¡}t|ƒD ]>}|| | }|tkr:t| |ƒ||< q|tkrt| |ƒ||< qd S ©Nr
   )r   ÚgridÚrangeÚUNIFORMr   ÚNORMALr   ©ÚstatesÚoutÚcountÚdistributionZ	thread_idÚiÚidx© r   úG/tmp/pip-unpacked-wheel-eu7e0c37/numba/cuda/tests/cudapy/test_random.pyÚrng_kernel_float32   s    
r   c                 C   sV   t  d¡}t|ƒD ]>}|| | }|tkr:t| |ƒ||< q|tkrt| |ƒ||< qd S r   )r   r   r   r   r   r   r	   r   r   r   r   Úrng_kernel_float64    s    
r   c                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zedƒdd„ ƒZ	dd„ Z
dd„ Zedƒdd„ ƒZdS )ÚTestCudaRandomXoroshiro128pc                 C   s2   t jjddd}| ¡ }|  tt |¡ƒd¡ d S )Né
   r
   ©Úseed)r   ÚrandomÚcreate_xoroshiro128p_statesÚcopy_to_hostÚassertEqualÚlenÚnpÚunique)Úselfr   Úsr   r   r   Útest_create.   s    z'TestCudaRandomXoroshiro128p.test_createc                 C   sT   t jjddd}| ¡ }t jjdddd}| ¡ }tj |dd … |d d… ¡ d S )Nr   r
   r   é   )r   Zsubsequence_startéýÿÿÿ)r   r    r!   r"   r%   ZtestingZassert_array_equal)r'   r   Ús1Ús2r   r   r   Útest_create_subsequence_start3   s    
ÿz9TestCudaRandomXoroshiro128p.test_create_subsequence_startc                 C   s<   t  ¡ }t jjdd|d}| ¡ }|  tt |¡ƒd¡ d S )Nr   r
   )r   Ústream)	r   r/   r    r!   r"   r#   r$   r%   r&   )r'   r/   r   r(   r   r   r   Útest_create_stream>   s    
ÿz.TestCudaRandomXoroshiro128p.test_create_streamc                 C   s”   t jjddd}tjdtjd}|d ||dtƒ | j| ¡ dd	d
 | j| 	¡ dd	d
 | j| 
¡ ddd
 | j| ¡ ddt d¡  dd
 d S )Né@   r
   r   é   ©Údtype©r   é    r6   ç        gü©ñÒMbP?©Údeltaç      ð?g      à?g¸…ëQ¸Ž?r   r*   gú~j¼t“x?)r   r    r!   r%   ÚzerosÚfloat32r   ÚassertAlmostEqualÚminÚmaxÚmeanÚstdÚmathÚsqrt©r'   Zkernel_funcr4   r   r   r   r   r   Úcheck_uniformE   s    z)TestCudaRandomXoroshiro128p.check_uniformc                 C   s   |   ttj¡ d S ©N)rE   r   r%   r<   ©r'   r   r   r   Útest_uniform_float32O   s    z0TestCudaRandomXoroshiro128p.test_uniform_float32z!skip test for speed under cudasimc                 C   s   |   ttj¡ d S rF   )rE   r   r%   Úfloat64rG   r   r   r   Útest_uniform_float64R   s    z0TestCudaRandomXoroshiro128p.test_uniform_float64c                 C   s\   t jjddd}tjd|d}|d ||dtƒ | j| ¡ dd	d
 | j| ¡ ddd
 d S )Nr1   r
   r   r2   r3   r5   r6   r7   gü©ñÒMbp?r8   r:   gü©ñÒMb`?)	r   r    r!   r%   r;   r   r=   r@   rA   rD   r   r   r   Úcheck_normalV   s
    z(TestCudaRandomXoroshiro128p.check_normalc                 C   s   |   ttj¡ d S rF   )rK   r   r%   r<   rG   r   r   r   Útest_normal_float32_   s    z/TestCudaRandomXoroshiro128p.test_normal_float32c                 C   s   |   ttj¡ d S rF   )rK   r   r%   rI   rG   r   r   r   Útest_normal_float64b   s    z/TestCudaRandomXoroshiro128p.test_normal_float64N)Ú__name__Ú
__module__Ú__qualname__r)   r.   r0   rE   rH   r   rJ   rK   rL   rM   r   r   r   r   r   -   s   

	r   Ú__main__)rB   Znumpyr%   Znumbar   Znumba.cuda.testingr   r   r   Znumba.cuda.randomr   r   r   r	   r   r   Zjitr   r   r   rN   Úmainr   r   r   r   Ú<module>   s   

: