
    xKg                         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        Zej                   d	        Z G d
 de      Zedk(  r ej*                          yy)    N)cuda)unittest)skip_on_cudasimCUDATestCase)xoroshiro128p_uniform_float32xoroshiro128p_normal_float32xoroshiro128p_uniform_float64xoroshiro128p_normal_float64      c                     t        j                  d      }t        |      D ]<  }||z  |z   }|t        k(  rt	        | |      ||<   $|t
        k(  s.t        | |      ||<   > y Nr   )r   gridrangeUNIFORMr   NORMALr   statesoutcountdistribution	thread_idiidxs          g/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/cuda/tests/cudapy/test_random.pyrng_kernel_float32r      \    		!I5\%!#7"4VYGCHV#3FIFCH     c                     t        j                  d      }t        |      D ]<  }||z  |z   }|t        k(  rt	        | |      ||<   $|t
        k(  s.t        | |      ||<   > y r   )r   r   r   r   r	   r   r
   r   s          r   rng_kernel_float64r        r   r   c                   n    e Zd Zd Zd Zd Zd Zd Z ed      d        Z	d Z
d	 Z ed      d
        Zy)TestCudaRandomXoroshiro128pc                     t         j                  j                  dd      }|j                         }| j	                  t        t        j                  |            d       y )N
   r   seed)r   randomcreate_xoroshiro128p_statescopy_to_hostassertEquallennpunique)selfr   ss      r   test_createz'TestCudaRandomXoroshiro128p.test_create.   sF    88!8D!RYYq\*B/r   c                    t         j                  j                  dd      }|j                         }t         j                  j                  ddd      }|j                         }t        j
                  j                  |dd  |d d        y )Nr$   r   r%      )r&   subsequence_start)r   r'   r(   r)   r,   testingassert_array_equal)r.   r   s1s2s       r   test_create_subsequence_startz9TestCudaRandomXoroshiro128p.test_create_subsequence_start3   sz    88!8D  "88!KL 9 N  " 	

%%bfb"g6r   c                     t        j                         }t         j                  j                  dd|      }|j	                         }| j                  t        t        j                  |            d       y )Nr$   r   )r&   stream)	r   r;   r'   r(   r)   r*   r+   r,   r-   )r.   r;   r   r/   s       r   test_create_streamz.TestCudaRandomXoroshiro128p.test_create_stream>   sY    88!@F 9 H!RYYq\*B/r   c                    t         j                  j                  dd      }t        j                  dt        j
                        } |d   ||dt               | j                  |j                         dd	
       | j                  |j                         dd	
       | j                  |j                         dd
       | j                  |j                         ddt        j                  d      z  z  d
       y )N@   r   r%      dtyper       rC           gMbP?delta      ?g      ?gQ?r   r2   g~jtx?)r   r'   r(   r,   zerosfloat32r   assertAlmostEqualminmaxmeanstdmathsqrtr.   kernel_funcrA   r   r   s        r   check_uniformz)TestCudaRandomXoroshiro128p.check_uniformE   s    88a8Hhh{"**5E63G4swwy#T:swwy#T:sxxz3f=swwy#TYYq\1A*B$Or   c                 L    | j                  t        t        j                         y N)rS   r   r,   rI   r.   s    r   test_uniform_float32z0TestCudaRandomXoroshiro128p.test_uniform_float32O   s    -rzz:r   z!skip test for speed under cudasimc                 L    | j                  t        t        j                         y rU   )rS   r    r,   float64rV   s    r   test_uniform_float64z0TestCudaRandomXoroshiro128p.test_uniform_float64R   s    -rzz:r   c                     t         j                  j                  dd      }t        j                  d|      } |d   ||dt
               | j                  |j                         dd	
       | j                  |j                         dd
       y )Nr>   r   r%   r?   r@   rB   rC   rD   gMbp?rE   rG   gMb`?)	r   r'   r(   r,   rH   r   rJ   rM   rN   rQ   s        r   check_normalz(TestCudaRandomXoroshiro128p.check_normalV   sv    88a8Hhh{%0E63F3sxxz3d;swwy#T:r   c                 L    | j                  t        t        j                         y rU   )r\   r   r,   rI   rV   s    r   test_normal_float32z/TestCudaRandomXoroshiro128p.test_normal_float32_   s    ,bjj9r   c                 L    | j                  t        t        j                         y rU   )r\   r    r,   rY   rV   s    r   test_normal_float64z/TestCudaRandomXoroshiro128p.test_normal_float64b   s    ,bjj9r   N)__name__
__module____qualname__r0   r9   r<   rS   rW   r   rZ   r\   r^   r`    r   r   r"   r"   -   sZ    0
	70P; 89; :;;: 89: ::r   r"   __main__)rO   numpyr,   numbar   numba.cuda.testingr   r   r   numba.cuda.randomr   r   r	   r
   r   r   jitr   r    r"   ra   mainrd   r   r   <module>rl      s       ' <@ @ 	
 	G 
	G 	G 
	G7:, 7:t zHMMO r   