U
    iâËd½È  ã                   @   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 5 Q R X |  dt	|j
ƒ¡ |  t¡�}t||tjƒ W 5 Q R X |  dt	|j
ƒ¡ d S )	Nc                   S   s   dS )Né    © r   r   r   úV/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_np_randomgen.pyÚtest_32bit_func   s    zBTestHelperFuncs.test_proper_func_provider.<locals>.test_32bit_funcc                   S   s   dS )Né@   r   r   r   r   r   Útest_64bit_func   s    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   s8    
ÿÿÿ
ÿÿÿþþz)TestHelperFuncs.test_proper_func_providerc              	   C   sX   t j d¡}dd„ }tjdd�|ƒ}|  t¡�}||ƒ W 5 Q R X |  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©Úcachez§Argument 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 5 Q R X |  dt|
jƒ¡ |  t¡�}
||||d |	ƒ W 5 Q R X |  dt|
jƒ¡ |  t¡�}
||||d |	ƒ W 5 Q R X |  dt|
jƒ¡ W 5 Q R X qüt  t j¡jt  t j¡jt j  }}}	|  t¡�}
|||d ||	ƒ W 5 Q R X |  dt|
jƒ¡ t  t j¡jt  t j¡jt j  }}}	|  t¡�}
||||d |	ƒ W 5 Q R X |  dt|
jƒ¡ |  t¡�}
||||d |	ƒ W 5 Q R X |  dt|
jƒ¡ |  t¡�}
||d	d
t jƒ W 5 Q R X |  dt|
jƒ¡ d S )Nr!   c                 S   s   | j |||dd�S )NT©ÚlowÚhighÚdtypeÚendpoint©Úintegers©r&   r4   r5   r6   r   r   r   r'   C   s    z9TestHelperFuncs.test_integers_arg_check.<locals>.<lambda>c                 S   s   | j |||dd�S )NFr3   r8   r:   r   r   r   r'   H   s    ©r4   r5   r6   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,   r-   r.   ZiinfoÚuint8ÚminÚmaxÚint8Úuint16Úint16Úuint32r   ÚsubTestr   Ú
ValueErrorr   r   r   Úuint64Úint64)r   r/   r0   r1   Znumba_func_lowZnumba_func_endpoint_falseÚcasesr4   r5   r6   r   r   r   r   Útest_integers_arg_checkA   s‚    ù	þþþ ÿ
þ ÿ
þþþz'TestHelperFuncs.test_integers_arg_checkN)Ú__name__Ú
__module__Ú__qualname__r    r2   rK   r   r   r   r   r      s   r   c                  C   sN   t j d¡} t j d¡}dd„ }tjdd�|ƒ}t  | d¡|| ƒ¡sJt‚d S )Nr!   c                 S   s
   |   d¡S ©Né
   ©r+   r%   r   r   r   r'   –   r(   z(test_generator_caching.<locals>.<lambda>Tr)   rP   )r   r+   r,   r-   r.   ZallcloseÚAssertionError)Únb_rngÚnp_rngr0   r1   r   r   r   Útest_generator_caching“   s
    rU   c                   @   sp  e Zd Zd\dd„Zd]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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S )^ÚTestRandomGeneratorsNé   c                 C   sò   t  |¡}|d krd}|d kr<tjj|d�}tjj|d�}nt||ƒƒ}t||ƒƒ}||||ƒ}	| |||¡}
t|	tjƒrŠt 	|	j
tj¡s”t|	tƒrªtjj|
|	||d� ntj |	|
¡ | ¡ d }| ¡ d }|D ]}|  || || ¡ qÔd S )Nr!   ©Úseed)Zmaxulpr6   Ústate)r-   r.   r   r+   r,   r
   r0   Ú
isinstanceZndarrayZ
issubdtyper6   ZfloatingÚfloatÚtestingZassert_array_max_ulpZassert_equalÚ__getstate__ÚassertPreciseEqual)r   Zdistribution_funcZbitgen_typerY   Ú	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 )NrX   c                    s
   ˆ | j ƒS ©N)Úbit_generatorr%   ©Úbitgen_funcr   r   r'   Ë   r(   z?TestRandomGenerators._test_bitgen_func_parity.<locals>.<lambda>)
r   r+   r,   Úgetattrri   ÚctypesrZ   r-   r.   r_   )
r   Ú	func_namerk   rY   rc   rd   Z
numpy_funcrf   r1   re   r   rj   r   Ú_test_bitgen_func_parityÄ   s    z-TestRandomGenerators._test_bitgen_func_parityc              
   C   s€   t j ¡ }t|ƒD ]h\}}| ¡ }|| ||< |g| }t |¡}	|  t¡�}
|	|Ž  W 5 Q R X |  	d|› d�t
|
jƒ¡ qd S )Nz	Argument z$ is not one of the expected type(s):)r   r+   r,   Ú	enumerateÚcopyr-   r.   r   r   r   r   r   )r   Ú	dist_funcÚarg_listÚ
valid_argsZinvalid_argsr/   Ú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   | S rh   r   r%   r   r   r   r'   á   r(   zATestRandomGenerators.test_npgen_boxing_unboxing.<locals>.<lambda>)r   r+   r,   r-   r.   r   Úid)r   Úrng_instancer1   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   |   ¡ S rh   rQ   r%   r   r   r   r'   ç   r(   zATestRandomGenerators.test_npgen_boxing_refcount.<locals>.<lambda>c                 S   s   | S rh   r   r%   r   r   r   r'   è   r(   r!   )
r   r+   r,   r-   r.   ÚgcZcollectÚsysÚgetrefcountr   )r   rz   Zno_boxZdo_boxÚyZref_1Zref_2r   r   r   Útest_npgen_boxing_refcountå   s    


z/TestRandomGenerators.test_npgen_boxing_refcountc              
   C   sR   dddg}t ttg}t||ƒD ].\}}| j||d�� |  ||¡ W 5 Q R X qd S )Nr   r   r   )Ú_funcÚ
_func_name)r   r   r   ÚziprF   ro   )r   Z
func_namesÚfuncsr�   r‚   r   r   r   Útest_bitgen_funcsô   s
    

z&TestRandomGenerators.test_bitgen_funcsc                 C   s†  d dddg}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 5 Q R X dd„ }|D ]H}|D ]>}|D ]4}| j
|||d	�� |  ||d ||d¡ W 5 Q R X q‚qzqrd dddg}d t	g}d
d„ }|D ]>}|D ]4}| j
||d�� |  ||d |t jd¡ W 5 Q R X qäqÜdd„ }|  
¡ � | j|d d d� W 5 Q R X dd„ }|  |dddddgdddt jdgdddt jdg¡ d S )Nr   ©r>   ©rP   é   é   c                 S   s   |   dd¡S ©Nr   r>   r8   ©r&   Úsizer6   r   r   r   r'     r(   z4TestRandomGenerators.test_integers.<locals>.<lambda>r   ©r`   ra   rb   c                 S   s   | j dd||d�S )NrW   rP   ©rŒ   r6   r8   r‹   r   r   r   r'     s    ©Ú_sizeÚ_dtypeÚ_bitgenc                 S   s   | j dd|tjd�S )NFTrŽ   )r9   r   Úbool_r‹   r   r   r   r'     s    ©r�   r’   c                 S   s   |   t d¡t d¡¡S rŠ   )r9   r   r?   rI   r‹   r   r   r   r'      s    ©r`   ra   c                 S   s   | j |||||d�S )N)r4   r5   rŒ   r6   r7   r8   )r&   r4   r5   rŒ   r6   r7   r   r   r   r'   &  s    
 ÿr4   r5   rŒ   r6   r7   r!   rW   ©r!   Tr&   r%   )r   rI   r   rD   rB   rH   rE   rC   r?   r	   rF   rg   r“   rx   r   ©r   Ú
test_sizesZtest_dtypesÚbitgen_typesrr   r�   r‘   r’   r   r   r   Útest_integersü   sh       ÿ
 ÿÿ   ÿÿ   ÿ
ÿýz"TestRandomGenerators.test_integersc              (      sØ  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g&}d}|D ]J\‰‰ }| j	ˆˆ |d��( ‡ ‡fdd„}|  
|d d ||d¡ W 5 Q R X �qˆd S )NrW   é   r>   r   l   ÿÿÿl   þÿÿÿ l   ÿÿÿÿ l   þÿÿÿl   ÿÿÿÿlüÿÿÿÿÿÿÿl   þÿ l   ÿÿ iþÿÿiÿÿÿi  ðiþÿ  iÿÿ  rP   iþ  iÿ  iðÿÿéþ   éÿ   é   é   iñÿÿÿ)r<   é   r;   c                    s   | j ˆˆ ||d�S ©NrŽ   r8   r‹   ©r5   r4   r   r   r'   d  s    z:TestRandomGenerators.test_integers_cases.<locals>.<lambda>)r   rH   rI   rE   r   rC   rD   r?   rB   rF   rg   )r   rJ   rŒ   r6   rr   r   r¢   r   Útest_integers_cases/  sb    





































Ò0   ÿz(TestRandomGenerators.test_integers_casesc                 C   sÊ   d dddg}t jt jg}d tg}dd„ }|  ¡ � | j|d d d� W 5 Q R X dd„ }|D ]F}|D ]<}|D ]2}| j|||d�� |  ||d ||¡ W 5 Q R X qhq`qXd	d„ }|  |d
dgdt jgddg¡ d S )Nr   r†   r‡   c                 S   s   |   ¡ S rh   rQ   r‹   r   r   r   r'   o  r(   z2TestRandomGenerators.test_random.<locals>.<lambda>r•   c                 S   s   | j ||d�S r¡   rQ   r‹   r   r   r   r'   t  r(   r�   c                 S   s   | j ||d�S r¡   rQ   r‹   r   r   r   r'   }  s    rŒ   r6   r–   r%   g        ©r   r   r   r	   rF   rg   rx   r—   r   r   r   Útest_randomi  s2    
ÿÿ  ÿ ÿz TestRandomGenerators.test_randomc                 C   sÊ   d dddg}t jt jg}d tg}dd„ }|  ¡ � | j|d d d� W 5 Q R X dd„ }|D ]F}|D ]<}|D ]2}| j|||d�� |  ||d ||¡ W 5 Q R X qhq`qXd	d„ }|  |d
dgdt jgddg¡ d S )Nr   r†   r‡   c                 S   s   |   ¡ S rh   ©Zstandard_normalr‹   r   r   r   r'   ˆ  r(   z;TestRandomGenerators.test_standard_normal.<locals>.<lambda>r•   c                 S   s   | j ||d�S r¡   r¦   r‹   r   r   r   r'   �  s    r�   c                 S   s   | j ||d�S r¡   r¦   r‹   r   r   r   r'   —  s    rŒ   r6   r–   r%   r   r¤   r—   r   r   r   Útest_standard_normal‚  s2    
ÿÿ  ÿ ÿz)TestRandomGenerators.test_standard_normalc                 C   sÐ   d dddg}t jt jg}d tg}dd„ }|  ¡ � | j|d d d� W 5 Q R X dd„ }|D ]F}|D ]<}|D ]2}| j|||d�� |  ||d ||¡ W 5 Q R X qhq`qXd	d„ }|  |d
ddgddt jgdddg¡ d S )Nr   r†   r‡   c                 S   s   |   ¡ S rh   ©Zstandard_exponentialr‹   r   r   r   r'   ¢  r(   z@TestRandomGenerators.test_standard_exponential.<locals>.<lambda>r•   c                 S   s   | j ||d�S r¡   r¨   r‹   r   r   r   r'   §  s    r�   c                 S   s   | j |||d�S )N)ÚmethodrŒ   r6   r¨   )r&   r©   rŒ   r6   r   r   r   r'   ²  s    r©   rŒ   r6   Úzigr–   r   r%   r¤   r—   r   r   r   Útest_standard_exponentialœ  s2    
ÿÿ  ÿ
 ÿz.TestRandomGenerators.test_standard_exponentialc                 C   sx   d dddg}t jt jg}d tg}dd„ }|D ]F}|D ]<}|D ]2}| j|||d�� |  ||d ||¡ W 5 Q R X q<q4q,d S )Nr   r†   r‡   c                 S   s   | j ||dd�S )NÚinv)rŒ   r6   r©   r¨   r‹   r   r   r   r'   ¼  s    zDTestRandomGenerators.test_standard_exponential_inv.<locals>.<lambda>r�   )r   r   r   r	   rF   rg   r—   r   r   r   Útest_standard_exponential_inv·  s    ÿ  ÿz2TestRandomGenerators.test_standard_exponential_invc                 C   s¦   d dddg}t jt jg}d tg}dd„ }|D ]H}|D ]>}|D ]4}| j|||d�� |  ||d ||t¡ W 5 Q R X q<q4q,dd„ }|  |dd	d
gddt jgdddg¡ d S )Nr   r†   r‡   c                 S   s   | j d||d�S )Nç      @©ÚshaperŒ   r6   ©Zstandard_gammar‹   r   r   r   r'   Ë  s    z:TestRandomGenerators.test_standard_gamma.<locals>.<lambda>r�   c                 S   s   | j |||d�S )Nr¯   r±   )r&   r°   rŒ   r6   r   r   r   r'   Õ  s    r°   rŒ   r6   r®   r–   r&   r%   r   )r   r   r   r	   rF   rg   Úadjusted_ulp_precrx   r—   r   r   r   Útest_standard_gammaÆ  s*    ÿ  þ
 ÿz(TestRandomGenerators.test_standard_gammac                 C   sº   d dddg}d t g}dd„ }|  ¡ � | j|d d td� W 5 Q R X dd„ }|D ]<}|D ]2}| j||d�� |  ||d |d t¡ W 5 Q R X qVqNd	d„ }|  |d
ddgdddgdddg¡ d S )Nr   r†   r‡   c                 S   s   |   ¡ S rh   r#   r‹   r   r   r   r'   â  r(   z2TestRandomGenerators.test_normal.<locals>.<lambda>r�   c                 S   s   | j dd|d�S )Nç      ø?r    ©r"   ÚscalerŒ   r#   r‹   r   r   r   r'   è  r(   r”   c                 S   s   | j |||d�S ©Nrµ   r#   ©r&   r"   r¶   rŒ   r   r   r   r'   ï  s    r"   r¶   rŒ   r´   r    r–   r&   r%   ©r	   rF   rg   r²   rx   ©r   r˜   r™   rr   r�   r’   r   r   r   Útest_normalÚ  s.    
þ  þ ÿz TestRandomGenerators.test_normalc                 C   sº   d dddg}d t g}dd„ }|  ¡ � | j|d d td� W 5 Q R X dd„ }|D ]<}|D ]2}| j||d�� |  ||d |d t¡ W 5 Q R X qVqNd	d„ }|  |d
ddgdddgdddg¡ d S )Nr   r†   r‡   c                 S   s   |   ¡ S rh   ©Úuniformr‹   r   r   r   r'   ü  r(   z3TestRandomGenerators.test_uniform.<locals>.<lambda>r�   c                 S   s   | j dd|d�S )Nr´   r    ©r4   r5   rŒ   r¼   r‹   r   r   r   r'     r(   r”   c                 S   s   | j |||d�S )Nr¾   r¼   )r&   r4   r5   rŒ   r   r   r   r'   	  s    r4   r5   rŒ   r´   r    r–   r&   r%   r¹   rº   r   r   r   Útest_uniformô  s.    
þ  þ ÿz!TestRandomGenerators.test_uniformc                 C   s°   d dddg}d t g}dd„ }|  ¡ � | j|d d d� W 5 Q R X dd„ }|D ]:}|D ]0}| j||d�� |  ||d |d ¡ W 5 Q R X qTqLd	d„ }|  |d
dgddgddg¡ d S )Nr   r†   r‡   c                 S   s   |   ¡ S rh   ©Zexponentialr‹   r   r   r   r'     r(   z7TestRandomGenerators.test_exponential.<locals>.<lambda>r•   c                 S   s   | j d|d�S ©Nr´   ©r¶   rŒ   rÀ   r‹   r   r   r   r'     r(   r”   c                 S   s   | j ||d�S ©NrÂ   rÀ   ©r&   r¶   rŒ   r   r   r   r'   !  s    r¶   rŒ   r´   r–   r&   r%   ©r	   rF   rg   rx   rº   r   r   r   Útest_exponential  s*    
ÿ  ÿ ÿz%TestRandomGenerators.test_exponentialc                 C   sŒ   d dddg}d t g}dd„ }|D ]<}|D ]2}| j||d�� |  ||d |d t¡ W 5 Q R X q(q dd„ }|  |dd	d
gdddgdddg¡ d S )Nr   r†   r‡   c                 S   s   | j dd|d�S )Nr®   r´   ©r°   r¶   rŒ   ©Úgammar‹   r   r   r   r'   -  s   ÿz1TestRandomGenerators.test_gamma.<locals>.<lambda>r”   c                 S   s   | j |||d�S )NrÇ   rÈ   )r&   r°   r¶   rŒ   r   r   r   r'   5  s    r°   r¶   rŒ   r®   r´   r–   r&   r%   r¹   rº   r   r   r   Ú
test_gamma&  s"      þ ÿzTestRandomGenerators.test_gammac                 C   sŒ   d dddg}d t g}dd„ }|D ]<}|D ]2}| j||d�� |  ||d |d t¡ W 5 Q R X q(q dd„ }|  |dd	d
gdddgdddg¡ d S )Nr   r†   r‡   c                 S   s   | j dd|d�S )Nr´   g      @©ÚaÚbrŒ   ©Úbetar‹   r   r   r   r'   A  r(   z0TestRandomGenerators.test_beta.<locals>.<lambda>r”   c                 S   s   | j |||d�S )NrË   rÎ   )r&   rÌ   rÍ   rŒ   r   r   r   r'   I  r(   rÌ   rÍ   rŒ   r®   r´   r–   r&   r%   r¹   rº   r   r   r   Ú	test_beta:  s"      þ ÿzTestRandomGenerators.test_betac                 C   sŒ   d dddg}d t g}dd„ }|D ]<}|D ]2}| j||d�� |  ||d |d t¡ W 5 Q R X q(q dd„ }|  |dd	d
gdddgdddg¡ d S )Nr   r†   r‡   c                 S   s   | j dd|d�S )Nr<   r    ©ÚdfnumÚdfdenrŒ   ©Úfr‹   r   r   r   r'   T  r(   z-TestRandomGenerators.test_f.<locals>.<lambda>r”   c                 S   s   | j |||d�S )NrÑ   rÔ   )r&   rÒ   rÓ   rŒ   r   r   r   r'   \  s    rÒ   rÓ   rŒ   rW   r!   r–   r&   r%   r¹   rº   r   r   r   Útest_fM  s"      þ ÿzTestRandomGenerators.test_fc                 C   s†   d dddg}d t g}dd„ }|D ]<}|D ]2}| j||d�� |  ||d |d t¡ W 5 Q R X q(q dd„ }|  |dd	gd
dgddg¡ d S )Nr   r†   r‡   c                 S   s   | j d|d�S ©Nr<   ©ÚdfrŒ   ©Z	chisquarer‹   r   r   r   r'   h  r(   z5TestRandomGenerators.test_chisquare.<locals>.<lambda>r”   c                 S   s   | j ||d�S ©NrØ   rÚ   ©r&   rÙ   rŒ   r   r   r   r'   p  s    rÙ   rŒ   r<   r–   r&   r%   r¹   rº   r   r   r   Útest_chisquarea  s"      þ ÿz#TestRandomGenerators.test_chisquarec                 C   sª   d dddg}d t g}dd„ }|  ¡ � | j|d d d� W 5 Q R X dd„ }|D ]:}|D ]0}| j||d�� |  ||d |d ¡ W 5 Q R X qTqLd	d„ }|  |d
gdgdg¡ d S )Nr   r†   r‡   c                 S   s   |   ¡ S rh   ©Zstandard_cauchyr‹   r   r   r   r'   }  r(   z;TestRandomGenerators.test_standard_cauchy.<locals>.<lambda>r•   c                 S   s   | j |d�S ©N©rŒ   rÞ   r‹   r   r   r   r'   ‚  r(   r”   c                 S   s   | j |d�S 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   s„   d dddg}d t g}dd„ }|D ]:}|D ]0}| j||d�� |  ||d |d ¡ W 5 Q R X q(q dd„ }|  |dd	gd
dgddg¡ d S )Nr   r†   r‡   c                 S   s   | j d|d�S ©Nç      ð?©rÌ   rŒ   ©Zparetor‹   r   r   r   r'   ”  r(   z2TestRandomGenerators.test_pareto.<locals>.<lambda>r”   c                 S   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   Útest_pareto�  s       ÿ ÿz TestRandomGenerators.test_paretoc                 C   s„   d dddg}d t g}dd„ }|D ]:}|D ]0}| j||d�� |  ||d |d ¡ W 5 Q R X q(q dd„ }|  |dd	gd
dgddg¡ d S )Nr   r†   r‡   c                 S   s   | j d|d�S râ   ©Zweibullr‹   r   r   r   r'   ¦  r(   z3TestRandomGenerators.test_weibull.<locals>.<lambda>r”   c                 S   s   | j ||d�S ræ   ré   rç   r   r   r   r'   ­  r(   rÌ   rŒ   r!   r–   r&   r%   rÅ   rº   r   r   r   Útest_weibullŸ  s       ÿ ÿz!TestRandomGenerators.test_weibullc                 C   s„   d dddg}d t g}dd„ }|D ]:}|D ]0}| j||d�� |  ||d |d ¡ W 5 Q R X q(q dd„ }|  |dd	gd
dgddg¡ d S )Nr   r†   r‡   c                 S   s   | j d|d�S )Nç      è?rä   ©Úpowerr‹   r   r   r   r'   ¸  r(   z1TestRandomGenerators.test_power.<locals>.<lambda>r”   c                 S   s   | j ||d�S ræ   rì   rç   r   r   r   r'   ¿  r(   rÌ   rŒ   rë   r–   r&   r%   rÅ   rº   r   r   r   Ú
test_power±  s       ÿ ÿzTestRandomGenerators.test_powerc                 C   sº   d dddg}d t g}dd„ }|  ¡ � | j|d d td� W 5 Q R X dd„ }|D ]<}|D ]2}| j||d�� |  ||d |d t¡ W 5 Q R X qVqNd	d„ }|  |d
ddgdddgdddg¡ d S )Nr   r†   r‡   c                 S   s   |   ¡ S rh   ©Zlaplacer‹   r   r   r   r'   Ë  r(   z3TestRandomGenerators.test_laplace.<locals>.<lambda>r�   c                 S   s   | j dd|d�S ©Nrã   r´   rµ   rï   r‹   r   r   r   r'   Ñ  s    r”   c                 S   s   | j |||d�S r·   rï   r¸   r   r   r   r'   Ú  s    r"   r¶   rŒ   rã   r´   r–   r&   r%   r¹   rº   r   r   r   Útest_laplaceÃ  s.    
þ  þ ÿz!TestRandomGenerators.test_laplacec                 C   sº   d dddg}d t g}dd„ }|  ¡ � | j|d d td� W 5 Q R X dd„ }|D ]<}|D ]2}| j||d�� |  ||d |d t¡ W 5 Q R X qVqNd	d„ }|  |d
ddgdddgdddg¡ d S )Nr   r†   r‡   c                 S   s   |   ¡ S rh   ©Zlogisticr‹   r   r   r   r'   ç  r(   z4TestRandomGenerators.test_logistic.<locals>.<lambda>r�   c                 S   s   | j dd|d�S rð   rò   r‹   r   r   r   r'   í  s    r”   c                 S   s   | j |||d�S r·   rò   r¸   r   r   r   r'   ö  s    r"   r¶   rŒ   rã   r´   r–   r&   r%   r¹   rº   r   r   r   Útest_logisticß  s.    
þ  þ ÿz"TestRandomGenerators.test_logisticc                 C   sº   d dddg}d t g}dd„ }|  ¡ � | j|d d td� W 5 Q R X dd„ }|D ]<}|D ]2}| j||d�� |  ||d |d t¡ W 5 Q R X qVqNd	d„ }|  |d
ddgdddgdddg¡ d S )Nr   r†   r‡   c                 S   s   |   ¡ S rh   ©Z	lognormalr‹   r   r   r   r'     r(   z5TestRandomGenerators.test_lognormal.<locals>.<lambda>r�   c                 S   s   | j dd|d�S )Nr®   r´   ©ÚmeanÚsigmarŒ   rô   r‹   r   r   r   r'   	  s    r”   c                 S   s   | j |||d�S )Nrõ   rô   )r&   rö   r÷   rŒ   r   r   r   r'     s    rö   r÷   rŒ   rã   r´   r–   r&   r%   r¹   rº   r   r   r   Útest_lognormalû  s.    
þ  þ ÿz#TestRandomGenerators.test_lognormalc                 C   s°   d dddg}d t g}dd„ }|  ¡ � | j|d d d� W 5 Q R X dd„ }|D ]:}|D ]0}| j||d�� |  ||d |d ¡ W 5 Q R X qTqLd	d„ }|  |d
dgddgddg¡ d S )Nr   r†   r‡   c                 S   s   |   ¡ S rh   ©Zrayleighr‹   r   r   r   r'     r(   z4TestRandomGenerators.test_rayleigh.<locals>.<lambda>r•   c                 S   s   | j d|d�S rÁ   rù   r‹   r   r   r   r'   $  r(   r”   c                 S   s   | j ||d�S 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   s†   d dddg}d t g}dd„ }|D ]<}|D ]2}| j||d�� |  ||d |d t¡ W 5 Q R X q(q dd„ }|  |dd	gd
dgddg¡ d S )Nr   r†   r‡   c                 S   s   | j d|d�S r×   ©Z
standard_tr‹   r   r   r   r'   6  r(   z6TestRandomGenerators.test_standard_t.<locals>.<lambda>r”   c                 S   s   | j ||d�S rÛ   rû   rÜ   r   r   r   r'   >  r(   rÙ   rŒ   r<   r–   r&   r%   r¹   rº   r   r   r   Útest_standard_t/  s"      þ ÿz$TestRandomGenerators.test_standard_tc                 C   sŒ   d dddg}d t g}dd„ }|D ]<}|D ]2}| j||d�� |  ||d |d t¡ W 5 Q R X q(q dd„ }|  |dd	d
gdddgdddg¡ d S )Nr   r†   r‡   c                 S   s   | j dd|d�S )Nr®   r´   ©rö   r¶   rŒ   ©Zwaldr‹   r   r   r   r'   I  r(   z0TestRandomGenerators.test_wald.<locals>.<lambda>r”   c                 S   s   | j |||d�S )Nrý   rþ   )r&   rö   r¶   rŒ   r   r   r   r'   Q  s    rö   r¶   rŒ   rã   r´   r–   r&   r%   r¹   rº   r   r   r   Ú	test_waldB  s"      þ ÿzTestRandomGenerators.test_waldc                 C   s†   d dddg}d t g}dd„ }|D ]<}|D ]2}| j||d�� |  ||d |d t¡ W 5 Q R X q(q dd„ }|  |dd	gd
dgddg¡ d S )Nr   r†   r‡   c                 S   s   | j d|d�S )Nrë   ©ÚprŒ   ©Z	geometricr‹   r   r   r   r'   ]  r(   z5TestRandomGenerators.test_geometric.<locals>.<lambda>r”   c                 S   s   | j ||d�S ©Nr   r  ©r&   r  rŒ   r   r   r   r'   e  r(   r  rŒ   rë   r–   r&   r%   r¹   rº   r   r   r   Útest_geometricV  s"      þ ÿz#TestRandomGenerators.test_geometricc                 C   s„   d dddg}d t g}dd„ }|D ]:}|D ]0}| j||d�� |  ||d |d ¡ W 5 Q R X q(q dd„ }|  |dd	gd
dgddg¡ d S )Nr   r†   r‡   c                 S   s   | j d|d�S )Nr´   rä   ©Zzipfr‹   r   r   r   r'   p  r(   z0TestRandomGenerators.test_zipf.<locals>.<lambda>r”   c                 S   s   | j ||d�S ræ   r  rç   r   r   r   r'   w  r(   rÌ   rŒ   r!   r–   r&   r%   rÅ   rº   r   r   r   Ú	test_zipfi  s       ÿ ÿzTestRandomGenerators.test_zipfc                 C   s�   d dddg}d t g}dd„ }|D ]:}|D ]0}| j||d�� |  ||d |d ¡ W 5 Q R X q(q dd„ }|  |dd	d
dgddddgddddg¡ d S )Nr   r†   r‡   c                 S   s   | j ddd|d�S )Nr   r    rW   ©ÚleftÚmodeÚrightrŒ   ©Ú
triangularr‹   r   r   r   r'   ‚  s    z6TestRandomGenerators.test_triangular.<locals>.<lambda>r”   c                 S   s   | j ||||d�S )Nr  r  )r&   r	  r
  r  rŒ   r   r   r   r'   Š  s    r	  r
  r  rŒ   r   r    rW   r–   r&   r%   rÅ   rº   r   r   r   Útest_triangular{  s       ÿ
 
ÿz$TestRandomGenerators.test_triangularc                 C   s†   d dddg}d t g}dd„ }|D ]<}|D ]2}| j||d�� |  ||d |d t¡ W 5 Q R X q(q dd„ }|  |dd	gd
dgddg¡ d S )Nr   r†   r‡   c                 S   s   | j d|d�S )NrŸ   ©ÚlamrŒ   ©Zpoissonr‹   r   r   r   r'   –  r(   z3TestRandomGenerators.test_poisson.<locals>.<lambda>r”   c                 S   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   Útest_poisson�  s"      þ ÿz!TestRandomGenerators.test_poissonc                 C   sŒ   d dddg}d t g}dd„ }|D ]<}|D ]2}| j||d�� |  ||d |d t¡ W 5 Q R X q(q dd„ }|  |dd	d
gdddgdddg¡ d S )Nr   r†   r‡   c                 S   s   | j dd|d�S )Nr!   gš™™™™™¹?©Únr  rŒ   ©Znegative_binomialr‹   r   r   r   r'   ©  s    z=TestRandomGenerators.test_negative_binomial.<locals>.<lambda>r”   c                 S   s   | j |||d�S )Nr  r  )r&   r  r  rŒ   r   r   r   r'   ²  s    r  r  rŒ   r!   rë   r–   r&   r%   r¹   rº   r   r   r   Útest_negative_binomial¢  s"      þ ÿz+TestRandomGenerators.test_negative_binomialc              
      sr   dg}d t g}dddg}t |||¡D ]F\}}‰ | j||ˆ d��& ‡ fdd„}|  ||d |d d¡ W 5 Q R X q&d S )Nr‡   r   r!   r<   ©r�   r’   Ú_axisc                    s   | j |d�}| j|ˆ d� |S )Nrà   ©Úaxis)r+   Úshuffle©r&   rŒ   r6   Úarr©r  r   r   rr   Ã  s    z4TestRandomGenerators.test_shuffle.<locals>.dist_func)r	   Ú	itertoolsÚproductrF   rg   )r   r˜   r™   Úaxesr�   r’   rr   r   r  r   Útest_shuffleº  s    
þ  þz!TestRandomGenerators.test_shufflec                 C   sN   t  g ¡}t  g ¡}dd„ }t |¡}dd„ }|  ||ƒ |ƒ||ƒ |ƒ¡ d S )Nc                 S   s   |   |¡ |S rh   ©r  ©r&   r  r   r   r   rr   Ï  s    
z:TestRandomGenerators.test_shuffle_empty.<locals>.dist_funcc                   S   s   t j d¡S ©Nr!   ©r   r+   r,   r   r   r   r   r'   Ô  r(   z9TestRandomGenerators.test_shuffle_empty.<locals>.<lambda>©r   Úarrayr-   r.   r_   ©r   rÌ   rÍ   rr   Znb_funcr/   r   r   r   Útest_shuffle_emptyË  s    


z'TestRandomGenerators.test_shuffle_emptyc              	   C   sŽ   |   ¡  dd„ }|  |ddgt dddg¡dgddg¡ tj d	¡}|  t¡�$}t 	|¡|t dddg¡d
ƒ W 5 Q R X |  
dt|jƒ¡ d S )Nc                 S   s   | j ||d� |S ©Nr  r#  ©r&   r  r  r   r   r   rr   Û  s    z:TestRandomGenerators.test_shuffle_check.<locals>.dist_funcr&   r  r    é   rW   r   r!   r<   ú)Axis is out of bounds for the given array©Údisable_leak_checkrx   r   r(  r+   r,   r   Ú
IndexErrorr-   r.   r   r   r   ©r   rr   r/   r   r   r   r   Útest_shuffle_checkØ  s     ÿ(þz'TestRandomGenerators.test_shuffle_checkc              
   C   s´   dg}d t g}dddddg}t |||¡D ]B\}}}| j|||d��" dd	„ }|  ||d |d d¡ W 5 Q R X q*t d
d„ ¡}tj 	¡ }|jdd�}	|	 
¡ }
|||	ƒ |  |	|
¡ d S )Nr‡   r   r!   r<   éÿÿÿÿéþÿÿÿr  c                 S   s   | j |d�}| j|dd�S )Nrà   r!   r  )r+   Úpermutationr  r   r   r   rr   ö  s    z8TestRandomGenerators.test_permutation.<locals>.dist_funcc                 S   s
   |   |¡S rh   ©r6  )r/   r  r   r   r   r'   þ  r(   z7TestRandomGenerators.test_permutation.<locals>.<lambda>)rP   rˆ   rà   )r	   r  r   rF   rg   r-   r.   r   r+   r,   rq   r_   )r   r˜   r™   r!  r�   r’   r  rr   r/   r  Zarr_cpyr   r   r   Útest_permutationí  s*    þ  þ

z%TestRandomGenerators.test_permutationc              	   C   sÔ   |   ¡  dd„ }|  |ddgt dddg¡dgddg¡ tj d	¡}|  t¡�$}t 	|¡|t dddg¡d
ƒ W 5 Q R X |  
dt|jƒ¡ |  t¡�$}t 	|¡|t dddg¡dƒ W 5 Q R X |  
dt|jƒ¡ d S )Nc                 S   s   | j ||d�S r+  r7  r,  r   r   r   rr     s    zBTestRandomGenerators.test_permutation_exception.<locals>.dist_funcr&   r  r    r-  rW   r   r!   r<   r.  r5  r/  r2  r   r   r   Útest_permutation_exception  s&     ÿ(þ(þz/TestRandomGenerators.test_permutation_exceptionc                 C   sN   t  g ¡}t  g ¡}dd„ }t |¡}dd„ }|  ||ƒ |ƒ||ƒ |ƒ¡ d S )Nc                 S   s
   |   |¡S rh   r7  r$  r   r   r   rr      s    z>TestRandomGenerators.test_permutation_empty.<locals>.dist_funcc                   S   s   t j d¡S r%  r&  r   r   r   r   r'   $  r(   z=TestRandomGenerators.test_permutation_empty.<locals>.<lambda>r'  r)  r   r   r   Útest_permutation_empty  s    


z+TestRandomGenerators.test_permutation_emptyc              
   C   s6  d dddg}d t g}dd„ }t ||¡D ]4\}}| j||d�� |  ||d |d ¡ W 5 Q R X q(dd„ }dd	d
g}|  |dddg|dddg¡ tj ¡ }|g| }t	 
|¡}|  t¡�}	| ¡ }
d|
d< ||
Ž  W 5 Q R X |  dt|	jƒ¡ |  t¡�}	| ¡ }
d|
d< ||
Ž  W 5 Q R X |  dt|	jƒ¡ |  ¡  d S )Nr   r†   r‡   c                 S   s   | j dd|d�S ©Nç      @g      4@rà   ©Znoncentral_chisquarer‹   r   r   r   r'   /  s    z@TestRandomGenerators.test_noncentral_chisquare.<locals>.<lambda>r”   c                 S   s   | j |||d�S )N)rÙ   ÚnoncrŒ   r=  )r&   rÙ   r>  rŒ   r   r   r   r'   6  s    r<  r®   r–   rÙ   r>  rŒ   r&   r%   r   r!   zdf <= 0r4  r<   únonc < 0)r	   r  r   rF   rg   rx   r   r+   r,   r-   r.   r   rG   rq   r   r   r   r0  ©r   r˜   r™   rr   r�   r’   rt   r/   rw   r   rv   r   r   r   Útest_noncentral_chisquare(  s<      ÿ
 ÿ


z.TestRandomGenerators.test_noncentral_chisquarec              
   C   s~  d dddg}d t g}dd„ }t ||¡D ]6\}}| j||d�� |  ||d |d t¡ W 5 Q R X q(dd„ }dd	dd
g}|  |ddddg|ddddg¡ tj 	¡ }|g| }t
 |¡}|  t¡�}	| ¡ }
d|
d< ||
Ž  W 5 Q R X |  dt|	jƒ¡ |  t¡�}	| ¡ }
d|
d< ||
Ž  W 5 Q R X |  dt|	jƒ¡ |  t¡�}	| ¡ }
d|
d< ||
Ž  W 5 Q R X |  dt|	jƒ¡ |  ¡  d S )Nr   r†   r‡   c                 S   s   | j ddd|d�S r;  ©Znoncentral_fr‹   r   r   r   r'   V  s    z8TestRandomGenerators.test_noncentral_f.<locals>.<lambda>r”   c                 S   s   | j ||||d�S )N)rÒ   rÓ   r>  rŒ   rB  )r&   rÒ   rÓ   r>  rŒ   r   r   r   r'   ^  s    r<  r®   r–   rÒ   rÓ   r>  rŒ   r&   r%   r   r!   z
dfnum <= 0r<   z
dfden <= 0r4  r    r?  )r	   r  r   rF   rg   r²   rx   r   r+   r,   r-   r.   r   rG   rq   r   r   r   r0  r@  r   r   r   Útest_noncentral_fO  sH      þ 
ÿ


z&TestRandomGenerators.test_noncentral_fc              
   C   s  d dddg}d t g}dd„ }t ||¡D ]4\}}| j||d�� |  ||d |d ¡ W 5 Q R X q(dd„ }dd	g}|  |d
dg|ddg¡ tj d¡}|g| }t	 
|¡}ddtjfD ]D}	|  t¡�}
| ¡ }|	|d< ||Ž  W 5 Q R X |  dt|
jƒ¡ q²|  ¡  d S )Nr   r†   r‡   c                 S   s   | j d|d�S )Nç333333Ó?rà   ©Z	logseriesr‹   r   r   r   r'   „  s    z5TestRandomGenerators.test_logseries.<locals>.<lambda>r”   c                 S   s   | j ||d�S r  rE  r  r   r   r   r'   ‹  s    rD  r–   r  rŒ   r&   r%   r!   gš™™™™™¹¿zp < 0, p >= 1 or p is NaN)r	   r  r   rF   rg   rx   r   r+   r,   r-   r.   Únanr   rG   rq   r   r   r   r0  )r   r˜   r™   rr   r�   r’   rt   r/   rw   Ú_pr   rv   r   r   r   Útest_logseries}  s4      ÿ ÿ

z#TestRandomGenerators.test_logseries)NNNNrW   )r!   )/rL   rM   rN   rg   ro   rx   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  r  r  r"  r*  r3  r8  r9  r:  rA  rC  rH  r   r   r   r   rV   ›   sb          ý
(
3:'.rV   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   s
   |   d¡S rO   rQ   r%   r   r   r   r'   ¥  r(   z=TestGeneratorCaching.test_randomgen_caching.<locals>.<lambda>Tr)   rP   Úexitcoder   )	r   r+   r,   r-   r.   r_   r   rU   r   )r   rS   rT   r1   Úresr   r   r   Útest_randomgen_caching¡  s    z+TestGeneratorCaching.test_randomgen_cachingN)rL   rM   rN   rL  r   r   r   r   rI     s   rI  )r-   Únumpyr   r}   r  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   rU   rV   rI  r   r   r   r   Ú<module>   s0   {        