o
    ۾i                     @   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rLe  dS dS )    N)cuda)unittest)skip_on_cudasimCUDATestCase)xoroshiro128p_uniform_float32xoroshiro128p_normal_float32xoroshiro128p_uniform_float64xoroshiro128p_normal_float64      c                 C   V   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   W/home/ubuntu/.local/lib/python3.10/site-packages/numba/cuda/tests/cudapy/test_random.pyrng_kernel_float32      
r   c                 C   r   r   )r   r   r   r   r   r   r	   r   r   r   r   rng_kernel_float64    r   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"   subsequence_start)r   r#   r$   r%   r(   testing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   r5   r#   r$   r%   r&   r'   r(   r)   )r*   r5   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       r<           gMbP?delta      ?g      ?gQ?r   r-   g~jtx?)r   r#   r$   r(   zerosfloat32r   assertAlmostEqualminmaxmeanstdmathsqrtr*   kernel_funcr:   r   r   r   r   r   check_uniformE   s   &z)TestCudaRandomXoroshiro128p.check_uniformc                 C      |  ttj d S N)rL   r   r(   rB   r*   r   r   r   test_uniform_float32O      z0TestCudaRandomXoroshiro128p.test_uniform_float32z!skip test for speed under cudasimc                 C   rM   rN   )rL   r   r(   float64rO   r   r   r   test_uniform_float64R      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 )Nr7   r
   r!   r8   r9   r;   r<   r=   gMbp?r>   r@   gMb`?)	r   r#   r$   r(   rA   r   rC   rF   rG   rJ   r   r   r   check_normalV   s
   z(TestCudaRandomXoroshiro128p.check_normalc                 C   rM   rN   )rU   r   r(   rB   rO   r   r   r   test_normal_float32_   rQ   z/TestCudaRandomXoroshiro128p.test_normal_float32c                 C   rM   rN   )rU   r   r(   rR   rO   r   r   r   test_normal_float64b   rT   z/TestCudaRandomXoroshiro128p.test_normal_float64N)__name__
__module____qualname__r,   r4   r6   rL   rP   r   rS   rU   rV   rW   r   r   r   r   r   -   s    

	r   __main__)rH   numpyr(   numbar   numba.cuda.testingr   r   r   numba.cuda.randomr   r   r   r	   r   r   jitr   r   r   rX   mainr   r   r   r   <module>   s     

: