o
    i                     @   s   d dl Z d dlZd dlZd dlZd dlZd dl mZ d dlmZm	Z	 d dl
mZ d dlmZmZmZ d dlmZmZ d dlmZ d dlmZmZ d	ZG d
d deZdd ZG dd de	eZG dd deeZdS )    N)types)TestCaseMemoryLeakMixin)_get_proper_funcnext_uint32next_uint64next_double)MT19937	Generator)TypingError)run_in_new_process_cachingSerialMixini   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestHelperFuncsc                 C   s   dd }dd }|  t||tjd  d |  t||tjd  d | t}t||tj W d    n1 s;w   Y  | dt	|j
 | t}t||tj W d    n1 s`w   Y  | dt	|j
 d S )	Nc                   S      dS )N     r   r   r   l/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/tests/test_np_randomgen.pytest_32bit_func      zBTestHelperFuncs.test_proper_func_provider.<locals>.test_32bit_funcc                   S   r   )N@   r   r   r   r   r   test_64bit_func   r   zBTestHelperFuncs.test_proper_func_provider.<locals>.test_64bit_funcr   r   r   z1Argument dtype is not one of the expected type(s))assertEqualr   npfloat64float32assertRaisesr   int32assertInstr	exceptionr   )selfr   r   raisesr   r   r   test_proper_func_provider   s<   

z)TestHelperFuncs.test_proper_func_providerc                 C   sl   t jd}dd }tjdd|}| t}|| W d    n1 s&w   Y  | dt|j	 d S )N   c                 S   s   | j ddS )N)r   )locnormalxr   r   r   <lambda>5       z2TestHelperFuncs.test_check_types.<locals>.<lambda>TcachezArgument loc is not one of the expected type(s): [<class 'numba.core.types.scalars.Float'>, <class 'numba.core.types.scalars.Integer'>, <class 'int'>, <class 'float'>])
r   randomdefault_rngnumbanjitr   r   r   r   r    )r!   rngpy_func
numba_funcr"   r   r   r   test_check_types3   s   
z TestHelperFuncs.test_check_typesc              
   C   s  t jd}dd }t |}t |}dd }t |}t t jjt t jjt jft t j	jt t j	jt j	ft t j
jt t j
jt j
ft t jjt t jjt jft t jjt t jjt jft t jjt t jjt jfg}|D ]\}}}	| j|||	d} | t}
|||d ||	 W d    n1 sw   Y  | dt|
j | t}
||||d |	 W d    n1 sw   Y  | dt|
j | t}
||||d |	 W d    n1 sw   Y  | dt|
j W d    n	1 sw   Y  q~t t jjt t jjt j}}}	| t}
|||d ||	 W d    n	1 s?w   Y  | dt|
j t t jjt t jjt j}}}	| t}
||||d |	 W d    n	1 szw   Y  | dt|
j | t}
||||d |	 W d    n	1 sw   Y  | dt|
j | t}
||d	d
t j W d    n	1 sw   Y  | dt|
j d S )Nr$   c                 S      | j |||ddS )NTlowhighdtypeendpointintegersr)   r8   r9   r:   r   r   r   r*   C      z9TestHelperFuncs.test_integers_arg_check.<locals>.<lambda>c                 S   r6   )NFr7   r<   r>   r   r   r   r*   H   r?   r8   r9   r:   zlow is out of boundszhigh is out of bounds   i   d   z*low is greater than high in given interval)r   r.   r/   r0   r1   Ziinfouint8minmaxint8uint16int16uint32r   subTestr   
ValueErrorr   r   r    uint64int64)r!   r2   r3   r4   Znumba_func_lowZnumba_func_endpoint_falsecasesr8   r9   r:   r"   r   r   r   test_integers_arg_checkA   s   	

z'TestHelperFuncs.test_integers_arg_checkN)__name__
__module____qualname__r#   r5   rP   r   r   r   r   r      s    r   c                  C   sN   t jd} t jd}dd }tjdd|}t |d|| s%J d S )Nr$   c                 S   
   |  dS N
   r.   r(   r   r   r   r*         
 z(test_generator_caching.<locals>.<lambda>Tr,   rV   )r   r.   r/   r0   r1   Zallclose)nb_rngnp_rngr3   r4   r   r   r   test_generator_caching   s
   r[   c                   @   s  e Zd Z			d`ddZdaddZdd	 Zd
d Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Z d@dA Z!dBdC Z"dDdE Z#dFdG Z$dHdI Z%dJdK Z&dLdM Z'dNdO Z(dPdQ Z)dRdS Z*dTdU Z+dVdW Z,dXdY Z-dZd[ Z.d\d] Z/d^d_ Z0dS )bTestRandomGeneratorsN   c                 C   s   t |}|d u rd}|d u rtjj|d}tjj|d}nt||}t||}||||}	||||}
t|	tjrEt	|	j
tjsJt|	trUtjj|
|	||d ntj|	|
 | d }| d }|D ]}| || ||  qjd S )Nr$   seed)Zmaxulpr:   state)r0   r1   r   r.   r/   r   r3   
isinstanceZndarrayZ
issubdtyper:   ZfloatingfloattestingZassert_array_max_ulpZassert_equal__getstate__assertPreciseEqual)r!   Zdistribution_funcZbitgen_typer_   	test_size
test_dtypeulp_precnumba_rng_instancenumpy_rng_instance	numba_res	numpy_resZnumba_gen_stateZnumpy_gen_stateZ
_state_keyr   r   r   check_numpy_parity   s<   


z'TestRandomGenerators.check_numpy_parityr$   c           
         sb   t jj|d}t jj|d}t|jj|}||jjj}t fdd}||}	| 	|	| d S )Nr^   c                    s
    | j S N)bit_generatorr(   bitgen_funcr   r   r*      rX   z?TestRandomGenerators._test_bitgen_func_parity.<locals>.<lambda>)
r   r.   r/   getattrro   ctypesr`   r0   r1   re   )
r!   	func_namerq   r_   ri   rj   Z
numpy_funcrl   r4   rk   r   rp   r   _test_bitgen_func_parity   s   z-TestRandomGenerators._test_bitgen_func_parityc              	   C   s   t j }t|D ]>\}}| }|| ||< |g| }t|}	| t}
|	|  W d    n1 s5w   Y  | 	d| dt
|
j q	d S )Nz	Argument z$ is not one of the expected type(s):)r   r.   r/   	enumeratecopyr0   r1   r   r   r   r   r    )r!   	dist_funcarg_list
valid_argsZinvalid_argsr2   idxZ_arg	curr_argsnb_dist_funcr"   r   r   r   _check_invalid_types   s   




z)TestRandomGenerators._check_invalid_typesc                 C   sD   t j }tdd }| ||| | t|t|| d S )Nc                 S      | S rn   r   r(   r   r   r   r*          zATestRandomGenerators.test_npgen_boxing_unboxing.<locals>.<lambda>)r   r.   r/   r0   r1   r   id)r!   rng_instancer4   r   r   r   test_npgen_boxing_unboxing   s   
z/TestRandomGenerators.test_npgen_boxing_unboxingc                 C   sp   t j }tdd }tdd }||}t  t|}~|| t  t|}| 	||d  d S )Nc                 S      |   S rn   rW   r(   r   r   r   r*          zATestRandomGenerators.test_npgen_boxing_refcount.<locals>.<lambda>c                 S   r   rn   r   r(   r   r   r   r*      r   r$   )
r   r.   r/   r0   r1   gcZcollectsysgetrefcountr   )r!   r   Zno_boxZdo_boxyZref_1Zref_2r   r   r   test_npgen_boxing_refcount   s   


z/TestRandomGenerators.test_npgen_boxing_refcountc              	   C   sd   g d}t ttg}t||D ]!\}}| j||d | || W d    n1 s*w   Y  qd S )Nr   )_func
_func_name)r   r   r	   ziprK   ru   )r!   Z
func_namesfuncsr   r   r   r   r   test_bitgen_funcs   s   
z&TestRandomGenerators.test_bitgen_funcsc                 C   s  g d}t jt jt jt jt jt jt jt jg}d t	g}dd }| 
  | j|d d dd W d    n1 s6w   Y  dd }|D ].}|D ])}|D ]$}| j
|||d | ||d ||d W d    n1 shw   Y  qIqEqAg d}d t	g}dd }|D ])}|D ]$}| j
||d	 | ||d |t jd W d    n1 sw   Y  qq~d
d }| 
  | j|d d d W d    n1 sw   Y  dd }| |g ddddt jdgdddt jdg d S )NNr   )rC   rV         c                 S   s   |  ddS Nr   rC   r<   r)   sizer:   r   r   r   r*     r+   z4TestRandomGenerators.test_integers.<locals>.<lambda>r   rf   rg   rh   c                 S   s   | j dd||dS )Nr]   rV   r   r:   r<   r   r   r   r   r*     r?   _size_dtype_bitgenc                 S   s   | j dd|tjdS )NFTr   )r=   r   bool_r   r   r   r   r*     s   r   r   c                 S   s   |  tdtdS r   )r=   r   rD   rN   r   r   r   r   r*      s   rf   rg   c                 S   s   | j |||||dS )Nr8   r9   r   r:   r;   r<   )r)   r8   r9   r   r:   r;   r   r   r   r*   &  s   
r   r$   r]   r$   Tr)   r(   )r   rN   r   rI   rG   rM   rJ   rH   rD   r
   rK   rm   r   r~   r   r!   
test_sizesZtest_dtypesbitgen_typesrx   r   r   r   r   r   r   test_integers   sf   


z"TestRandomGenerators.test_integersc              
      s8  g ddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfdd	t jfd
d	t jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jfddt jf}d}|D ]/\ }| j	 |d  fdd}| 
|d d ||d W d    n	1 sw   Y  qd S )Nr]      rC   r   l   l    l    l   l   ll    l    iii  i  i  rV   i  i  i            i)rA      r@   c                    s   | j  ||dS Nr   r<   r   r9   r8   r   r   r*   d  r?   z:TestRandomGenerators.test_integers_cases.<locals>.<lambda>)r   rM   rN   rJ   r   rH   rI   rD   rG   rK   rm   )r!   rO   r   r:   rx   r   r   r   test_integers_cases/  s   






	



















 
!
"
#
%
&
'
(
*
+
,
-
.0z(TestRandomGenerators.test_integers_casesc                 C   s   g d}t jt jg}d tg}dd }|   | j|d d d W d    n1 s)w   Y  dd }|D ]-}|D ](}|D ]#}| j|||d | ||d || W d    n1 sZw   Y  q<q8q4dd }| |dd	gd
t jgddg d S )Nr   c                 S   r   rn   rW   r   r   r   r   r*   o  r   z2TestRandomGenerators.test_random.<locals>.<lambda>r   c                 S      | j ||dS r   rW   r   r   r   r   r*   t      r   c                 S   r   r   rW   r   r   r   r   r*   }     r   r:   r   r(   g        r   r   r   r
   rK   rm   r~   r   r   r   r   test_randomi  s6   
z TestRandomGenerators.test_randomc                 C   s   g d}t jt jg}d tg}dd }|   | j|d d d W d    n1 s)w   Y  dd }|D ]-}|D ](}|D ]#}| j|||d | ||d || W d    n1 sZw   Y  q<q8q4dd }| |dd	gd
t jgddg d S )Nr   c                 S   r   rn   Zstandard_normalr   r   r   r   r*     r   z;TestRandomGenerators.test_standard_normal.<locals>.<lambda>r   c                 S   r   r   r   r   r   r   r   r*     r   r   c                 S   r   r   r   r   r   r   r   r*     r   r   r:   r   r(   r   r   r   r   r   r   test_standard_normal  s6   
z)TestRandomGenerators.test_standard_normalc                 C   s   g d}t jt jg}d tg}dd }|   | j|d d d W d    n1 s)w   Y  dd }|D ]-}|D ](}|D ]#}| j|||d | ||d || W d    n1 sZw   Y  q<q8q4dd }| |g dd	d
t jgg d d S )Nr   c                 S   r   rn   Zstandard_exponentialr   r   r   r   r*     r   z@TestRandomGenerators.test_standard_exponential.<locals>.<lambda>r   c                 S   r   r   r   r   r   r   r   r*     r   r   c                 S      | j |||dS )Nmethodr   r:   r   )r)   r   r   r:   r   r   r   r*        r   zigr   )r   r(   r   r   r   r   r   r   test_standard_exponential  s6   
z.TestRandomGenerators.test_standard_exponentialc                 C   s   g d}t jt jg}d tg}dd }|D ]-}|D ](}|D ]#}| j|||d | ||d || W d    n1 s:w   Y  qqqd S )Nr   c                 S   s   | j ||ddS )Ninv)r   r:   r   r   r   r   r   r   r*     r   zDTestRandomGenerators.test_standard_exponential_inv.<locals>.<lambda>r   )r   r   r   r
   rK   rm   r   r   r   r   test_standard_exponential_inv  s$   z2TestRandomGenerators.test_standard_exponential_invc                 C   s   g d}t jt jg}d tg}dd }|D ].}|D ])}|D ]$}| j|||d | ||d ||t W d    n1 s;w   Y  qqqdd }| |g dddt jgg d	 d S )
Nr   c                 S   s   | j d||dS )N      @shaper   r:   Zstandard_gammar   r   r   r   r*     r   z:TestRandomGenerators.test_standard_gamma.<locals>.<lambda>r   c                 S   r   )Nr   r   )r)   r   r   r:   r   r   r   r*     r   r   r   r   )r)   r(   r   )r   r   r   r
   rK   rm   adjusted_ulp_precr~   r   r   r   r   test_standard_gamma  s,   z(TestRandomGenerators.test_standard_gammac                 C      g d}d t g}dd }|   | j|d d td W d    n1 s$w   Y  dd }|D ](}|D ]#}| j||d | ||d |d t W d    n1 sQw   Y  q3q/dd }| |g dg d	g d
 d S )Nr   c                 S   r   rn   r&   r   r   r   r   r*     r   z2TestRandomGenerators.test_normal.<locals>.<lambda>r   c                 S      | j dd|dS )N      ?r   r%   scaler   r&   r   r   r   r   r*         r   c                 S   r   Nr   r&   r)   r%   r   r   r   r   r   r*     r   r   r   r   r   r)   r)   r(   r
   rK   rm   r   r~   r!   r   r   rx   r   r   r   r   r   test_normal  0   
z TestRandomGenerators.test_normalc                 C   r   )Nr   c                 S   r   rn   uniformr   r   r   r   r*     r   z3TestRandomGenerators.test_uniform.<locals>.<lambda>r   c                 S   r   )Nr   r   r8   r9   r   r   r   r   r   r   r*     r   r   c                 S   r   )Nr   r   )r)   r8   r9   r   r   r   r   r*   	  r   r   r   r   r   r   r   r   r   test_uniform  r   z!TestRandomGenerators.test_uniformc              
   C      g d}d t g}dd }|   | j|d d d W d    n1 s#w   Y  dd }|D ]'}|D ]"}| j||d | ||d |d  W d    n1 sOw   Y  q2q.dd }| |dd	gd
dgddg d S )Nr   c                 S   r   rn   Zexponentialr   r   r   r   r*     r   z7TestRandomGenerators.test_exponential.<locals>.<lambda>r   c                 S      | j d|dS Nr   r   r   r   r   r   r   r   r*     r   r   c                 S   r   Nr   r   r)   r   r   r   r   r   r*   !  r   r   r   r   r   r)   r(   r
   rK   rm   r~   r   r   r   r   test_exponential  s,   
z%TestRandomGenerators.test_exponentialc                 C      g d}d t g}dd }|D ](}|D ]#}| j||d | ||d |d t W d    n1 s0w   Y  qqdd }| |g dg dg d d S )	Nr   c                 S   r   )Nr   r   r   r   r   gammar   r   r   r   r*   -  s    z1TestRandomGenerators.test_gamma.<locals>.<lambda>r   c                 S   r   )Nr   r   )r)   r   r   r   r   r   r   r*   5  r   r   r   r   r   r   r   r   r   r   r   
test_gamma&  s"   zTestRandomGenerators.test_gammac                 C   r   )	Nr   c                 S   r   )Nr   g      @abr   betar   r   r   r   r*   A  r   z0TestRandomGenerators.test_beta.<locals>.<lambda>r   c                 S   r   )Nr   r   )r)   r   r   r   r   r   r   r*   I  r   r   r   r   r   r   r   r   r   	test_beta:  "   zTestRandomGenerators.test_betac                 C   r   )	Nr   c                 S   r   )NrA   r   dfnumdfdenr   fr   r   r   r   r*   T  r   z-TestRandomGenerators.test_f.<locals>.<lambda>r   c                 S   r   )Nr   r   )r)   r   r   r   r   r   r   r*   \  r   r   )r]   r$   r   r   r   r   r   r   r   test_fM  "   zTestRandomGenerators.test_fc                 C      g d}d t g}dd }|D ](}|D ]#}| j||d | ||d |d t W d    n1 s0w   Y  qqdd }| |ddgdd	gd
dg d S )Nr   c                 S   r   NrA   dfr   Z	chisquarer   r   r   r   r*   h  r   z5TestRandomGenerators.test_chisquare.<locals>.<lambda>r   c                 S   r   Nr   r   r)   r   r   r   r   r   r*   p  r   r   r   rA   r   r)   r(   r   r   r   r   r   test_chisquarea  r   z#TestRandomGenerators.test_chisquarec              
   C   s   g d}d t g}dd }|   | j|d d d W d    n1 s#w   Y  dd }|D ]'}|D ]"}| j||d | ||d |d  W d    n1 sOw   Y  q2q.dd }| |dgd	gd
g d S )Nr   c                 S   r   rn   Zstandard_cauchyr   r   r   r   r*   }  r   z;TestRandomGenerators.test_standard_cauchy.<locals>.<lambda>r   c                 S      | j |dS Nr   r   r   r   r   r   r*     r+   r   c                 S   r   r   r   )r)   r   r   r   r   r*     r+   r   r   r(   r   r   r   r   r   test_standard_cauchyu  s,   

z)TestRandomGenerators.test_standard_cauchyc              
   C      g d}d t g}dd }|D ]'}|D ]"}| j||d | ||d |d  W d    n1 s/w   Y  qqdd }| |ddgdd	gd
dg d S )Nr   c                 S   r   N      ?r   r   Zparetor   r   r   r   r*     r   z2TestRandomGenerators.test_pareto.<locals>.<lambda>r   c                 S   r   Nr  r  r)   r   r   r   r   r   r*     r   r   r   r$   r   r)   r(   r   r   r   r   r   test_pareto      z TestRandomGenerators.test_paretoc              
   C   r  )Nr   c                 S   r   r  Zweibullr   r   r   r   r*     r   z3TestRandomGenerators.test_weibull.<locals>.<lambda>r   c                 S   r   r  r
  r  r   r   r   r*     r   r   r   r$   r   r)   r(   r   r   r   r   r   test_weibull  r	  z!TestRandomGenerators.test_weibullc              
   C   r  )Nr   c                 S   r   )N      ?r  powerr   r   r   r   r*     r   z1TestRandomGenerators.test_power.<locals>.<lambda>r   c                 S   r   r  r  r  r   r   r   r*     r   r   r   r  r   r)   r(   r   r   r   r   r   
test_power  r	  zTestRandomGenerators.test_powerc                 C   r   )Nr   c                 S   r   rn   Zlaplacer   r   r   r   r*     r   z3TestRandomGenerators.test_laplace.<locals>.<lambda>r   c                 S   r   Nr  r   r   r  r   r   r   r   r*     r   r   c                 S   r   r   r  r   r   r   r   r*     r   r   r  r   r   r   r   r   r   r   r   test_laplace  0   
z!TestRandomGenerators.test_laplacec                 C   r   )Nr   c                 S   r   rn   Zlogisticr   r   r   r   r*     r   z4TestRandomGenerators.test_logistic.<locals>.<lambda>r   c                 S   r   r  r  r   r   r   r   r*     r   r   c                 S   r   r   r  r   r   r   r   r*     r   r   r  r   r   r   r   r   r   test_logistic  r  z"TestRandomGenerators.test_logisticc                 C   r   )Nr   c                 S   r   rn   Z	lognormalr   r   r   r   r*     r   z5TestRandomGenerators.test_lognormal.<locals>.<lambda>r   c                 S   r   )Nr   r   meansigmar   r  r   r   r   r   r*   	  r   r   c                 S   r   )Nr  r  )r)   r  r  r   r   r   r   r*     r   r  r  r   r   r   r   r   r   test_lognormal  r  z#TestRandomGenerators.test_lognormalc              
   C   r   )Nr   c                 S   r   rn   Zrayleighr   r   r   r   r*     r   z4TestRandomGenerators.test_rayleigh.<locals>.<lambda>r   c                 S   r   r   r  r   r   r   r   r*   $  r   r   c                 S   r   r   r  r   r   r   r   r*   +  r   r   r   r   r   r)   r(   r   r   r   r   r   test_rayleigh  s,   
z"TestRandomGenerators.test_rayleighc                 C   r   )Nr   c                 S   r   r   Z
standard_tr   r   r   r   r*   6  r   z6TestRandomGenerators.test_standard_t.<locals>.<lambda>r   c                 S   r   r   r  r   r   r   r   r*   >  r   r   r   rA   r   r)   r(   r   r   r   r   r   test_standard_t/  r   z$TestRandomGenerators.test_standard_tc                 C   r   )	Nr   c                 S   r   )Nr   r   r  r   r   Zwaldr   r   r   r   r*   I  r   z0TestRandomGenerators.test_wald.<locals>.<lambda>r   c                 S   r   )Nr   r!  )r)   r  r   r   r   r   r   r*   Q  r   r   r  r   r   r   r   r   r   	test_waldB  r   zTestRandomGenerators.test_waldc                 C   r   )Nr   c                 S   r   )Nr  pr   Z	geometricr   r   r   r   r*   ]  r   z5TestRandomGenerators.test_geometric.<locals>.<lambda>r   c                 S   r   Nr#  r%  r)   r$  r   r   r   r   r*   e  r   r$  r   r  r   r)   r(   r   r   r   r   r   test_geometricV  r   z#TestRandomGenerators.test_geometricc              
   C   r  )Nr   c                 S   r   )Nr   r  Zzipfr   r   r   r   r*   p  r   z0TestRandomGenerators.test_zipf.<locals>.<lambda>r   c                 S   r   r  r)  r  r   r   r   r*   w  r   r   r   r$   r   r)   r(   r   r   r   r   r   	test_zipfi  r	  zTestRandomGenerators.test_zipfc              
   C   s   g d}d t g}dd }|D ]'}|D ]"}| j||d | ||d |d  W d    n1 s/w   Y  qqdd }| |g dg dg d d S )	Nr   c                 S   s   | j ddd|dS )Nr   r   r]   leftmoderightr   
triangularr   r   r   r   r*     r?   z6TestRandomGenerators.test_triangular.<locals>.<lambda>r   c                 S      | j ||||dS )Nr+  r/  )r)   r,  r-  r.  r   r   r   r   r*     r?   r+  )r   r   r]   r   r)   r)   r)   r(   r   r   r   r   r   test_triangular{  s    z$TestRandomGenerators.test_triangularc                 C   r   )Nr   c                 S   r   )Nr   lamr   Zpoissonr   r   r   r   r*     r   z3TestRandomGenerators.test_poisson.<locals>.<lambda>r   c                 S   r   )Nr4  r6  )r)   r5  r   r   r   r   r*     r   r5  r   r   r   r)   r(   r   r   r   r   r   test_poisson  r   z!TestRandomGenerators.test_poissonc                 C   r   )	Nr   c                 S   r   Nr$   皙?nr$  r   Znegative_binomialr   r   r   r   r*     r   z=TestRandomGenerators.test_negative_binomial.<locals>.<lambda>r   c                 S   r   Nr:  r<  r)   r;  r$  r   r   r   r   r*     r   r:  r$   r  r   r   r   r   r   r   r   test_negative_binomial  "   z+TestRandomGenerators.test_negative_binomialc              
      s   dg}d t g}g d}t|||D ]-\}} | j|| d  fdd}| ||d |d d W d    n1 s:w   Y  qd S )Nr   )r   r$   rA   r   r   _axisc                    s   | j |d}| j| d |S )Nr   axis)r.   shuffler)   r   r:   arrrC  r   r   rx     s   z4TestRandomGenerators.test_shuffle.<locals>.dist_funcr   )r
   	itertoolsproductrK   rm   )r!   r   r   axesr   r   rx   r   rI  r   test_shuffle  s    z!TestRandomGenerators.test_shufflec                 C   N   t g }t g }dd }t|}dd }| || ||| | d S )Nc                 S   s   |  | |S rn   rF  r)   rH  r   r   r   rx     s   
z:TestRandomGenerators.test_shuffle_empty.<locals>.dist_funcc                   S      t jdS Nr$   r   r.   r/   r   r   r   r   r*     r+   z9TestRandomGenerators.test_shuffle_empty.<locals>.<lambda>r   arrayr0   r1   re   r!   r   r   rx   Znb_funcr2   r   r   r   test_shuffle_empty  s   


 z'TestRandomGenerators.test_shuffle_emptyc                 C   s   |    dd }| |ddgtg ddgddg tjd}| t}t	||tg dd W d    n1 s?w   Y  | 
d	t|j d S )
Nc                 S   s   | j ||d |S NrD  rO  r)   rH  rE  r   r   r   rx     s   z:TestRandomGenerators.test_shuffle_check.<locals>.dist_funcr)   rE  r      r]   r   r$   rA   )Axis is out of bounds for the given arraydisable_leak_checkr~   r   rU  r.   r/   r   
IndexErrorr0   r1   r   r   r    r!   rx   r2   r"   r   r   r   test_shuffle_check  s   z'TestRandomGenerators.test_shuffle_checkc              
   C   s   dg}d t g}g d}t|||D ]+\}}}| j|||d dd }| ||d |d d W d    n1 s8w   Y  qtdd }tj	 }|jd	d
}	|	
 }
|||	 | |	|
 d S )Nr   )r   r$   rA   rB  c                 S   s   | j |d}| j|ddS )Nr   r$   rD  )r.   permutationrG  r   r   r   rx     s   z8TestRandomGenerators.test_permutation.<locals>.dist_funcr   c                 S   
   |  |S rn   rd  )r2   rH  r   r   r   r*     rX   z7TestRandomGenerators.test_permutation.<locals>.<lambda>)rV   r   r   )r
   rJ  rK  rK   rm   r0   r1   r   r.   r/   rw   re   )r!   r   r   rL  r   r   rC  rx   r2   rH  Zarr_cpyr   r   r   test_permutation  s*   	

z%TestRandomGenerators.test_permutationc                 C   s   |    dd }| |ddgtg ddgddg tjd}| t}t	||tg dd W d    n1 s?w   Y  | 
d	t|j | t}t	||tg dd
 W d    n1 skw   Y  | 
d	t|j d S )Nc                 S   r   rX  rf  rY  r   r   r   rx     r   zBTestRandomGenerators.test_permutation_exception.<locals>.dist_funcr)   rE  rZ  r   r$   rA   r\  rc  r]  r`  r   r   r   test_permutation_exception  s(   z/TestRandomGenerators.test_permutation_exceptionc                 C   rN  )Nc                 S   re  rn   rf  rP  r   r   r   rx      s   
z>TestRandomGenerators.test_permutation_empty.<locals>.dist_funcc                   S   rQ  rR  rS  r   r   r   r   r*   $  r+   z=TestRandomGenerators.test_permutation_empty.<locals>.<lambda>rT  rV  r   r   r   test_permutation_empty  s   


 z+TestRandomGenerators.test_permutation_emptyc              	   C   sh  g d}d t g}dd }t||D ]$\}}| j||d | ||d |d  W d    n1 s1w   Y  qdd }g d}| |g d|g d tj }|g| }t	
|}| t}	| }
d	|
d
< ||
  W d    n1 svw   Y  | dt|	j | t}	| }
d|
d< ||
  W d    n1 sw   Y  | dt|	j |   d S )Nr   c                 S   r   N      @g      4@r   Znoncentral_chisquarer   r   r   r   r*   /  r   z@TestRandomGenerators.test_noncentral_chisquare.<locals>.<lambda>r   c                 S   r   )Nr   noncr   rl  )r)   r   rn  r   r   r   r   r*   6  r   )rk  r   r   rm  r   r   r$   zdf <= 0rb  rA   nonc < 0)r
   rJ  rK  rK   rm   r~   r   r.   r/   r0   r1   r   rL   rw   r   r   r    r^  r!   r   r   rx   r   r   rz   r2   r}   r"   r|   r   r   r   test_noncentral_chisquare(  s>   




z.TestRandomGenerators.test_noncentral_chisquarec              
   C   s  g d}d t g}dd }t||D ]%\}}| j||d | ||d |d t W d    n1 s2w   Y  qdd }g d}| |g d|g d tj	 }|g| }t
|}| t}	| }
d	|
d
< ||
  W d    n1 sww   Y  | dt|	j | t}	| }
d	|
d< ||
  W d    n1 sw   Y  | dt|	j | t}	| }
d|
d< ||
  W d    n1 sw   Y  | dt|	j |   d S )Nr   c                 S   s   | j ddd|dS rj  Znoncentral_fr   r   r   r   r*   V  r?   z8TestRandomGenerators.test_noncentral_f.<locals>.<lambda>r   c                 S   r1  )Nr   r   rn  r   rr  )r)   r   r   rn  r   r   r   r   r*   ^  r?   )rk  r   rk  r   rs  r2  r   r$   z
dfnum <= 0rA   z
dfden <= 0rb  r   ro  )r
   rJ  rK  rK   rm   r   r~   r   r.   r/   r0   r1   r   rL   rw   r   r   r    r^  rp  r   r   r   test_noncentral_fO  sL   





z&TestRandomGenerators.test_noncentral_fc              	   C   s(  g d}d t g}dd }t||D ]$\}}| j||d | ||d |d  W d    n1 s1w   Y  qdd }ddg}| |dd	g|d
dg tjd}|g| }t	
|}ddtjfD ],}	| t}
| }|	|d< ||  W d    n1 sw   Y  | dt|
j qa|   d S )Nr   c                 S   r   )N333333?r   Z	logseriesr   r   r   r   r*     r   z5TestRandomGenerators.test_logseries.<locals>.<lambda>r   c                 S   r   r&  rv  r'  r   r   r   r*     r   ru  r   r$  r   r)   r(   r$   gzp < 0, p >= 1 or p is NaN)r
   rJ  rK  rK   rm   r~   r   r.   r/   r0   r1   nanr   rL   rw   r   r   r    r^  )r!   r   r   rx   r   r   rz   r2   r}   _pr"   r|   r   r   r   test_logseries}  s4   


z#TestRandomGenerators.test_logseriesc                 C   r   )	Nr   c                 S   r   r8  Zbinomialr   r   r   r   r*     r   z4TestRandomGenerators.test_binomial.<locals>.<lambda>r   c                 S   r   r=  rz  r>  r   r   r   r*     r   r:  r?  r   r   r   r   r   r   test_binomial  rA  z"TestRandomGenerators.test_binomialc              
      sn   g d}d }|D ],\ | j  d  fdd}| |d d |d d W d    n1 s/w   Y  qd S )N))r$   r9  )2   ?)rC   g?)rC   r}  r;  r$  c                    s   | j  |dS r   rz  r   r~  r   r   r*     r   z:TestRandomGenerators.test_binomial_cases.<locals>.<lambda>r   )rK   rm   )r!   rO   r   rx   r   r~  r   test_binomial_cases  s   z(TestRandomGenerators.test_binomial_cases)NNNNr]   r   )1rQ   rR   rS   rm   ru   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r"  r(  r*  r3  r7  r@  rM  rW  ra  rg  rh  ri  rq  rt  ry  r{  r  r   r   r   r   r\      sd    

(3:'."r\   c                   @   s   e Zd Zdd ZdS )TestGeneratorCachingc                 C   sr   t jd}t jd}tjdd dd}| |d|| | |d|| tt}| |d d d S )	Nr$   c                 S   rT   rU   rW   r(   r   r   r   r*     rX   z=TestGeneratorCaching.test_randomgen_caching.<locals>.<lambda>Tr,   rV   exitcoder   )	r   r.   r/   r0   r1   re   r   r[   r   )r!   rY   rZ   r4   resr   r   r   test_randomgen_caching  s   z+TestGeneratorCaching.test_randomgen_cachingN)rQ   rR   rS   r  r   r   r   r   r    s    r  )r0   numpyr   r   rJ  r   r   Znumba.tests.supportr   r   Z!numba.np.random.generator_methodsr   Znumba.np.random.generator_corer   r   r	   Znumpy.randomr
   r   Znumba.core.errorsr   r   r   r   r   r[   r\   r  r   r   r   r   <module>   s2    {        2