U
    Ã9%e‹  ã                   @   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ÚdistributionÚ	thread_idÚiÚidx© r   úb/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/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&   Ú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   r1   r!   r"   r#   r$   r%   r&   r'   )r(   r1   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   é    r8   ç        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_funcr6   r   r   r   r   r   Úcheck_uniformE   s    z)TestCudaRandomXoroshiro128p.check_uniformc                 C   s   |   ttj¡ d S ©N)rG   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 rH   )rG   r   r&   Úfloat64rI   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 )Nr3   r
   r   r4   r5   r7   r8   r9   gü©ñÒMbp?r:   r<   gü©ñÒMb`?)	r   r!   r"   r&   r=   r   r?   rB   rC   rF   r   r   r   Úcheck_normalV   s
    z(TestCudaRandomXoroshiro128p.check_normalc                 C   s   |   ttj¡ d S rH   )rM   r   r&   r>   rI   r   r   r   Útest_normal_float32_   s    z/TestCudaRandomXoroshiro128p.test_normal_float32c                 C   s   |   ttj¡ d S rH   )rM   r   r&   rK   rI   r   r   r   Útest_normal_float64b   s    z/TestCudaRandomXoroshiro128p.test_normal_float64N)Ú__name__Ú
__module__Ú__qualname__r*   r0   r2   rG   rJ   r   rL   rM   rN   rO   r   r   r   r   r   -   s   

	r   Ú__main__)rD   Únumpyr&   Znumbar   Znumba.cuda.testingr   r   r   Znumba.cuda.randomr   r   r   r	   r   r   Zjitr   r   r   rP   Úmainr   r   r   r   Ú<module>   s   

: