U
    9%e(                    @   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
mZ d dlZd dlZd dlZd dlmZ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. Z0d/d0 Z1d1d2 Z2d3d4 Z3d5d6 Z4d7d8 Z5d9d: Z6e5d;Z7e3d<Z8e4d=Z9e5d>Z:e3d?Z;e4d@Z<dAdB Z=dCdD Z>dEdF Z?dGdH Z@dIdJ ZAG dKdL dLeZBG dMdN dNeBZCG dOdP dPeBZDG dQdR dReBZEG dSdT dTeBZFG dUdV dVeBZGG dWdX dXeBZHG dYdZ dZeBZIed[d[d\d]d^ ZJd_ZKed[d[d\d`da ZLG dbdc dceZMG ddde deeMZNeOejPdfkdgG dhdi dieMZQG djdk dkeZReSdlkreT  dS )m    N)dedent)jit
_helperlibnjit)types)compile_isolated)TestCasecompile_functiontag)TypingErrorp  c                   C   s   t  S N)r   Zrnd_get_py_state_ptr r   r   V/var/www/html/Darija-Ai-API/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_randrange20   s    r    c                 C   s   t | ||S r   r   )r   r   cr   r   r   random_randrange33   s    r"   c                 C   s   t j| S r   r   r   choicer   r   r   r   numpy_choice16   s    r%   c                 C   s   t jj| |dS Nsizer#   r   r(   r   r   r   numpy_choice29   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    r0   c                 C   s   t jj| ||dS )N)r/   r(   r-   r.   r/   r(   r   r   r   numpy_multinomial3B   s    r2   c                 C   s   t jj| |dS r&   r   r   Z	dirichletalphar(   r   r   r   numpy_dirichletE   s    r6   c                 C   s   t j| S r   r3   )r5   r   r   r   numpy_dirichlet_defaultH   s    r7   c                 C   s   t jj| ||dS r&   r   r   Znoncentral_chisquaredfnoncr(   r   r   r   numpy_noncentral_chisquareK   s    r<   c                 C   s   t j| |S r   r8   )r:   r;   r   r   r   "numpy_noncentral_chisquare_defaultN   s    r=   c                 C   s>   t j|  t j||f}t j|  t j||}||fS r   )r   r   seedZrandr>   r   r   expectedgotr   r   r   numpy_check_randQ   s
    rB   c                 C   s>   t j|  t j||f}t j|  t j||}||fS r   )r   r   r>   standard_normalZrandnr?   r   r   r   numpy_check_randnX   s
    rD   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
    rN   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>h   s     z#jit_with_kwargs.<locals>.<listcomp>z	def func(z):
        return (z)
rE   TrF   )joinr	   rI   r   )rJ   Z
kwarg_listZcall_args_with_kwargs	signaturerL   rM   r   r   r   jit_with_kwargsf   s    
rX   c                 C   s
   t | dS )N rN   rJ   r   r   r   jit_nullaryp   s    r\   c                 C   s
   t | dS )Nr   rZ   r[   r   r   r   	jit_unarys   s    r]   c                 C   s
   t | dS )Nza, brZ   r[   r   r   r   
jit_binaryv   s    r^   c                 C   s
   t | dS )Nza, b, crZ   r[   r   r   r   jit_ternaryy   s    r_   random.gausszrandom.randomzrandom.seednp.random.normalnp.random.random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    rn   c                 C   s6   |   dd \}}t||dd |D f ||fS )z>
    Copy state of Numpy random *r* to Numba state *ptr*.
    rd      c                 S   s   g | ]}t |qS r   )intrR   xr   r   r   rT      s     z"_copy_np_state.<locals>.<listcomp>)	get_stater   rg   )ri   rj   rl   rm   r   r   r   _copy_np_state   s    rt   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 )Nre   r   ZMT19937uint32dtype)r           rd   )rf   lenAssertionErrorr   arrayr   Z	set_state)ri   _verZmt_stZ_gauss_nextZmt_posZmt_intsZnp_str   r   r   sync_to_numpy   s    
r}   c                 C   s   d|  |d d S )N       @      ?)gammavariate)ri   r:   r   r   r   py_chisquare   s    r   c                 C   s   t | || t | ||  S r   )r   )ri   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   Randomrn   selfrj   r>   ri   r   r   r   _follow_cpython   s    

zBaseTest._follow_cpythonc                 C   s   t j|}t|| |S r   )r   r   RandomStatert   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 )ro   r   rR   ir   r   r   rT      s     z6TestInternals._check_get_set_state.<locals>.<listcomp>)
r   rnd_get_stateassertIsInstancerp   rh   assertEqualry   Nrangerg   )r   rj   stater   rl   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 )Nrd   r   re   )r   r   rn   r   r   r   Zrnd_shufflerf   r   r   rh   )r   rj   ri   rl   rm   r   rk   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   rd   }   l    rd   r   )r   r   r   r>   ru   rs   rh   r   rz   r   rnd_seedr   r   )r   rj   ri   r   strl   rm   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   rd   )r   r   r   osurandomappendtupler   r   ry   set)r   rj   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
dddZdd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dd+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@dd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd 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   rd   r   l    r   rx   r   N)	r   r   r   r>   ru   r   r   assertPreciseEqualuniform)r   seedfunc
randomfuncri   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 Nnp.random.random_samplenp.random.ranfnp.random.sampleznp.random.rand)r   
numpy_seednumpy_randomr\   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   rx   r   )r   r   r   r>   ru   r   r   r   )r   r   r   ri   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   r]   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   rd   c                 S   s   g | ]
}t  qS r   )r   r   r   r   r   rT   5  s     z:TestRandom.test_independent_generators.<locals>.<listcomp>r   c                 S   s   g | ]
}t  qS r   )r   r   r   r   r   rT   7  s     c                 S   s   g | ]}t  t fqS r   )r   r   r   r   r   r   rT   :  s     c                 S   s   g | ]}|d  qS )r   r   rR   pr   r   r   rT   ;  s     c                 S   s   g | ]}|d  qS rd   r   r   r   r   r   rT   <  s     )r   r   r   r   )r   r   Z
py_numbersZ
np_numberspairsr   r   r   test_independent_generators1  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.
        rd   A   i re   N)r   r   getrandbitsr   assertRaisesOverflowError)r   rE   rj   ri   nbitsr@   rA   r   r   r   _check_getrandbits>  s    

zTestRandom._check_getrandbitsc                 C   s   |  tdt  d S )Nzrandom.getrandbits)r   r]   r   r   r   r   r   test_random_getrandbitsL  s    z"TestRandom.test_random_getrandbitsro   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   )argsrE   r   r   rT   X  s     z*TestRandom._check_dist.<locals>.<listcomp>c                    s&   g | ]}r d in  qS rv   r   r   )r   pydtyperM   r   r   rT   Y  s   for arguments %spreculpsmsgry   rz   r   r   )
r   rE   rM   Zargslistnitersr   r   r   results	pyresultsr   )r   rE   r   rM   r   _check_distT  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   )rE   kwargsr   r   rT   b  s     z1TestRandom._check_dist_kwargs.<locals>.<listcomp>c                    s,   g | ]$}rf  d inf  qS rv   r   r   )r   r   rM   r   r   rT   c  s   r   r   r   )
r   rE   rM   Z
kwargslistr   r   r   r   r   r   r   )rE   r   r   rM   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r   r   r~         ?g       r   r   r   r   r   r   )r   r   normalr   r   func2func1func0rj   ri   r   r   r   _check_gaussh  s    


zTestRandom._check_gaussc                 C   s   |  tdd d t  d S )Nr`   r   r^   r   r   r   r   r   test_random_gaussw  s    zTestRandom.test_random_gaussc                 C   s   |  tdd d t  d S )Nzrandom.normalvariater   r   r   r   r   test_random_normalvariatez  s    z$TestRandom.test_random_normalvariatec                 C   s"   |  tdtdtdt  d S )Nra   )r   r^   r]   r\   r   r   r   r   r   test_numpy_normal  s
    
zTestRandom.test_numpy_normalc                 C   s   |  d d tdt  d S )Nnp.random.standard_normalr   r\   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   r^   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 )Nnp.random.lognormal)r   r^   r]   r\   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   Nro   c                    s   g | ]}| k r|qS r   r   )rR   w	max_widthr   r   rT     s      z/TestRandom._check_randrange.<locals>.<listcomp>)rd   r        l                    )r   r   r      r      re   rd   )
r   r   r   r   r   r   r   r   r   
ValueError)r   r   r   func3rj   r   is_numpytprl   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   )rd   r   )   r   )   r   rd   r      r   N)
r   r   r   ry   r   r   r   r   r   r  )r   rE   rj   r   rl   r   ri   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   rE   rj   ri   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   rE   rj   distrib	paramlistri   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  r^   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  r^   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#  rX   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  rj   ri   r   r   r   _check_triangular  s    

zTestRandom._check_triangularc                 C   s   |  tdtdt  d S )Nzrandom.triangular)r/  r^   r_   r   r   r   r   r   test_random_triangular#  s    
z!TestRandom.test_random_triangularc                    s(   t d  fdd}| d |t  d S )Nnp.random.triangularc                    s    | ||S r   r   )lri   mr.  r   r   <lambda>*      z2TestRandom.test_numpy_triangular.<locals>.<lambda>)r_   r/  r   )r   Zfixed_triangularr   r4  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         @)r   r  r+  r  r   rx         )r   r   r   r   r   r  )r   r   r   rj   ri   r   r   r   _check_gammavariate-  s    

zTestRandom._check_gammavariatec                 C   s   |  tdd t  d S )Nzrandom.gammavariate)r;  r^   r   r   r   r   r   test_random_gammavariateB  s    z#TestRandom.test_random_gammavariatec                 C   s0   |  tdtdt  |  d tdt  d S )Nnp.random.gammanp.random.standard_gamma)r;  r^   r]   r   r   r   r   r   test_numpy_gammaF  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.
        r8  rx   r   r:  N)r   r   betavariater   r  r  r   r   r   _check_betavariateN  s    
zTestRandom._check_betavariatec                 C   s   |  tdt  d S )Nzrandom.betavariate)rA  r^   r   r   r   r   r   test_random_betavariate[  s    z"TestRandom.test_random_betavariatec                 C   s   |  tdt  d S )Nnp.random.beta)rA  r^   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.
        r8  N)r   r   vonmisesvariater  r   r   r   _check_vonmisesvariatea  s    
z!TestRandom._check_vonmisesvariatec                 C   s   |  tdt  d S )Nzrandom.vonmisesvariate)rF  r^   r   r   r   r   r   test_random_vonmisesvariateh  s    
z&TestRandom.test_random_vonmisesvariatec                 C   s   |  tdt  d S )Nnp.random.vonmises)rF  r^   r   r   r   r   r   test_numpy_vonmisesl  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  ro   rd   r   )r   N)r   r   r   exponential)r   rE   rj   ri   lambdr   r   r   r   _check_expovariatep  s    
zTestRandom._check_expovariatec                 C   s   |  tdt  d S )Nzrandom.expovariate)rL  r]   r   r   r   r   r   test_random_expovariate{  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   r   r  r   )r   r   rJ  )r   r   r   rj   ri   r   r   r   _check_exponential~  s
    
zTestRandom._check_exponentialc                 C   s   |  tdtdt  d S )Nnp.random.exponential)rP  r]   r\   r   r   r   r   r   test_numpy_exponential  s    
z!TestRandom.test_numpy_exponentialc                 C   s   |  d tdt  d S )Nnp.random.standard_exponential)rP  r\   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)rV  r]   r   r   r   r   r   test_random_paretovariate  s    z$TestRandom.test_random_paretovariatec                    s&   t d  fdd}| |t  d S )Nnp.random.paretoc                    s    | d S )Nr   r   r   paretor   r   r5    r6  z.TestRandom.test_numpy_pareto.<locals>.<lambda>)r]   rV  r   )r   Zfixed_paretor   rY  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.
        Nr8  ro   r9  r   )r   r   weibullvariater   r   )r   r   r   rj   ri   r   r   r   r   _check_weibullvariate  s    


z TestRandom._check_weibullvariatec                 C   s   |  tdd t  d S )Nzrandom.weibullvariate)r]  r^   r   r   r   r   r   test_random_weibullvariate  s    
 z%TestRandom.test_random_weibullvariatec                 C   s   |  d tdt  d S )Nnp.random.weibull)r]  r]   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 )Nnp.random.binomialr   )   g      ?)d     '  rx   r   )	g-C6?皙?皙?g9?r   g㈵ ?皙??H.?r   rd   ro   re   r   皙皙?)r^   r   r   r   binomialr   assertGreaterEqualassertLessEqualmathsqrtr   r  )r   rm  ri   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 )Nnp.random.chisquarerO  r9  )r]   r   r   r   	functoolspartialr   )r   	chisquareri   r   r   r   test_numpy_chisquare  s    
zTestRandom.test_numpy_chisquarec                 C   s2   t d}| t }| |tt|ddg d S )Nnp.random.fr   r  )r  rh  )r^   r   r   r   rv  rw  r   )r   fri   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 )Nnp.random.geometricg      rx   gjt?   c                    s   g | ]} d qS rN  r   r   Zgeomr   r   rT     s     z3TestRandom.test_numpy_geometric.<locals>.<listcomp>rd   c                    s   g | ]} d qS ri  r   r   r  r   r   rT     s     r   c                 S   s   g | ]}|d kr|qS )rd  r   r   r   r   r   rT     s      c                    s   g | ]} d qS )rg  r   r   r  r   r   rT     s     c                 S   s   g | ]}|d kr|qS )r  r   r   r   r   r   rT     s      c                    s   g | ]} d qS )g{Gz?r   r   r  r   r   rT     s     c                 S   s   g | ]}|d kr|qS )2   r   r   r   r   r   rT     s      c                    s   g | ]} d qS )gV瞯<r   r   r  r   r   rT     s     c                 S   s   g | ]}|d kr|qS )        r   r   r   r   r   rT     s      )
r]   r   r  r   r   countrn  
assertLessZassertFalse
assertTrue)r   r   ri   r.   r   r  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rx   r         r,  )r^   r   r   r   gumbel)r   r  ri   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 )Nr  locscaler  rx   r   )r  r  r  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 )Nnp.random.hypergeometricrd  r   r   )r   rd  r      r   c                    s   g | ]} d d dqS )rd  rc  r   r   hgr   r   rT   	  s     z8TestRandom.test_numpy_hypergeometric.<locals>.<listcomp>rc  c                 s   s   | ]}|d ko|dkV  qdS r   rc  Nr   rq   r   r   r   	<genexpr>
  s     z7TestRandom.test_numpy_hypergeometric.<locals>.<genexpr>g      D@g      N@c                    s   g | ]} d ddqS )rd  順 rc  r   r   r  r   r   rT     s     c                 s   s   | ]}|d ko|dkV  qdS r  r   rq   r   r   r   r    s           $@c                    s   g | ]} d ddqS )r  rd  rc  r   r   r  r   r   rT     s     c                 s   s   | ]}|d ko|dkV  qdS r  r   rq   r   r   r   r    s     g     V@)r_   r   r   r   hypergeometricr   r  allrn  r   meanro  r   ri   r   r  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 )Nnp.random.laplacer  r  rx   r  r   )r   r   r   r^   laplacer]   r\   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 )Nnp.random.logisticr  r  r  r  r   )r   r   r   r^   logisticr]   r\   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 )Nnp.random.logseriesrf  )gGz?)rj  r  r   rd   r>   c                    s   g | ]} d qS )g{?r   r   	logseriesr   r   rT   -  s     z3TestRandom.test_numpy_logseries.<locals>.<listcomp>r   ivxi- r  i  in i)l   &ci܀oirH i  rx   rk  rl  )	r   r   r]   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 )
Nnp.random.poissonr  r   r~   )r  )g     $@r  r   rk  )r   r   r]   r   poissonr   r  )r   ri   r  r   r   r   test_numpy_poisson4  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   np.random.negative_binomialc                    s   g | ]} d dqS )r   ri  r   r   Znegbinr   r   rT   @  s     z;TestRandom.test_numpy_negative_binomial.<locals>.<listcomp>r   r   ro   rd   r   c                    s   g | ]} d dqS )r   rf  r   r   r  r   r   rT   B  s     7   G   8   9   "   e   C   c                    s   g | ]} d dqS )rd  rf  r   r   r  r   r   rT   D  s     i#  i!  iy#  iL$  i"  i#  i#  iF"  i"  i#  c                    s   g | ]} d dqS )i ʚ;rf  r   r   r  r   r   rT   G  s   r  g   | Bg   $s Br   re   rk  rl  )r   r   r^   r   r   r   r  ZassertGreaterr  r   r  )r   r3  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 )Nnp.random.powerr  r   r  )g      @rx   rk  )r   r   r]   r   powerr   r  )r   ri   r  r   r   r   test_numpy_powerP  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 )	Nnp.random.rayleighr  rh  )g      9@)r  r   rx   rk  )r   r   r]   r\   r   rayleighr   r  )r   ri   Z	rayleigh1Z	rayleigh0r   r   r   test_numpy_rayleighX  s    

zTestRandom.test_numpy_rayleighc                 C   s*   |  t }td}| ||jdg d S )Nnp.random.standard_cauchyr   )r   r   r\   r   standard_cauchy)r   ri   Zcauchyr   r   r   test_numpy_standard_cauchyb  s    z%TestRandom.test_numpy_standard_cauchyc                    sD   |  t }td t fddtdD }| t|d d S )Nnp.random.standard_tc                    s   g | ]} d qS )r   r   r   Z
standard_tr   r   rT   m  s     z4TestRandom.test_numpy_standard_t.<locals>.<listcomp>r   r   )r   r   r]   r   r  r   r  abs)r   ri   avgr   r  r   test_numpy_standard_tg  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   )r~         @rx   r   rk  )r   r   r^   r   waldr   r  )r   ri   r  r   r   r   test_numpy_waldq  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  r  r  r   )r  r  r~   r  r  rx   rk  )rX   r#  r   r   r  )r   Znumba_versionr   r   r   test_numpy_wald_kwargsz  s    z!TestRandom.test_numpy_wald_kwargsc                 C   sH   |  t }td}| j||jddgdd dD ]}| t|| q0d S )Nnp.random.zipfrO  ru  rc  r   )r   r   rx   rk  )r   r   r]   r   zipfr   r  )r   ri   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  ro   rd   r   s   xyzN)r   arangereshaper   r   r   copyry   shapeshuffler   
memoryviewassertNotEqualrh   r   sortedZassertTypingError)r   rE   rj   r  arrsri   r   r   rA   r@   r   r   r   r   r     s&    


zTestRandom._check_shufflec                 C   s   |  tdt d d S )Nzrandom.shuffleF)r   r]   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   r]   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.
        zif 1:
            from numba.tests import test_random
            func = getattr(test_random, %(func_name)r)
            print(func(*%(func_args)r))
            ro   z-c)stdoutstderrr   z/process failed with code %s: stderr follows
%s
N)rH   r   r   
subprocessPopensys
executablePIPEcommunicate
returncoderz   decodeaddfloatstripr   ry   )	r   	func_nameZ	func_argsrL   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 ].}| }| |||| | || qd S )	Nznp.random.permutation)r   r      r  r   r   r      ro   $   )	r]   r   r   r   r  r  r   Zpermutationr  )r   rE   ri   sr   r   r  r   r   r   test_numpy_random_permutation  s     
z(TestRandom.test_numpy_random_permutation)ro   r   r   N)ro   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/  r0  r7  r;  r<  r?  rA  rB  rD  rF  rG  rI  rL  rM  rP  rR  rT  rV  rW  r[  r]  r^  r`  rs  ry  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     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)rV   rN   )r   funcnamenargsqualnamerK   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.
        rd   r   r   ro   r  r  r   r   r   r   r   N)	r  ry   r   r   r   rw   r   astyper   )
r   r  scalar_argscfuncri   rM   r(   r   r@   rA   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.
        rd   r   c                     s     S r   r   )_argsrM   Zpyfunc_argsr   r   r5    r6  z:TestRandomArrays._check_array_dist_gamma.<locals>.<lambda>r   r   r   r	  r  N)r  ry   r   r   r   r   r   emptyflatr   r(   )r   r  r  Zextra_pyfunc_argsr  ri   Zpyrandomr   r@   rA   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   r>   r   r   r   r   reset$  s    z6TestRandomArrays._check_array_dist_self.<locals>.resetrd   r   r  r  Nr  rv   r   r   r	  r   )numbar   r  ry   rV   rN   r   r  rw   r  r   r(   r   )r   r  r  r  Z
array_funcr  rK   Zscalar_funcr(   r   rA   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   ro   )rd  re  r  r  r  r  r   r  )r  r   r   ndarrayr   r  assertInrw   r  r  rn  r  ro  )r   r  r'  r(  r(   resr  rr  r   r   r   r  B  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   rd   r  float64rx   r   rf  ri  g?g?)r  r   r   r  r   r  rw   r  r  anyr  rn  ro  )r   r  r(   r  r  r   r   r   test_numpy_random_randomR  s    z)TestRandomArrays.test_numpy_random_randomc                 C   s   |  dd d S )Nbetar8  r  r   r   r   r   rD  f  s    z TestRandomArrays.test_numpy_betac                 C   s   |  dd d S )Nrm  )r  r   r  r   r   r   r   rs  i  s    z$TestRandomArrays.test_numpy_binomialc                 C   s   |  dd d S )Nrx  rO  r  r   r   r   r   ry  l  s    z%TestRandomArrays.test_numpy_chisquarec                 C   s   |  dd d S )NrJ  rO  r   r   r   r   r   rR  o  s    z'TestRandomArrays.test_numpy_exponentialc                 C   s   |  dd d S )Nr|  r{  r  r   r   r   r   r}  r  s    zTestRandomArrays.test_numpy_fc                 C   s   |  ddd d S )Ngamma)r~   r   r   r  r   r   r   r   r?  u  s    z!TestRandomArrays.test_numpy_gammac                 C   s   |  dd d S )NZ	geometricrN  r   r   r   r   r   r  x  s    z%TestRandomArrays.test_numpy_geometricc                 C   s   |  dd d S )Nr  r  r   r   r   r   r   r   r  {  s    z"TestRandomArrays.test_numpy_gumbelc                 C   s   |  dd d S )Nr  r  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  r~   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   r~   r   r   r   r   r   r     s    z"TestRandomArrays.test_numpy_normalc                 C   s   |  dd d S )NrZ  r   r   r   r   r   r   r[    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 NTrF   *   r   ro   r  )r   rB   r   r  r   r   r  r@   rA   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   rD   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   rT    s    z0TestRandomArrays.test_numpy_standard_exponentialc                 C   s   |  ddd d S )NZstandard_gammar  rN  r"  r   r   r   r   test_numpy_standard_gamma  s    z*TestRandomArrays.test_numpy_standard_gammac                 C   s   |  dd d S )NrC   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   r7    s    z&TestRandomArrays.test_numpy_triangularc                 C   s   |  dd d S )Nr   rf  rg  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vonmisesr8  r  r   r   r   r   rI    s    z$TestRandomArrays.test_numpy_vonmisesc                 C   s   |  dd d S )Nr  ru  r   r   r   r   r   r    s    z TestRandomArrays.test_numpy_zipfN)'r   r   r   r   r  r  r  r  r  r  rD  rs  ry  rR  r}  r?  r  r  r  r  r  r   r  r   r[  r  r  r'  r   r  r  rT  r(  r   r7  r&  r  rI  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   ro  r  r  rh   r  ry   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.
        rc  r   r~   N)rn  ry   collectionsCounterro  )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)ry   rh   r  )r   rE   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.
        TrF   c                    s   g | ]} qS r   r   r   r   r  r   r   rT     s     z4TestRandomChoice._check_choice_1.<locals>.<listcomp>c                    s   g | ]} qS r   r   r   r3  r   r   rT     s     rc  N)r   r%   ry   r   r-  r   )r   r   r+  r.   r  distr   r3  r   _check_choice_1  s    z TestRandomChoice._check_choice_1c                 C   s    d}t t|}| || dS )z"
        Test choice(int)
        r  N)rh   r   r5  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)
        r  r   rc  N)r   r  r5  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.
        rc  N)ry   rh   r  r-  r2  r   )r   rE   r+  r+   r.   r  r4  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.
        TrF   r   ro   rd   c                      s
    S r   r   r   r   r  r(   r   r   r5  &  r6  z2TestRandomChoice._check_choice_2.<locals>.<lambda>N)r   r*   ry   
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)
        r  Nr   r  r?  r6  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)
        r  r   rc  Nr@  r8  r   r   r   test_choice_array_20  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 qdS )z=
        Check choice(a, size, replace) against pop.
        TrF   r   ro   rd   F)TFc                      s    dS )NTr   r   r;  r   r   r5  K  r6  z2TestRandomChoice._check_choice_3.<locals>.<lambda>c                      s    dS )NFr   r   r;  r   r   r5  N  r6  N)
r   r,   ry   r<  r   r   r  r:  r   r  )	r   r   r+  r.   r=  Zreplacesr+   r  r>  r   r;  r   _check_choice_37  s     z TestRandomChoice._check_choice_3c                 C   s   d}t |}| || dS )z1
        Test choice(int, size, replace)
        r  Nr   r  rC  r6  r   r   r   test_choice_scalar_3U  s    
z%TestRandomChoice.test_choice_scalar_3c                 C   s"   t dd d }| || dS )z3
        Test choice(array, size, replace)
        r  r   rc  NrD  r8  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 )	NTrF   c                 S   sD   t jd t | dft j}t| D ]}t j|dd||< q&|S )Ni9  r   F)r   r   r>   r  r  r   r$   )Zn_to_returnchoice_arrayr  r   r   r   r   numba_randsg  s
    z>TestRandomChoice.test_choice_follows_seed.<locals>.numba_randsi,  rd  r'   r   )
r   r   r   r   r
  r  r  Zpy_functestingassert_allclose)r   rH  rG  Ztmp_npr@   Ztmp_nbrA   r   r   r   test_choice_follows_seedd  s    

z)TestRandomChoice.test_choice_follows_seedN)T)T)r   r   r   r   r-  r   r2  r5  r7  r9  r:  r?  rA  rB  rC  rE  rF  rK  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.
    rd   r   ro   rv   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   r~   N)r   r   r  r   r  ry   r  rw   sumziprn  ro  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)
        TrF   rd  i@B rd   r   rc  rv   N)	r   r0   r/   rP  rh   r   r{   r  rM  )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)
        TrF   rd  r   r   N)r   r2   r/   r   r  rP  r   r  r.   r/   kr  rO  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)
        TrF   rd  )ro   r  Nre   )r   r2   r/   r   r  r  rP  rR  r   r   r   test_multinomial_3_tuple  s    z.TestRandomMultinomial.test_multinomial_3_tupleN)r   r   r   r   r   r{   r  r/   rM  rP  rQ  rT  rU  r   r   r   r   rL  z  s   rL  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 )TestRandomDirichletrd   r   rv   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 qdS )zCheck output structureNr   rd   r   )Zplacesre   )Zaxis)r   r   r  r   rw   r  r(   ry   typerp   r  nditerrn  ro  ZassertAlmostEqualrM  )r   r5   r(   rO  r  Ztotalsr   r   r   rP    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)
        TrF   rd   re  rv   r  N)r   r7   r5   r   r   r{   r  rP  )r   r  alphasr5   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 )	rY  TrF   )Nr   r   r   rd   re  rv   r  N)
r   r6   r5   r   r   r{   r  	itertoolsproductrP  )r   r  r=  rZ  r5   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 )NTrF   )r   rd   rd   rd   zdirichlet: alpha must be > 0.0              @r  r  rd   ra  rd   ra  ra  ro   r  zGnp.random.dirichlet(): size should be int or tuple of ints or None, got)r   r6   r   r   r  r  str	exceptionr5   r   int8r  r   )r   r  r5   raisesr=  r(   r   r   r   test_dirichlet_exceptions  s    "z-TestRandomDirichlet.test_dirichlet_exceptionsN)r   r   r   r   r{   r  r5   rP  r[  r`  ri  r   r   r   r   rV    s
   rV  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   rw   r  r<  rp   r  r  rX  rn  )r   r(   rO  r  r   r   r   rP    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)
        TrF   )r   rd   r  )r   rd   )r  rd   )rd   re  N)r   r=   rP  r   nanr  isnan)r   r  inputsr:   r;   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)
        TrF   )Nr   r\  r]  rl  N)
r   r<   r^  r_  rP  r   rm  r  rn  r  )r   r  r=  ro  r:   r;   r(   r  r   r   r   test_noncentral_chisquare0  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 qd S )NTrF   )r   rd   rd   zdf <= 0)rd   re   znonc < 0)rd   rd   ra  r  rb  rc  rd  ro   r  zRnp.random.noncentral_chisquare(): size should be int or tuple of ints or None, got)r   r<   r   r  r  re  rf  r   rg  r  r   )r   r  r:   r;   rh  r=  r(   r   r   r   $test_noncentral_chisquare_exceptionsD  s$    "zBTestRandomNoncentralChiSquare.test_noncentral_chisquare_exceptionsN)r   r   r   rP  rp  rq  rr  r   r   r   r   rj  	  s   rj  T)rG   Znogilc                 C   s4   | dkrt |  t|jD ]}t d||< qd S )Nr   r  )r   r>   r   r(   r   )r>   r  r   r   r   r   py_extract_randomness[  s    
rs  r  c                 C   s<   | dkrt j|  d}t|jD ]}t jt||< q"d S rk  )r   r   r>   r   r(   r   _randint_limit)r>   r  r  r   r   r   r   np_extract_randomnessd  s
    ru  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%  rd   )_get_outputrs  ru  )r   r   r   r   r   setUpv  s    zConcurrencyBaseTest.setUpc                 C   s   t j|t jdS )Nrv   )r   Zzerosru   )r   r(   r   r   r   rw  |  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  r  r   g?)rtolN)r   rq  rI  rJ  r  Zstd)r   r  Zexpected_avgZexpected_stdry  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 )Nrd   c                 S   s   h | ]}t |d d qS )Nr   r   rR   r  r   r   r   	<setcomp>  s     z<ConcurrencyBaseTest.check_several_outputs.<locals>.<setcomp>c                 S   s   h | ]}t |d d qS )r   Nr{  r|  r   r   r   r}    s     c                 S   s   h | ]}|  qS r   )rM  r|  r   r   r   r}    s     )rz  ry   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_iterationsrx  rw  rz  r  r   r   r   r   rv  n  s
   rv  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   rw  r  r   r   r   r   rT     s   z2TestThreads.extract_in_threads.<locals>.<listcomp>rd   c                    s    |  d d S )Nr>   r  r   )r   )extract_randomnessr   r>   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   rT     s   )r   startrV   )r   Znthreadsr  r>   threadsthr   )r  r   r>   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r~  Nr  r  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  Fr  Nr  r  r   r   r   check_implicit_initialization  s    z)TestThreads.check_implicit_initializationc                 C   s   |  t d S r   )r  rs  r   r   r   r   test_py_thread_safety  s    z!TestThreads.test_py_thread_safetyc                 C   s   |  t d S r   )r  ru  r   r   r   r   test_np_thread_safety  s    z!TestThreads.test_np_thread_safetyc                 C   s   |  t d S r   r  rs  r   r   r   r   test_py_implicit_initialization  s    z+TestThreads.test_py_implicit_initializationc                 C   s   |  t d S r   r  ru  r   r   r   r   test_np_implicit_initialization  s    z+TestThreads.test_np_implicit_initializationN)r   r   r   r   r  r  r  r  r  r  r  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)qr  r   r   r    s    
z2TestProcesses.extract_in_processes.<locals>.targetget_contextforkc                    s   g | ]} j d qS )r  )Processr   )mpcr  r   r   rT   	  s   z6TestProcesses.extract_in_processes.<locals>.<listcomp>r   )timeoutzException in child: %s)multiprocessingQueuehasattrr  r   r  r   getrV   r<  r  Zfail)r   Znprocsr  r   Zprocsr   r   r  r   )r  r  r  r   r  r  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   Fr  N)r  r  r  r   r   r   r    s    z+TestProcesses.check_implicit_initializationc                 C   s   |  t d S r   r  r   r   r   r   r  '  s    z-TestProcesses.test_py_implicit_initializationc                 C   s   |  t d S r   r  r   r   r   r   r  *  s    z-TestProcesses.test_np_implicit_initializationN)	r   r   r   r   Z_numba_parallel_test_r  r  r  r  r   r   r   r   r    s   0
r  c                   @   s   e Zd Zdd ZdS )TestNumPyRandomAPIc              *   C   s  dddddddddddd	dd
ddddddddddd	dddddddddddddddddddddddddddddddddddddddddddddddd
dddddd
dd	ddddiddiddidddddiddiddiddidddddidddddd dd!dddddddd"dddd#ddd
ddd
d$(}|  D ]h\}}d%d&d' |  D }td(| d)| d*}i }t|d+ti| |d, }|  t|d- qdd S ).Nr   r~   ro   )r   r   r(   rd   g333333?)r.   r   r(   )r:   r(   r   r)   )r   r4   )r  r(   )ZdfnumZdfdenr(   )r  r  r(   )r   r(   rx   )r  r  r(   )ZngoodZnbadZnsampler(   )r  sigmar(   r   r   r1   )r.   r   r9   )Zlamr(   )r'  r(  r(   r(   r>   r  )r  r(   g      @)leftmoderightr(   )mukappar(   )r  r  r(   )(rC  ra  rt  znp.random.choiceznp.random.dirichletrQ  rz  r=  r~  r  r  r  r  r   r  znp.random.multinomialr  znp.random.noncentral_chisquarera   rX  r  r  znp.random.randintrb   r   r   r  r   rc   r  rS  r>  r   r  r1  r%  rH  r  r_  r  r  c                 S   s   g | ]\}}| d | qS rP   r   )rR   rS  vr   r   r   rT   q  s     z8TestNumPyRandomAPI.test_call_by_name.<locals>.<listcomp>z7
                def foo():
                    return rU   z)
                r   Zfoor   )itemsrV   r   execr   r   compile)r   datafnr   Zargstrtemplater2  rE   r   r   r   test_call_by_name0  sx    	




 








7
z$TestNumPyRandomAPI.test_call_by_nameN)r   r   r   r  r   r   r   r   r  .  s   r  __main__)Ur/  rv  rp  r  r   r   r  r  r  r^  textwrapr   numpyr   Zunittestr  r   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,   r0   r2   r6   r7   r<   r=   rB   rD   rN   rX   r\   r]   r^   r_   r  r   r   r  r   r   rn   rt   r}   r   r   r   r   r   r  r*  rL  rV  rj  rs  rt  ru  rv  r  ZskipIfrJ   r  r  r   mainr   r   r   r   <module>   s   
	D     h a 7DKR



	2BKS
