U
    iâËd3 ã                   @   sØ  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZ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mZ d dlmZ d dlmZ d dlmZmZmZ d dlmZ 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„ Z0d4d5„ Z1d6d7„ Z2d8d9„ Z3e2d:ƒZ4e0d;ƒZ5e1d<ƒZ6e2d=ƒZ7e0d>ƒZ8e1d?ƒZ9d@dA„ Z:dBdC„ Z;dDdE„ Z<dFdG„ Z=dHdI„ Z>G dJdK„ dKeƒZ?G dLdM„ dMe?ƒZ@G dNdO„ dOe?ƒZAG dPdQ„ dQe?ƒZBG dRdS„ dSe?ƒZCG dTdU„ dUe?ƒZDG dVdW„ dWe?ƒZEG dXdY„ dYe?ƒZFedZdZd[�d\d]„ ƒZGd^ZHedZdZd[�d_d`„ ƒZIG dadb„ dbeƒZJG dcdd„ ddeJƒZKe LejMdekdf¡G dgdh„ dheJƒƒZNeOdik�rÔe P¡  dS )jé    N)ÚjitÚ
_helperlib)Útypes)Úcompile_isolated)ÚTestCaseÚcompile_functionÚtag)ÚTypingErrorép  c                   C   s   t  ¡ S ©N)r   Zrnd_get_py_state_ptr© r   r   úP/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_random.pyÚget_py_state_ptr   s    r   c                   C   s   t  ¡ S r   )r   Zrnd_get_np_state_ptrr   r   r   r   Úget_np_state_ptr   s    r   c                 C   s   t j | ¡S r   ©ÚnpÚrandomÚrandint©Úar   r   r   Únumpy_randint1#   s    r   c                 C   s   t j | |¡S r   r   ©r   Úbr   r   r   Únumpy_randint2&   s    r   c                 C   s   t  | |¡S r   )r   r   r   r   r   r   Úrandom_randint)   s    r   c                 C   s
   t  | ¡S r   ©r   Ú	randranger   r   r   r   Úrandom_randrange1,   s    r   c                 C   s   t  | |¡S r   r   r   r   r   r   Úrandom_randrange2/   s    r   c                 C   s   t  | ||¡S r   r   )r   r   Úcr   r   r   Úrandom_randrange32   s    r    c                 C   s   t j | ¡S r   ©r   r   Úchoicer   r   r   r   Únumpy_choice15   s    r#   c                 C   s   t jj| |d�S ©N©Úsizer!   )r   r&   r   r   r   Únumpy_choice28   s    r'   c                 C   s   t jj| ||d�S )N)r&   Úreplacer!   )r   r&   r(   r   r   r   Únumpy_choice3;   s    r)   c                 C   s   t j | |¡S r   ©r   r   Zmultinomial)ÚnÚpvalsr   r   r   Únumpy_multinomial2>   s    r-   c                 C   s   t jj| ||d�S )N)r,   r&   r*   )r+   r,   r&   r   r   r   Únumpy_multinomial3A   s    r.   c                 C   s   t jj| |d�S r$   ©r   r   Z	dirichlet)Úalphar&   r   r   r   Únumpy_dirichletD   s    r1   c                 C   s   t j | ¡S r   r/   )r0   r   r   r   Únumpy_dirichlet_defaultG   s    r2   c                 C   s   t jj| ||d�S r$   ©r   r   Znoncentral_chisquare)ÚdfÚnoncr&   r   r   r   Únumpy_noncentral_chisquareJ   s    r6   c                 C   s   t j | |¡S r   r3   )r4   r5   r   r   r   Ú"numpy_noncentral_chisquare_defaultM   s    r7   c                 C   s>   t j | ¡ t j ||f¡}t j | ¡ t j ||¡}||fS r   )r   r   ÚseedZrand©r8   r   r   ÚexpectedÚgotr   r   r   Únumpy_check_randP   s
    r<   c                 C   s>   t j | ¡ t j ||f¡}t j | ¡ t j ||¡}||fS r   )r   r   r8   Ústandard_normalZrandnr9   r   r   r   Únumpy_check_randnW   s
    r>   c                 C   s&   dt ƒ  }td|tƒ ƒ}tdd�|ƒS )Nz@def func(%(argstring)s):
        return %(name)s(%(argstring)s)
ÚfuncT©Únopython)Úlocalsr   Úglobalsr   )ÚnameÚ	argstringÚcodeÚpyfuncr   r   r   Újit_with_args^   s
    þrH   c                 C   sR   d  dd„ |D ƒ¡}d  |¡}d|› d| › d|› d�}td|tƒ ƒ}td	d
�|ƒS )Nú,c                 S   s   g | ]}|› d |› �‘qS )ú=r   )Ú.0Úkwr   r   r   Ú
<listcomp>g   s     z#jit_with_kwargs.<locals>.<listcomp>z	def func(z):
        return ú(z)
r?   Tr@   )Újoinr   rC   r   )rD   Z
kwarg_listZcall_args_with_kwargsÚ	signaturerF   rG   r   r   r   Újit_with_kwargse   s    
ÿÿrQ   c                 C   s
   t | dƒS )NÚ ©rH   ©rD   r   r   r   Újit_nullaryo   s    rU   c                 C   s
   t | dƒS )Nr   rS   rT   r   r   r   Ú	jit_unaryr   s    rV   c                 C   s
   t | dƒS )Nza, brS   rT   r   r   r   Ú
jit_binaryu   s    rW   c                 C   s
   t | dƒS )Nza, b, crS   rT   r   r   r   Újit_ternaryx   s    rX   úrandom.gausszrandom.randomzrandom.seedúnp.random.normalznp.random.randomznp.random.seedc                 C   s>   |   ¡ d }|dd… |d  }}t ||t|ƒf¡ ||fS )z?
    Copy state of Python random *r* to Numba state *ptr*.
    é   Néÿÿÿÿ)Úgetstater   Úrnd_set_stateÚlist)ÚrÚptrÚmtÚintsÚindexr   r   r   Ú_copy_py_state…   s    re   c                 C   s6   |   ¡ dd… \}}t ||dd„ |D ƒf¡ ||fS )z>
    Copy state of Numpy random *r* to Numba state *ptr*.
    r[   é   c                 S   s   g | ]}t |ƒ‘qS r   )Úint©rK   Úxr   r   r   rM   “   s     z"_copy_np_state.<locals>.<listcomp>)Ú	get_stater   r^   )r`   ra   rc   rd   r   r   r   Ú_copy_np_stateŽ   s    rk   c                 C   st   |   ¡ \}}}|d }|d d… }t|ƒdks2t‚dtj|dd�|f}|d krX|d7 }n|d|f7 }tj |¡ d S )Nr\   r
   ZMT19937Úuint32©Údtype)r   ç        r[   )r]   ÚlenÚAssertionErrorr   Úarrayr   Z	set_state)r`   Ú_verZmt_stZ_gauss_nextZmt_posZmt_intsZnp_str   r   r   Úsync_to_numpy–   s    
rt   c                 C   s   d|   |d d¡ S )Nç       @ç      ð?)Úgammavariate)r`   r4   r   r   r   Úpy_chisquare§   s    rx   c                 C   s   t | |ƒ| t | |ƒ|  S r   )rx   )r`   ÚnumÚdenomr   r   r   Úpy_fª   s    ÿr{   c                   @   s    e Zd Zddd„Zddd„ZdS )	ÚBaseTesté   c                 C   s   t  |¡}t||ƒ |S r   )r   ÚRandomre   ©Úselfra   r8   r`   r   r   r   Ú_follow_cpython±   s    

zBaseTest._follow_cpythonc                 C   s   t j |¡}t||ƒ |S r   )r   r   ÚRandomStaterk   r   r   r   r   Ú_follow_numpy¶   s    
zBaseTest._follow_numpyN)r}   )r}   )Ú__name__Ú
__module__Ú__qualname__r�   rƒ   r   r   r   r   r|   ¯   s   
r|   c                   @   sP   e Zd Z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S )ÚTestInternalsz9
    Test low-level internals of the implementation.
    c                 C   s‚   t  |¡}|\}}|  |t¡ |  |t¡ |  t|ƒt¡ |d t }dd„ ttƒD ƒ}t  	|||f¡ |  t  |¡||f¡ d S )Ni§† c                 S   s   g | ]}|d  ‘qS )rf   r   ©rK   Úir   r   r   rM   È   s     z6TestInternals._check_get_set_state.<locals>.<listcomp>)
r   Úrnd_get_stateÚassertIsInstancerg   r_   ÚassertEqualrp   ÚNÚranger^   )r€   ra   Ústater‰   rc   Újr   r   r   Ú_check_get_set_stateÁ   s    
z"TestInternals._check_get_set_statec                 C   s~   t  ¡ }t||ƒ\}}t|td dƒD ]}|  ¡  q&t |¡ | ¡ d }|d d… |d  }}|  t 	|¡d t
|ƒ¡ d S )Nr[   r}   r\   )r   r~   re   rŽ   r�   r   Zrnd_shuffler]   rŒ   rŠ   r_   )r€   ra   r`   rc   rd   r‰   rb   r   r   r   Ú_check_shuffleÍ   s    

zTestInternals._check_shufflec                 C   sr   t j ¡ }dD ]^}| t  |¡¡ | ¡ }t|d ƒ}|d }|tksJt‚t	 
||¡ |  t	 |¡||f¡ qd S )N)r   r[   é}   l   ûÿ r[   r}   )r   r   r‚   r8   rl   rj   r_   r�   rq   r   Úrnd_seedrŒ   rŠ   )r€   ra   r`   r‰   Ústrc   rd   r   r   r   Ú_check_initÚ   s    
zTestInternals._check_initc                 C   sd   g }t dƒD ]:}t |d¡ t |t d¡¡ | tt |¡d ƒ¡ q|  t	t
|ƒƒt	|ƒ¡ d S )Né
   r   i   r[   )rŽ   r   r”   ÚosÚurandomÚappendÚtuplerŠ   rŒ   rp   Úset)r€   ra   Zstatesr‰   r   r   r   Ú_check_perturbè   s    zTestInternals._check_perturbc                 C   s   |   tƒ ¡ d S r   )r‘   r   ©r€   r   r   r   Útest_get_set_stateó   s    z TestInternals.test_get_set_statec                 C   s   |   tƒ ¡ d S r   )r’   r   rž   r   r   r   Útest_shuffleö   s    zTestInternals.test_shufflec                 C   s   |   tƒ ¡ d S r   )r–   r   rž   r   r   r   Ú	test_initù   s    zTestInternals.test_initc                 C   s   |   tƒ ¡ d S r   )r�   r   rž   r   r   r   Útest_perturbü   s    zTestInternals.test_perturbN)r„   r…   r†   Ú__doc__r‘   r’   r–   r�   rŸ   r    r¡   r¢   r   r   r   r   r‡   ¼   s   r‡   c                   @   s’  e Z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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+d,„Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Zd=d>„ Zd?d@„ Z dAdB„ Z!dCdD„ Z"dEdF„ Z#dGdH„ Z$dIdJ„ Z%dKdL„ Z&dMdN„ Z'dOdP„ Z(dQdR„ Z)dSdT„ Z*dUdV„ Z+dWdX„ Z,dYdZ„ Z-d[d\„ Z.d]d^„ Z/d_d`„ Z0dadb„ Z1dcdd„ Z2dedf„ Z3dgdh„ Z4didj„ Z5dkdl„ Z6dmdn„ Z7dodp„ Z8dqdr„ Z9dsdt„ Z:dudv„ Z;dwdx„ Z<dydz„ Z=d{d|„ Z>d}d~„ Z?dd€„ Z@d�d‚„ ZAdƒd„„ ZBd…d†„ ZCd‡dˆ„ ZDd‰dŠ„ ZEd‹dŒ„ ZFd�dŽ„ ZGd�d�„ ZHd‘d’„ ZId“d”„ ZJd•d–„ ZKd—d˜„ ZLd™dš„ ZMd›dœ„ ZNd�dž„ ZOdŸd „ ZPd¡d¢„ ZQd£d¤„ ZRdS )¨Ú
TestRandomc              	   C   sX   t j ¡ }dD ]D}| t  |¡¡ ||ƒ ttd ƒD ]}|  |ƒ | dd¡¡ q6qdS )z<
        Check seed()- and random()-like functions.
        ©r   r[   r“   l   ÿÿ r—   ro   rv   N)	r   r   r‚   r8   rl   rŽ   r�   ÚassertPreciseEqualÚuniform)r€   ÚseedfuncÚ
randomfuncr`   r‰   r�   r   r   r   Ú_check_random_seed  s    
zTestRandom._check_random_seedc                 C   s   |   tt¡ d S r   )rª   Úrandom_seedÚrandom_randomrž   r   r   r   Útest_random_random  s    zTestRandom.test_random_randomc                 C   sP   |   tt¡ |   ttdƒ¡ |   ttdƒ¡ |   ttdƒ¡ |   ttdƒ¡ d S ©Nznp.random.random_sampleznp.random.ranfznp.random.sampleznp.random.rand)rª   Ú
numpy_seedÚnumpy_randomrU   rž   r   r   r   Útest_numpy_random  s
    zTestRandom.test_numpy_randomc              
   C   sX   t j ¡ }dD ]D}| t  |¡¡ ||ƒ tdƒD ]}|  ||ƒ| dd|¡¡ q2qd S )Nr¥   r—   ro   rv   )r   r   r‚   r8   rl   rŽ   r¦   r§   )r€   r¨   r©   r`   r‰   r+   r   r   r   Ú_check_random_sized   s    
zTestRandom._check_random_sizedc                 C   sD   |   ttdƒ¡ |   ttdƒ¡ |   ttdƒ¡ |   ttdƒ¡ d S r®   )r²   r¯   rV   rž   r   r   r   Útest_numpy_random_sized*  s    z"TestRandom.test_numpy_random_sizedc                 C   sŠ   d}t dƒ dd„ t|ƒD ƒ}tdƒ dd„ t|ƒD ƒ}t dƒ tdƒ dd„ t|ƒD ƒ}|  dd„ |D ƒ|¡ |  d	d„ |D ƒ|¡ d S )
Nr—   r[   c                 S   s   g | ]
}t ƒ ‘qS r   )r¬   rˆ   r   r   r   rM   4  s     z:TestRandom.test_independent_generators.<locals>.<listcomp>r}   c                 S   s   g | ]
}t ƒ ‘qS r   )r°   rˆ   r   r   r   rM   6  s     c                 S   s   g | ]}t ƒ tƒ f‘qS r   )r¬   r°   rˆ   r   r   r   rM   9  s     c                 S   s   g | ]}|d  ‘qS )r   r   ©rK   Úpr   r   r   rM   :  s     c                 S   s   g | ]}|d  ‘qS )r[   r   r´   r   r   r   rM   ;  s     )r«   rŽ   r¯   r¦   )r€   r�   Z
py_numbersZ
np_numbersÚpairsr   r   r   Útest_independent_generators0  s    z&TestRandom.test_independent_generatorsc                 C   sf   |   |¡}tddƒD ]"}| |¡}||ƒ}|  ||¡ q|  t|d¡ |  t|d¡ |  t|d¡ dS )z6
        Check a getrandbits()-like function.
        r[   éA   i–˜ r\   N)r�   rŽ   Úgetrandbitsr¦   ÚassertRaisesÚOverflowError)r€   r?   ra   r`   Únbitsr:   r;   r   r   r   Ú_check_getrandbits=  s    

zTestRandom._check_getrandbitsc                 C   s   |   tdƒtƒ ¡ d S )Nzrandom.getrandbits)r½   rV   r   rž   r   r   r   Útest_random_getrandbitsK  s    z"TestRandom.test_random_getrandbitsrf   Údoubleé   Nc           
         sf   t |ƒst‚|D ]P‰ ‡ ‡fdd„t|ƒD ƒ}‡ ‡‡fdd„t|ƒD ƒ}	| j||	||dˆ f d� qd S )Nc                    s   g | ]}ˆˆ Ž ‘qS r   r   rˆ   )Úargsr?   r   r   rM   W  s     z*TestRandom._check_dist.<locals>.<listcomp>c                    s&   g | ]}ˆrˆˆ d ˆiŽnˆˆ Ž ‘qS rm   r   rˆ   )rÁ   ÚpydtyperG   r   r   rM   X  s   ÿúfor arguments %s©ÚprecÚulpsÚmsg©rp   rq   rŽ   r¦   )
r€   r?   rG   ZargslistÚnitersrÅ   rÆ   rÂ   ÚresultsÚ	pyresultsr   )rÁ   r?   rÂ   rG   r   Ú_check_distS  s    ÿÿzTestRandom._check_distc           
         sf   t |ƒst‚|D ]P‰‡ ‡fdd„t|ƒD ƒ}‡‡‡fdd„t|ƒD ƒ}	| j||	||dˆf d� qd S )Nc                    s   g | ]}ˆ f ˆŽ‘qS r   r   rˆ   )r?   Úkwargsr   r   rM   a  s     z1TestRandom._check_dist_kwargs.<locals>.<listcomp>c                    s,   g | ]$}ˆrˆf ˆ d ˆi—Žnˆf ˆ Ž‘qS rm   r   rˆ   )rÍ   rÂ   rG   r   r   rM   b  s   ÿrÃ   rÄ   rÈ   )
r€   r?   rG   Z
kwargslistrÉ   rÅ   rÆ   rÂ   rÊ   rË   r   )r?   rÍ   rÂ   rG   r   Ú_check_dist_kwargs]  s    ÿÿzTestRandom._check_dist_kwargsc                 C   sl   |   |¡}|dk	r4| j||jdddgtd d d� |dk	rN|  ||jdg¡ |dk	rh|  ||jd	g¡ dS )
z0
        Check a gauss()-like function.
        N©rv   rv   ©ru   ç      à?©g       ÀrÑ   r}   r—   ©rÉ   ©rÑ   r   )rƒ   rÌ   Únormalr�   ©r€   Úfunc2Úfunc1Úfunc0ra   r`   r   r   r   Ú_check_gaussg  s    


þzTestRandom._check_gaussc                 C   s   |   tdƒd d tƒ ¡ d S )NrY   ©rÚ   rW   r   rž   r   r   r   Útest_random_gaussv  s    zTestRandom.test_random_gaussc                 C   s   |   tdƒd d tƒ ¡ d S )Nzrandom.normalvariaterÛ   rž   r   r   r   Útest_random_normalvariatey  s    ÿz$TestRandom.test_random_normalvariatec                 C   s"   |   tdƒtdƒtdƒtƒ ¡ d S )NrZ   )rÚ   rW   rV   rU   r   rž   r   r   r   Útest_numpy_normal  s
    
ýzTestRandom.test_numpy_normalc                 C   s   |   d d tdƒtƒ ¡ d S )Nznp.random.standard_normal©rÚ   rU   r   rž   r   r   r   Útest_numpy_standard_normal…  s    ÿz%TestRandom.test_numpy_standard_normalc                 C   s   |   d d tdƒtƒ ¡ d S )Nznp.random.randnrß   rž   r   r   r   Útest_numpy_randn‰  s    ÿzTestRandom.test_numpy_randnc                 C   sl   |   |¡}|dk	r4| j||jdddgtd d d� |dk	rN|  ||jdg¡ |dk	rh|  ||jd	g¡ dS )
z9
        Check a lognormvariate()-like function.
        NrÏ   rÐ   rÒ   r}   r—   rÓ   rÔ   r   )rƒ   rÌ   Ú	lognormalr�   rÖ   r   r   r   Ú_check_lognormvariate�  s    


þz TestRandom._check_lognormvariatec                 C   s   |   tdƒd d tƒ ¡ d S )Nzrandom.lognormvariate)rã   rW   r   rž   r   r   r   Útest_random_lognormvariateœ  s
    
  ÿz%TestRandom.test_random_lognormvariatec                 C   s"   |   tdƒtdƒtdƒtƒ ¡ d S )Nznp.random.lognormal)rã   rW   rV   rU   r   rž   r   r   r   Útest_numpy_lognormal   s
    
ýzTestRandom.test_numpy_lognormalc                    s„  g }t dƒD ]<}	| |dƒ¡ | |ddƒ¡ |dk	r| |dddƒ¡ q|r\|  |¡j}
n|  |¡j}
‡ fdd„dD ƒ}|r‚|nd}|D ]Š}| j||
|fgd|d	� | j||
d
d| fgd|d	� |dk	rŠ|  |d
d| dƒ|
d
d| dƒ¡ |  |d| ddƒ|
d| ddƒ¡ qŠ|  t	|d¡ |  t	|d¡ |  t	|dd¡ |  t	|dd¡ |dk	�r€|  t	|ddd¡ |  t	|ddd¡ dS )z4
        Check a randrange()-like function.
        r—   é eÍé   Nrf   c                    s   g | ]}|ˆ k r|‘qS r   r   )rK   Úw©Ú	max_widthr   r   rM   µ  s      z/TestRandom._check_randrange.<locals>.<listcomp>)r[   rç   é   éˆ  l        ì            )rÉ   rÂ   éþÿÿÿr}   é   éýÿÿÿr   éûÿÿÿé   r\   r[   )
rŽ   rš   rƒ   r   r�   r   rÌ   r¦   rº   Ú
ValueError)r€   rØ   r×   Úfunc3ra   rê   Úis_numpyÚtprc   r‰   ÚrrÚwidthsrÂ   Úwidthr   ré   r   Ú_check_randrange¦  s@    ÿÿÿÿ
zTestRandom._check_randrangec              	   C   sh   t jdft jdffD ]N\}}tt|fƒ}tt||fƒ}tt|||fƒ}|  |j|j|jt	ƒ |d¡ qd S )Nì            ì        F)
r   Úint64Úint32r   r   r   r    rú   Úentry_pointr   )r€   rö   rê   Úcr1Úcr2Zcr3r   r   r   Útest_random_randrangeÊ  s      þz TestRandom.test_random_randrangec              
   C   sb   t jtjdft jtjdffD ]@\}}}tt|fƒ}tt||fƒ}|  |j|jd t	ƒ |d|¡ qd S )Nrû   rü   T)
r   rý   r   rþ   r   r   r   rú   rÿ   r   )r€   rö   Znp_tprê   r   r  r   r   r   Útest_numpy_randintÓ  s    ÿ    ÿzTestRandom.test_numpy_randintc                 C   s˜   g }t dƒD ]}| |ddƒ¡ q|  t|ƒtt|ƒƒ|¡ |  |¡}dD ](}|d |kr\qJ| j||j|gdd� qJ|  t	|dd¡ |  t	|dd¡ d	S )
z2
        Check a randint()-like function.
        r—   rç   ræ   )©r[   rç   )é   rì   )é   rí   r[   rÓ   é   r}   N)
rŽ   rš   rŒ   rp   rœ   r�   rÌ   r   rº   ró   )r€   r?   ra   rê   rc   r‰   r`   rÁ   r   r   r   Ú_check_randintÛ  s    
zTestRandom._check_randintc                 C   sB   t jdft jdffD ](\}}tt||fƒ}|  |jtƒ |¡ qd S )Nrû   rü   )r   rý   rþ   r   r   r  rÿ   r   )r€   rö   rê   Úcrr   r   r   Útest_random_randintî  s    zTestRandom.test_random_randintc                 C   s$   |   |¡}|  ||jdddg¡ dS )z2
        Check a uniform()-like function.
        )ç      ø?ç    €„.A)ç      Àç     @�@)r  r  N)r�   rÌ   r§   ©r€   r?   ra   r`   r   r   r   Ú_check_uniformó  s    

ÿzTestRandom._check_uniformc                 C   s&   |   |¡}t||ƒ}|  |||¡ dS )z¿
        Check any numpy distribution function. Does Numba use the same keyword
        argument names as Numpy?
        And given a fixed seed, do they both return the same samples?
        N)rƒ   ÚgetattrrÎ   )r€   r?   ra   ÚdistribÚ	paramlistr`   Zdistrib_method_of_numpyr   r   r   Ú_check_any_distrib_kwargsü  s    

z$TestRandom._check_any_distrib_kwargsc                 C   s   |   tdƒtƒ ¡ d S )Nzrandom.uniform)r  rW   r   rž   r   r   r   Útest_random_uniform  s    zTestRandom.test_random_uniformc                 C   s   |   tdƒtƒ ¡ d S )Núnp.random.uniform)r  rW   r   rž   r   r   r   Útest_numpy_uniform  s    zTestRandom.test_numpy_uniformc              	   C   s:   | j tdddgƒtƒ ddddœdd	dœdddœgd
� d S )Nr  ÚlowÚhighr§   r  r  )r  r  r  r  )r  ©r  rQ   r   rž   r   r   r   Útest_numpy_uniform_kwargs  s    þüz$TestRandom.test_numpy_uniform_kwargsc                 C   s>   |   |¡}|dk	r(|  ||jdddg¡ |  ||jdg¡ dS )z5
        Check a triangular()-like function.
        N©r  ç      @)r  r  )r  r  )r  r  çš™™™™™@)r�   rÌ   Ú
triangular)r€   r×   rô   ra   r`   r   r   r   Ú_check_triangular  s    

ÿzTestRandom._check_triangularc                 C   s   |   tdƒtdƒtƒ ¡ d S )Nzrandom.triangular)r   rW   rX   r   rž   r   r   r   Útest_random_triangular"  s    
þz!TestRandom.test_random_triangularc                    s(   t dƒ‰ ‡ fdd„}|  d |tƒ ¡ d S )Nznp.random.triangularc                    s   ˆ | ||ƒS r   r   )Úlr`   Úm©r  r   r   Ú<lambda>)  ó    z2TestRandom.test_numpy_triangular.<locals>.<lambda>)rX   r   r   )r€   Zfixed_triangularr   r$  r   Útest_numpy_triangular'  s    z TestRandom.test_numpy_triangularc                 C   s¸   |   |¡}|dk	r(|  ||jdddg¡ |dk	rH|  |dƒ| dd¡¡ |dk	r�|  t|dd¡ |  t|dd¡ |  t|dd¡ |  t|dd¡ |dk	r´|  t|d¡ |  t|d¡ dS )	z7
        Check a gammavariate()-like function.
        N©rÑ   ç      @)rv   r  r  r  rv   ro   ç      à¿)r�   rÌ   rw   r¦   rº   ró   )r€   r×   rØ   ra   r`   r   r   r   Ú_check_gammavariate,  s    

ÿzTestRandom._check_gammavariatec                 C   s   |   tdƒd tƒ ¡ d S )Nzrandom.gammavariate)r+  rW   r   rž   r   r   r   Útest_random_gammavariateA  s    ÿz#TestRandom.test_random_gammavariatec                 C   s0   |   tdƒtdƒtƒ ¡ |   d tdƒtƒ ¡ d S )Nznp.random.gammaznp.random.standard_gamma)r+  rW   rV   r   rž   r   r   r   Útest_numpy_gammaE  s    
þþzTestRandom.test_numpy_gammac                 C   s`   |   |¡}|  ||jdg¡ |  t|dd¡ |  t|dd¡ |  t|dd¡ |  t|dd¡ dS )z6
        Check a betavariate()-like function.
        r(  ro   rv   r*  N)r�   rÌ   Úbetavariaterº   ró   r  r   r   r   Ú_check_betavariateM  s    
zTestRandom._check_betavariatec                 C   s   |   tdƒtƒ ¡ d S )Nzrandom.betavariate)r/  rW   r   rž   r   r   r   Útest_random_betavariateZ  s    z"TestRandom.test_random_betavariatec                 C   s   |   tdƒtƒ ¡ d S )Nznp.random.beta)r/  rW   r   rž   r   r   r   Útest_numpy_beta]  s    zTestRandom.test_numpy_betac                 C   s    |   |¡}|  ||jdg¡ dS )z:
        Check a vonmisesvariate()-like function.
        r(  N)r�   rÌ   Úvonmisesvariater  r   r   r   Ú_check_vonmisesvariate`  s    
z!TestRandom._check_vonmisesvariatec                 C   s   |   tdƒtƒ ¡ d S )Nzrandom.vonmisesvariate)r3  rW   r   rž   r   r   r   Útest_random_vonmisesvariateg  s    
ÿz&TestRandom.test_random_vonmisesvariatec                 C   s   |   tdƒtƒ ¡ d S )Nznp.random.vonmises)r3  rW   r   rž   r   r   r   Útest_numpy_vonmisesk  s    
ÿzTestRandom.test_numpy_vonmisesc                 C   sD   |   |¡}dD ]0}tdƒD ]"}| j||ƒ| d| ¡dd� qqdS )z‰
        Check a expovariate()-like function.  Note the second argument
        is inversed compared to np.random.exponential().
        )gš™™™™™É?rÑ   r  rf   r[   r¿   )rÅ   N)rƒ   rŽ   r¦   Úexponential)r€   r?   ra   r`   Úlambdr‰   r   r   r   Ú_check_expovariateo  s    
ÿzTestRandom._check_expovariatec                 C   s   |   tdƒtƒ ¡ d S )Nzrandom.expovariate)r8  rV   r   rž   r   r   r   Útest_random_expovariatez  s    z"TestRandom.test_random_expovariatec                 C   sF   |   |¡}|dk	r(|  ||jdddg¡ |dk	rB|  ||jdg¡ dS )z6
        Check a exponential()-like function.
        NrÔ   ©rv   ©r  r   )rƒ   rÌ   r6  )r€   rØ   rÙ   ra   r`   r   r   r   Ú_check_exponential}  s
    
zTestRandom._check_exponentialc                 C   s   |   tdƒtdƒtƒ ¡ d S )Nznp.random.exponential)r<  rV   rU   r   rž   r   r   r   Útest_numpy_exponential‡  s    
þz!TestRandom.test_numpy_exponentialc                 C   s   |   d tdƒtƒ ¡ d S )Nznp.random.standard_exponential)r<  rU   r   rž   r   r   r   Útest_numpy_standard_exponentialŒ  s    þz*TestRandom.test_numpy_standard_exponentialc                 C   s"   |   |¡}|  ||jddg¡ dS )z8
        Check a paretovariate()-like function.
        rÔ   )r  N)r�   rÌ   Úparetovariater  r   r   r   Ú_check_paretovariate‘  s    
zTestRandom._check_paretovariatec                 C   s   |   tdƒtƒ ¡ d S )Nzrandom.paretovariate)r@  rV   r   rž   r   r   r   Útest_random_paretovariate™  s    z$TestRandom.test_random_paretovariatec                    s&   t dƒ‰ ‡ fdd„}|  |tƒ ¡ d S )Nznp.random.paretoc                    s   ˆ | ƒd S )Nrv   r   r   ©Úparetor   r   r%  ž  r&  z.TestRandom.test_numpy_pareto.<locals>.<lambda>)rV   r@  r   )r€   Zfixed_paretor   rB  r   Útest_numpy_paretoœ  s    zTestRandom.test_numpy_paretoc                 C   sV   |   |¡}|dk	r$|  ||jdg¡ |dk	rRtdƒD ]}|  |dƒ| dd¡¡ q4dS )z9
        Check a weibullvariate()-like function.
        Nr(  rf   r)  rv   )r�   rÌ   ÚweibullvariaterŽ   r¦   )r€   r×   rØ   ra   r`   r‰   r   r   r   Ú_check_weibullvariate¡  s    


ÿz TestRandom._check_weibullvariatec                 C   s   |   tdƒd tƒ ¡ d S )Nzrandom.weibullvariate)rF  rW   r   rž   r   r   r   Útest_random_weibullvariate®  s    
 ÿz%TestRandom.test_random_weibullvariatec                 C   s   |   d tdƒtƒ ¡ d S )Nznp.random.weibull)rF  rV   r   rž   r   r   r   Útest_numpy_weibull²  s    ÿzTestRandom.test_numpy_weibullc              	   C   s  t dƒ}|  tƒ d¡}|  ||jdg¡ dD ]¶}|  ||dƒd¡ |  ||dƒ|¡ dD ]ˆ}|||ƒ}|dkr~|| }d	| }|  |d¡ |  ||¡ || }d
| t 	|¡ }|  ||| |||f¡ |  ||| |||f¡ qXq,|  
t|dd¡ |  
t|dd¡ |  
t|dd¡ d S )Nznp.random.binomialr   )é   g      Ð?)éd   éè  é'  ro   rv   )	g-Cëâ6?çš™™™™™¹?çš™™™™™Ù?g9î”Öÿß?rÑ   gãˆµø à?çš™™™™™é?çÍÌÌÌÌÌì?ç§èH.ÿï?rÑ   r[   rf   r\   r—   çš™™™™™¹¿çš™™™™™ñ?)rW   rƒ   r   rÌ   ÚbinomialrŒ   ÚassertGreaterEqualÚassertLessEqualÚmathÚsqrtrº   ró   )r€   rT  r`   r+   rµ   r:   Útolr   r   r   Útest_numpy_binomial¶  s(    
zTestRandom.test_numpy_binomialc                 C   s2   t dƒ}|  tƒ ¡}|  |t t|¡ddg¡ d S )Nznp.random.chisquarer;  ©r)  )rV   r�   r   rÌ   Ú	functoolsÚpartialrx   )r€   Ú	chisquarer`   r   r   r   Útest_numpy_chisquareÏ  s    
þzTestRandom.test_numpy_chisquarec                 C   s2   t dƒ}|  tƒ ¡}|  |t t|¡ddg¡ d S )Nznp.random.f©rÑ   r  )r  rO  )rW   r�   r   rÌ   r\  r]  r{   )r€   Úfr`   r   r   r   Útest_numpy_fÖ  s
    ÿzTestRandom.test_numpy_fc                    s0  t dƒ‰ |  tˆ d¡ |  tˆ d¡ |  tˆ d¡ d}‡ fdd„t|ƒD ƒ}|  |dg| ¡ ‡ fd	d„t|ƒD ƒ}| d¡}|  ||d
 ¡ |  ||¡ |  dd„ |D ƒ¡ ‡ fdd„t|ƒD ƒ}|  	dd„ |D ƒ¡ ‡ fdd„t|ƒD ƒ}|  	dd„ |D ƒ¡ ‡ fdd„t|ƒD ƒ}|  	dd„ |D ƒ¡ d S )Nznp.random.geometricg      ð¿ro   gj¼t“ð?éÈ   c                    s   g | ]}ˆ d ƒ‘qS r:  r   rˆ   ©Zgeomr   r   rM   ä  s     z3TestRandom.test_numpy_geometric.<locals>.<listcomp>r[   c                    s   g | ]}ˆ d ƒ‘qS ©rP  r   rˆ   rd  r   r   rM   æ  s     r}   c                 S   s   g | ]}|d kr|‘qS )rK  r   rˆ   r   r   r   rM   ê  s      c                    s   g | ]}ˆ d ƒ‘qS )rN  r   rˆ   rd  r   r   rM   ë  s     c                 S   s   g | ]}|d kr|‘qS )r  r   rˆ   r   r   r   rM   ì  s      c                    s   g | ]}ˆ d ƒ‘qS )g{®Gáz„?r   rˆ   rd  r   r   rM   í  s     c                 S   s   g | ]}|d kr|‘qS )é2   r   rˆ   r   r   r   rM   î  s      c                    s   g | ]}ˆ d ƒ‘qS )gVçž¯Ò<r   rˆ   rd  r   r   rM   ï  s     c                 S   s   g | ]}|d kr|‘qS )ì        r   rˆ   r   r   r   rM   ð  s      )
rV   rº   ró   rŽ   r¦   ÚcountrU  Ú
assertLessZassertFalseÚ
assertTrue)r€   r�   r`   r+   r   rd  r   Útest_numpy_geometricÜ  s$    
zTestRandom.test_numpy_geometricc                 C   s,   t dƒ}|  tƒ ¡}|  ||jddg¡ d S )Núnp.random.gumbel©ro   rv   ©ç      ø¿r  )rW   rƒ   r   rÌ   Úgumbel)r€   rp  r`   r   r   r   Útest_numpy_gumbelò  s    zTestRandom.test_numpy_gumbelc                 C   s2   | j tdddgƒtƒ ddddœdd	dœgd
� d S )Nrl  ÚlocÚscalerp  ro   rv   )rr  rs  ro  r  ©r  r  r  rž   r   r   r   Útest_numpy_gumbel_kwargs÷  s    ÿüz#TestRandom.test_numpy_gumbel_kwargsc                    s  t dƒ‰ |  tƒ ¡}| jˆ |jddgdd� ‡ fdd„tdƒD ƒ}|  td	d
„ |D ƒƒ|¡ |  t	 
|¡d¡ |  t	 
|¡d¡ ‡ fdd„tdƒD ƒ}|  tdd
„ |D ƒƒ|¡ |  t	 
|¡d¡ ‡ fdd„tdƒD ƒ}|  tdd
„ |D ƒƒ|¡ |  t	 
|¡d¡ d S )Nznp.random.hypergeometric©rK  rì   r—   )rì   rK  r—   é   rÓ   c                    s   g | ]}ˆ d d dƒ‘qS )rK  rJ  r   rˆ   ©Úhgr   r   rM     s     z8TestRandom.test_numpy_hypergeometric.<locals>.<listcomp>rJ  c                 s   s   | ]}|d ko|dkV  qdS ©r   rJ  Nr   rh   r   r   r   Ú	<genexpr>	  s     z7TestRandom.test_numpy_hypergeometric.<locals>.<genexpr>g      D@g      N@c                    s   g | ]}ˆ d ddƒ‘qS )rK  é † rJ  r   rˆ   rx  r   r   rM     s     c                 s   s   | ]}|d ko|dkV  qdS rz  r   rh   r   r   r   r{    s     ç      $@c                    s   g | ]}ˆ d ddƒ‘qS )r|  rK  rJ  r   rˆ   rx  r   r   rM     s     c                 s   s   | ]}|d ko|dkV  qdS rz  r   rh   r   r   r   r{    s     g     €V@)rX   rƒ   r   rÌ   ÚhypergeometricrŽ   rj  ÚallrU  r   ÚmeanrV  ©r€   r`   r   rx  r   Útest_numpy_hypergeometric   s     
þz$TestRandom.test_numpy_hypergeometricc                 C   sV   |   tƒ ¡}|  tdƒ|jddg¡ |  tdƒ|jddg¡ |  tdƒ|jdg¡ d S )Nznp.random.laplacerm  rn  ©ro   ©ro  r   )rƒ   r   rÌ   rW   ÚlaplacerV   rU   r�  r   r   r   Útest_numpy_laplace  s    ÿÿzTestRandom.test_numpy_laplacec                 C   sV   |   tƒ ¡}|  tdƒ|jddg¡ |  tdƒ|jddg¡ |  tdƒ|jdg¡ d S )Nznp.random.logisticrm  rn  rƒ  r„  r   )rƒ   r   rÌ   rW   ÚlogisticrV   rU   r�  r   r   r   Útest_numpy_logistic  s    ÿÿzTestRandom.test_numpy_logisticc                    sž   |   tƒ ¡}tdƒ‰ | jˆ |jdddgdd� | j tƒ dd�}|  ‡ fd	d
„tdƒD ƒddddddddddg
¡ |  tˆ d¡ |  tˆ d¡ |  tˆ d¡ d S )Nznp.random.logseries©rM  )g®Gáz®ï?)rQ  rf  rÓ   r[   ©r8   c                    s   g | ]}ˆ d ƒ‘qS )g{üÿÿÿÿï?r   rˆ   ©Ú	logseriesr   r   rM   ,  s     z3TestRandom.test_numpy_logseries.<locals>.<listcomp>r—   iÛv�xið- rw  iìË  in‰Ž i¬Íç)l   †&c€iÜ€oirHô iâ  ro   rR  rS  )	rƒ   r   rV   rÌ   rŒ  rŒ   rŽ   rº   ró   r�  r   r‹  r   Útest_numpy_logseries#  s$    
þ   ÿÿzTestRandom.test_numpy_logseriesc                 C   sD   |   tƒ ¡}tdƒ}| j||jdddddgdd� |  t|d	¡ d S )
Nznp.random.poissonrƒ  rÔ   ©ru   )r}  )g     $Œ@rf  rÓ   rR  )rƒ   r   rV   rÌ   Úpoissonrº   ró   )r€   r`   r�  r   r   r   Útest_numpy_poisson3  s    
þzTestRandom.test_numpy_poissonc                    s$  |   tƒ d¡ tdƒ‰ |  ‡ fdd„tdƒD ƒdddd	ddddddg
¡ |  ‡ fd
d„tdƒD ƒddddddddddg
¡ |  ‡ fdd„tdƒD ƒddddddddddg
¡ t ‡ fdd„tdƒD ƒ¡}|  |d¡ |  |d ¡ |  	t
ˆ dd!¡ |  	t
ˆ d"d!¡ |  	t
ˆ dd#¡ |  	t
ˆ dd$¡ d S )%Nr   znp.random.negative_binomialc                    s   g | ]}ˆ d dƒ‘qS )r—   rP  r   rˆ   ©Znegbinr   r   rM   ?  s     z;TestRandom.test_numpy_negative_binomial.<locals>.<listcomp>r—   r}   rf   r[   rç   c                    s   g | ]}ˆ d dƒ‘qS )r—   rM  r   rˆ   r‘  r   r   rM   A  s     é7   éG   é8   é9   é"   ée   éC   c                    s   g | ]}ˆ d dƒ‘qS )rK  rM  r   rˆ   r‘  r   r   rM   C  s     ió#  iÀ!  iy#  iL$  iê"  iÍ#  i½#  iF"  i¶"  i�#  c                    s   g | ]}ˆ d dƒ‘qS )i Êš;rM  r   rˆ   r‘  r   r   rM   F  s   ÿrf  g   |ž˜ Bg   $sî BrÑ   r\   rR  rS  )rƒ   r   rW   rŒ   rŽ   r   r€  ZassertGreaterri  rº   ró   )r€   r#  r   r‘  r   Útest_numpy_negative_binomial<  s4    ÿÿ
    ÿÿÿz'TestRandom.test_numpy_negative_binomialc                 C   sL   |   tƒ ¡}tdƒ}|  ||jddddg¡ |  t|d¡ |  t|d¡ d S )Nznp.random.powerr‰  rÔ   re  )g      @ro   rR  )rƒ   r   rV   rÌ   Úpowerrº   ró   )r€   r`   rš  r   r   r   Útest_numpy_powerO  s    

ÿzTestRandom.test_numpy_powerc                 C   sf   |   tƒ ¡}tdƒ}tdƒ}|  ||jddddg¡ |  ||jdg¡ |  t|d¡ |  t|d¡ d S )	Nznp.random.rayleighr‰  ©rO  )g      9@)r  r   ro   rR  )rƒ   r   rV   rU   rÌ   Úrayleighrº   ró   )r€   r`   Z	rayleigh1Z	rayleigh0r   r   r   Útest_numpy_rayleighW  s    

ÿzTestRandom.test_numpy_rayleighc                 C   s*   |   tƒ ¡}tdƒ}|  ||jdg¡ d S )Nznp.random.standard_cauchyr   )rƒ   r   rU   rÌ   Ústandard_cauchy)r€   r`   Zcauchyr   r   r   Útest_numpy_standard_cauchya  s    z%TestRandom.test_numpy_standard_cauchyc                    sD   |   tƒ ¡}tdƒ‰ t ‡ fdd„tdƒD ƒ¡}|  t|ƒd¡ d S )Nznp.random.standard_tc                    s   g | ]}ˆ d ƒ‘qS )rç   r   rˆ   ©Z
standard_tr   r   rM   l  s     z4TestRandom.test_numpy_standard_t.<locals>.<listcomp>rì   rÑ   )r�   r   rV   r   r€  rŽ   ri  Úabs)r€   r`   Úavgr   r¡  r   Útest_numpy_standard_tf  s    z TestRandom.test_numpy_standard_tc                 C   sl   |   tƒ ¡}tdƒ}|  ||jddg¡ |  t|dd¡ |  t|dd¡ |  t|dd¡ |  t|dd¡ d S )Núnp.random.waldrÏ   )ru   ç      @ro   rv   rR  )rƒ   r   rW   rÌ   Úwaldrº   ró   )r€   r`   r§  r   r   r   Útest_numpy_waldp  s    zTestRandom.test_numpy_waldc                 C   sv   t dddgƒ}| j|tƒ ddddœdddœgd	� |  t|d
d¡ |  t|dd¡ |  t|dd
¡ |  t|dd¡ d S )Nr¥  r€  rs  r§  rv   )r€  rs  ru   r¦  rt  ro   rR  )rQ   r  r   rº   ró   )r€   Znumba_versionr   r   r   Útest_numpy_wald_kwargsy  s    ÿýz!TestRandom.test_numpy_wald_kwargsc                 C   sH   |   tƒ ¡}tdƒ}| j||jddgdd� dD ]}|  t||¡ q0d S )Nznp.random.zipfr;  r[  rJ  rÓ   )rv   rÑ   ro   rR  )rƒ   r   rV   rÌ   Úzipfrº   ró   )r€   r`   rª  Úvalr   r   r   Útest_numpy_zipf…  s
    zTestRandom.test_numpy_zipfc              	   C   sô   t  d¡t  d¡ d¡g}|r*|  |¡}n
|  |¡}|D ]R}tdƒD ]D}| ¡ }| ¡ }	||ƒ |srt|jƒdkrD| 	|	¡ |  
||	¡ qDq8|d }| ¡ }
|t|
ƒƒ |  t|ƒt|
ƒ¡ |  t|ƒt|
ƒ¡ |  ¡ � |tdƒƒ W 5 Q R X dS )	z=
        Check a shuffle()-like function for arrays.
        r  é    )rë   r  rf   r[   r   s   xyzN)r   ÚarangeÚreshaperƒ   r�   rŽ   Úcopyrp   ÚshapeÚshuffler¦   Ú
memoryviewÚassertNotEqualr_   rŒ   ÚsortedZassertTypingError)r€   r?   ra   rõ   Úarrsr`   r   r‰   r;   r:   r   r   r   r   r’   Œ  s&    


zTestRandom._check_shufflec                 C   s   |   tdƒtƒ d¡ d S )Nzrandom.shuffleF)r’   rV   r   rž   r   r   r   Útest_random_shuffle§  s    zTestRandom.test_random_shufflec                 C   s   |   tdƒtƒ d¡ d S )Nznp.random.shuffleT)r’   rV   r   rž   r   r   r   Útest_numpy_shuffleª  s    zTestRandom.test_numpy_shufflec           	      C   sŽ   dt ƒ  }tƒ }tdƒD ]^}tjtjd|gtjtjd�}| ¡ \}}|j	dkrdt
d|j	| ¡ f ƒ‚| t| ¡ ƒ¡ q|  t|ƒd|¡ dS )zI
        Check that the state is properly randomized at startup.
        z¡if 1:
            from numba.tests import test_random
            func = getattr(test_random, %(func_name)r)
            print(func(*%(func_args)r))
            rf   z-c)ÚstdoutÚstderrr   z/process failed with code %s: stderr follows
%s
N)rB   rœ   rŽ   Ú
subprocessÚPopenÚsysÚ
executableÚPIPEÚcommunicateÚ
returncoderq   ÚdecodeÚaddÚfloatÚstriprŒ   rp   )	r€   Ú	func_nameZ	func_argsrF   Únumbersr‰   ÚpopenÚoutÚerrr   r   r   Ú_check_startup_randomness­  s     ü ÿ
ÿz$TestRandom._check_startup_randomnessc                 C   s   |   dd¡ d S )Nr¬   r   ©rË  rž   r   r   r   Útest_random_random_startupÁ  s    z%TestRandom.test_random_random_startupc                 C   s   |   dd¡ d S )NÚrandom_gaussrÏ   rÌ  rž   r   r   r   Útest_random_gauss_startupÄ  s    z$TestRandom.test_random_gauss_startupc                 C   s   |   dd¡ d S )Nr°   r   rÌ  rž   r   r   r   Útest_numpy_random_startupÇ  s    z$TestRandom.test_numpy_random_startupc                 C   s   |   dd¡ d S )NÚnumpy_normalrÏ   rÌ  rž   r   r   r   Útest_numpy_gauss_startupÊ  s    z#TestRandom.test_numpy_gauss_startupc                 C   sÚ   t dƒ}|  tƒ ¡}dD ]N}t |¡}| ¡ }|  ||ƒ| |¡¡ |  ||ƒ| |¡¡ |  ||¡ qt d¡ dd¡t d¡ ddd¡t d¡ dddd¡g}|D ].}| ¡ }|  ||ƒ| |¡¡ |  ||¡ q¦d S )	Nznp.random.permutation)rç   r—   é   r  r—   r}   rç   é   rf   é$   )	rV   rƒ   r   r   r®  r°  r¦   Zpermutationr¯  )r€   r?   r`   Úsr   r   r¶  r   r   r   Útest_numpy_random_permutationÍ  s     
þz(TestRandom.test_numpy_random_permutation)rf   r¿   rÀ   N)rf   r¿   rÀ   N)N)Sr„   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'  r+  r,  r-  r/  r0  r1  r3  r4  r5  r8  r9  r<  r=  r>  r@  rA  rD  rF  rG  rH  rZ  r_  rb  rk  rq  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¤      s°   
      ÿ

      ÿ


$			
		

	r¤   c                   @   s(  e Zd Z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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&dHS )IÚTestRandomArrayszA
    Test array-producing variants of np.random.* functions.
    c                 C   s&   d|f }d  dd |… ¡}t||ƒS )Núnp.random.%sú, Úabcd)rO   rH   )r€   ÚfuncnameÚnargsÚqualnamerE   r   r   r   Ú_compile_array_distè  s    
z$TestRandomArrays._compile_array_distc           
      C   sº   |   |t|ƒd ¡}|  tƒ ¡}t||ƒ}dD ]\}||f }||Ž }||Ž }	|jt d¡krx|	jt d¡krx| |	j¡}| j||	ddd� q.|d }||Ž }||Ž }	| j||	ddd� d	S )
zM
        Check returning an array according to a given distribution.
        r[   ©rë   ©r}   rf   rþ   rý   r¿   rç   ©rÅ   rÆ   r   N)	rß  rp   rƒ   r   r  rn   r   Úastyper¦   )
r€   rÜ  Úscalar_argsÚcfuncr`   rG   r&   rÁ   r:   r;   r   r   r   Ú_check_array_distí  s     

ÿz"TestRandomArrays._check_array_distc                    sÄ   |   |t|ƒd ¡}|  tƒ ¡}t|dƒ‰ || ‰‡ ‡fdd„}|d }|ƒ }||Ž }	| j||	ddd� d	D ]R}
||
f }t |
¡}|j}t	|j
ƒD ]}|ƒ ||< q”||Ž }	| j||	ddd� qld
S )z–
        Check returning an array according to a given gamma distribution,
        where we use CPython's implementation rather than NumPy's.
        r[   rw   c                     s   ˆ ˆŽ S r   r   )Ú_args©rG   Zpyfunc_argsr   r   r%    r&  z:TestRandomArrays._check_array_dist_gamma.<locals>.<lambda>r   r¿   rç   râ  rà  N)rß  rp   r�   r   r  r¦   r   ÚemptyÚflatrŽ   r&   )r€   rÜ  rä  Zextra_pyfunc_argsrå  r`   ZpyrandomrÁ   r:   r;   r&   Zexpected_flatÚidxr   rè  r   Ú_check_array_dist_gamma  s"    


z(TestRandomArrays._check_array_dist_gammac                 C   sò   t jdd„ ƒ}|  |t|ƒd ¡}d|f }d ddt|ƒ… ¡}t||ƒ}dD ]f}||f }	|ƒ  ||	Ž }
|ƒ  tj||
jd	�}|j	}t
|jƒD ]}||Ž ||< q’| j||
d
dd� qP|ƒ  |d }	||Ž }|ƒ  ||	Ž }
| j||
d
dd� dS )a½  
        Check function returning an array against its scalar implementation.
        Because we use the CPython gamma distribution rather than the NumPy one,
        distributions which use the gamma distribution vary in ways that are
        difficult to compare. Instead, we compile both the array and scalar
        versions and check that the array is filled with the same values as
        we would expect from the scalar version.
        c                   S   s   t j d¡ d S )NiÒ  )r   r   r8   r   r   r   r   Úreset#  s    z6TestRandomArrays._check_array_dist_self.<locals>.resetr[   rÙ  rÚ  rÛ  Nrà  rm   r¿   rç   râ  r   )ÚnumbaZnjitrß  rp   rO   rH   r   ré  rn   rê  rŽ   r&   r¦   )r€   rÜ  rä  rí  Z
array_funcrÞ  rE   Zscalar_funcr&   rÁ   r;   r:   rê  rë  r   r   r   Ú_check_array_dist_self  s,    	



z'TestRandomArrays._check_array_dist_selfc                 C   sÊ   |   dd¡}d\}}d}||||ƒ}|  |tj¡ |  |j|¡ |  |jt d¡t d¡f¡ |  t 	||k¡¡ |  t 	||k ¡¡ || d }|| d }|  
| ¡ || ¡ |  | ¡ || ¡ d S )	Nr   rf   )rK  rL  ©rw  rw  rþ   rý   r}   r  )rß  r‹   r   ÚndarrayrŒ   r±  ÚassertInrn   rj  r  rU  r€  rV  )r€   rå  r  r  r&   Úresr€  rY  r   r   r   r  A  s    z#TestRandomArrays.test_numpy_randintc                 C   s¼   |   dd¡}d}||ƒ}|  |tj¡ |  |j|¡ |  |jt d¡¡ |  t |dk¡¡ |  t |dk ¡¡ |  t 	|dk¡¡ |  t 	|dk¡¡ | 
¡ }|  |d	¡ |  |d
¡ d S )Nr   r[   rð  Úfloat64ro   rv   rM  rP  gÍÌÌÌÌÌÜ?gš™™™™™á?)rß  r‹   r   rñ  rŒ   r±  rn   rj  r  Úanyr€  rU  rV  )r€   rå  r&   ró  r€  r   r   r   Útest_numpy_random_randomQ  s    z)TestRandomArrays.test_numpy_random_randomc                 C   s   |   dd¡ d S )NÚbetar(  ©rï  rž   r   r   r   r1  e  s    z TestRandomArrays.test_numpy_betac                 C   s   |   dd¡ d S )NrT  )r  rÑ   ©ræ  rž   r   r   r   rZ  h  s    z$TestRandomArrays.test_numpy_binomialc                 C   s   |   dd¡ d S )Nr^  r;  rø  rž   r   r   r   r_  k  s    z%TestRandomArrays.test_numpy_chisquarec                 C   s   |   dd¡ d S )Nr6  r;  rù  rž   r   r   r   r=  n  s    z'TestRandomArrays.test_numpy_exponentialc                 C   s   |   dd¡ d S )Nra  r`  rø  rž   r   r   r   rb  q  s    zTestRandomArrays.test_numpy_fc                 C   s   |   ddd¡ d S )NÚgamma)ru   rv   r   ©rì  rž   r   r   r   r-  t  s    z!TestRandomArrays.test_numpy_gammac                 C   s   |   dd¡ d S )NZ	geometricr:  rù  rž   r   r   r   rk  w  s    z%TestRandomArrays.test_numpy_geometricc                 C   s   |   dd¡ d S )Nrp  ©r  rÑ   rù  rž   r   r   r   rq  z  s    z"TestRandomArrays.test_numpy_gumbelc                 C   s   |   dd¡ d S )Nr~  rv  rù  rž   r   r   r   r‚  }  s    z*TestRandomArrays.test_numpy_hypergeometricc                 C   s   |   dd¡ d S )Nr…  rü  rù  rž   r   r   r   r†  €  s    z#TestRandomArrays.test_numpy_laplacec                 C   s   |   dd¡ d S )Nr‡  rü  rù  rž   r   r   r   rˆ  ƒ  s    z$TestRandomArrays.test_numpy_logisticc                 C   s   |   dd¡ d S )Nrâ   )r  ru   rù  rž   r   r   r   rå   †  s    z%TestRandomArrays.test_numpy_lognormalc                 C   s   |   dd¡ d S )NrŒ  rœ  rù  rž   r   r   r   r�  ‰  s    z%TestRandomArrays.test_numpy_logseriesc                 C   s   |   dd¡ d S )NrÕ   )rÑ   ru   rù  rž   r   r   r   rÞ   Œ  s    z"TestRandomArrays.test_numpy_normalc                 C   s   |   dd¡ d S )NrC  rÔ   rù  rž   r   r   r   rD  �  s    z"TestRandomArrays.test_numpy_paretoc                 C   s   |   dd¡ d S )Nr�  rœ  rù  rž   r   r   r   r�  ’  s    z#TestRandomArrays.test_numpy_poissonc                 C   s   |   dd¡ d S )Nrš  rœ  rù  rž   r   r   r   r›  •  s    z!TestRandomArrays.test_numpy_powerc                 C   s<   t dd�tƒ}|dddƒ\}}|  |jd¡ |  ||¡ d S ©NTr@   é*   r}   rf   rá  )r   r<   rŒ   r±  r¦   ©r€   rå  r:   r;   r   r   r   Útest_numpy_rand˜  s    z TestRandomArrays.test_numpy_randc                 C   s<   t dd�tƒ}|dddƒ\}}|  |jd¡ |  ||¡ d S rý  )r   r>   rŒ   r±  r¦   rÿ  r   r   r   rá   ž  s    z!TestRandomArrays.test_numpy_randnc                 C   s   |   dd¡ d S )Nr�  rœ  rù  rž   r   r   r   rž  ¤  s    z$TestRandomArrays.test_numpy_rayleighc                 C   s   |   dd¡ d S )NrŸ  r   rù  rž   r   r   r   r   §  s    z+TestRandomArrays.test_numpy_standard_cauchyc                 C   s   |   dd¡ d S )NZstandard_exponentialr   rù  rž   r   r   r   r>  ª  s    z0TestRandomArrays.test_numpy_standard_exponentialc                 C   s   |   ddd¡ d S )NZstandard_gammarŽ  r:  rû  rž   r   r   r   Útest_numpy_standard_gamma­  s    z*TestRandomArrays.test_numpy_standard_gammac                 C   s   |   dd¡ d S )Nr=   r   rù  rž   r   r   r   rà   °  s    z+TestRandomArrays.test_numpy_standard_normalc                 C   s   |   dd¡ d S )Nr  )r  r  r  rù  rž   r   r   r   r'  ³  s    z&TestRandomArrays.test_numpy_triangularc                 C   s   |   dd¡ d S )Nr§   ©rM  rN  rù  rž   r   r   r   r  ¶  s    z#TestRandomArrays.test_numpy_uniformc                 C   s   |   dd¡ d S )Nr§  r  rù  rž   r   r   r   r¨  ¹  s    z TestRandomArrays.test_numpy_waldc                 C   s   |   dd¡ d S )NZvonmisesr(  rø  rž   r   r   r   r5  ¼  s    z$TestRandomArrays.test_numpy_vonmisesc                 C   s   |   dd¡ d S )Nrª  r[  rù  rž   r   r   r   r¬  ¿  s    z TestRandomArrays.test_numpy_zipfN)'r„   r…   r†   r£   rß  ræ  rì  rï  r  rö  r1  rZ  r_  r=  rb  r-  rk  rq  r‚  r†  rˆ  rå   r�  rÞ   rD  r�  r›  r   rá   rž  r   r>  r  rà   r'  r  r¨  r5  r¬  r   r   r   r   rØ  ã  sH   'rØ  c                   @   s„   e Zd ZdZd dd„Zdd„ Zdd„ Zd	d
„ Zdd„ Z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S )"ÚTestRandomChoicez 
    Test np.random.choice.
    Tc                 C   sf   t |ƒ}t |ƒ}|  ||¡ |  t|ƒt|ƒ¡ |rL|  t|ƒt|ƒ|¡ n|  t|ƒt|ƒ|¡ dS )zD
        Check basic expectations about a batch of samples.
        N)rœ   rV  r´  rµ  r_   ri  rp   rŒ   )r€   Úpopró  r(   ZspopÚsresr   r   r   Ú_check_resultsÈ  s    zTestRandomChoice._check_resultsc                 C   sh   |   t|ƒt|ƒd ¡ t|ƒt|ƒ }t |¡}|D ],}|| }|   ||d ¡ |  ||d ¡ q6dS )ú5
        Check distribution of some samples.
        rJ  rÑ   ru   N)rU  rp   ÚcollectionsÚCounterrV  )r€   r  ZsamplesZexpected_frequencyr   Úvaluer+   r   r   r   rÌ   Ù  s    
zTestRandomChoice._check_distc                 C   s.   g }t |ƒ|k r"|t|ƒ jƒ7 }q|d|… S )zk
        Accumulate array results produced by *func* until they reach
        *nresults* elements.
        N)rp   r_   rê  )r€   r?   Znresultsró  r   r   r   Ú_accumulate_array_resultsç  s    z*TestRandomChoice._accumulate_array_resultsc                    sf   t dd�tƒ‰t|ƒ}‡ ‡fdd„t|ƒD ƒ}|  ||¡ ‡ ‡fdd„t|d ƒD ƒ}|  ||¡ dS )z.
        Check choice(a) against pop.
        Tr@   c                    s   g | ]}ˆˆ ƒ‘qS r   r   rˆ   ©r   rå  r   r   rM   ÷  s     z4TestRandomChoice._check_choice_1.<locals>.<listcomp>c                    s   g | ]}ˆˆ ƒ‘qS r   r   rˆ   r  r   r   rM   ù  s     rJ  N)r   r#   rp   rŽ   r  rÌ   )r€   r   r  r+   ró  Údistr   r  r   Ú_check_choice_1ñ  s    z TestRandomChoice._check_choice_1c                 C   s    d}t t|ƒƒ}|  ||¡ dS )z"
        Test choice(int)
        rf  N)r_   rŽ   r  ©r€   r+   r  r   r   r   Útest_choice_scalar_1ü  s    z%TestRandomChoice.test_choice_scalar_1c                 C   s"   t  d¡d d }|  ||¡ dS )z$
        Test choice(array)
        rf  r}   rJ  N)r   r®  r  ©r€   r  r   r   r   Útest_choice_array_1  s    z$TestRandomChoice.test_choice_array_1c                 C   sB   t |ƒ}t|ƒ jƒ}|  |||¡ |  ||d ¡}|  ||¡ dS )zP
        Check array results produced by *func* and their distribution.
        rJ  N)rp   r_   rê  r  r  rÌ   )r€   r?   r  r(   r+   ró  r  r   r   r   Ú_check_array_results  s
    z%TestRandomChoice._check_array_resultsc                    s†   t dd�tƒ‰t|ƒ}|d d|d d f|d g}|D ]H‰ˆˆ ˆƒ}tˆtƒrTˆnˆf}|  |j|¡ |  ‡ ‡‡fdd„|¡ q8dS )	z4
        Check choice(a, size) against pop.
        Tr@   r—   rf   r[   c                      s
   ˆˆ ˆƒS r   r   r   ©r   rå  r&   r   r   r%  %  r&  z2TestRandomChoice._check_choice_2.<locals>.<lambda>N)r   r'   rp   Ú
isinstancer›   rŒ   r±  r  )r€   r   r  r+   Úsizesró  Úexpected_shaper   r  r   Ú_check_choice_2  s    
z TestRandomChoice._check_choice_2c                 C   s   d}t  |¡}|  ||¡ dS )z(
        Test choice(int, size)
        rf  N©r   r®  r  r  r   r   r   Útest_choice_scalar_2'  s    
z%TestRandomChoice.test_choice_scalar_2c                 C   s"   t  d¡d d }|  ||¡ dS )z*
        Test choice(array, size)
        rf  r}   rJ  Nr  r  r   r   r   Útest_choice_array_2/  s    z$TestRandomChoice.test_choice_array_2c           	   
      s  t dd�tƒ‰t|ƒ}|d d|d d fg}ddg}|D ]<‰dD ]2}ˆˆ ˆ|ƒ}tˆtƒr`ˆnˆf}|  |j|¡ qBq:|D ]‰|  ‡ ‡‡fdd	„|¡ q||D ]‰|  ‡ ‡‡fd
d	„|d¡ qž|d d|d d ffD ]&‰|  t	¡� ˆˆ ˆdƒ W 5 Q R X qÖdS )z=
        Check choice(a, size, replace) against pop.
        Tr@   r—   rf   r[   F)TFc                      s   ˆˆ ˆdƒS )NTr   r   r  r   r   r%  J  r&  z2TestRandomChoice._check_choice_3.<locals>.<lambda>c                      s   ˆˆ ˆdƒS )NFr   r   r  r   r   r%  M  r&  N)
r   r)   rp   r  r›   rŒ   r±  r  rº   ró   )	r€   r   r  r+   r  Zreplacesr(   ró  r  r   r  r   Ú_check_choice_36  s     z TestRandomChoice._check_choice_3c                 C   s   d}t  |¡}|  ||¡ dS )z1
        Test choice(int, size, replace)
        rf  N©r   r®  r  r  r   r   r   Útest_choice_scalar_3T  s    
z%TestRandomChoice.test_choice_scalar_3c                 C   s"   t  d¡d d }|  ||¡ dS )z3
        Test choice(array, size, replace)
        rf  r}   rJ  Nr  r  r   r   r   Útest_choice_array_3\  s    z$TestRandomChoice.test_choice_array_3c                 C   s~   t dd�dd„ ƒ}tjjddd� tj¡}| ¡ }| d|¡}| ¡ }|d|ƒ}tj 	||¡ tj 	||¡ tj 	||¡ d S )	NTr@   c                 S   sD   t j d¡ t  | dft j¡}t| ƒD ]}t j |dd¡||< q&|S )Ni9  r}   F)r   r   r8   ré  rþ   rŽ   r"   )Zn_to_returnÚchoice_arrayrÉ  r‰   r   r   r   Únumba_randsf  s
    z>TestRandomChoice.test_choice_follows_seed.<locals>.numba_randsi,  rK  r%   rç   )
r   r   r   r   rã  rþ   r°  Zpy_funcÚtestingÚassert_allclose)r€   r!  r   Ztmp_npr:   Ztmp_nbr;   r   r   r   Útest_choice_follows_seedc  s    

z)TestRandomChoice.test_choice_follows_seedN)T)T)r„   r…   r†   r£   r  rÌ   r  r  r  r  r  r  r  r  r  r  r  r$  r   r   r   r   r  Ã  s   



r  c                   @   sX   e Zd ZdZejddddddgejd�Zee ¡  Zdd„ Z	dd	„ Z
d
d„ Zdd„ ZdS )ÚTestRandomMultinomialz%
    Test np.random.multinomial.
    r[   r}   rf   rm   c                 C   s¬   |   |tj¡ |  |jt|ƒf¡ |  |jt d¡t d¡f¡ |  | ¡ |¡ t	||ƒD ]L\}}|  
|d¡ |  ||¡ t|ƒ| }|  
||d ¡ |  ||d ¡ qZdS )r  rþ   rý   r   rÑ   ru   N)r‹   r   rñ  rŒ   r±  rp   rò  rn   ÚsumÚziprU  rV  rÄ  )r€   r+   r,   Úsamplerµ   ZnexpZpexpr   r   r   Ú_check_sample�  s    z#TestRandomMultinomial._check_samplec                 C   sš   t dd�tƒ}d| j }}|||ƒ}|  |||¡ t|ƒ}|||ƒ}|  |||¡ d}tjdd|d dgtjd�}|| ¡  }|||ƒ}|  |||¡ d	S )
z,
        Test multinomial(n, pvals)
        Tr@   rK  i@B r[   r   rJ  rm   N)	r   r-   r,   r)  r_   r   rr   rô  r&  )r€   rå  r+   r,   ró  r   r   r   Útest_multinomial_2‘  s    


z(TestRandomMultinomial.test_multinomial_2c                 C   sX   t dd�tƒ}d| j }}d}||||ƒ}|  |jd |¡ |D ]}|  |||¡ q@dS )z7
        Test multinomial(n, pvals, size: int)
        Tr@   rK  r—   r   N)r   r.   r,   rŒ   r±  r)  ©r€   rå  r+   r,   Úkró  r(  r   r   r   Útest_multinomial_3_int¤  s    z,TestRandomMultinomial.test_multinomial_3_intc                 C   sl   t dd�tƒ}d| j }}d}||||ƒ}|  |jdd… |¡ | d|jd f¡D ]}|  |||¡ qTdS )z9
        Test multinomial(n, pvals, size: tuple)
        Tr@   rK  )rf   r  Nr\   )r   r.   r,   rŒ   r±  r¯  r)  r+  r   r   r   Útest_multinomial_3_tuple°  s    z.TestRandomMultinomial.test_multinomial_3_tupleN)r„   r…   r†   r£   r   rr   rô  r,   r&  r)  r*  r-  r.  r   r   r   r   r%  y  s   r%  c                   @   sD   e Zd Zejddddgejd�Zdd„ Zdd„ Zdd	„ Z	d
d„ Z
dS )ÚTestRandomDirichletr[   r}   rm   c                 C   sè   |   |tj¡ |  |jtj¡ |dkr:|  |jt|ƒ¡ n<t|ƒt	kr^|  |j
|t|ƒf¡ n|  |j
|t|ƒf ¡ t |¡D ]}|  |d¡ |  |d¡ q€|dkr¼| j| ¡ ddd� n(t |jdd�¡D ]}| j|ddd� qÎdS )zCheck output structureNr   r[   rç   )Zplacesr\   )Zaxis)r‹   r   rñ  rŒ   rn   rô  r&   rp   Útyperg   r±  ÚnditerrU  rV  ZassertAlmostEqualr&  )r€   r0   r&   r(  r«  Ztotalsr   r   r   r)  À  s    z!TestRandomDirichlet._check_samplec                 C   sn   t dd�tƒ}| jt| jƒtjddddgtjd�tjddddgtjd�f}|D ]}||ƒ}|  |d|¡ qNdS )ú2
        Test dirichlet(alpha, size=None)
        Tr@   r[   rL  rm   r  N)r   r2   r0   r›   r   rr   rô  r)  )r€   rå  Úalphasr0   ró  r   r   r   Útest_dirichlet_defaultÖ  s    üz*TestRandomDirichlet.test_dirichlet_defaultc                 C   s€   t dd�tƒ}d}| jt| jƒtjddddgtjd�tjddddgtjd�f}t ||¡D ] \}}|||ƒ}|  	|||¡ qZdS )	r2  Tr@   )N©r—   ©r—   r—   r[   rL  rm   r  N)
r   r1   r0   r›   r   rr   rô  Ú	itertoolsÚproductr)  )r€   rå  r  r3  r0   r&   ró  r   r   r   Útest_dirichletå  s    ü
z"TestRandomDirichlet.test_dirichletc              
   C   s°   t dd�tƒ}tdƒ}|  t¡�}||dƒ W 5 Q R X |  dt|jƒ¡ | j}ddddd	d
t	 
d¡t	 d¡ff}|D ]6}|  t¡�}|||ƒ W 5 Q R X |  dt|jƒ¡ qtd S )NTr@   )r   r[   r[   r[   zdirichlet: alpha must be > 0.0ù              @r  ©r  r[   ©r:  r[   ©r:  r:  rf   rò   zGnp.random.dirichlet(): size should be int or tuple of ints or None, got)r   r1   r›   rº   ró   rò  ÚstrÚ	exceptionr0   r   Úint8rý   r	   )r€   rå  r0   Úraisesr  r&   r   r   r   Útest_dirichlet_exceptionsö  s    "ýz-TestRandomDirichlet.test_dirichlet_exceptionsN)r„   r…   r†   r   rr   rô  r0   r)  r4  r9  rB  r   r   r   r   r/  ½  s
   r/  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestRandomNoncentralChiSquarec                 C   s~   |d k	rR|   |tj¡ |  |jtj¡ t|tƒrB|  |j|f¡ q^|  |j|¡ n|   |t	¡ t 
|¡D ]}|  |d¡ qhd S ©Nr   )r‹   r   rñ  rŒ   rn   rô  r  rg   r±  rÄ  r1  rU  )r€   r&   r(  r«  r   r   r   r)  
  s    
z+TestRandomNoncentralChiSquare._check_samplec                 C   sV   t dd�tƒ}d}|D ]:\}}|||ƒ}|  d|¡ ||tjƒ}|  t |¡¡ qdS )z@
        Test noncentral_chisquare(df, nonc, size=None)
        Tr@   ©)rÑ   r[   r  )rç   r[   )r|  r[   )r[   rL  N)r   r7   r)  r   Únanrj  Úisnan)r€   rå  Úinputsr4   r5   ró  r   r   r   Ú!test_noncentral_chisquare_default  s    
z?TestRandomNoncentralChiSquare.test_noncentral_chisquare_defaultc                 C   sn   t dd�tƒ}d}d}t ||¡D ]F\\}}}||||ƒ}|  ||¡ ||tj|ƒ}|  t |¡ 	¡ ¡ q"dS )z;
        Test noncentral_chisquare(df, nonc, size)
        Tr@   )Nr—   r5  r6  rE  N)
r   r6   r7  r8  r)  r   rF  rj  rG  r  )r€   rå  r  rH  r4   r5   r&   ró  r   r   r   Útest_noncentral_chisquare/  s    z7TestRandomNoncentralChiSquare.test_noncentral_chisquarec              
   C   sò   t dd�tƒ}d\}}|  t¡�}|||dƒ W 5 Q R X |  dt|jƒ¡ d\}}|  t¡�}|||dƒ W 5 Q R X |  dt|jƒ¡ d\}}dd	d
dddt d¡t 	d¡ff}|D ]8}|  t
¡�}||||ƒ W 5 Q R X |  dt|jƒ¡ q´d S )NTr@   )r   r[   r[   zdf <= 0)r[   r\   znonc < 0)r[   r[   r:  r  r;  r<  r=  rf   rò   zRnp.random.noncentral_chisquare(): size should be int or tuple of ints or None, got)r   r6   rº   ró   rò  r>  r?  r   r@  rý   r	   )r€   rå  r4   r5   rA  r  r&   r   r   r   Ú$test_noncentral_chisquare_exceptionsC  s$    "ýzBTestRandomNoncentralChiSquare.test_noncentral_chisquare_exceptionsN)r„   r…   r†   r)  rI  rJ  rK  r   r   r   r   rC    s   rC  T)rA   Znogilc                 C   s4   | dkrt  | ¡ t|jƒD ]}t  d¡||< qd S )Nr   r­  )r   r8   rŽ   r&   r¹   )r8   rÉ  r‰   r   r   r   Úpy_extract_randomnessZ  s    
rL  rg  c                 C   s<   | dkrt j | ¡ d}t|jƒD ]}t j t¡||< q"d S rD  )r   r   r8   rŽ   r&   r   Ú_randint_limit)r8   rÉ  rÖ  r‰   r   r   r   Únp_extract_randomnessc  s
    rN  c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚConcurrencyBaseTestr|  c                 C   s"   d|   d¡f}t|Ž  t|Ž  d S )Nrþ  r[   )Ú_get_outputrL  rN  )r€   rÁ   r   r   r   ÚsetUpu  s    zConcurrencyBaseTest.setUpc                 C   s   t j|t jd�S )Nrm   )r   Zzerosrl   )r€   r&   r   r   r   rP  {  s    zConcurrencyBaseTest._get_outputc                 C   sF   d}dt  d¡ }d}t jj| ¡ ||d� t jj| ¡ ||d� dS )z9
        Check statistical properties of output.
        rü   rg  rÀ   gš™™™™™©?)ÚrtolN)r   rX  r"  r#  r€  Zstd)r€   rÉ  Zexpected_avgZexpected_stdrR  r   r   r   Úcheck_output~  s
    z ConcurrencyBaseTest.check_outputc                 C   sŠ   |D ]}|   |¡ q|rd}nt|ƒ}dd„ |D ƒ}dd„ |D ƒ}dd„ |D ƒ}|  t|ƒ||¡ |  t|ƒ||¡ |  t|ƒ||¡ d S )Nr[   c                 S   s   h | ]}t |d d… ƒ’qS )Nrç   ©r›   ©rK   rÉ  r   r   r   Ú	<setcomp>—  s     z<ConcurrencyBaseTest.check_several_outputs.<locals>.<setcomp>c                 S   s   h | ]}t |d d… ƒ’qS )rñ   NrT  rU  r   r   r   rV  ˜  s     c                 S   s   h | ]}|  ¡ ’qS r   )r&  rU  r   r   r   rV  ™  s     )rS  rp   rŒ   )r€   rÊ   Úsame_expectedrÉ  Zexpected_distinctZheadsÚtailsZsumsr   r   r   Úcheck_several_outputs‰  s    z)ConcurrencyBaseTest.check_several_outputsN)r„   r…   r†   Ú_extract_iterationsrQ  rP  rS  rY  r   r   r   r   rO  m  s
   rO  c                   @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )ÚTestThreadsz3
    Check the PRNG behaves well with threads.
    c                    sp   ‡fdd„t |d ƒD ƒ‰‡ ‡‡fdd„‰‡fdd„t |ƒD ƒ}|D ]}| ¡  qDˆ|ƒ |D ]}| ¡  q^ˆS )zo
        Run *nthreads* threads extracting randomness with the given *seed*
        (no seeding if 0).
        c                    s   g | ]}ˆ   ˆ j¡‘qS r   ©rP  rZ  rˆ   rž   r   r   rM   ©  s   ÿz2TestThreads.extract_in_threads.<locals>.<listcomp>r[   c                    s   ˆ ˆˆ|  d� d S )N©r8   rÉ  r   )r‰   )Úextract_randomnessrÊ   r8   r   r   Útarget¬  s    z.TestThreads.extract_in_threads.<locals>.targetc                    s   g | ]}t jˆ |fd �‘qS ))r_  rÁ   )Ú	threadingÚThreadrˆ   ©r_  r   r   rM   °  s   ÿ)rŽ   ÚstartrO   )r€   Znthreadsr^  r8   ÚthreadsÚthr   )r^  rÊ   r8   r€   r_  r   Úextract_in_threads¤  s    

ÿ
ÿ

zTestThreads.extract_in_threadsc                 C   s"   | j d|dd�}| j|dd� dS )zÎ
        When initializing the PRNG the same way, each thread
        should produce the same sequence of random numbers,
        using independent states, regardless of parallel
        execution.
        rÓ  rþ  rŠ  T©rW  N©rf  rY  ©r€   r^  rÊ   r   r   r   Úcheck_thread_safety¼  s    	zTestThreads.check_thread_safetyc                 C   s"   | j d|dd�}| j|dd� dS )z€
        The PRNG in new threads should be implicitly initialized with
        system entropy, if seed() wasn't called.
        r  r   rŠ  Frg  Nrh  ri  r   r   r   Úcheck_implicit_initializationÊ  s    z)TestThreads.check_implicit_initializationc                 C   s   |   t¡ d S r   )rj  rL  rž   r   r   r   Útest_py_thread_safetyÔ  s    z!TestThreads.test_py_thread_safetyc                 C   s   |   t¡ d S r   )rj  rN  rž   r   r   r   Útest_np_thread_safety×  s    z!TestThreads.test_np_thread_safetyc                 C   s   |   t¡ d S r   ©rk  rL  rž   r   r   r   Útest_py_implicit_initializationÚ  s    z+TestThreads.test_py_implicit_initializationc                 C   s   |   t¡ d S r   ©rk  rN  rž   r   r   r   Útest_np_implicit_initializationÝ  s    z+TestThreads.test_np_implicit_initializationN)r„   r…   r†   r£   rf  rj  rk  rl  rm  ro  rq  r   r   r   r   r[  Ÿ  s   
r[  Úntz(Windows is not affected by fork() issuesc                   @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestProcessesz9
    Check the PRNG behaves well in child processes.
    Fc                    sÒ   t  ¡ ‰g }‡ ‡fdd„‰‡‡fdd„‰tt dƒr>t  d¡‰nt ‰‡‡fdd„t|ƒD ƒ}|D ]}| ¡  q^t|ƒD ]}| ˆjd	d
�¡ qt|D ]}| ¡  q�| ˆƒ ¡ |D ]}t	|t
ƒr®ˆ d|f ¡ q®|S )z`
        Run *nprocs* processes extracting randomness
        without explicit seeding.
        c                     s   ˆ  ˆj¡} ˆ d| d� | S )Nr   r]  r\  )rÉ  )r^  r€   r   r   Útarget_innerô  s    z8TestProcesses.extract_in_processes.<locals>.target_innerc               
      sH   zˆƒ } ˆ   | ¡ W n. tk
rB } zˆ   |¡ ‚ W 5 d }~X Y nX d S r   )ÚputÚ	Exception)rÉ  Úe)Úqrt  r   r   r_  ù  s    
z2TestProcesses.extract_in_processes.<locals>.targetÚget_contextÚforkc                    s   g | ]}ˆ j ˆd �‘qS )rb  )ÚProcessrˆ   )Úmpcr_  r   r   rM     s   ÿz6TestProcesses.extract_in_processes.<locals>.<listcomp>rç   )ÚtimeoutzException in child: %s)ÚmultiprocessingÚQueueÚhasattrry  rŽ   rc  rš   ÚgetrO   r  rv  Zfail)r€   Znprocsr^  rÊ   Zprocsrµ   r‰   ró  r   )r^  r|  rx  r€   r_  rt  r   Úextract_in_processesì  s*    

ÿ


z"TestProcesses.extract_in_processesc                 C   s   |   d|¡}| j|dd� dS )z’
        The PRNG in new processes should be implicitly initialized
        with system entropy, to avoid reproducing the same sequences.
        r}   Frg  N)r‚  rY  ri  r   r   r   rk    s    z+TestProcesses.check_implicit_initializationc                 C   s   |   t¡ d S r   rn  rž   r   r   r   ro  &  s    z-TestProcesses.test_py_implicit_initializationc                 C   s   |   t¡ d S r   rp  rž   r   r   r   rq  )  s    z-TestProcesses.test_np_implicit_initializationN)	r„   r…   r†   r£   Z_numba_parallel_test_r‚  rk  ro  rq  r   r   r   r   rs  á  s   0
rs  Ú__main__)Qr  r\  rW  r~  r˜   r   r»  r½  r`  r7  Únumpyr   Zunittestrî  r   r   Z
numba.corer   Znumba.core.compilerr   Znumba.tests.supportr   r   r   Znumba.core.errorsr	   r�   r   r   r   r   r   r   r   r    r#   r'   r)   r-   r.   r1   r2   r6   r7   r<   r>   rH   rQ   rU   rV   rW   rX   rÎ  r¬   r«   rÑ  r°   r¯   re   rk   rt   rx   r{   r|   r‡   r¤   rØ  r  r%  r/  rC  rL  rM  rN  rO  r[  ZskipIfrD   rs  r„   Úmainr   r   r   r   Ú<module>   s    
	D     h a 7DKR



	2BK
