B
    .uf                @   s0  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 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!G d1d2 d2Z"G d3d4 d4Z#ej$%d5ed6d7 Z&d8d9 Z'd:d; Z(d<d= Z)ej$%d>d?d?ggej$%d ddgd@dA Z*ej$%dBdCdDgdEdF Z+ej$%dBdCdDgej$%dGdHdIgej$%dJej,ejgdKdL Z-dS )M    N)LinAlgError)	assert_assert_raisesassert_equalassert_allcloseassert_warnsassert_no_warningsassert_array_equalassert_array_almost_equalsuppress_warnings)	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)scopeparamsc             C   s   | j S )N)param)request r   k/home/ankuromar296_gmail_com/myenv/lib/python3.7/site-packages/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   i  i  l    iD  )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   i  i  r   i  l    iD  )r   r   ranger   r!   nparange)r"   r#   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_raw)r"   r#   r   r   r   test_seedsequence<   s    zTestSeed.test_seedsequencec             C   s   t ttd t ttd d S )Ng      )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 )Ng      r,   r)   l        )r   r-   r   r.   )r"   r   r   r   test_invalid_arrayE   s    zTestSeed.test_invalid_arrayc             C   s   t ttt d S )N)r   r.   r   r   )r"   r   r   r   test_noninstantized_bitgenK   s    z#TestSeed.test_noninstantized_bitgenN)	__name__
__module____qualname__r$   r(   r+   r/   r1   r2   r   r   r   r   r    +   s   
r    c               @   s   e Zd Zdd Zdd ZdS )TestBinomialc             C   sF   t jddd}x2dD ]*}ttd|dk tt||| qW d S )N   int)dtype)r   g      ?r)   r   )r&   zerosr   randombinomialr	   )r"   r:   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   r.   r;   r<   r&   nan)r"   r   r   r   test_p_is_nanY   s    zTestBinomial.test_p_is_nanN)r3   r4   r5   r>   r@   r   r   r   r   r6   O   s   	r6   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S )TestMultinomialc             C   s   t dddg d S )Nd   g?g?)r;   multinomial)r"   r   r   r   
test_basic_   s    zTestMultinomial.test_basicc             C   s   t ddddddg d S )NrB   g?g?g        )r;   rC   )r"   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 )Nr,      )r   r;   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 )Ng      ?r)   )r)   r7   r7   )r7   r7   r7   )r7   r7   )
r   r;   rC   r&   uint32shapearrayr   r-   float)r"   r=   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 )NrB   g?g?gg?)r   r.   r;   rC   )r"   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 )Nr,   g?g?r   )r   r.   r;   rC   )r"   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)      i۠iUrB   )pvals)r&   r'   sumr   r   rC   ascontiguousarrayr	   )r"   r=   rS   r;   
non_contigcontigr   r   r   test_p_non_contiguous   s    
z%TestMultinomial.test_p_non_contiguousc          	   C   sx   t ttjdddgg t ttjddgdgg t ttjddgdggdgdggg t ttjdtddgddgg d S )Nr   r   r)   )r   r.   r;   rC   r&   rM   )r"   r   r   r   test_multidimensional_pvals   s    $z+TestMultinomial.test_multidimensional_pvalsc             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 d Q R X d S )NgGz?g&.>)r9   i۠iUz-[\w\s]*pvals array is cast to 64-bit floating)matchr)   )
r&   rM   float32rT   r   r   pytestraisesr.   rC   )r"   rI   rS   r;   rZ   r   r   r   test_multinomial_pvals_float32   s    z.TestMultinomial.test_multinomial_pvals_float32N)r3   r4   r5   rD   rE   rJ   rO   rP   rQ   rX   rY   r^   r   r   r   r   rA   ^   s   
rA   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   )r"   r   r   r   setup   s    z$TestMultivariateHypergeometric.setupc             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      r7   rR   r,   r)   iɚ;e   rG   	marginalsrB   count)
r   r.   r;   multivariate_hypergeometricr&   iinfoint64maxr9   itemsize)r"   Z
int64_infoZ	max_int64Zmax_int64_indexr   r   r   test_argument_validation   s"    z7TestMultivariateHypergeometric.test_argument_validationmethodrd   rc   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   )rk   r)   )sizerk   )r)   r   )r9   r7   rR   r   ra   rG      )	r   r   r   re   r	   r&   emptyrg   rT   )r"   rk   r;   rI   colorsr   r   r   test_edge_cases   s$    

z.TestMultivariateHypergeometric.test_edge_casesnsample      -   7   rl   rG   )r7   rR   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   rG      rs   )rk   r   r,   )axis)Z
fill_valuer9   i gMbP?g{Gzt?)rtolZatol)r   r   r   r&   rM   re   
isinstancer8   rL   r   r   rH   r	   rT   fullr   mean)r"   rq   rk   rl   r;   ro   sampleZ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 )	NrR   ra   rG   rd   )rl   rk   r7   r)   r   )r   r   r   re   r&   rM   r	   )r"   r;   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 )Nrv      2   rG   rc   )rl   rk   r                     rm      )r   r   r   re   r&   rM   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 )Nrv   r   r   rm   rG   rc   )rl   rk   r7   rR   r   ra   r)      )r   r   r   re   r&   rM   r	   )r"   r;   r|   r~   r   r   r   test_repeatability3  s    z2TestMultivariateHypergeometric.test_repeatability3N)r3   r4   r5   r`   rj   r\   markparametrizerp   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	S )
TestSetStatec             C   sT   d| _ tt| j | _| jj| _| jj| _| jd | jd d | jd d f| _d S )NiIbit_generatorstatekeyr   )r   r   r   rgr   r   Zlegacy_state)r"   r   r   r   r`   !  s    

zTestSetState.setupc             C   s<   | j jdd}| j| j_| j jdd}tt||k d S )NrR   )rl   )r   standard_normalr   r   r   r&   rH   )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 )NrR   )rl   )r   r   r   r   r   r&   rH   )r"   r   r   r   r   r   r    test_gaussian_reset_in_media_res1  s    
z-TestSetState.test_gaussian_reset_in_media_resc             C   s   | j dd d S )Ng      ?)r   negative_binomial)r"   r   r   r   test_negative_binomial<  s    z#TestSetState.test_negative_binomialN)r3   r4   r5   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   r9   )r   r-   rfuncrN   )r"   r   r   r   r   test_unsupported_typeI  s    z"TestIntegers.test_unsupported_typec          	   C   s(  x | j D ]}|tkrdn
t|j}|tkr4dnt|jd }|rP|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
W d S )Nr   r7   r)   )r   r9   )	itypeboolr&   rf   minrh   r   r.   r   )r"   r   dtlbndubndr   r   r   test_bounds_checkingL  s(    





z!TestIntegers.test_bounds_checkingc          	   C   s   x| j D ]}|tkrdn
t|j}|tkr0d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W d S )Nr   r7   r)   )r   r9   )	r   r   r&   rf   r   rh   r   r.   r   )r"   r   r   r   r   r   r   r   test_bounds_checking_arrayc  s    

z'TestIntegers.test_bounds_checking_arrayc          	   C   s6  x.| j D ]"}|tkrdn
t|j}|tkr4dnt|jd }|rP|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
W d S )Nr   r7   r)   i  )rl   r   r9   )r   r   r&   rf   r   rh   r   r   )r"   r   r   r   r   Zis_opentgtr   r   r   test_rng_zero_and_extremesq  s*    
z'TestIntegers.test_rng_zero_and_extremesc             C   s  d}x| j D ]}|tkr dn
t|j}|tkr8dnt|jd }|rT|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W d S )Ni  r   r7   r)   )rl   r9   )r9   )r   r   r&   rf   r   rh   r   r   )r"   r   rl   r   r   r   r   r   r   r    test_rng_zero_and_extremes_array  s4     " " z-TestIntegers.test_rng_zero_and_extremes_arrayc             C   s   x| j D ]}|tkrdn
t|j}|tkr0dnt|jd }|rL|d n|}y| j||||d W q tk
r } ztdt	| W d d }~X Y qX qW d S )Nr   r7   r)   )r   r9   zMNo error should have been raised, but one was with the following message:

%s)
r   r   r&   rf   r   rh   r   	ExceptionAssertionErrorstr)r"   r   r   r   r   er   r   r   test_full_range  s    zTestIntegers.test_full_rangec             C   s   x| j D ]}|tkrdn
t|j}|tkr0dnt|jd }|rL|d n|}y| j|gd |g||d W q tk
r } ztdt	| W d d }~X Y qX qW d S )Nr   r7   r)   )r   r9   zMNo error should have been raised, but one was with the following message:

%s)
r   r   r&   rf   r   rh   r   r   r   r   )r"   r   r   r   r   r   r   r   r   test_full_range_array  s    z"TestIntegers.test_full_range_arrayc          	   C   s   t t }x\| jdd  D ]J}xDdD ]<}| jd|| d||d}t| |k  t| dk q$W qW | jdd| d|td}t| dk  t| dk d S )Nr)   )ra   rr      r7   i   )rl   r   r9   r   )r   r   r   r   r   rh   r   r   )r"   r   r;   r   r   valsr   r   r   test_in_bounds_fuzz  s    


z TestIntegers.test_in_bounds_fuzzc       
      C   s   x| j D ]}|tkrdn
t|j}|tkr0dnt|jd }|rL|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W d S )Nr   r7   r)   i  i  )rl   r   r9   )
r   r   r&   rf   r   rh   r   r   r!   r	   )
r"   r   r   r   r   rl   r;   ZscalarZscalar_arrayrM   r   r   r   test_scalar_array_equiv  s     

z$TestIntegers.test_scalar_array_equivc          
   C   s   dddddddddd	}x| j dd  D ]v}ttd}tjd	kr\|jd
d| d||d}n|jd
d| d||d }t|	 }t
|t|j |k q(W 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int32rg   int8uint16rK   uint64uint8r)   i  littler   r   i  )rl   r   r9   r7   )r   r   r   sys	byteorderr!   byteswaphashlibsha256	hexdigestr   r&   r9   namer   viewr   )r"   r   r   r   r;   valresr   r   r   test_repeatability  s.    

zTestIntegers.test_repeatabilityc             C   s   x| j D ]}|ttjfkrdn
t|j}|ttjfkr<dnt|jd }|rX|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W d S )Nr   r7   r)   i  i  )rl   r   r9   )r   r9   )r   r   r&   bool_rf   r   rh   r   r   r!   r	   )r"   r   r   r   r   r;   r   Zval_bcr   r   r   test_repeatability_broadcasting  s    "

z,TestIntegers.test_repeatability_broadcastingzbound, expectedl    iui,YQiXgi$#Pl   bA i{El   /Yi l        iui,YQiXgi%#Pl   bA i|El   0Yi l       l   bA l   1Yi i{,miuHl   HM c             C   sN   xHd t |gD ]8}ttd}|j||d}t||d k	r<|n|d  qW d S )Ni  )rl   r   )lenr   r   r!   r   )r"   boundr~   rl   r;   rI   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}xTd.D ]L}ttd/}|jd0gd1gd2ggd3d4d5g|d6}t||d k	r|n|d1  qW d 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)rG   rR   rR   i90  r,   r   r)   l    l        l       )rl   )r&   rM   r   r   r!   r	   )r"   desiredrl   r;   rI   r   r   r   .test_repeatability_32bit_boundary_broadcasting6  s*    




z;TestIntegers.test_repeatability_32bit_boundary_broadcastingc          
   C   s@  t jddd fdddft jdi}x|D ]}x|| 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	 q:W q(W d S )Nr   r7   A   )r,   l            )r   r   )r   r   ))r   l            )l         l            )r   r   )r   r   )l        l        r   )r   r9   )r9   )	r&   r   rg   rM   r   r.   r;   r!   object)r"   r   Zconfigsr9   configlowhighZlow_aZhigh_aZlow_oZhigh_or   r   r   &test_int64_uint64_broadcast_exceptionsM  s0    






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 )Nr)   )r   r9   )r&   rg   rf   rh   r   r;   r!   r   )r"   r   r   r   r   r   actualr   r   r   test_int64_uint64_corner_casei  s    z*TestIntegers.test_int64_uint64_corner_casec             C   s  x| j D ]x}|tkrdn
t|j}|tkr0dnt|jd }|rL|d n|}|tkr^tjn|}| j||||d}t|j	| qW xt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|| qW d S )Nr   r7   r)   )r   r9   r9   )r   r   r&   rf   r   rh   r   r   r   r9   r8   compatlonghasattrr   type)r"   r   r   r   r   r|   r   r   r   test_respect_dtype_singleton  s    z)TestIntegers.test_respect_dtype_singletonc             C   s   x| j D ]}|tkrdn
t|j}|tkr0dnt|jd }|rL|d n|}|tkr^tjn|}| j|g|g||d}t|j	| | j|gd |gd ||d}t|j	| qW d S )Nr   r7   r)   )r   r9   )
r   r   r&   rf   r   rh   r   r   r   r9   )r"   r   r   r   r   r|   r   r   r   test_respect_dtype_array  s    z%TestIntegers.test_respect_dtype_arrayc             C   s   x| j D ]}| jddd||d}|jdks.t|j|ks<t| jddd||djdksZt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W d S )Nr   )rR   r   ra   )r   r9   i)r   )rl   r   )r   r   rL   r   r9   r   r;   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 d Q R X d S )Nbigz<i4z>i4r      r   )rl   r9   )r   r   r\   r]   r.   r;   r!   )r"   Zother_byteord_dtr   r   r   test_error_byteorder  s    z!TestIntegers.test_error_byteorderzsample_size,high,dtype,chi2maxi@KL rG   g     @_@r   g     b@i i	  g     ȩ@ii  g     d@c       
      C   sN   t j|||d}tj|dd\}}|| }|| d |  }	|	|k sJtd S )N)rl   r9   T)Zreturn_countsr7   )r;   r!   r&   uniquerT   r   )
r"   Zsample_sizer   r9   Zchi2maxsamplesvaluescountsr~   Zchi2r   r   r   $test_integers_small_dtype_chisquared  s
    
z1TestIntegers.test_integers_small_dtype_chisquaredN)*r3   r4   r5   r;   r!   r   r   r&   r   r   r   r   r   rK   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r\   r   r   rM   r   r   r   r   r   r   r   r   slowr   r   r   r   r   r   B  sF   #r   c               @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd 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$%dAe&e'ge#j$%dBdCe()dDdEdFdGdHdIgdJdKdLdMdNdOggfdFe()dOdNdLdGdHdIgdFdEdJdDdKdMggfdNe()dMdDdKdFdLdNgdIdGdHdOdJdEggfgdPdQ Z*dRdS Z+dTdU Z,e#j$%dVdWdMgdXdY Z-dZd[ Z.d\d] Z/d^d_ Z0d`da Z1dbdc Z2ddde Z3dfdg Z4dhdi Z5djdk Z6e#j$j7dldm Z8dndo Z9dpdq Z:drds Z;dtdu Z<dvdw Z=dxdy Z>dzd{ Z?d|d} Z@d~d ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJe#j$%ddddgdd ZKe#j$%ddddgdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd 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 Zpe#j$%dddgdd Zqe#j$%dde(jr de(jrdge#j$%ddddNddgdd Zsdd Ztdd Zudd Zvdd ZwdCS )TestRandomDistc             C   s
   d| _ d S )NiI)r   )r"   r   r   r   r`     s    zTestRandomDist.setupc             C   sH   t t| j}|jdddd}tddgddgd	d
gg}t|| d S )Nic   )rR   r7   )rl   ii)   %   ii)r   r   r   r!   r&   rM   r	   )r"   r;   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   )rR   r7   )rl   r9   r      F   D   rr   r   )r9   )r   r   r   r!   r&   rK   rM   r	   )r"   r;   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 )Nir   )rR   r7   T)rl   r   iir   &   ii)r   r   r   r!   r&   rM   r	   )r"   r;   r   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   )r;   r!   r&   rf   rh   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 )N)rR   r7   gG0Ը?gæ?g2?gu	A?gH
>H?g;dE?r   )decimal)r   r   )r   r   r   r;   r&   rM   r
   )r"   r;   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 )
N)rR   r7   gCԸ?gP?gtX?g81
A?grO>H?g88dE?r   )r   )r   r   r   r;   r&   rM   r
   )r"   r;   r   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 )N)r9   gCԸ?r   )r   )r   r   r   r;   r&   r[   r
   )r"   r;   r   r   r   r   r   test_random_float_scalar  s    z'TestRandomDist.test_random_float_scalarc             C   s   t ttjdd d S )Nr   )r9   )r   r-   r;   )r"   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 )Nra   r   r7   )r9   )r   r   r   choicer&   rM   rg   r	   )r"   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 )Nra   g?g?)r=   r   r)   )r9   )r   r   r   r   r&   rM   rg   r	   )r"   r;   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 )	Nra   rR   F)replacer7   r   )r9   )r   shuffle)	r   r   r   r   r&   rM   rg   r	   r'   )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 )Nra   rR   Fg?g333333?g      ?)r   r=   r   r7   )r9   )r   r   r   r   r&   rM   rg   r	   )r"   r;   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dra   )r   r   r   r   r&   rM   r	   )r"   r;   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)   r7   rR   ra   rG   r   r   )r   r   r   r   r&   rM   r	   )r"   r;   r   r   r   r   r   )test_choice_multidimensional_default_axis-  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)   r7   rR   ra   rG   r   r   )rw   )r   r   r   r   r&   rM   r	   )r"   r;   r   r   r   r   r   (test_choice_multidimensional_custom_axis3  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 )Nr,   rR   g      @r)   r7   ra   g      ?)r=   g?g?g?gF)r   r0   )r,   )r,   r)   r   )r   r=   )r;   r   r   r.   )r"   r|   r   r   r   test_choice_exceptions9  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 )Ng?g?r7   T)r   F)r   r=   r)   )r9   r   )r7   rR   g?g?r   )rR   r   ra   )rl   i)r   r   r   r   )r   r&   Zisscalarr;   r   rM   rn   r   tuplendimitemr   rL   r'   r!   r   r.   )r"   r=   r   arrr#   r   r   r   test_choice_return_shapeK  sJ     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)   r7   )r=   )r&   rM   r   r.   r;   r   )r"   r   r=   r   r   r   test_choice_nan_probabilitiesy  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   rG   g      @r)   r7   rR   )r=   )r&   onesr   r   r   r   rU   r	   )r"   r=   r;   rV   rW   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 )Nra   g      @r7   F)r   )r=   )r=   r   )r&   r  r;   r   r9   rg   r   )r"   r=   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@4266599d12bfcfb815213303432341c06b4349f5455890446578877bb322e222i'  i  F)r   r   )r   r   r   r   r   r   r   r   r   r   r&   r   r   r   )r"   Zchoice_hashr;   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   r   r   r   
test_bytes  s    
zTestRandomDist.test_bytesc             C   s   xdd dd dd dd dd dd dd d	d d
d dd dd g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|| qHW d S )Nc             S   s
   t g S )N)r&   rM   )rI   r   r   r   <lambda>      z-TestRandomDist.test_shuffle.<locals>.<lambda>c             S   s   | S )Nr   )rI   r   r   r   r    r  c             S   s   t | t jS )N)r&   asarrayastyper   )rI   r   r   r   r    r  c             S   s   t | t jS )N)r&   r  r  r[   )rI   r   r   r   r    r  c             S   s   t | t jS )N)r&   r  r  Z	complex64)rI   r   r   r   r    r  c             S   s   t | tS )N)r&   r  r  r   )rI   r   r   r   r    r  c             S   s   dd | D S )Nc             S   s   g | ]}||fqS r   r   ).0ir   r   r   
<listcomp>  s    zATestRandomDist.test_shuffle.<locals>.<lambda>.<locals>.<listcomp>r   )rI   r   r   r   r    r  c             S   s   t dd | D S )Nc             S   s   g | ]}||gqS r   r   )r  r  r   r   r   r    s    zATestRandomDist.test_shuffle.<locals>.<lambda>.<locals>.<listcomp>)r&   r  )rI   r   r   r   r    r  c             S   s   t | | gjS )N)r&   ZvstackT)rI   r   r   r   r    r  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   )r  r  r   r   r   r    s    zATestRandomDist.test_shuffle.<locals>.<lambda>.<locals>.<listcomp>r   r   )r&   r  r8   r   Zrecarray)rI   r   r   r   r    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   )r  r  r   r   r   r    s    zATestRandomDist.test_shuffle.<locals>.<lambda>.<locals>.<listcomp>r   )r)   r   )r&   r  r   r   )rI   r   r   r   r    s   r)   r7   rR   ra   rG   r   r   rr   r   r   )r   r   r   r   r	   )r"   convr;   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   )ra   ra   r)   )rw   r   rR   r7   ra   r   rG   r   rr      r   r   rm   r   r   r   r,   )	r   r   r   r&   r'   reshaper   rM   r	   )r"   r;   r   r   r   r   r   test_shuffle_custom_axis  s    


z'TestRandomDist.test_shuffle_custom_axisc             C   sX   t t| j}tg d}x4dD ],}tg d}|j||d t|| q$W d S )N)r   r   )r   r)   )rw   )r   r   r   r&   rM   r  r   r	   )r"   r;   r   rw   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 )Nrv   r7   r   r)   )rw   )
r&   r'   r  copyr   r   r   r   r  r	   )r"   y1y2r;   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}| }| }xptdD ]d}t| t	t
|j|j  t
|j|j   t| t	t
|j|j  t
|j|j   qXW d S )Nrv   )rG   ra   rR   r)   r,   r   )r&   maZmasked_valuesr  r%   r'   r   r;   r   r   sorteddatamask)r"   r   r   Za_origZb_origr  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   )rR   rR   rR   r7   ra   rG   r   )rR   r7   )r   r   r   r&   r'   r   	AxisErrorr   r  r-   sliceNotImplementedErrorrM   r  )r"   r;   r  r   r   r   test_shuffle_exceptions  s    


z&TestRandomDist.test_shuffle_exceptionsc       	      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)   r7   rR   ra   rG   r   r   rr   r   r   abcdg333333?r   )
r   r   r   permutationr	   r&   Z
atleast_2dr  r   r)  )	r"   r;   r  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   )ra   ra   r   rR   r)   r7   ra   r   rG   r   rr   r  r   r   rm   r   r   r   )rw   r,   )	r&   r'   r  rM   r   r   r   r.  r	   )r"   r   r   r;   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   )rR   rR   rR   r7   )r   r   r   r&   r'   r   r)  r.  r  r-   r*  )r"   r;   r  r   r   r   test_permutation_exceptions  s    
z*TestRandomDist.test_permutation_exceptionsr9   zaxis, expectedNrR   r   r   r   r   r  rr   ra   r7   rG   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 )Nrm   r7   r   )rw   out)rw   )r   r   r   r&   r'   r  r  permutedr	   r9   r   )r"   r9   rw   r~   r;   rI   yr   r   r   test_permuted'  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   r7   r  rR   r)   )rw   r2  r   r   r   r   rv   r   )
r   r   r   r&   r'   r  r   r3  rM   r	   )r"   r;   Zx0x1rI   r4  r~   r   r   r   test_permuted_with_strides;  s    
z)TestRandomDist.test_permuted_with_stridesc             C   s   t g }t|g  d S )N)r;   r3  r	   )r"   r4  r   r   r   test_permuted_emptyH  s    
z"TestRandomDist.test_permuted_emptyoutshape)r7   rR   c          	   C   sL   t dddg}t j||jd}tjtdd tj||d W d Q R X d S )Nr)   r7   rR   )r9   z
same shape)rZ   )r2  )	r&   rM   r:   r9   r\   r]   r.   r;   r3  )r"   r:  r   r2  r   r   r   "test_permuted_out_with_wrong_shapeL  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 d Q R X d S )N)rR   rG   )r9   zCannot cast)rZ   r)   )rw   r2  )	r&   r:   r   r  r\   r]   r-   r;   r3  )r"   r2  rI   r   r   r   !test_permuted_out_with_wrong_typeS  s    
z0TestRandomDist.test_permuted_out_with_wrong_typec             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 )Ng?g?)rR   r7   )rl   gW<$=g^
=g/:Ћ?gG!Gc>g'`2?gU?r   )r   )r   r   r   betar&   rM   r
   )r"   r;   r   r   r   r   r   	test_betaY  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/?)rR   r7   )rl   r	  r   0   ,   r   )r   r   r   r<   r&   rM   r	   )r"   r;   r   r   r   r   r   test_binomialb  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   )rR   r7   )rl   gmE~@@g
1ςC@grӳL@gm%xL@g<kQK@gtK@r   )r   )r   r   r   	chisquarer&   rM   r
   )r"   r;   r   r   r   r   r   test_chisquareo  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 )NgI<I@gEZC@)rR   r7   )rl   g28\h?gɎG/?gAp?g|);?gLX?gfOh?g됷W?g(ސP?gz$Q?gmWt ?g搝K?g4hz?r   )r   gHzG?gؗҜ)r   r   )	r   r   r   r&   rM   	dirichletr
   r   r.   )r"   r;   alphar   r   Z	bad_alphar   r   r   test_dirichletw  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 )NgI<I@gEZC@r)   )r)   r7   r7   )r7   r7   r7   )r7   r7   )
r&   rM   r   r;   rD  rK   rL   r   r-   rN   )r"   r=   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 )NgHzG?gؗҜrG   r)   )r&   rM   r   r.   r;   rD  )r"   rE  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 )NgI<I@g      gEZC@r7   )rR   r7   )rl   )r&   rM   r   r   r   rD  rU   r
   )r"   r   rE  r;   rV   rW   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 )	Ng&.>g      ?gMbP?)rR   r7   )rl   g        r   )r   )r&   rM   r   r   r   rD  r
   )r"   ZepsrE  r;   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)rl   r   )rw   gMbP?)rx   )	r&   rM   rT   r   r   r   rD  r{   r   )r"   rE  Z
exact_meanr;   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?)rR   r7   )rl   gvM?g?g#c?gQ:N?gAP?gE_9@r   )r   )r   r   r   exponentialr&   rM   r
   )r"   r;   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   )scaleg       )r   r;   rL  r   r.   )r"   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 )Nrm   M   )rR   r7   )rl   g}(Ҍ?gi?g=r?g]hDA?gjӨ?g8k*u?r   )r   )r   r   r   fr&   rM   r
   )r"   r;   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 )NrG   rR   )rR   r7   )rl   g,שn'@gt@g<e2@g1a3@g3r
y-2@gs1-2@r   )r   )r   r   r   gammar&   rM   r
   )r"   r;   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   )rL   rN  g       )r   r;   rS  r   r.   )r"   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 )Ng_c97ݚ?)rR   r7   )rl   r)   r  rm   r   )r   r   r   	geometricr&   rM   r	   )r"   r;   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 d Q R X d S )Ng?r   gignore)invalid)r   r.   r;   rV  r&   errstater?   )r"   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 )Ng_c97ݚ?g       @)rR   r7   )locrN  rl   gA7G@g1Fiҿgei@g_Cg0cPg`(_տr   )r   )r   r   r   gumbelr&   rM   r
   )r"   r;   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 )Nr   )rN  g       )r   r;   r]  r   r.   )r"   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   )rR   r7   )rl   r   r   rG   r   rR   ra   r   rm   )r   r   r   hypergeometricr&   rM   r	   )r"   r;   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 )Ng_c97ݚ?g       @)rR   r7   )r\  rN  rl   g6@	ga@bDA"?g*[r{g>K?g(?g<?r   )r   )r   r   r   laplacer&   rM   r
   )r"   r;   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 )Nr   )rN  g       )r   r;   rb  r   r.   )r"   r   r   r   test_laplace_0#  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 )Ng_c97ݚ?g       @)rR   r7   )r\  rN  rl   gbZgHʊg$>?g>&gQh@g%?n?gĉ8|?r   )r   )r   r   r   logisticr&   rM   r
   )r"   r;   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 )Ng_c97ݚ?g       @)rR   r7   )r{   sigmarl   gܒx?gk*+@g<Ҿ?g
@g5a@g%jz(@r   )r   )r   r   r   	lognormalr&   rM   r
   )r"   r;   r   r   r   r   r   test_lognormal/  s    
zTestRandomDist.test_lognormalc             C   s&   t tjddd tttjdd d S )Nr   )rg  r)   g       )r   r;   rh  r   r.   )r"   r   r   r   test_lognormal_07  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ƀ@?)rR   r7   )r=   rl   r   r   rR      rG   r)   )r   r   r   	logseriesr&   rM   r	   )r"   r;   r   r   r   r   r   test_logseries;  s    
zTestRandomDist.test_logseriesc          	   C   sB   t jdd, tttjt j tttjt jgd  W d Q R X d S )NrX  )rY  r   )r&   rZ  r   r.   r;   rl  r?   )r"   r   r   r   test_logseries_exceptionsC  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 )Nrv   gUUUUUU?r   )rR   r7   )rl   r)   rG   ra   rR   r7   r   r   )r   r   r   rC   r&   rM   r	   )r"   r;   r   r   r   r   r   test_multinomialH  s    zTestRandomDist.test_multinomialrk   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 d 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)g_c97ݚ?r   r)   r   )rR   r7   )rk   gtg$&@g&بO=g!$@gDo?g\&@g,R{?g
f!@g?ժ?gT^o#@g`R?gP'@r   )r   gl?g$("@r7   raise)check_validrq  rr  rX  )rt  rk   )rp  rq  )rl   rk   ).r   ).r)   r   g?)r9   other)r7   r)   r)   rR   )r   r   r   multivariate_normalr&   rM   r
   r   r.   r   RuntimeWarningr   r   r[   r   recordr   r   r:   eyern   )r"   rk   r;   r{   covrl   r   r   r   supwmur   r   r   test_multivariate_normalS  sl    








z'TestRandomDist.test_multivariate_normalc       	      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 )Ni  r)   r7   )rl   rk   r0   g?g?)r   r   r   r&   rM   rv  r  rH   absr{   r   )	r"   rk   r;   Zn_sr{   rz  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 )NrB   g|Pk?)rR   r7   )nr=   rl   i  i  i  i  iX  i  )r   r   r   r   r&   rM   r	   )r"   r;   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 d Q R X d S )NrX  )rY  rB   r   )r&   rZ  r   r.   r;   r   r?   )r"   r   r   r   !test_negative_binomial_exceptions  s    
z0TestRandomDist.test_negative_binomial_exceptionsc          	   C   s$   t t tdd}W d Q R X d S )Nr)   r   )r   r.   r;   r   )r"   rI   r   r   r   #test_negative_binomial_p0_exception  s    
z2TestRandomDist.test_negative_binomial_p0_exceptionc             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 )NrG   )rR   r7   )dfnoncrl   gs؀3J?gugو/@gNJm+@gA}-4@gq=&@gjhn@r   )r   g      ?g?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&   rM   r
   )r"   r;   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 )NrG   r7   r)   )rR   r7   )dfnumdfdenr  rl   gHP
?gn?g%f?gch?gzƎ?g]?:?r   )r   )r   r   r   noncentral_fr&   rM   r
   )r"   r;   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 )NrG   r7   )r  r  r  )r   r   r   r  r&   r?   isnanr   )r"   r;   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 )Ng_c97ݚ?g       @)rR   r7   )r\  rN  rl   g?`xg\P@g/7u g0aj?gi%?gog@r   )r   )r   r   r   normalr&   rM   r
   )r"   r;   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 )Nr   )rN  g       )r   r;   r  r   r.   )r"   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 )Ng_c97ݚ?)rR   r7   )r   rl   gá?gƫh@gi`>?g0"&Agc@g=fAr   )Znulp)r   r   r   paretor&   rM   testingZassert_array_almost_equal_nulp)r"   r;   r   r   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 )Ng_c97ݚ?)rR   r7   )lamrl   r   )r   r   r   poissonr&   rM   r	   )r"   r;   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 d Q R X d S )Nrg   r,   r   rX  )rY  )	r&   rf   rh   r   r.   r;   r  rZ  r?   )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 )Ng_c97ݚ?)rR   r7   )r   rl   gZ >g?gÄ(=g҇?gŚE?gߢH?r   )r   )r   r   r   powerr&   rM   r
   )r"   r;   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   )rR   r7   )rN  rl   gry@gtQP0@gAI_@g@u81@g	G0@g"wc5@r   )r   )r   r   r   rayleighr&   rM   r
   )r"   r;   r   r   r   r   r   test_rayleigh  s    
zTestRandomDist.test_rayleighc             C   s&   t tjddd tttjdd d S )Nr   )rN  g       )r   r;   r  r   r.   )r"   r   r   r   test_rayleigh_0  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 )N)rR   r7   )rl   gH1gW|3
g\?gLeg5P	gFA?r   )r   )r   r   r   Zstandard_cauchyr&   rM   r
   )r"   r;   r   r   r   r   r   test_standard_cauchy!  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 )N)rR   r7   inv)rl   rk   ga\5?gr7k?g8PC*?g5$[?gW3T?g*?r   )r   )r   r   r   standard_exponentialr&   rM   r
   )r"   r;   r   r   r   r   r   test_standard_exponential)  s    
z(TestRandomDist.test_standard_exponentialc             C   s   t ttjtjd d S )N)r9   )r   r-   r;   r  r&   r   )r"   r   r   r   #test_standard_expoential_type_error1  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 )NrR   )rR   r7   )rL   rl   gΈ̏&?gTϿ?g1n21@gDb<z@gBv@gc^@r   )r   )r   r   r   standard_gammar&   rM   r
   )r"   r;   r   r   r   r   r   test_standard_gamma4  s    
z"TestRandomDist.test_standard_gammac             C   s4   t t| j}|jdtjd}d}t||dd d S )NrR   )r9   g   d@r   )r   )r   r   r   r  r&   r[   r
   )r"   r;   r   r   r   r   r   !test_standard_gammma_scalar_float<  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 )NrR   )rR   r7   )rL   rl   gf&?gMO?g1@g):@g@g;i@rG   )r   )r   r   r   r  r&   rM   r
   )r"   r;   r   r   r   r   r   test_standard_gamma_floatB  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 )N)rR   r7   )r9   g      $@)r2  r9   gM»L$@ga {@gN]"@gPS")@g_+@gmB@rG   )r   )r2  rl   r9   )	r&   r:   r[   r   r   r   r  rM   r
   )r"   r   r;   r   r   r   r   test_standard_gammma_float_outJ  s    
z-TestRandomDist.test_standard_gammma_float_outc             C   s   t ttjddd d S )Ng      ?r   )r9   )r   r-   r;   r  )r"   r   r   r    test_standard_gamma_unknown_typeW  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   g      $@rv   )rl   r2  )r   r)   )r&   r:   r   r.   r;   r  )r"   r2  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   )rL   g       )r   r;   r  r   r.   )r"   r   r   r   test_standard_gamma_0b  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 )N)rR   r7   )rl   g
bYg? ?gGH{Lgz\?gc`+?gT}?r   )r   )r   r   r   r   r&   rM   r
   )r"   r;   r   r   r   r   r   test_standard_normalf  s    
z#TestRandomDist.test_standard_normalc             C   s   t ttjtjd d S )N)r9   )r   r-   r;   r   r&   r   )r"   r   r   r   %test_standard_normal_unsupported_typen  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   )rR   r7   )r  rl   gV1g	|ڙ(?g-?g NhڿgMc?g!uLM r   )r   )r   r   r   
standard_tr&   rM   r
   )r"   r;   r   r   r   r   r   test_standard_tq  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@)rR   r7   )leftmoderightrl   gEpw@g4DC+@gŋ@g/,@gkuR*@gHNPcr+@r   )r   )r   r   r   
triangularr&   rM   r
   )r"   r;   r   r   r   r   r   test_triangulary  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 )NgGz?gGz%@)rR   r7   )r   r   rl   gm2@gJaD@g: @g
Q @g@T{e@gb@r   )r   )r   r   r   uniformr&   rM   r
   )r"   r;   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 )NrN   r   r)   g ؅W4vC)r   r   )
r&   Zfinfor   rh   r;   r  r   OverflowErrorinfZ	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 )Ng      ?g        g
ףp= @)r7   r7   )r;   r  r   r&   pir:   )r"   r  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 )Nr7   r)   r   rR   )r;   r  r   r.   )r"   r  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 )N)r-   )r"   r   r   r   	__float__  s    zQTestRandomDist.test_scalar_exception_propagation.<locals>.ThrowingFloat.__float__N)r3   r4   r5   r  r   r   r   r   ThrowingFloat  s   r  g      ?c               @   s   e Zd Zdd ZdS )zITestRandomDist.test_scalar_exception_propagation.<locals>.ThrowingIntegerc             S   s   t d S )N)r-   )r"   r   r   r   __int__  s    zQTestRandomDist.test_scalar_exception_propagation.<locals>.ThrowingInteger.__int__N)r3   r4   r5   r  r   r   r   r   ThrowingInteger  s   r  r)   )	r&   ZndarrayrM   r   r   r-   r;   r  r`  )r"   r  Zthrowing_floatr  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 )NgGz?gp=
ף?)rR   r7   )r}  kapparl   gLA?gxyw@gzVR?gpE ?g8&Aпgv @r   )r   )r   r   r   vonmisesr&   rM   r
   )r"   r;   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 )Ng        gg5_PG>i@B )r}  r  rl   )r   r   r   r  r   r&   isfiniterH   )r"   r;   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 )Ng        )r}  r  )r   r   r   r  r&   r?   r   r  )r"   r;   r  r   r   r   test_vonmises_nan  s    z TestRandomDist.test_vonmises_nanr  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   )rl   g    .A)r   r   r   r   r   r   r  r   r&   rH   r   )r"   r  r;   rsr   Zrandom_state_valsZgen_valsr   r   r   test_vonmises_large_kappa  s    
z(TestRandomDist.test_vonmises_large_kappar}  g      gg	@g&.>gư>g     @@c             C   s8   t ||d}tt|tj ko0t|tjk d S )Nr   )r;   r  r   r&   rH   r  )r"   r}  r  r  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 )NgGz?gp=
ף?)rR   r7   )r{   rN  rl   g*س2?gt	@g;S@g\ F@gxF @g6b?r   )r   )r   r   r   waldr&   rM   r
   )r"   r;   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 )NgGz?)rR   r7   )r   rl   gnJZ?g*/F?gs(RY?g]'%?g,qD?g8 ?r   )r   )r   r   r   weibullr&   rM   r
   )r"   r;   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   rm   )r   rl   g       )r   )	r   r   r   r   r  r&   r:   r   r.   )r"   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 )	NgGz?)rR   r7   )r   rl   r)   r   ic  ib  r7   )r   r   r   zipfr&   rM   r	   )r"   r;   r   r   r   r   r   	test_zipf  s    
zTestRandomDist.test_zipf)xr3   r4   r5   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r
  r  r  r  r  r  r  r  r#  r(  r,  r/  r0  r1  r\   r   r   r8   r   r&   rM   r5  r8  r9  r;  r<  r>  rA  rC  rF  rG  rH  rI  rJ  r   rK  rM  rO  rR  rT  rU  rW  r[  r^  r_  ra  rc  rd  rf  ri  rj  rm  rn  ro  r~  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r     s   	.			$	

	J			"r   c               @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd 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"dAS )BTestBroadcastc             C   s
   d| _ d S )Ni[)r   )r"   r   r   r   r`     s    zTestBroadcast.setupc             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 .?rR   r   )r   )r   r   r   r  r&   rM   r
   )r"   r;   r   r   r  r   r   r   r   r   r    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)   r,   gw-Dؿgn0_x?gʊ;<.?rR   r   )r   )	r   r   r   r&   rM   r  r
   r   r.   )r"   r\  rN  	bad_scaler;   r   r   r  r   r   r   r    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)   r7   r,   r0   gf8?g%eo?g$q??rR   r   )r   )	r&   rM   r   r   r   r=  r
   r   r.   )	r"   r   r   bad_aZbad_br   r;   r=  r   r   r   r   r>  ,  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)   r,   g`ʄ?gE]?g?rR   r   )r   )	r&   rM   r   r   r   rL  r
   r   r.   )r"   rN  r  r   r;   r   r   r   r   rM  >  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 )	Nr)   r,   g`ʄ?gE]?g?rR   r   )r   )	r&   rM   r   r   r   r  r
   r   r.   )r"   rL   	bad_shaper   r;   Z	std_gammar   r   r   r   r  H  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)   r7   r,   r0   g3ʄ?gJE]?g?rR   r   )r   )	r&   rM   r   r   r   rS  r
   r   r.   )	r"   rL   rN  r  r  r   r;   rS  r   r   r   r   rT  S  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)   r7   r,   r0   gM3B?gybi@g0?rR   r   )r   )	r&   rM   r   r   r   rQ  r
   r   r.   )	r"   r  r  	bad_dfnum	bad_dfdenr   r;   rQ  r   r   r   r   rR  h  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 )Nr7   rR   ra   r   r,   r0   gŜ,n1 @g!6)@g9?r   )r   )r&   rM   r   r   r   r  r
   rH   r  r?   r   r   r.   )r"   r  r  r  r  r  bad_noncr   r;   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?g?r7   )rl   r   )r   )r   r   r   r&   rM   r  r
   )r"   r;   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)   r,   gC{?g7Q#?g%h1T@rR   r   )r   )	r&   rM   r   r   r   rB  r
   r   r.   )r"   r  bad_dfr   r;   r   r   r   r   rC    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)   r7   r,   r0   g-S?g[@gr3/.?rR   r   )r   )	r&   rM   r   r   r   r  r
   r   r.   )	r"   r  r  r  r  r   r;   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)   r,   g>Qg{g,e?rR   r   )r   )	r&   rM   r   r   r   r  r
   r   r.   )r"   r  r  r   r;   r   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 )
Nr7   r)   r,   gD()@g,)ʸ@gPorR   r   )r   )	r&   rM   r   r   r   r  r
   r   r.   )r"   r}  r  Z	bad_kappar   r;   r   r   r   r   r    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)   r,   g/h?gcE?g/gV?rR   r   )r   )	r&   rM   r   r   r   r  r
   r   r.   )r"   r   r  r   r;   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 )	Nr)   r,   g`ʄ?gE]?g?rR   r   )r   )	r&   rM   r   r   r   r  r
   r   r.   )r"   r   r  r   r;   r   r   r   r   r    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)   r,   gT?gʥ?gKܮc?rR   r   )r   )	r&   rM   r   r   r   r  r
   r   r.   )r"   r   r  r   r;   r   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)   r,   gh&BgsgR#?rR   r   )r   )	r&   rM   r   r   r   rb  r
   r   r.   )r"   r\  rN  r  r   r;   rb  r   r   r   r   rc    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)   r,   gs4?g$Cw%T?gտrR   r   )r   )	r&   rM   r   r   r   r]  r
   r   r.   )r"   r\  rN  r  r   r;   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)   r,   g$DgXPg,?rR   r   )r   g      ?g        )
r&   rM   r   r   r   re  r
   r   r.   r   )r"   r\  rN  r  r   r;   r   r   r   r   rf  !  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)   r,   g c?gu@gVQ?rR   r   )r   )	r&   rM   r   r   r   rh  r
   r   r.   )r"   r{   rg  Z	bad_sigmar   r;   rh  r   r   r   r   ri  2  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)   r,   gs(?g4mK?gVk+?rR   r   )r   )	r&   rM   r   r   r   r  r
   r   r.   )r"   rN  r  r   r;   r   r   r   r   r  B  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 )Ng      ?r)   r   r0   gk7Z?g*}z9?gc-	?rR   r   )r   )	r&   rM   r   r   r   r  r
   r   r.   )r"   r{   rN  Zbad_meanr  r   r;   r   r   r   r   r  P  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)   rR   r7   ra   gR8T>?gK?g;>h@r   )r   g      $@g        g      4@g      9@)	r&   rM   r   r   r   r  r
   r   r.   )r"   r  r  r  Zbad_left_oneZbad_mode_oneZbad_left_twoZbad_mode_twor   r;   r  r   r   r   r   r  c  sD    

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)   g      ?r,   g      ?r   rR   )	r&   rM   r   r   r   r<   r	   r   r.   )
r"   r  r=   bad_n	bad_p_one	bad_p_twor   r;   Zbinomr   r   r   r   rA    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)   g      ?r,   g      ?r   r7   )r9   rR   )
r&   rM   rg   r   r   r   r   r	   r   r.   )
r"   r  r=   r  r  r  r   r;   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)   r,   r   rR   r7   )
r&   rM   r   r   r   Z_poisson_lam_maxr  r	   r   r.   )	r"   r  Zbad_lam_oner   r;   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 d Q R X d S )Nr7   r   r)   rr   rR   rX  )rY  )r&   rM   r   r   r   r  r	   r   r.   rZ  r?   )r"   r   r  r   r;   r  r   r   r   r   r    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 )Ng      ?r,   g      ?r)   rR   )	r&   rM   r   r   r   rV  r	   r   r.   )r"   r=   r  r  r   r;   rV  r   r   r   r   rW    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)   r7   r,   r0   ra   r   rR   r   rv   rs   i   @i  l        r   i    i  )	r&   rM   r   r   r   r`  r	   r   r.   )r"   ZngoodZnbadrq   Z	bad_ngoodZbad_nbadZbad_nsample_oneZbad_nsample_twor   r;   r   Z	hypergeomr   r   r   ra    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 )Ng      ?r7   r,   r)   rR   )	r&   rM   r   r   r   rl  r	   r   r.   )r"   r=   r  r  r   r;   rl  r   r   r   r   rm  	  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|| d S )NrG   rv   gUUUUUU?r   )rR   r7   )rl   r   r7   r)   rR   ra   r   )r9   )r   r   r   rC   r&   rM   rg   r	   )r"   r;   r   r   r   r   r   ro  	  s    
zTestBroadcast.test_multinomialN)#r3   r4   r5   r`   r  r  r>  rM  r  rT  rR  r  r  rC  r  r  r  r  r  r  rc  r^  rf  ri  r  r  r  rA  r   r  r  rW  ra  rm  ro  r   r   r   r   r    s@   
#




(-r  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 )Nra   )r%   seeds)r"   r   r   r   r`   2	  s    zTestThread.setupc                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  x*t| j|D ]\}}tt|| q~W 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   )r  r#   o)r  functionr   r   r  <	  s   z-TestThread.check_function.<locals>.<listcomp>c             S   s   g | ]}|  qS r   )start)r  rI   r   r   r   r  >	  s    c             S   s   g | ]}|  qS r   )join)r  rI   r   r   r   r  ?	  s    ra   win32)	threadingr  r&   rn   r   r  zipr   r   Zintpr9   ri   r   platformr
   r	   )r"   r  szZout1Zout2tr#   r  r   )r  r  r   check_function5	  s    zTestThread.check_functionc             C   s   dd }| j |dd d S )Nc             S   s   | j dd|d< d S )Ni'  )rl   .)r  )r   r2  r   r   r   
gen_randomL	  s    z*TestThread.test_normal.<locals>.gen_random)i'  )r  )r  )r"   r  r   r   r   r  K	  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)rB   i  )rN  .)rL  r&   r  )r   r2  r   r   r   r  R	  s    z'TestThread.test_exp.<locals>.gen_random)rB   i  )r  )r  )r"   r  r   r   r   test_expQ	  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   gUUUUUU?r   i'  )rl   .)rC   )r   r2  r   r   r   r  X	  s    z/TestThread.test_multinomial.<locals>.gen_random)i'  r   )r  )r  )r"   r  r   r   r   ro  W	  s    zTestThread.test_multinomialN)r3   r4   r5   r`   r  r  r  ro  r   r   r   r   r  0	  s
   r  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 )Nr7   rR   ra   )r)   )r&   rM   argOneargTwoargThreetgtShape)r"   r   r   r   r`   `	  s    zTestSingleEltArrayInput.setupc             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}x>|D ]6}||krd|tdg}n
|| j}t|j| j qFW d S )Ng      ?)r;   rL  r  rB  r  r  r  r  r  r  r  rV  rl  r&   rM   r  r   rL   r  )r"   funcs	probfuncsr  r2  r   r   r   test_one_arg_funcsf	  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}x~|D ]v}||krhtdg}n| j}|| j|}t|j| j || jd |}t|j| j || j|d }t|j| j qNW d S )Ng      ?r   )r;   r  r  r=  rS  rQ  r  r  rb  r]  re  rh  r  r<   r   r&   rM   r  r  r   rL   r  )r"   r  r  r  r  r2  r   r   r   test_two_arg_funcsy	  s$    
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}xn|D ]f}|||||d}t|j| j ||d |||d}t|j| j |||d ||d}t|j| j qLW d S )Nr)   r   )r   r9   )r&   r   r   r   r   r   r   rK   rg   r   r;   r!   rM   r   rL   r  )r"   r   r   r  r   r   r   r2  r   r   r   r   	  s    
z%TestSingleEltArrayInput.test_integersc             C   s   t jt jt jg}xt|D ]l}|| j| j| j}t|j| j	 || jd | j| j}t|j| j	 || j| jd | j}t|j| j	 qW d S )Nr   )
r;   r  r  r`  r  r  r  r   rL   r  )r"   r  r  r2  r   r   r   test_three_arg_funcs	  s    
z,TestSingleEltArrayInput.test_three_arg_funcsN)r3   r4   r5   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   r*   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 d Q R X tt tj| |dd W d Q R X tt tj| |dd W d Q R X t d}tt tj	||d W d Q R X tt tj	|dd W d Q R X tt tj	|dd W d Q R X t 
|}tt tj	||d	 W d Q R X tt tjd
ddgdd W d Q R X tt tjd
dgddd W d Q R X tt tjd
dgddgdd W d Q R X tt tjddgddgdd W d 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 d Q R X d S )NrR   )ra   rR   )r   ra   r7   )rG   ra   rR   )rl   )r)   rR   )ra   r)   r)   )rR   )r2  r)   g333333?gffffff?)r7   r)   r7   rG   zOutput size \(6, 5, 1, 1\) is)rZ   )r   rG   r)   r)   )r&   r  r;   r  rL   r   r\   r]   r.   r  rn   r<   rC   rB  r  )r}  rg  rl   rL   r2  r   r   r   r   r   r   test_broadcast_size_error	  sD    



""r  c           	   C   sN   t d} t d}tj| |dd tt tj| |dd W d Q R X d S )NrR   )rl   r7   )r&   r  r;   r  r\   r]   r.   )r}  rg  r   r   r   test_broadcast_size_scalar	  s
    

r  c              C   s8   g g dg} t td}t|j|  | dg g gks4td S )Nr)   r   )r   r   r   r   r   )seqgenr   r   r   test_ragged_shuffle
  s    
r   r   r0   c          	   C   s   t td}|rdnd}tjt|d |j| |d W d Q R X |rHdnd}tjt|d |jd| |d W d Q R X tjt|d |jdg| |d W d Q R X d S )	Nr   zhigh < 0z	high <= 0)rZ   )r   z
low > highzlow >= highr,   )r   r   r\   r]   r.   r!   )r   r   r  msgr   r   r   !test_single_arg_integer_exception
  s    r  r9   Zf4Zf8c          	   C   sv   t jdd| d}dddg}tjtdd tj||| d	 W d Q R X tjtdd tj|||j| d
 W d Q R X d S )N)r7   rR   F)orderr9   r)   r7   rR   zSupplied output array)rZ   )r2  r9   )r2  rl   r9   )r&   rn   r\   r]   r.   r;   r  rL   )r9   r2  rL   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 )N)r7   rR   )r9   r  )r2  r9   )r2  r9   rl   )r&   rn   r   rL   )r  r  r9   r2  Zvariatesr   r   r   test_contig_req_out%
  s
    r  ).r   r   r\   numpyr&   Znumpy.linalgr   Znumpy.testingr   r   r   r   r   r   r	   r
   r   Znumpy.randomr   r   r   r   r;   ZJUMP_TEST_DATAZfixturer   r    r6   rA   r_   r   r   r   r  r  r  r   r   r  r  r  r   r  r  r   r  r   r   r   r   <module>   sp   ,

$< "   	        D    0/U+