U
    cH                    @   sL  d dl Z d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZmZmZmZ ee Zd ddddd	d
dddddddddddddddgddddddddgZejdddgddd  ZG d!d" d"ZG d#d$ d$ZG d%d& d&ZG d'd( d(ZG d)d* d*ZG d+d, d,Z G d-d. d.Z!G d/d0 d0Z"ej#j$ed1d2G d3d4 d4Z%G d5d6 d6Z&ej#'d7ed8d9 Z(d:d; Z)d<d= Z*d>d? Z+ej#'d@dAdAggej#'d ddgdBdC Z,ej#'dDdEdFgdGdH Z-ej#'dDdEdFgej#'dIdJdKgej#'dLej.ejgdMdN Z/dOdP Z0dS )Q    N)LinAlgError)
assert_assert_raisesassert_equalassert_allcloseassert_warnsassert_no_warningsassert_array_equalassert_array_almost_equalsuppress_warningsIS_WASM)	GeneratorMT19937SeedSequenceRandomState
   Z@bb1636883c2707b51c5b7fc26c6927af4430f2e0785a8c7bc886337f919f9edf	   )
key_sha256posZ@ff682ac12bb140f2d72fba8d3506cf4e46817a0db27aae1683867629031d8d55iV  )seedstepsinitialjumpedi$<i8  Z@16b791a1e04886ccbbb4d448d6ff791267dc458ae599475d08d5cced29d11614i7  Z@a0110a2cf23b56be0feaed8f787a7fc84bef0cb5623003d75b26bdfa1c18002ci  i|2iEm:iS43i5  i  Z@d306cf01314d51bd37892d874308200951a35265ede54d200f1e065004c3e9eai  Z@0e00ab449f01a5195a83b4aee0dfbc2ce8d46466a640b92e33977d2e42f777f8i  moduleTF)Zscopeparamsc                 C   s   | j S N)param)request r   M/tmp/pip-unpacked-wheel-1pi10zg0/numpy/random/tests/test_generator_mt19937.pyendpoint&   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S )TestSeedc                 C   s<   t td}t|dd t td}t|dd d S )Nr           D  )r   r   r   integersselfsr   r   r   test_scalar,   s    zTestSeed.test_scalarc                 C   s   t ttd}t|dd t ttd}t|dd t tdg}t|dd t tdg}t|dd d S )Nr   r"   i  r   r#   r$   r%   )r   r   ranger   r&   nparanger'   r   r   r   
test_array2   s    zTestSeed.test_arrayc                 C   s    t td}t|dd d S )Nr      iz)r   r   r   
random_rawr'   r   r   r   test_seedsequence<   s    zTestSeed.test_seedsequencec                 C   s   t ttd t ttd d S )N      r   	TypeErrorr   
ValueErrorr(   r   r   r   test_invalid_scalar@   s    zTestSeed.test_invalid_scalarc                 C   s2   t ttdg t ttdg t ttdddg d S )Nr2   r3   r/           r4   r7   r   r   r   test_invalid_arrayE   s    zTestSeed.test_invalid_arrayc                 C   s   t ttt d S r   )r   r6   r   r   r7   r   r   r   test_noninstantized_bitgenK   s    z#TestSeed.test_noninstantized_bitgenN)	__name__
__module____qualname__r*   r.   r1   r8   r;   r<   r   r   r   r   r!   +   s   
r!   c                   @   s   e Zd Zdd Zdd ZdS )TestBinomialc                 C   sB   t jddd}dD ]*}ttd|dk tt||| qd S )N   intdtype)r         ?r/   r   )r,   zerosr   randombinomialr	   )r(   rF   pr   r   r   test_n_zeroP   s    zTestBinomial.test_n_zeroc                 C   s   t ttjdtj d S )Nr/   )r   r6   rG   rH   r,   nanr7   r   r   r   test_p_is_nanY   s    zTestBinomial.test_p_is_nanN)r=   r>   r?   rJ   rL   r   r   r   r   r@   O   s   	r@   c                   @   sL   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S )TestMultinomialc                 C   s   t dddg d S )Nd   皙?皙?rG   multinomialr7   r   r   r   
test_basic_   s    zTestMultinomial.test_basicc                 C   s   t ddddddg d S )NrN   rO   rP           rQ   r7   r   r   r   test_zero_probabilityb   s    z%TestMultinomial.test_zero_probabilityc                 C   sZ   t dtdd  kodk n   tddd}t td|k t t|dk  d S )Nr3      )r   rG   r&   r,   allr(   xr   r   r   test_int_negative_intervale   s    $z*TestMultinomial.test_int_negative_intervalc                 C   s   ddg}t td|tdjd t td|tdjd t td|tdjd t td|ddgjd t td|djd t td|tdjd tttjd|t	d d S )NrE   r/   r/   rA   rA   rA   rA   rA   rA   rA   )
r   rG   rR   r,   uint32shapearrayr   r5   floatr(   rI   r   r   r   	test_sizek   s    zTestMultinomial.test_sizec                 C   s,   t ttjdddg t ttjdddg d S )NrN   皙?rO   皙?r   r6   rG   rR   r7   r   r   r   test_invalid_proby   s    z!TestMultinomial.test_invalid_probc                 C   s2   t ttjdddg t ttjdgd ddg d S )Nr3   rP   rO   r   rh   r7   r   r   r   test_invalid_n}   s    zTestMultinomial.test_invalid_nc                 C   sx   t d}|t |dd d  }|dd d }ttd}|jd|d}ttd}|jdt |d}t|| d S )Ng      .@r/      ۠iUrN   )pvals)r,   r-   sumr   r   rR   ascontiguousarrayr	   )r(   rI   rm   rG   
non_contigcontigr   r   r   test_p_non_contiguous   s    
z%TestMultinomial.test_p_non_contiguousc                 C   sj   t jddddddddddg
t jd}||  }ttd}d}tjt|d |	d| W 5 Q R X d S )NgGz?&.>rC   rl   z-[\w\s]*pvals array is cast to 64-bit floatingmatchr/   )
r,   ra   float32rn   r   r   pytestraisesr6   rR   )r(   rZ   rm   rG   ru   r   r   r   test_multinomial_pvals_float32   s       z.TestMultinomial.test_multinomial_pvals_float32N)r=   r>   r?   rS   rU   r[   rd   ri   rj   rr   ry   r   r   r   r   rM   ^   s   
rM   c                   @   s   e Zd Zdd Zdd Zejdddgdd	 Zejd
ddddgejdddgejddddgdd Z	dd Z
dd Zdd ZdS )TestMultivariateHypergeometricc                 C   s
   d| _ d S )Ni_ r   r7   r   r   r   setup_method   s    z+TestMultivariateHypergeometric.setup_methodc                 C   s   t ttjdd t ttjdddgd t ttjdddgd t ttjdddgd t ttjg d t ttjddgd	dd
 ttj}|j}||jj	 }t ttj|d dgd	dd d S )Nr      rA   rk   r3   r/   iɚ;e   rW   	marginalsrN   count)
r   r6   rG   multivariate_hypergeometricr,   iinfoint64maxrD   itemsize)r(   Z
int64_infoZ	max_int64Zmax_int64_indexr   r   r   test_argument_validation   sF            
   z7TestMultivariateHypergeometric.test_argument_validationmethodr   r   c                 C   s   t t| j}|jdddgd|d}t|dddg |jg d|d}t|g  |jg dd|d}t|tjdtjd |jdddgd|d}t|dddg |jd	ddgd|d}t|dddg dddddg}|j|t||d}t|| |jdd
dgdd|d}t|dd
dggd  d S )Nr   r   r/   sizer   )r/   r   rC   rA   rk   r   r}   rW      )	r   r   r   r   r	   r,   emptyr   rn   )r(   r   rG   rZ   colorsr   r   r   test_edge_cases   s(    

z.TestMultivariateHypergeometric.test_edge_casesnsample      -   7   r   rW   rA   rk   iI c                 C   s   t t| j}tddddg}|j||||d}t|trJ|f|j }n
||j }t	|j| t
|dk  t
||k  t|jddtj||td	 t|tr|d
krt|jdd|| |  ddd d S )Nr   rW      r   r   r   r3   axis)Z
fill_valuerD   順 MbP?g{Gzt?)rtolZatol)r   r   r   r,   ra   r   
isinstancerB   r`   r   r   rX   r	   rn   fullr   mean)r(   r   r   r   rG   r   sampleexpected_shaper   r   r   test_typical_cases   s(    


 z1TestMultivariateHypergeometric.test_typical_casesc              	   C   sf   t t| j}|jdddgdddd}tdddgdddgdddgdddgdddgg}t|| d S )	Nrk   r}   rW   r   r   rA   r/   r   r   r   r   r   r,   ra   r	   r(   rG   r   expectedr   r   r   test_repeatability1   s    z2TestMultivariateHypergeometric.test_repeatability1c              	   C   sf   t t| j}|jdddgdddd}tddd	gd
ddgdddgddd	gddd	gg}t|| d S )Nr      2   rW   r   r   r                     r      r   r   r   r   r   test_repeatability2  s    z2TestMultivariateHypergeometric.test_repeatability2c              	   C   sf   t t| j}|jdddgdddd}tdd	d
gdd	dgdddgdd	dgdddgg}t|| d S )Nr   r   r   r   rW   r   r   rA   rk   r   r}   r/      r   r   r   r   r   test_repeatability3  s    z2TestMultivariateHypergeometric.test_repeatability3N)r=   r>   r?   r|   r   rw   markparametrizer   r   r   r   r   r   r   r   r   rz      s   !
"rz   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestSetStatec                 C   sT   d| _ tt| j | _| jj| _| jj| _| jd | jd d | jd d f| _d S )NIbit_generatorstatekeyr   )r   r   r   rgr   r   Zlegacy_stater7   r   r   r   r|     s    

zTestSetState.setup_methodc                 C   s<   | j jdd}| j| j_| j jdd}tt||k d S Nrk   r   )r   standard_normalr   r   r   r,   rX   )r(   oldnewr   r   r   test_gaussian_reset$  s    
z TestSetState.test_gaussian_resetc                 C   sL   | j   | jj}| j jdd}|| j_| j jdd}tt||k d S r   )r   r   r   r   r   r,   rX   )r(   r   r   r   r   r   r    test_gaussian_reset_in_media_res+  s    
z-TestSetState.test_gaussian_reset_in_media_resc                 C   s   | j dd d S NrE   )r   negative_binomialr7   r   r   r   test_negative_binomial6  s    z#TestSetState.test_negative_binomialN)r=   r>   r?   r|   r   r   r   r   r   r   r   r     s   	r   c                   @   sz  e Zd ZejZeejej	ej
ejejejejejg	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ejddedddddddgfd ed!d"d#d$d%d&d'gfd(ed!d#d)d*d+d,d-gfgd.d/ Z d0d1 Z!d2d3 Z"d4d5 Z#d6d7 Z$d8d9 Z%d:d; Z&d<d= Z'ejj(ejd>d?d@ejdAfd?dBej	dCfdDdEej
dFfdGdHejdIfgdJdK Z)dLS )MTestIntegersc                 C   s   t t| jd|td d S Nr/   r    rD   )r   r5   rfuncrb   )r(   r    r   r   r   test_unsupported_typeC  s    z"TestIntegers.test_unsupported_typec              	   C   s"  | j D ]}|tkrdn
t|j}|tkr0dnt|jd }|rL|d n|}tt| j|d |||d tt| j||d ||d tt| j||||d tt| jdd||d tt| j|d g|||d tt| j|g|d g||d tt| j|g|g||d tt| jddg||d qd S Nr   rA   r/   r   	itypeboolr,   r   minr   r   r6   r   r(   r    dtlbndubndr   r   r   test_bounds_checkingF  sF           z!TestIntegers.test_bounds_checkingc              	   C   s   | j D ]}|tkrdn
t|j}|tkr.dnt|j|  }tt| j|d gd |gd ||d tt| j|gd |d gd ||d tt| j||gd ||d tt| jdgd d||d qd S r   r   r   r   r   r   test_bounds_checking_array]  s(    
     z'TestIntegers.test_bounds_checking_arrayc              	   C   s0  | j D ]"}|tkrdn
t|j}|tkr0dnt|jd }|rL|d n|}| }|d }t| j||| d||d| t| j|g|| d||d| |}t| j||| d||d| t| j||| gd||d| || d }t| j||| d||d| t| j|g|| gd||d| qd S )Nr   rA   r/   r"   r   r    rD   r   r   r,   r   r   r   r   r   )r(   r    r   r   r   Zis_opentgtr   r   r   test_rng_zero_and_extremesk  sZ           z'TestIntegers.test_rng_zero_and_extremesc                 C   s  d}| j D ]}|tkrdn
t|j}|tkr4dnt|jd }|rP|d n|}|d }t| j|g|d g||d| t| j|g| |d g| |d| t| j|g| |d g| ||d| |}t| j|g|d g||d| t| j|g| |d g| |d| t| j|g| |d g| ||d| || d }t| j|g|d g||d| t| j|g| |d g| |d| t| j|g| |d g| ||d| q
d S )Nr"   r   rA   r/   r   rD   rC   r   )r(   r    r   r   r   r   r   r   r   r    test_rng_zero_and_extremes_array  s                      z-TestIntegers.test_rng_zero_and_extremes_arrayc                 C   s   | j D ]}|tkrdn
t|j}|tkr.dnt|jd }|rJ|d n|}z| j||||d W q tk
r } ztdt	| W 5 d }~X Y qX qd S Nr   rA   r/   r   zMNo error should have been raised, but one was with the following message:

%s
r   r   r,   r   r   r   r   	ExceptionAssertionErrorstrr(   r    r   r   r   er   r   r   test_full_range  s    
zTestIntegers.test_full_rangec                 C   s   | j D ]}|tkrdn
t|j}|tkr.dnt|jd }|rJ|d n|}z| j|gd |g||d W q tk
r } ztdt	| W 5 d }~X Y qX qd S r   r   r   r   r   r   test_full_range_array  s    
z"TestIntegers.test_full_range_arrayc              	   C   s   t t }| jdd  D ]F}dD ]<}| jd|| d||d}t| |k  t| dk q q| jdd| d|td}t| dk  t| dk d S )Nr/   )r}   r      rA   i   r   r   )r   r   r   r   r   r   r   r   )r(   r    rG   r   r   valsr   r   r   test_in_bounds_fuzz  s    
 z TestIntegers.test_in_bounds_fuzzc           
      C   s   | j D ]}|tkrdn
t|j}|tkr.dnt|jd }|rJ|d n|}d}ttd}|j|||||d}ttd}|j|g|g|||d}ttd}|j|g| |g| |||d}	t	|| t	||	 qd S )Nr   rA   r/   r"     r   )
r   r   r,   r   r   r   r   r   r&   r	   )
r(   r    r   r   r   r   rG   ZscalarZscalar_arrayra   r   r   r   test_scalar_array_equiv  s0    
   
z$TestIntegers.test_scalar_array_equivc              
   C   s   dddddddddd	}| j dd  D ]v}ttd}tjd	krZ|jd
d| d||d}n|jd
d| d||d }t|	 }t
|t|j |k q&ttd}|jd
d| d|tdtj}t|	 }t
|ttj |k d S )NZ@053594a9b82d656f967c54869bc6970aa0358cf94ad469c81478459c6a90eee3Z@54de9072b6ee9ff7f20b58329556a46a447a8a29d67db51201bf88baa6e4e5d4Z@d3a0d5efb04542b25ac712e50d21f39ac30f312a5052e9bbb1ad3baa791ac84bZ@14e224389ac4580bfbdccb5697d6190b496f91227cf67df60989de3d546389b1Z@0e203226ff3fbbd1580f15da4621e5f7164d0d8d6b51696dd42d004ece2cbec1)	r   int16int32r   int8uint16r_   uint64uint8r/   r   littler   r   r"   r   rA   )r   r   r   sys	byteorderr&   byteswaphashlibsha256	hexdigestr   r,   rD   namer   viewr   )r(   r    r   r   rG   valresr   r   r   test_repeatability  s:    


zTestIntegers.test_repeatabilityc                 C   s   | j D ]}|ttjfkrdn
t|j}|ttjfkr:dnt|jd }|rV|d n|}ttd}|j	||d||d}ttd}|j	|gd |||d}t
|| ttd}|j	|gd |gd ||d}t
|| qd S )Nr   rA   r/   r   r"   r   r   )r   r   r,   bool_r   r   r   r   r   r&   r	   )r(   r    r   r   r   rG   r   Zval_bcr   r   r   test_repeatability_broadcasting
  s&    
"
 z,TestIntegers.test_repeatability_broadcastingzbound, expectedr$   iui,YQiXgi$#Pl   bA i{El   /Yi r:   iui,YQiXgi%#Pl   bA i|El   0Yi        l   bA l   1Yi i{,miuHl   HM c                 C   sJ   d t |fD ]8}ttd}|j||d}t||d k	r:|n|d  qd S )Nr   r   r   )lenr   r   r&   r   )r(   boundr   r   rG   rZ   r   r   r   !test_repeatability_32bit_boundary!  s    
z.TestIntegers.test_repeatability_32bit_boundaryc                 C   s   t dddgdddgddd	ggd
ddgdddgdddggdddgdddgdddggdddgdd d!gd"d#d$ggd%d&d'gd(d)d*gd+d,d-ggg}d.D ]L}ttd/}|jd0gd1gd2ggd3d4d5g|d6}t||d k	r|n|d1  qd S )7Ni
`l   Y/ i0bi)H{TiP-iTql   C iZ'l   !g l   k40 l   n2c l   DBJ i|(iy+l   _&A ip@GiG^l   J|xK l   
f l   Dmv l   E"g i>{l   wT2L iJQiQ//itLol   k i\siJii=l   }D l   E9l l   
+x i#Jl   b i0i7Ol   rn ixiiAi.tl   q/q i;-/i)N)rW   rk   rk   i90  r3   r   r/   r$   r:   r   r   )r,   ra   r   r   r&   r	   )r(   desiredr   rG   rZ   r   r   r   .test_repeatability_32bit_boundary_broadcasting0  s8    z;TestIntegers.test_repeatability_32bit_boundary_broadcastingc              
   C   s4  t jddd fdddft jdi}|D ]}|| D ]}|\}}|| }t |gd g}t |gd }tttj||||d	 tttj||||d	 tttj||||d	 tttj||||d	 t j|gd gtd
}	t j|gd td
}
tttj|	|||d	 tttj||
||d	 tttj|	|
||d	 q2q$d S )Nr   rA   A   )r3               r   r   r   r   ))r   l            )l         r  r  r  )        r  r   r   rC   )	r,   r   r   ra   r   r6   rG   r&   object)r(   r    ZconfigsrD   configlowhighZlow_aZhigh_aZlow_oZhigh_or   r   r   &test_int64_uint64_broadcast_exceptionsG  sP     
       z3TestIntegers.test_int64_uint64_broadcast_exceptionsc                 C   sd   t j}t t jj}t t t jj}t t t jjd | }tj||||d}t|| d S r   )r,   r   r   r   r   rG   r&   r   )r(   r    r   r   r   r   actualr   r   r   test_int64_uint64_corner_casec  s    z*TestIntegers.test_int64_uint64_corner_casec                 C   s
  | j D ]x}|tkrdn
t|j}|tkr.dnt|jd }|rJ|d n|}|tkr\tjn|}| j||||d}t|j	| qtt
tjjfD ]v}|tkrdn
t|j}|tkrdnt|jd }|r|d n|}| j||||d}t|drttt|| qd S )Nr   rA   r/   r   rD   )r   r   r,   r   r   r   r   r   r   rD   rB   compatlonghasattrr   typer(   r    r   r   r   r   r   r   r   test_respect_dtype_singletonz  s    
z)TestIntegers.test_respect_dtype_singletonc                 C   s   | j D ]}|tkrdn
t|j}|tkr.dnt|jd }|rJ|d n|}|tkr\tjn|}| j|g|g||d}t|j	| | j|gd |gd ||d}t|j	| qd S r   )
r   r   r,   r   r   r   r   r   r   rD   r  r   r   r   test_respect_dtype_array  s    
z%TestIntegers.test_respect_dtype_arrayc                 C   s   | j D ]}| jddd||d}|jdks,t|j|ks:t| jddd||djdksXtttjddddjd ttjddddjd ttjddddjd qd S )Nr   rk   r   r}   r   r   r   r   )r   r   r`   r   rD   r   rG   r&   )r(   r    r   r   r   r   r   test_zero_size  s    
zTestIntegers.test_zero_sizec              	   C   s>   t jdkrdnd}tt tjddd|d W 5 Q R X d S )Nbigz<i4z>i4r      r   r   )r   r   rw   rx   r6   rG   r&   )r(   Zother_byteord_dtr   r   r   test_error_byteorder  s    z!TestIntegers.test_error_byteorderzsample_size,high,dtype,chi2maxi@KL rW   g     @_@r   g     b@i i	  g     ȩ@i  g     d@c           
      C   sN   t j|||d}tj|dd\}}|| }|| d |  }	|	|k sJtd S )Nr   T)Zreturn_countsrA   )rG   r&   r,   uniquern   r   )
r(   Zsample_sizer	  rD   Zchi2maxsamplesvaluescountsr   Zchi2r   r   r   $test_integers_small_dtype_chisquared  s
    
z1TestIntegers.test_integers_small_dtype_chisquaredN)*r=   r>   r?   rG   r&   r   r   r,   r   r   r   r   r   r_   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rw   r   r   ra   r   r   r
  r  r  r  r  r  slowr   r   r   r   r   r   <  sl      #      	
r   c                   @   sT  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
ejdejejfejejfg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,ejdFe-e.gejdGdHe/dIdJdKdLdMdNgdOdPdQdRdSdTggfdKe/dTdSdQdLdMdNgdKdJdOdIdPdRggfdSe/dRdIdPdKdQdSgdNdLdMdTdOdJggfgdUdV Z0dWdX Z1dYdZ Z2ejd[d\dRgd]d^ Z3d_d` Z4dadb Z5dcdd Z6dedf Z7dgdh Z8didj Z9dkdl Z:dmdn Z;dodp Z<dqdr Z=ejj>dsdt Z?dudv Z@dwdx ZAdydz ZBd{d| ZCd}d~ ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPejdeQdddejRdgdd ZSdd ZTejjUeVddejddddgdd ZWejddKgdggfdgdSggfgdd ZXejddddgdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd ZcddĄ ZdddƄ ZeddȄ Zfddʄ Zgdd̄ Zhdd΄ ZiddЄ Zjdd҄ ZkddԄ Zlddք Zmdd؄ Znddڄ Zodd܄ Zpddބ Zqdd Zrdd Zsdd Ztdd Zudd Zvdd Zwdd Zxdd Zydd Zzdd Z{dd Z|dd Z}dd Z~ejdddgdd Zejddej d ejdgejddddSddgdd Zdd Zd	d
 Zdd Zdd ZdHS (  TestRandomDistc                 C   s
   d| _ d S )Nr   r{   r7   r   r   r   r|     s    zTestRandomDist.setup_methodc                 C   sH   t t| j}|jdddd}tddgddgd	d
gg}t|| d S )Nc   rk   rA   r   )   %   ir   r   r   r&   r,   ra   r	   r(   rG   r  r   r   r   r   test_integers  s    zTestRandomDist.test_integersc                 C   sR   t t| j}|jdddtjd}tjddgddgd	d
ggtjd}t|| d S )Nr   r$  r%  r   r      F   D   r   r(  rC   )r   r   r   r&   r,   r_   ra   r	   r,  r   r   r   test_integers_masked  s    "z#TestRandomDist.test_integers_maskedc                 C   sJ   t t| j}|jddddd}tddgdd	gd
dgg}t|| d S )Nr#  r$  r%  T)r   r    r&  r'  r(  &   r*  ir+  r,  r   r   r   test_integers_closed  s    z#TestRandomDist.test_integers_closedc                 C   s:   t jtdjtdjdd}tdj}t|| d S )NlTr    )rG   r&   r,   r   r   r   )r(   r  r   r   r   r   test_integers_max_int  s
    z$TestRandomDist.test_integers_max_intc                 C   sn   t t| j}|d}tddgddgddgg}t||dd	 t t| j}| }t||d
 dd	 d S )Nr%  gG0Ը?gæ?g2?gu	A?gH
>H?g;dE?r   decimalr  r   r   r   rG   r,   ra   r
   r,  r   r   r   test_random  s    

zTestRandomDist.test_randomc                 C   sF   t t| j}|d}tddgddgddgg}t||dd	 d S )
Nr%  CԸ?gP?gtX?g81
A?grO>H?g88dE?r   r7  r9  r,  r   r   r   test_random_float  s    

z TestRandomDist.test_random_floatc                 C   s2   t t| j}|jtjd}d}t||dd d S )NrC   r;  r   r7  )r   r   r   rG   r,   rv   r
   r,  r   r   r   test_random_float_scalar  s    z'TestRandomDist.test_random_float_scalarzdtype, uint_view_typec                 C   sN   t t| j}|jd|d}t||d@ }d|  k rDdk sJn td S )Nr   rC   r/   i$^  i,e  )r   r   r   rG   r,   Zcount_nonzeror   r   )r(   rD   Zuint_view_typerG   r   Znum_ones_in_lsbr   r   r   test_random_distribution_of_lsb  s    z.TestRandomDist.test_random_distribution_of_lsbc                 C   s   t ttjdd d S )Nr   rC   )r   r5   rG   r7   r   r   r   test_random_unsupported_type  s    z+TestRandomDist.test_random_unsupported_typec                 C   s@   t t| j}|dd}tjddddgtjd}t|| d S )Nr}   r   rA   rC   r   r   r   choicer,   ra   r   r	   r,  r   r   r   test_choice_uniform_replace  s    z*TestRandomDist.test_choice_uniform_replacec                 C   sL   t t| j}|jddddddgd}tjddddgtjd}t|| d S )Nr}   皙?皙?rI   r   r/   rC   r@  r,  r   r   r   test_choice_nonuniform_replace  s    z-TestRandomDist.test_choice_nonuniform_replacec                 C   sn   t t| j}|jdddd}tjdddgtjd}t|| |jddddd}tjdtjd}t|| d S )	Nr}   rk   FreplacerA   r   rC   )rH  shuffle)	r   r   r   rA  r,   ra   r   r	   r-   r,  r   r   r   test_choice_uniform_noreplace  s    
z,TestRandomDist.test_choice_uniform_noreplacec                 C   sL   t t| j}|jdddddddgd}tjdd	dgtjd
}t|| d S )Nr}   rk   FrD  333333?rE   rH  rI   r   rA   rC   r@  r,  r   r   r    test_choice_nonuniform_noreplace'  s    z/TestRandomDist.test_choice_nonuniform_noreplacec                 C   sB   t t| j}|ddddgd}tddddg}t|| d S )Nabcdr}   r   r   r   rA  r,   ra   r	   r,  r   r   r   test_choice_noninteger-  s    z%TestRandomDist.test_choice_nonintegerc                 C   s\   t t| j}|ddgddgddgddggd}tddgddgddgg}t|| d S )	Nr   r/   rA   rk   r}   rW   r   r   rR  r,  r   r   r   )test_choice_multidimensional_default_axis3  s    $z8TestRandomDist.test_choice_multidimensional_default_axisc                 C   s^   t t| j}|jddgddgddgddggddd	}tdgdgdgdgg}t|| d S )
Nr   r/   rA   rk   r}   rW   r   r   r   rR  r,  r   r   r   (test_choice_multidimensional_custom_axis9  s    (z7TestRandomDist.test_choice_multidimensional_custom_axisc              	   C   s*  t j}tt|dd tt|dd tt|g d tt|ddddgdddgddggd tt|ddgdd	d	d
gd tt|ddgdddgd tt|ddgdd	d	gd tt|dddgddd tt|dddgddd tt|dddgddd tt|dddgddd tt|dddgdddddgd d S )Nr3   rk         @r/   rA   r}         ?rE  rC  rO   re   rf   FrG  r9   )r3   )r3   r/   r   rL  )rG   rA  r   r6   )r(   r   r   r   r   test_choice_exceptions?  s$     z%TestRandomDist.test_choice_exceptionsc              	   C   s  ddg}t ttjddd t ttjddd t ttjdd|d t ttjdd|d t ttjddgdd t tjd gddd k tddg}tjdtd	}||d
< t tj|dd|k t }t ttjd|dd  t ttjd|dd  t ttjd|d|d  t ttjd|d|d  t ttjddg|dd  t tjd g|ddj	d
k tddg}tjdtd	}||d
< t tj||dd
 |k d}ddddddg}ttjd|ddj| ttjd|ddj| ttjd|d|dj| ttjd|d|dj| ttjtd|ddj| ttjd
d
ddjd ttjd
dd
djd ttjddd
djd ttjd
d
djd ttjg ddjd ttjddgddjd tttjg d d S )NrD  rg   rA   TrG  FrL  r/   rC   r   r   rC  rO   r   r  r   r  r  r   rN  rO  )r   r,   ZisscalarrG   rA  ra   r   r  tuplendimitemr   r`   r-   r&   r   r6   )r(   rI   rN  arrr)   r   r   r   test_choice_return_shapeQ  sL     z'TestRandomDist.test_choice_return_shapec                 C   s0   t dddg}d d d g}tttj||d d S )N*   r/   rA   rE  )r,   ra   r   r6   rG   rA  )r(   rN  rI   r   r   r   test_choice_nan_probabilities  s    
z,TestRandomDist.test_choice_nan_probabilitiesc              	   C   s   t dd }d|dd d< tt| j}|jdd|d d d d}tt| j}|jddt |d d d d}t|| d S )Nr   rW   rV  r/   rA   rk   rE  )r,   onesr   r   r   rA  ro   r	   )r(   rI   rG   rp   rq   r   r   r   test_choice_p_non_contiguous  s     z+TestRandomDist.test_choice_p_non_contiguousc                 C   s   t dd }tdd}|jt jks*ttjdddd}|jt jksJttjdd|d}|jt jksjttjdd|dd}|jt jkstd S )Nr}   g      @rA   FrG  rE  )rI   rH  )r,   r`  rG   rA  rD   r   r   )r(   rI   r  r   r   r   test_choice_return_type  s    z&TestRandomDist.test_choice_return_typec                 C   sZ   d}t t| j}|jdddd}tjdkr4| }t|	t
j }t||k d S )NZ@4266599d12bfcfb815213303432341c06b4349f5455890446578877bb322e222'  r  FrG  r   )r   r   r   rA  r   r   r   r   r   r   r,   r   r   r   )r(   Zchoice_hashrG   r  r   r   r   r   test_choice_large_sample  s    
z'TestRandomDist.test_choice_large_samplec                 C   s*   t t| j}|d}d}t|| d S )Nr   s
   	8%)r   r   r   bytesr   r,  r   r   r   
test_bytes  s    
zTestRandomDist.test_bytesc                 C   s   dd dd dd dd dd dd dd d	d d
d dd dd fD ]b}t t| j}|ddddddddddg
}|| |}|ddddddddddg
}t|| qFd S )Nc                 S   s
   t g S r   )r,   ra   rZ   r   r   r   <lambda>      z-TestRandomDist.test_shuffle.<locals>.<lambda>c                 S   s   | S r   r   rg  r   r   r   rh    ri  c                 S   s   t | t jS r   )r,   asarrayastyper   rg  r   r   r   rh    ri  c                 S   s   t | t jS r   )r,   rj  rk  rv   rg  r   r   r   rh    ri  c                 S   s   t | t jS r   )r,   rj  rk  Z	complex64rg  r   r   r   rh    ri  c                 S   s   t | tS r   )r,   rj  rk  r  rg  r   r   r   rh    ri  c                 S   s   dd | D S )Nc                 S   s   g | ]}||fqS r   r   .0ir   r   r   
<listcomp>  s     ATestRandomDist.test_shuffle.<locals>.<lambda>.<locals>.<listcomp>r   rg  r   r   r   rh    ri  c                 S   s   t dd | D S )Nc                 S   s   g | ]}||gqS r   r   rl  r   r   r   ro    s     rp  )r,   rj  rg  r   r   r   rh    ri  c                 S   s   t | | gjS r   )r,   vstackTrg  r   r   r   rh    ri  c                 S   s*   t dd | D dtfdtfgt jS )Nc                 S   s   g | ]}||fqS r   r   rl  r   r   r   ro    s     rp  rN  rO  )r,   rj  rB   r   Zrecarrayrg  r   r   r   rh    s   c                 S   s(   t dd | D dtdfdt jdfgS )Nc                 S   s   g | ]}||fqS r   r   rl  r   r   r   ro    s     rp  rN  r/   rO  )r,   rj  r  r   rg  r   r   r   rh    s   
r/   rA   rk   r}   rW   r   r   r   r   r   )r   r   r   rI  r	   )r(   convrG   alistr  r   r   r   r   test_shuffle  s$    
zTestRandomDist.test_shufflec              	   C   s   t t| j}tdd}|j|dd tddddgdd	d
dgddddgddddgg}t|| t t| j}tdd}|j|dd t|| d S )Nr   r}   r}   r/   r   r   rk   rA   r}   r   rW   r   r      r   r   r   r   r   r   r3   )	r   r   r   r,   r-   reshaperI  ra   r	   r,  r   r   r   test_shuffle_custom_axis  s    



z'TestRandomDist.test_shuffle_custom_axisc                 C   sT   t t| j}tg d}dD ],}tg d}|j||d t|| q"d S )N)r   r   )r   r/   r   )r   r   r   r,   ra   ry  rI  r	   )r(   rG   r   r   r  r   r   r   test_shuffle_custom_axis_empty  s    z-TestRandomDist.test_shuffle_custom_axis_emptyc                 C   s^   t ddd}| }tt| j}|j|dd tt| j}||j t	|| d S )Nr   rA   r   r/   r   )
r,   r-   ry  copyr   r   r   rI  rr  r	   )r(   y1y2rG   r   r   r   test_shuffle_axis_nonsquare  s    z*TestRandomDist.test_shuffle_axis_nonsquarec                 C   s   t jt tddd d d}t jt dd d d}| }| }tdD ]d}t| t	t
|j|j  t
|j|j   t| t	t
|j|j  t
|j|j   qVd S )Nr   )rW   r}   rk   r/   r3   r   )r,   maZmasked_valuesry  r+   r-   r|  rG   rI  r   sorteddatamask)r(   rN  rO  Za_origZb_origrn  r   r   r   test_shuffle_masked  s    "
 
 z"TestRandomDist.test_shuffle_maskedc                 C   s   t t| j}td}ttj|j|d tdd}ttj|j|d tt	|j|t
ddd  dddgddd	gg}tt|j|d td}tt	|j| td
}ttj|j|d d S )Nr   r/   r   rk   rk   rk   rA   r}   rW   r   r%  )r   r   r   r,   r-   r   	AxisErrorrI  ry  r5   sliceNotImplementedErrorra   r`  r(   rG   r\  r   r   r   test_shuffle_exceptions  s    


z&TestRandomDist.test_shuffle_exceptionsc              	   C   sH   t t| j}td}d|j_tjt	dd |
| W 5 Q R X d S )NrW   F	read-onlyrt   )r   r   r   r,   rF   flags	writeablerw   rx   r6   rI  )r(   rG   rN  r   r   r   test_shuffle_not_writeable  s
    
z)TestRandomDist.test_shuffle_not_writeablec           	      C   s  t t| j}ddddddddd	d
g
}||}ddd	dd
dddddg
}t|| t t| j}tddddddddd	d
g
j}||}t|t|j d}ttj	|j| d}ttj	|j| t t| j}d}dd
ddd	dddddg
}||}t|| d S )Nr/   rA   rk   r}   rW   r   r   r   r   r   Zabcdg333333?r   )
r   r   r   permutationr	   r,   Z
atleast_2drr  r   r  )	r(   rG   ru  r  r   Zarr_2dZ	bad_x_strZbad_x_floatZinteger_valr   r   r   test_permutation  s$    

 

zTestRandomDist.test_permutationc              	   C   s   t dd}t ddddgddd	d
gddddgddddgg}tt| j}|j|dd}t|| tt| j}|j|dd}t|| d S )Nr   rw  r   rk   r/   rA   r}   r   rW   r   r   rx  r   r   r   r   r   r   r   r3   )	r,   r-   ry  ra   r   r   r   r  r	   )r(   rN  r   rG   r  r   r   r   test_permutation_custom_axis  s    



z+TestRandomDist.test_permutation_custom_axisc                 C   sh   t t| j}td}ttj|j|d tdd}ttj|j|d tt	|j|t
ddd  d S )Nr   r/   r   r  rk   rA   )r   r   r   r,   r-   r   r  r  ry  r5   r  r  r   r   r   test_permutation_exceptions,  s    
z*TestRandomDist.test_permutation_exceptionsrD   zaxis, expectedNrk   r   r   r   r   rx  r   r}   rA   rW   r/   r   c                 C   s   t t| j}tddd|}|j|||d t|| t t| j}tddd|}|j||d}|j	|kst
t|| d S )Nr   rA   r   r   outr   )r   r   r   r,   r-   ry  rk  permutedr	   rD   r   )r(   rD   r   r   rG   rZ   yr   r   r   test_permuted4  s    	
zTestRandomDist.test_permutedc                 C   s   t t| j}tddd}| }|d d d d df }|j|d|d}tdddd	gd
dddgg}t	|| ||d d d d df< t	|| d S )N   rA   rx  rk   r/   r  r   r   r   r   r   r   )
r   r   r   r,   r-   ry  r|  r  ra   r	   )r(   rG   Zx0x1rZ   r  r   r   r   r   test_permuted_with_stridesH  s    

z)TestRandomDist.test_permuted_with_stridesc                 C   s   t g }t|g  d S r   )rG   r  r	   )r(   r  r   r   r   test_permuted_emptyU  s    
z"TestRandomDist.test_permuted_emptyoutshaper   c              	   C   sL   t dddg}t j||jd}tjtdd tj||d W 5 Q R X d S )Nr/   rA   rk   rC   z
same shapert   r  )	r,   ra   rF   rD   rw   rx   r6   rG   r  )r(   r  rN  r  r   r   r   "test_permuted_out_with_wrong_shapeY  s    z1TestRandomDist.test_permuted_out_with_wrong_shapec              	   C   sH   t jdt jd}t d}tjtdd tj|d|d W 5 Q R X d S )N)rk   rW   rC   zCannot castrt   r/   r  )	r,   rF   r   r`  rw   rx   r5   rG   r  )r(   r  rZ   r   r   r   !test_permuted_out_with_wrong_type`  s    
z0TestRandomDist.test_permuted_out_with_wrong_typec              	   C   s@   t d}d|j_tjtdd tj|d|d W 5 Q R X d S )N)rA   rW   Fr  rt   r/   r  )	r,   rF   r  r  rw   rx   r6   rG   r  rY   r   r   r   test_permuted_not_writeablef  s    
z*TestRandomDist.test_permuted_not_writeablec                 C   sL   t t| j}|jdddd}tddgddgd	d
gg}t||dd d S )NrD  rg   r%  r   gW<$=g^
=g/:Ћ?gG!Gc>g'`2?gU?r   r7  )r   r   r   betar,   ra   r
   r,  r   r   r   	test_betal  s    zTestRandomDist.test_betac                 C   sp   t t| j}|jdddd}tddgddgdd	gg}t|| t t| j}|dd}d}t|| d S )
NgZd;Y@gv/?r%  r   r^  r(  0   ,   r   )r   r   r   rH   r,   ra   r	   r,  r   r   r   test_binomialu  s    

zTestRandomDist.test_binomialc                 C   sJ   t t| j}|jddd}tddgddgdd	gg}t||d
d d S )Nr   r%  r   gmE~@@g
1ςC@grӳL@gm%xL@g<kQK@gtK@r   r7  )r   r   r   	chisquarer,   ra   r
   r,  r   r   r   test_chisquare  s    
zTestRandomDist.test_chisquarec                 C   s   t t| j}tddg}|j|dd}tddgddggd	d
gddggddgddggg}t||dd tddg}tt|j| t t| j}tddg}||}t||d dd d S )NI<I@EZC@r%  r   g28\h?gɎG/?gAp?g|);?gLX?gfOh?g됷W?g(ސP?gz$Q?gmWt ?g搝K?g4hz?r   r7  HzG?缉ؗҜr  )	r   r   r   r,   ra   	dirichletr
   r   r6   )r(   rG   alphar  r   Z	bad_alphar   r   r   test_dirichlet  s(    

zTestRandomDist.test_dirichletc                 C   s   t ddg}tt|t djd tt|t djd tt|t djd tt|ddgjd tt|djd tt|t djd tttj|t	d d S )Nr  r  r/   r\   rA   r]   r^   )
r,   ra   r   rG   r  r_   r`   r   r5   rb   rc   r   r   r   test_dirichlet_size  s    z"TestRandomDist.test_dirichlet_sizec                 C   s   t ddg}tttj| tttjddgg tttjdgdgg tttjdgdggdgdggg tttjt ddgddgg d S )Nr  r  rW   r/   )r,   ra   r   r6   rG   r  )r(   r  r   r   r   test_dirichlet_bad_alpha  s    "z'TestRandomDist.test_dirichlet_bad_alphac                 C   sj   t dddg}|d d d }tt| j}|j|dd}tt| j}|jt |dd}t|| d S )Nr  g      r  rA   r%  r   )r,   ra   r   r   r   r  ro   r
   )r(   rN  r  rG   rp   rq   r   r   r   #test_dirichlet_alpha_non_contiguous  s    z2TestRandomDist.test_dirichlet_alpha_non_contiguousc                 C   sx   d}|t ddg }tt| j}|j|dd}t ddgddggddgddggddgddggg}t||dd d S )	Nrs         ?r   r%  r   rT   r   r7  )r,   ra   r   r   r   r  r
   )r(   Zepsr  rG   r  r   r   r   r   test_dirichlet_small_alpha  s     z)TestRandomDist.test_dirichlet_small_alphac                 C   sV   t dddg}||  }tt| j}|j|dd}|jdd}t||dd	 d S )
Ng{Gz?g{Gz?gQ?i -1r   r   r   r   )r   )	r,   ra   rn   r   r   r   r  r   r   )r(   r  Z
exact_meanrG   r   Zsample_meanr   r   r   %test_dirichlet_moderately_small_alpha  s    z4TestRandomDist.test_dirichlet_moderately_small_alphac                 C   sJ   t t| j}|jddd}tddgddgdd	gg}t||d
d d S )Ng8EGr?r%  r   gvM?g?g#c?gQ:N?gAP?gE_9@r   r7  )r   r   r   exponentialr,   ra   r
   r,  r   r   r   test_exponential  s    
zTestRandomDist.test_exponentialc                 C   s&   t tjddd tttjdd d S Nr   scale       )r   rG   r  r   r6   r7   r   r   r   test_exponential_0  s    z!TestRandomDist.test_exponential_0c                 C   sL   t t| j}|jdddd}tddgddgd	d
gg}t||dd d S )Nr   M   r%  r   g}(Ҍ?gi?g=r?g]hDA?gjӨ?g8k*u?r   r7  )r   r   r   fr,   ra   r
   r,  r   r   r   test_f  s    
zTestRandomDist.test_fc                 C   sL   t t| j}|jdddd}tddgddgd	d
gg}t||dd d S )NrW   rk   r%  r   g,שn'@gt@g<e2@g1a3@g3r
y-2@gs1-2@r   r7  )r   r   r   gammar,   ra   r
   r,  r   r   r   
test_gamma  s    
zTestRandomDist.test_gammac                 C   s*   t tjdddd tttjddd d S )Nr   )r`   r  r  )r   rG   r  r   r6   r7   r   r   r   test_gamma_0  s    zTestRandomDist.test_gamma_0c                 C   sF   t t| j}|jddd}tddgddgddgg}t|| d S )N_c97ݚ?r%  r   r/   rx  r   r   )r   r   r   	geometricr,   ra   r	   r,  r   r   r   test_geometric  s    
zTestRandomDist.test_geometricc              	   C   s   t ttjd t ttjdgd  t ttjd t ttjdgd  tjdd, t ttjtj t ttjtjgd  W 5 Q R X d S )Nre   r   rf   ignoreinvalid)r   r6   rG   r  r,   errstaterK   r7   r   r   r   test_geometric_exceptions  s    z(TestRandomDist.test_geometric_exceptionsc                 C   sL   t t| j}|jdddd}tddgddgd	d
gg}t||dd d S )Nr         @r%  locr  r   gA7G@g1Fiҿgei@g_Cg0cPg`(_տr   r7  )r   r   r   gumbelr,   ra   r
   r,  r   r   r   test_gumbel  s    
zTestRandomDist.test_gumbelc                 C   s&   t tjddd tttjdd d S r  )r   rG   r  r   r6   r7   r   r   r   test_gumbel_0  s    zTestRandomDist.test_gumbel_0c                 C   s  t t| j}|jddddd}tddgddgddgg}t|| |jdd	d
dd}td
d
d
d
g}t|| |jdd	ddd}tddddg}t|| |jd	dd
dd}td	d	d	d	g}t|| |jd	dddd}td	d	d	d	g}t|| d S )Ng333333$@g      @r   r%  r   r   r   rW   r   rk   r}   r   r   )r   r   r   hypergeometricr,   ra   r	   r,  r   r   r   test_hypergeometric  s&    




z"TestRandomDist.test_hypergeometricc                 C   sL   t t| j}|jdddd}tddgddgd	d
gg}t||dd d S )Nr  r  r%  r  g6@	ga@bDA"?g*[r{g>K?g(?g<?r   r7  )r   r   r   laplacer,   ra   r
   r,  r   r   r   test_laplace.  s    
zTestRandomDist.test_laplacec                 C   s&   t tjddd tttjdd d S r  )r   rG   r  r   r6   r7   r   r   r   test_laplace_06  s    zTestRandomDist.test_laplace_0c                 C   sL   t t| j}|jdddd}tddgddgd	d
gg}t||dd d S )Nr  r  r%  r  gbZgHʊg$>?g>&gQh@g%?n?gĉ8|?r   r7  )r   r   r   logisticr,   ra   r
   r,  r   r   r   test_logistic:  s    
zTestRandomDist.test_logisticc                 C   sL   t t| j}|jdddd}tddgddgd	d
gg}t||dd d S )Nr  r  r%  )r   sigmar   gܒx?gk*+@g<Ҿ?g
@g5a@g%jz(@r   r7  )r   r   r   	lognormalr,   ra   r
   r,  r   r   r   test_lognormalB  s    
zTestRandomDist.test_lognormalc                 C   s&   t tjddd tttjdd d S )Nr   )r  r/   r  )r   rG   r  r   r6   r7   r   r   r   test_lognormal_0J  s    zTestRandomDist.test_lognormal_0c                 C   sF   t t| j}|jddd}tddgddgdd	gg}t|| d S )
Ngƀ@?r%  )rI   r   r   r   rk      rW   r/   )r   r   r   	logseriesr,   ra   r	   r,  r   r   r   test_logseriesN  s    
zTestRandomDist.test_logseriesc                 C   s$   t t| j}|ddks td S )Nr   r/   )r   r   r   r  r   r(   rG   r   r   r   test_logseries_zeroV  s    z"TestRandomDist.test_logseries_zerovaluerT   r3   r  g      @c              
   C   s   t t| j}tjdd tt || W 5 Q R X tt |t	|gd  W 5 Q R X tt& |t	|gd d d d  W 5 Q R X W 5 Q R X d S )Nr  r  r   rA   )
r   r   r   r,   r  rw   rx   r6   r  ra   )r(   r  rG   r   r   r   test_logseries_exceptionsZ  s     z(TestRandomDist.test_logseries_exceptionsc                 C   s   t t| j}|jddgd dd}tdddddd	gdd
dd
dd
ggdd	d
dd	dgdddd
d	dggdd	ddd	d
gddd	dd
dggg}t|| d S )Nr   UUUUUU?r   r%  r   r/   rW   r}   rk   rA   r   r   )r   r   r   rR   r,   ra   r	   r,  r   r   r   test_multinomialg  s    zTestRandomDist.test_multinomialzfp errors don't work in wasmreasonr   svdeighcholeskyc              	   C   sv  t t| j}d}ddgddgg}d}|j||||d}tddgdd	ggd
dgddggddgddggg}t||dd |j|||d}tddg}t||dd ddg}ddgddgg}tt|j||dd ddgddgg}t	t
|j|| t	t
|j||dd tt|j||dd t|j||dd tt|j||dd tt|j||ddd ddgddgg}|dkr|j||d|d}t|d |d  d!d ntt|j||dd tjdd"gd"dggtjd#}t 2}	|j|||d |	t
}
t|
dkstW 5 Q R X td}td}tt|j||d$d tt|jtd%| tt|j|td tt|j|td& d S )'N)r  r   r/   r   r%  r   gtg$&@g&بO=g!$@gDo?g\&@g,R{?g
f!@g?ժ?gT^o#@g`R?gP'@r   r7  gl?g$("@rA   raise)check_validr  r  r  )r  r   )r  r  r   ).r   ).r/   r   rD  rC   other)rA   r/   r/   rk   )r   r   r   multivariate_normalr,   ra   r
   r   r6   r   RuntimeWarningr   r   rv   r   recordr   r   rF   Zeyer   )r(   r   rG   r   covr   r  r   r  supwmur   r   r   test_multivariate_normalr  s    

 




   z'TestRandomDist.test_multivariate_normalz	mean, covy      ?      ?y                c              	   C   s8   t t| j}tjtdd ||| W 5 Q R X d S )Nzmust not be complexrt   )r   r   r   rw   rx   r5   r  )r(   r   r  rG   r   r   r   )test_multivariate_normal_disallow_complex  s    z8TestRandomDist.test_multivariate_normal_disallow_complexc           	      C   s   t t| j}d}tddg}tddgddgg}|j|||f|d}|| }|j| |d  }tt|	ddk st
tt|| dk st
d S )Nr"   r/   rA   r   r9   rD  rO   )r   r   r   r,   ra   r  rr  rX   absr   r   )	r(   r   rG   Zn_sr   r  r)   Zs_centerZcov_empr   r   r   $test_multivariate_normal_basic_stats  s    z3TestRandomDist.test_multivariate_normal_basic_statsc                 C   sH   t t| j}|jdddd}tddgddgd	d
gg}t|| d S )NrN   g|Pk?r%  )nrI   r   i  i  i  i  iX  i  )r   r   r   r   r,   ra   r	   r,  r   r   r   r     s    
z%TestRandomDist.test_negative_binomialc              	   C   sF   t jdd0 tttjdt j tttjdt jgd  W 5 Q R X d S )Nr  r  rN   r   )r,   r  r   r6   rG   r   rK   r7   r   r   r   !test_negative_binomial_exceptions  s
    

z0TestRandomDist.test_negative_binomial_exceptionsc              	   C   s$   t t tdd}W 5 Q R X d S Nr/   r   )r   r6   rG   r   rY   r   r   r   #test_negative_binomial_p0_exception  s    
z2TestRandomDist.test_negative_binomial_p0_exceptionc              	   C   s@   t jdd* tttjdd tttjdgdg W 5 Q R X d S )Nr  r  r  rD  )r,   r  r   r6   rG   r   r7   r   r   r   .test_negative_binomial_invalid_p_n_combination  s    z=TestRandomDist.test_negative_binomial_invalid_p_n_combinationc                 C   s   t t| j}|jdddd}tddgddgdd	gg}t||d
d |jdddd}tddgddgddgg}t||d
d t t| j}|jdddd}tddgddgddgg}t||d
d d S )NrW   r%  )dfnoncr   gs؀3J?gugو/@gNJm+@gA}-4@gq=&@gjhn@r   r7  rE   rO   gZօDN?gE!X&?gt%T?gQ)V?g5Zlf?gΎ{?r   gmK?gZ?g%yKY@g@W@gĈ{>@g&BB=@)r   r   r   noncentral_chisquarer,   ra   r
   r,  r   r   r   test_noncentral_chisquare  s(    


z(TestRandomDist.test_noncentral_chisquarec                 C   sN   t t| j}|jddddd}tddgdd	gd
dgg}t||dd d S )NrW   rA   r/   r%  )dfnumdfdenr  r   gHP
?gn?g%f?gch?gzƎ?g]?:?r   r7  )r   r   r   noncentral_fr,   ra   r
   r,  r   r   r   test_noncentral_f  s    

z TestRandomDist.test_noncentral_fc                 C   s2   t t| j}|jddtjd}t|s.td S )NrW   rA   )r   r  r  )r   r   r   r  r,   rK   isnanr   r(   rG   r  r   r   r   test_noncentral_f_nan  s    z$TestRandomDist.test_noncentral_f_nanc                 C   sL   t t| j}|jdddd}tddgddgd	d
gg}t||dd d S )Nr  r  r%  r  g?`xg\P@g/7u g0aj?gi%?gog@r   r7  )r   r   r   normalr,   ra   r
   r,  r   r   r   test_normal  s    
zTestRandomDist.test_normalc                 C   s&   t tjddd tttjdd d S r  )r   rG   r  r   r6   r7   r   r   r   test_normal_0  s    zTestRandomDist.test_normal_0c                 C   sN   t t| j}|jddd}tddgddgdd	gg}tjj||d
d d S )Nr  r%  rN  r   gá?gƫh@gi`>?g0"&Agc@g=fAr   )Znulp)r   r   r   paretor,   ra   ZtestingZassert_array_almost_equal_nulpr,  r   r   r   test_pareto  s    
	zTestRandomDist.test_paretoc                 C   sF   t t| j}|jddd}tddgddgddgg}t|| d S )Nr  r%  )lamr   r   )r   r   r   poissonr,   ra   r	   r,  r   r   r   test_poisson'  s    
zTestRandomDist.test_poissonc              	   C   s   t dj}d}tttj| tttj|gd  tttj| tttj|gd  t jdd, tttjt j tttjt jgd  W 5 Q R X d S )Nr   r3   r   r  r  )	r,   r   r   r   r6   rG   r  r  rK   )r(   ZlambigZlamnegr   r   r   test_poisson_exceptions/  s    z&TestRandomDist.test_poisson_exceptionsc                 C   sJ   t t| j}|jddd}tddgddgdd	gg}t||d
d d S )Nr  r%  r
  gZ >g?gÄ(=g҇?gŚE?gߢH?r   r7  )r   r   r   powerr,   ra   r
   r,  r   r   r   
test_power:  s    
zTestRandomDist.test_powerc                 C   sJ   t t| j}|jddd}tddgddgdd	gg}t||d
d d S )Nr   r%  )r  r   gry@gtQP0@gAI_@g@u81@g	G0@g"wc5@r   r7  )r   r   r   rayleighr,   ra   r
   r,  r   r   r   test_rayleighB  s    
zTestRandomDist.test_rayleighc                 C   s&   t tjddd tttjdd d S r  )r   rG   r  r   r6   r7   r   r   r   test_rayleigh_0J  s    zTestRandomDist.test_rayleigh_0c                 C   sH   t t| j}|jdd}tddgddgddgg}t||d	d
 d S )Nr%  r   gH1gW|3
g\?gLeg5P	gFA?r   r7  )r   r   r   Zstandard_cauchyr,   ra   r
   r,  r   r   r   test_standard_cauchyN  s    
z#TestRandomDist.test_standard_cauchyc                 C   sJ   t t| j}|jddd}tddgddgdd	gg}t||d
d d S )Nr%  invr   ga\5?gr7k?g8PC*?g5$[?gW3T?g*?r   r7  )r   r   r   standard_exponentialr,   ra   r
   r,  r   r   r   test_standard_exponentialV  s    
z(TestRandomDist.test_standard_exponentialc                 C   s   t ttjtjd d S NrC   )r   r5   rG   r  r,   r   r7   r   r   r   #test_standard_expoential_type_error^  s    z2TestRandomDist.test_standard_expoential_type_errorc                 C   sJ   t t| j}|jddd}tddgddgdd	gg}t||d
d d S )Nrk   r%  r`   r   gΈ̏&?gTϿ?g1n21@gDb<z@gBv@gc^@r   r7  r   r   r   standard_gammar,   ra   r
   r,  r   r   r   test_standard_gammaa  s    
z"TestRandomDist.test_standard_gammac                 C   s4   t t| j}|jdtjd}d}t||dd d S )Nrk   rC   g   d@r   r7  )r   r   r   r  r,   rv   r
   r,  r   r   r   !test_standard_gammma_scalar_floati  s    z0TestRandomDist.test_standard_gammma_scalar_floatc                 C   sJ   t t| j}|jddd}tddgddgdd	gg}t||d
d d S )Nrk   r%  r  gf&?gMO?g1@g):@g@g;i@rW   r7  r  r,  r   r   r   test_standard_gamma_floato  s    
z(TestRandomDist.test_standard_gamma_floatc                 C   s   t jdt jd}tt| j}|jd|t jd t jddgddgd	d
ggt jd}t||dd tt| j}|jd|dt jd t||dd d S )Nr%  rC         $@r  rD   gM»L$@ga {@gN]"@gPS")@g_+@gmB@rW   r7  r  r   rD   )	r,   rF   rv   r   r   r   r  ra   r
   )r(   r  rG   r   r   r   r   test_standard_gammma_float_outw  s    
z-TestRandomDist.test_standard_gammma_float_outc                 C   s   t ttjddd d S )Nr  r   rC   )r   r5   rG   r  r7   r   r   r    test_standard_gamma_unknown_type  s    
z/TestRandomDist.test_standard_gamma_unknown_typec                 C   s6   t d}tttjdd|d tttjdd|d d S )Nr   r"  r   )r   r  )r   r/   )r,   rF   r   r6   rG   r  )r(   r  r   r   r   test_out_size_mismatch  s    
z%TestRandomDist.test_out_size_mismatchc                 C   s&   t tjddd tttjdd d S )Nr   )r`   r  )r   rG   r  r   r6   r7   r   r   r   test_standard_gamma_0  s    z$TestRandomDist.test_standard_gamma_0c                 C   sH   t t| j}|jdd}tddgddgddgg}t||d	d
 d S )Nr%  r   g
bYg? ?gGH{Lgz\?gc`+?gT}?r   r7  )r   r   r   r   r,   ra   r
   r,  r   r   r   test_standard_normal  s    
z#TestRandomDist.test_standard_normalc                 C   s   t ttjtjd d S r  )r   r5   rG   r   r,   r   r7   r   r   r   %test_standard_normal_unsupported_type  s    z4TestRandomDist.test_standard_normal_unsupported_typec                 C   sJ   t t| j}|jddd}tddgddgdd	gg}t||d
d d S )Nr   r%  )r  r   gV1g	|ڙ(?g-?g NhڿgMc?g!uLM r   r7  )r   r   r   
standard_tr,   ra   r
   r,  r   r   r   test_standard_t  s    
zTestRandomDist.test_standard_tc                 C   sN   t t| j}|jddddd}tddgdd	gd
dgg}t||dd d S )Ng{Gz@g(\u$@gףp=
W4@r%  )leftmoderightr   gEpw@g4DC+@gŋ@g/,@gkuR*@gHNPcr+@r   r7  )r   r   r   
triangularr,   ra   r
   r,  r   r   r   test_triangular  s    

zTestRandomDist.test_triangularc                 C   sL   t t| j}|jdddd}tddgddgd	d
gg}t||dd d S )NGz?gGz%@r%  )r  r	  r   gm2@gJaD@g: @g
Q @g@T{e@gb@r   r7  r   r   r   uniformr,   ra   r
   r,  r   r   r   test_uniform  s    
zTestRandomDist.test_uniformc                 C   s   t dj}t dj}tj}tt|t j d tt|dt j tt||| tt|t j gdg tt|dgt jg tjt 	|d|d d d S )Nrb   r   r/   g ؅W4vC)r  r	  )
r,   Zfinfor   r   rG   r4  r   OverflowErrorinf	nextafter)r(   ZfminZfmaxfuncr   r   r   test_uniform_range_bounds  s    z(TestRandomDist.test_uniform_range_boundsc                 C   sn   t j}|dd}t|d |dtjgdtjg}t|dtjg |dgdggddg}t|dtd  d S )N      ?rT   g
ףp= @r^   )rG   r4  r   r,   pirF   )r(   r9  resultr   r   r   test_uniform_zero_range  s    

z&TestRandomDist.test_uniform_zero_rangec                 C   sH   t j}tt|dd tt|ddgddg tt|ddgddggd d S )NrA   r/   r   rk   )rG   r4  r   r6   )r(   r9  r   r   r   test_uniform_neg_range  s    z%TestRandomDist.test_uniform_neg_rangec                 C   sj   G dd dt j}t d|}tttj|| G dd dt j}t d|}tttj|dd d S )Nc                   @   s   e Zd Zdd ZdS )zGTestRandomDist.test_scalar_exception_propagation.<locals>.ThrowingFloatc                 S   s   t d S r   r5   r7   r   r   r   	__float__  s    zQTestRandomDist.test_scalar_exception_propagation.<locals>.ThrowingFloat.__float__N)r=   r>   r?   rA  r   r   r   r   ThrowingFloat  s   rB  r  c                   @   s   e Zd Zdd ZdS )zITestRandomDist.test_scalar_exception_propagation.<locals>.ThrowingIntegerc                 S   s   t d S r   r@  r7   r   r   r   __int__  s    zQTestRandomDist.test_scalar_exception_propagation.<locals>.ThrowingInteger.__int__N)r=   r>   r?   rC  r   r   r   r   ThrowingInteger  s   rD  r/   )	r,   Zndarrayra   r   r   r5   rG   r4  r  )r(   rB  Zthrowing_floatrD  Zthrowing_intr   r   r   !test_scalar_exception_propagation  s    
z0TestRandomDist.test_scalar_exception_propagationc                 C   sL   t t| j}|jdddd}tddgddgd	d
gg}t||dd d S )Nr2  p=
ף?r%  r  kappar   gLA?gxyw@gzVR?gpE ?g8&Aпgv @r   r7  )r   r   r   vonmisesr,   ra   r
   r,  r   r   r   test_vonmises  s    
zTestRandomDist.test_vonmisesc                 C   s4   t t| j}|jdddd}tt|  d S )NrT   gg5_PG>i@B rG  )r   r   r   rI  r   r,   isfiniterX   r(   rG   rr   r   r   test_vonmises_small  s    z"TestRandomDist.test_vonmises_smallc                 C   s0   t t| j}|jdtjd}tt| d S )NrT   )r  rH  )r   r   r   rI  r,   rK   r   r  rL  r   r   r   test_vonmises_nan  s    z TestRandomDist.test_vonmises_nanrH  g     @g  4&kCc                 C   sr   t t| j}t|j}|jj}|jd|dd}||j_|jd|dd}|dk r\t|| nt	||ksnt
d S )Nr   r   r   g    .A)r   r   r   r   r   r   rI  r   r,   rX   r   )r(   rH  rG   rsr   Zrandom_state_valsZgen_valsr   r   r   test_vonmises_large_kappa  s    
z(TestRandomDist.test_vonmises_large_kappar  g      gg	@rs   gư>g     @@c                 C   sF   t t| j}|||d}tt|tj ko>t|tjk d S )Nr   )r   r   r   rI  r   r,   rX   r<  )r(   r  rH  rG   rM  r   r   r   test_vonmises_large_kappa_range  s    z.TestRandomDist.test_vonmises_large_kappa_rangec                 C   sL   t t| j}|jdddd}tddgddgd	d
gg}t||dd d S )Nr2  rF  r%  )r   r  r   g*س2?gt	@g;S@g\ F@gxF @g6b?r   r7  )r   r   r   waldr,   ra   r
   r,  r   r   r   	test_wald  s    
zTestRandomDist.test_waldc                 C   sJ   t t| j}|jddd}tddgddgdd	gg}t||d
d d S )Nr2  r%  r
  gnJZ?g*/F?gs(RY?g]'%?g,qD?g8 ?r   r7  )r   r   r   weibullr,   ra   r
   r,  r   r   r   test_weibull  s    
zTestRandomDist.test_weibullc                 C   s<   t t| j}t|jdddtd tt|jdd d S )Nr   r   r
  r  )rN  )	r   r   r   r   rU  r,   rF   r   r6   r  r   r   r   test_weibull_0$  s    zTestRandomDist.test_weibull_0c                 C   sF   t t| j}|jddd}tddgddgddgg}t|| d S )	Nr2  r%  r
  r/   r   ic  ib  rA   )r   r   r   zipfr,   ra   r	   r,  r   r   r   	test_zipf)  s    
zTestRandomDist.test_zipf)r=   r>   r?   r|   r-  r1  r3  r6  r:  r<  r=  rw   r   r   r,   rv   r_   Zfloat64r   r>  r?  rB  rF  rJ  rM  rS  rT  rU  rX  r]  r_  ra  rb  rd  rf  rv  rz  r{  r  r  r  r  r  r  r  rB   r  ra   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  r8  rK   r  r  skipifr   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,  r1  r5  r:  r>  r?  rE  rJ  rN  rO  rQ  r<  rR  rT  rV  rW  rY  r   r   r   r   r"    s  


		.			
	

		
I$

			
 r"  c                	   @   sT  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 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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"e#j$%dAdBe&'dBdBge&'dBggdBggggdCdD Z(dEdF Z)dGdH Z*dIS )JTestBroadcastc                 C   s
   d| _ d S )Ni[r{   r7   r   r   r   r|   5  s    zTestBroadcast.setup_methodc                 C   s   t t| j}dg}dg}|j}tdddg}t t| j}||d |}t||dd t t| j}|||d }t||dd d S )	Nr   r/   g4
7^?gF]
"?g .?rk   r   r7  r3  )r(   rG   r  r	  r4  r   r  r   r   r   r5  9  s    zTestBroadcast.test_uniformc                 C   s   dg}dg}dg}t t| j}tdddg}t t| j}||d |}t||dd	 tt|j|d | t t| j}|j}|||d }t||dd	 tt|||d  d S )
Nr   r/   r3   gw-Dؿgn0_x?gʊ;<.?rk   r   r7  )	r   r   r   r,   ra   r  r
   r   r6   )r(   r  r  	bad_scalerG   r   r  r  r   r   r   r  H  s    zTestBroadcast.test_normalc           	      C   s   dg}dg}dg}dg}t dddg}tt| j}|j}||d |}t||d	d
 tt||d | tt||d | tt| j}|||d }t||d	d
 d S )Nr/   rA   r3   r9   gf8?g%eo?g$q??rk   r   r7  )	r,   ra   r   r   r   r  r
   r   r6   )	r(   rN  rO  bad_aZbad_br   rG   r  r  r   r   r   r  Z  s    zTestBroadcast.test_betac                 C   s\   dg}dg}t dddg}tt| j}||d }t||dd tt|j|d  d S 	Nr/   r3   g`ʄ?gE]?g?rk   r   r7  )	r,   ra   r   r   r   r  r
   r   r6   r(   r  r\  r   rG   r  r   r   r   r  l  s    zTestBroadcast.test_exponentialc                 C   s^   dg}dg}t dddg}tt| j}|j}||d }t||dd tt||d  d S r^  )	r,   ra   r   r   r   r  r
   r   r6   )r(   r`   	bad_shaper   rG   Z	std_gammar  r   r   r   r  v  s    z!TestBroadcast.test_standard_gammac           	      C   s   dg}dg}dg}dg}t dddg}tt| j}|j}||d |}t||d	d
 tt||d | tt||d | tt| j}|j}|||d }t||d	d
 tt|||d  tt|||d  d S )Nr/   rA   r3   r9   g3ʄ?gJE]?g?rk   r   r7  )	r,   ra   r   r   r   r  r
   r   r6   )	r(   r`   r  r`  r\  r   rG   r  r  r   r   r   r    s"    zTestBroadcast.test_gammac           	      C   s   dg}dg}dg}dg}t dddg}tt| j}|j}||d |}t||d	d
 tt||d | tt||d | tt| j}|j}|||d }t||d	d
 tt|||d  tt|||d  d S )Nr/   rA   r3   r9   gM3B?gybi@g0?rk   r   r7  )	r,   ra   r   r   r   r  r
   r   r6   )	r(   r   r  	bad_dfnum	bad_dfdenr   rG   r  r  r   r   r   r    s"    zTestBroadcast.test_fc              	   C   s  dg}dg}dg}dg}dg}dg}t ddd	g}tt| j}|j}	|	|d ||}
t|
|d
d t t |	||t j	gd st
tt|	|d || tt|	|d || tt|	|d || tt| j}|j}	|	||d |}
t|
|d
d tt|	||d | tt|	||d | tt|	||d | tt| j}|j}	|	|||d }
t|
|d
d tt|	|||d  tt|	|||d  tt|	|||d  d S )NrA   rk   r}   r   r3   r9   gŜ,n1 @g!6)@g9?r   r7  )r,   ra   r   r   r   r  r
   rX   r  rK   r   r   r6   )r(   r   r  r  ra  rb  bad_noncr   rG   Znonc_fr  r   r   r   r    s:    $zTestBroadcast.test_noncentral_fc                 C   s@   t t| j}tddg}|jddddd}t||dd d S )NgZ\#?gDqw?rg   rA   r   r   r7  )r   r   r   r,   ra   r  r
   )r(   rG   r   r  r   r   r   test_noncentral_f_small_df  s    z(TestBroadcast.test_noncentral_f_small_dfc                 C   s\   dg}dg}t dddg}tt| j}||d }t||dd tt|j|d  d S )	Nr/   r3   gC{?g7Q#?g%h1T@rk   r   r7  )	r,   ra   r   r   r   r  r
   r   r6   r(   r  bad_dfr   rG   r  r   r   r   r    s    zTestBroadcast.test_chisquarec           	      C   s   dg}dg}dg}dg}t dddg}tt| j}|j}||d |}t||d	d
 tt||d | tt||d | tt| j}|j}|||d }t||d	d
 tt|||d  tt|||d  d S )Nr/   rA   r3   r9   g-S?g[@gr3/.?rk   r   r7  )	r,   ra   r   r   r   r  r
   r   r6   )	r(   r  r  rf  rc  r   rG   Znonc_chir  r   r   r   r    s"    z'TestBroadcast.test_noncentral_chisquarec                 C   s\   dg}dg}t dddg}tt| j}||d }t||dd tt|j|d  d S )	Nr/   r3   g>Qg{g,e?rk   r   r7  )	r,   ra   r   r   r   r+  r
   r   r6   re  r   r   r   r,    s    zTestBroadcast.test_standard_tc                 C   s   dg}dg}dg}t dddg}tt| j}||d |}t||dd	 tt|j|d | tt| j}|||d }t||dd	 tt|j||d  d S )
NrA   r/   r3   gD()@g,)ʸ@gPork   r   r7  )	r,   ra   r   r   r   rI  r
   r   r6   )r(   r  rH  Z	bad_kappar   rG   r  r   r   r   rJ    s    zTestBroadcast.test_vonmisesc                 C   s\   dg}dg}t dddg}tt| j}||d }t||dd tt|j|d  d S )	Nr/   r3   g/h?gcE?g/gV?rk   r   r7  )	r,   ra   r   r   r   r  r
   r   r6   r(   rN  r]  r   rG   r  r   r   r   r    s    zTestBroadcast.test_paretoc                 C   s\   dg}dg}t dddg}tt| j}||d }t||dd tt|j|d  d S r^  )	r,   ra   r   r   r   rU  r
   r   r6   rg  r   r   r   rV    s    zTestBroadcast.test_weibullc                 C   s\   dg}dg}t dddg}tt| j}||d }t||dd tt|j|d  d S )	Nr/   r3   gT?gʥ?gKܮc?rk   r   r7  )	r,   ra   r   r   r   r  r
   r   r6   rg  r   r   r   r  !  s    zTestBroadcast.test_powerc                 C   s   dg}dg}dg}t dddg}tt| j}|j}||d |}t||dd	 tt||d | tt| j}|j}|||d }t||dd	 tt|||d  d S )
Nr   r/   r3   gh&BgsgR#?rk   r   r7  )	r,   ra   r   r   r   r  r
   r   r6   )r(   r  r  r\  r   rG   r  r  r   r   r   r  +  s    zTestBroadcast.test_laplacec                 C   s   dg}dg}dg}t dddg}tt| j}|j}||d |}t||dd	 tt||d | tt| j}|j}|||d }t||dd	 tt|||d  d S )
Nr   r/   r3   gs4?g$Cw%T?gտrk   r   r7  )	r,   ra   r   r   r   r  r
   r   r6   )r(   r  r  r\  r   rG   r  r  r   r   r   r  =  s    zTestBroadcast.test_gumbelc                 C   s   dg}dg}dg}t dddg}tt| j}||d |}t||dd	 tt|j|d | tt| j}|||d }t||dd	 tt|j||d  t	|d
dd
 d S )Nr   r/   r3   g$DgXPg,?rk   r   r7  r  rT   )
r,   ra   r   r   r   r  r
   r   r6   r   )r(   r  r  r\  r   rG   r  r   r   r   r  O  s    zTestBroadcast.test_logisticc                 C   s   dg}dg}dg}t dddg}tt| j}|j}||d |}t||dd	 tt||d | tt| j}|||d }tt|j||d  d S )
Nr   r/   r3   g c?gu@gVQ?rk   r   r7  )	r,   ra   r   r   r   r  r
   r   r6   )r(   r   r  Z	bad_sigmar   rG   r  r  r   r   r   r  `  s    zTestBroadcast.test_lognormalc                 C   s\   dg}dg}t dddg}tt| j}||d }t||dd tt|j|d  d S )	Nr/   r3   gs(?g4mK?gVk+?rk   r   r7  )	r,   ra   r   r   r   r  r
   r   r6   r_  r   r   r   r  p  s    zTestBroadcast.test_rayleighc                 C   s   dg}dg}dg}dg}t dddg}tt| j}||d |}t||d	d
 tt|j|d | tt|j|d | tt| j}|||d }t||d	d
 tt|j||d  tt|j||d  d S )NrE   r/   r   r9   gk7Z?g*}z9?gc-	?rk   r   r7  )	r,   ra   r   r   r   rS  r
   r   r6   )r(   r   r  Zbad_meanr\  r   rG   r  r   r   r   rT  ~  s    zTestBroadcast.test_waldc                 C   s  dg}dg}dg}dg}dg}|d \}}t dddg}tt| j}	|	j}
|
|d ||}t||dd	 tt|
|d || tt|
|d || tt|
|d || tt| j}	|	j}
|
||d |}t||dd	 tt|
||d | tt|
||d | tt|
||d | tt| j}	|	j}
|
|||d }t||dd	 tt|
|||d  tt|
|||d  tt|
|||d  tt|
d
dd tt|
d
dd tt|
d
d
d
 d S )Nr/   rk   rA   r}   gR8T>?gK?g;>h@r   r7  r"  rT   g      4@g      9@)	r,   ra   r   r   r   r0  r
   r   r6   )r(   r-  r/  r.  Zbad_left_oneZbad_mode_oneZbad_left_twoZbad_mode_twor   rG   r0  r  r   r   r   r1    sJ    
zTestBroadcast.test_triangularc           
      C   s   dg}dg}dg}dg}dg}t dddg}tt| j}|j}||d |}	t|	| tt||d | tt||d | tt||d | tt| j}|||d }	t|	| tt|||d  tt|||d  tt|||d  d S )Nr/   rE   r3   r;  r   rk   )	r,   ra   r   r   r   rH   r	   r   r6   )
r(   r  rI   bad_n	bad_p_one	bad_p_twor   rG   Zbinomr  r   r   r   r    s&    

zTestBroadcast.test_binomialc           
      C   s   dg}dg}dg}dg}dg}t jdddgt jd}tt| j}|j}||d |}	t|	| tt	||d | tt	||d | tt	||d | tt| j}|j}|||d }	t|	| tt	|||d  tt	|||d  tt	|||d  d S )	Nr/   rE   r3   r;  r   rA   rC   rk   )
r,   ra   r   r   r   r   r   r	   r   r6   )
r(   r  rI   rh  ri  rj  r   rG   Z	neg_binomr  r   r   r   r     s(    

z$TestBroadcast.test_negative_binomialc           	      C   sz   dg}dg}t dddg}tt| j}|j}|d g}|j}||d }t|| tt	||d  tt	||d  d S )Nr/   r3   r   rk   rA   )
r,   ra   r   r   r   Z_poisson_lam_maxr  r	   r   r6   )	r(   r  Zbad_lam_oner   rG   Zmax_lamZbad_lam_twor  r  r   r   r   r    s    

zTestBroadcast.test_poissonc              	   C   s   dg}dg}t dddg}tt| j}|j}||d }t|| tt||d  t j	dd( tt|t j
 tt|ddt j
g W 5 Q R X d S )NrA   r   r/   r   rk   r  r  )r,   ra   r   r   r   rX  r	   r   r6   r  rK   )r(   rN  r]  r   rG   rX  r  r   r   r   rY    s    
zTestBroadcast.test_zipfc                 C   sp   dg}dg}dg}t dddg}tt| j}|j}||d }t|| tt||d  tt||d  d S )NrE   r3   r;  r/   rk   )	r,   ra   r   r   r   r  r	   r   r6   )r(   rI   ri  rj  r   rG   r  r  r   r   r   r  	  s    
zTestBroadcast.test_geometricc                 C   s4  dg}dg}dg}dg}dg}dg}dg}t dddg}tt| j}	|	|d ||}
t|
| tt|	j|d || tt|	j|d || tt|	j|d || tt|	j|d || tt| j}	|	||d |}
t|
| tt|	j||d | tt|	j||d | tt|	j||d | tt|	j||d | tt| j}	|	j}||||d }
t|
| tt||||d  tt||||d  tt||||d  tt||||d  tt|ddd	 tt|ddd	 tt|ddd tt|ddd
 tt|ddd	 tt|ddd tt|dddgd d S )Nr/   rA   r3   r9   r}   r   rk   r   r   r   i   @i  l        r   i    r"   )	r,   ra   r   r   r   r  r	   r   r6   )r(   ZngoodZnbadr   Z	bad_ngoodZbad_nbadZbad_nsample_oneZbad_nsample_twor   rG   r  Z	hypergeomr   r   r   r  	  sJ    


z!TestBroadcast.test_hypergeometricc                 C   sp   dg}dg}dg}t dddg}tt| j}|j}||d }t|| tt||d  tt||d  d S )NrE   rA   r3   r/   rk   )	r,   ra   r   r   r   r  r	   r   r6   )r(   rI   ri  rj  r   rG   r  r  r   r   r   r  ?	  s    
zTestBroadcast.test_logseriesc              
   C   s  t t| j}|jddgdgd dd}tjdddd	ddgdd
dddd
ggd	dd	ddd	gdddd	ddggdddd	ddgd
dd
d
ddgggtjd}t|| t t| j}|ddgdgd }tjdddd	ddgdd
dddd
ggtjd}t|| t t| j}|ddgdgd gd }tjdddd	ddgdd
dddd
ggtjd}t|| t t| j}|dgdggdgd gd }tjdddd	ddgdddd	d	d	ggddd
d
dd
gdddd	ddgggtjd}t|| d S )NrW   r   r  r   r%  r   r   rA   r/   rk   r}   r   rC   )r   r   r   rR   r,   ra   r   r	   r,  r   r   r   r  L	  sV    


 zTestBroadcast.test_multinomialr  r   c              	   C   s4  t t| j}tdgd }|||}t|tr:t n|j	}|d }|j	|ksVt
t||g}|||}t||j	d d d }|j	|kst
t|g|gg}|||}t||j	d d }|j	|d kst
|j||d| d}|j	d| d ks
t
tt |j||dd}W 5 Q R X d S )NrW  r}   )r}   r3   r%  r   )r/   r/   r/   r/   r/   r/   )r   r   r   r,   ra   rR   r   rB   rY  r`   r   rq  Zbroadcast_shapesrw   rx   r6   )r(   r  rG   rm   r  Zn_shaper   r   r   r   test_multinomial_pval_broadcastk	  s$    z-TestBroadcast.test_multinomial_pval_broadcastc                 C   sF   t t| j}dgd dgd g}tt|jd| tt|jdd d S )Nr  r   rW  r/   rE   )r   r   r   r   r6   rR   )r(   rG   rm   r   r   r   test_invalid_pvals_broadcast	  s    z*TestBroadcast.test_invalid_pvals_broadcastc                 C   s   t t| j}|tdddgd }|jdks6t|dtd}|jdksVt|tddtd	}|jd	ks~td S )
N)r   r   r   i8r  r   )r   r   r   r   r   )r   r   r   )rk   r   r   )rk   r   r   r}   )r   r   r   rR   r,   r   r`   r   r  r   r   r   test_empty_outputs	  s    z TestBroadcast.test_empty_outputsN)+r=   r>   r?   r|   r5  r  r  r  r  r  r  r  rd  r  r  r,  rJ  r  rV  r  r  r  r  r  r  rT  r1  r  r   r  rY  r  r  r  r  rw   r   r   r,   ra   rk  rl  rn  r   r   r   r   r[  2  sN   
#




(-

r[  zcan't start threadr  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )
TestThreadc                 C   s   t d| _d S )Nr}   )r+   seedsr7   r   r   r   r|   	  s    zTestThread.setup_methodc                    s   ddl m  tt| jf| }tt| jf| } fddt| j|D }dd |D  dd |D  t| j|D ]\}}tt|| q|t	 j
jdkrtjdkrt|| n
t|| d S )	Nr   )Threadc                    s(   g | ] \}} t t||fd qS ))targetargs)r   r   )rm  r)   orq  functionr   r   ro  	  s   z-TestThread.check_function.<locals>.<listcomp>c                 S   s   g | ]}|  qS r   )startrm  rZ   r   r   r   ro  	  s     c                 S   s   g | ]}|  qS r   )joinrx  r   r   r   ro  	  s     r}   win32)	threadingrq  r,   r   r   rp  zipr   r   ZintprD   r   r   platformr
   r	   )r(   rv  szZout1Zout2tr)   rt  r   ru  r   check_function	  s    
zTestThread.check_functionc                 C   s   dd }| j |dd d S )Nc                 S   s   | j dd|d< d S )Nrc  r   .)r  r   r  r   r   r   
gen_random	  s    z*TestThread.test_normal.<locals>.gen_random)rc  r~  r  r(   r  r   r   r   r  	  s    zTestThread.test_normalc                 C   s   dd }| j |dd d S )Nc                 S   s   | j tdd|d< d S )NrN   r"   r  .)r  r,   r`  r  r   r   r   r  	  s    z'TestThread.test_exp.<locals>.gen_randomr  r  r  r  r   r   r   test_exp	  s    zTestThread.test_expc                 C   s   dd }| j |dd d S )Nc                 S   s   | j ddgd dd|d< d S )Nr   r  r   rc  r   .)rR   r  r   r   r   r  	  s    z/TestThread.test_multinomial.<locals>.gen_random)rc  r   r  r  r  r   r   r   r  	  s    zTestThread.test_multinomialN)r=   r>   r?   r|   r  r  r  r  r   r   r   r   ro  	  s
   ro  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestSingleEltArrayInputc                 C   s4   t dg| _t dg| _t dg| _d| _d S )NrA   rk   r}   rs  )r,   ra   argOneargTwoargThreetgtShaper7   r   r   r   r|   	  s    z$TestSingleEltArrayInput.setup_methodc                 C   s   t jt jt jt jt jt jt jt jt j	t j
t jt jf}t jt jf}|D ]6}||krb|tdg}n
|| j}t|j| j qDd S r   )rG   r  r  r  r+  r  rU  r  r  r  rX  r  r  r,   ra   r  r   r`   r  )r(   funcs	probfuncsr9  r  r   r   r   test_one_arg_funcs	  s$         
z*TestSingleEltArrayInput.test_one_arg_funcsc                 C   s   t jt jt jt jt jt jt jt jt j	t j
t jt jt jt jf}t jt jf}|D ]v}||krftdg}n| j}|| j|}t|j| j || jd |}t|j| j || j|d }t|j| j qLd S )NrE   r   )rG   r4  r  r  r  r  r  rI  r  r  r  r  rS  rH   r   r,   ra   r  r  r   r`   r  )r(   r  r  r9  r  r  r   r   r   test_two_arg_funcs	  s2          z*TestSingleEltArrayInput.test_two_arg_funcsc              	   C   s   t jt jt jt jt jt jt jt jt j	g	}t
j}t dg}t dg}|D ]f}|||||d}t|j| j ||d |||d}t|j| j |||d ||d}t|j| j qJd S )Nr/   r   r   )r,   r   r   r   r   r   r   r_   r   r   rG   r&   ra   r   r`   r  )r(   r    r   r9  r	  r  r   r  r   r   r   r-  	  s        z%TestSingleEltArrayInput.test_integersc                 C   s   t jt jt jg}|D ]l}|| j| j| j}t|j| j	 || jd | j| j}t|j| j	 || j| jd | j}t|j| j	 qd S )Nr   )
rG   r  r0  r  r  r  r  r   r`   r  )r(   r  r9  r  r   r   r   test_three_arg_funcs
  s    z,TestSingleEltArrayInput.test_three_arg_funcsN)r=   r>   r?   r|   r  r  r-  r  r   r   r   r   r  	  s
   r  r  c                 C   s   | d }| d }t |}|| |jd d }tjdkrB| }t|}|jd d | d d ksjt|	 | d d kst|
 }|jd d }tjdkr| }t|}|jd d | d	 d kst|	 | d	 d kstd S )
Nr   r   r   r   r  r   r   r   r   )r   r0   r   r   r   r   r   r   r   r   r   )r  r   r   Zmt19937r   r   r   r   r   r   test_jumped
  s"    




r  c               	   C   sl  t d} t d}d}tj| |ddjdks2ttt tj| ||d W 5 Q R X tt tj| |dd W 5 Q R X tt tj| |dd W 5 Q R X t d}tt tj	||d W 5 Q R X tt tj	|dd W 5 Q R X tt tj	|dd W 5 Q R X t 
|}tt tj	||d	 W 5 Q R X tt tjd
ddgdd W 5 Q R X tt tjd
dgddd W 5 Q R X tt tjd
dgddgdd W 5 Q R X tt tjddgddgdd W 5 Q R X tjddd}tjddd}tjddd}t|||jdks<ttjtdd tj|||dd W 5 Q R X d S )Nrk   )r}   rk   )r   r}   rA   )rW   r}   rk   r   )r/   rk   )r}   r/   r/   )rk   r  r/   rK  gffffff?)rA   r/   rA   rW   zOutput size \(6, 5, 1, 1\) isrt   )r   rW   r/   r/   )r,   r`  rG   r  r`   r   rw   rx   r6   r  r   rH   rR   r  r  )r  r  r   r`   r  rN  rO  rP  r   r   r   test_broadcast_size_error9
  sD    



""r  c               	   C   sN   t d} t d}tj| |dd tt tj| |dd W 5 Q R X d S )Nrk   r   rA   )r,   r`  rG   r  rw   rx   r6   )r  r  r   r   r   test_broadcast_size_scalard
  s
    

r  c                  C   s8   g g dg} t td}t|j|  | dg g gks4td S r  )r   r   r   rI  r   )seqgenr   r   r   test_ragged_shufflel
  s    
r  r	  r9   c              	   C   s   t td}|rdnd}tjt|d |j| |d W 5 Q R X |rHdnd}tjt|d |jd| |d W 5 Q R X tjt|d |jdg| |d W 5 Q R X d S )	Nr   zhigh < 0z	high <= 0rt   r5  z
low > highzlow >= highr3   )r   r   rw   rx   r6   r&   )r	  r    r  msgr   r   r   !test_single_arg_integer_exceptiont
  s    r  rD   Zf4Zf8c              	   C   sv   t jdd| d}dddg}tjtdd tj||| d	 W 5 Q R X tjtdd tj|||j| d
 W 5 Q R X d S )Nr   F)orderrD   r/   rA   rk   zSupplied output arrayrt   r#  r$  )r,   r   rw   rx   r6   rG   r  r`   )rD   r  r`   r   r   r   test_c_contig_req_out
  s    
r  r  r  Cdistc                 C   sH   t jd||d}| ||d}||ks(t| |||jd}||ksDtd S )Nr   )rD   r  r#  )r  rD   r   )r,   r   r   r`   )r  r  rD   r  Zvariatesr   r   r   test_contig_req_out
  s
    r  c                  C   sp   t jt jd} | d |  \}}}|d d dks@t||d d  }||j_|jj}||ksltd S )Nr   r/   )	PCG64DXSM)	r,   rG   r   r  r   
__reduce__r   r   r   )r   Zctorrs  Zstate_arO  Zstate_br   r   r   $test_generator_ctor_old_style_pickle
  s    
r  )1r   r   rw   Znumpyr,   Znumpy.linalgr   Znumpy.testingr   r   r   r   r   r   r	   r
   r   r   Znumpy.randomr   r   r   r   rG   ZJUMP_TEST_DATAZfixturer    r!   r@   rM   rz   r   r   r"  r[  r   rZ  ro  r  r   r  r  r  r  r  r  r   r  r  r   r   r   r   <module>   s   0


$6 "   	        x    j/U
+

	