B
    0dn=                @   s  d Z ddlZddlmZmZmZmZmZmZ ddl	Z	ddl	m
Z ddlmZ ddlZddlZddlZddlmZmZmZ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!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. dd	l/m0Z0 dd
l1m2Z2 ddl3m4Z4 ddl5m6Z6 G dd dZ7G dd dZ8G dd dZ9d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"ZAG d#d$ d$ZBG d%d& d&ZCd'd( ZDd)d* ZEdS )+z8
Test functions for multivariate normal distributions.

    N)assert_allcloseassert_almost_equalassert_array_almost_equalassert_equalassert_array_lessassert_)raises   )check_distribution_rvs)_PSD_lnB_cho_inv_batchmultivariate_normal_frozen)multivariate_normalmultivariate_hypergeommatrix_normalspecial_ortho_grouportho_grouprandom_correlationunitary_group	dirichletbetawishartmultinomial
invwishartchi2invgammanormuniformks_2sampkstestbinom	hypergeommultivariate_tcauchy
normaltest)romb)multigammaln)check_random_state_property)patchc               @   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d1S )2TestMultivariateNormalc             C   s`   t d}t d}tttjd|| tttjd|| tttjd|| tttjd|| d S )N      )r   r	   )r   r	   r,   )nparangeidentityassert_raises
ValueErrorr   pdfcdf)selfmucov r7   U/var/www/html/venv/lib/python3.7/site-packages/scipy/stats/tests/test_multivariate.pytest_input_shape'   s    

z'TestMultivariateNormal.test_input_shapec             C   s   t jd d\}}}t|||}t|jd t jd}t jd}t t jd}t|||}t|jd d\}}}t	|||}t|jd t jd}t jd}t t jd}t	|||}t|jd d S )Ni  )g      ?g333333?g      @r      )
r-   randomseedr   r2   r   ndimrandnabsr3   )r4   xmeanr6   r2   r3   r7   r7   r8   test_scalar_values/   s"    

z)TestMultivariateNormal.test_scalar_valuesc             C   sf   t jd t jd}t jd}t t jd}t|||}t|||}t|t 	| d S )Ni  r:   )
r-   r;   r<   r>   r?   r   logpdfr2   r   log)r4   r@   rA   r6   d1d2r7   r7   r8   test_logpdfJ   s    z"TestMultivariateNormal.test_logpdfc             C   sl   t jd t jd}t|}t|}t|d d}t|d d}t|t | t|t | d S )Ni  r:   r	   )	r-   r;   r<   r>   r   rC   r2   r   rD   )r4   r@   rE   rF   d3d4r7   r7   r8   test_logpdf_default_valuesT   s    

z1TestMultivariateNormal.test_logpdf_default_valuesc             C   sf   t jd t jd}t jd}t t jd}t|||}t|||}t|t 	| d S )Ni  r:   )
r-   r;   r<   r>   r?   r   logcdfr3   r   rD   )r4   r@   rA   r6   rE   rF   r7   r7   r8   test_logcdfa   s    z"TestMultivariateNormal.test_logcdfc             C   sl   t jd t jd}t|}t|}t|d d}t|d d}t|t | t|t | d S )Ni  r:   r	   )	r-   r;   r<   r>   r   rK   r3   r   rD   )r4   r@   rE   rF   rH   rI   r7   r7   r8   test_logcdf_default_valuesk   s    

z1TestMultivariateNormal.test_logcdf_default_valuesc             C   sp   t jd d}t j|}xNtd|d D ]<}t j||}t ||j}t||dd}t|j	j
| q,W d S )Ni     r	   T)allow_singular)r-   r;   r<   r>   rangedotTr   r   cov_inforank)r4   nrA   Zexpected_ranksr6   Zdistnr7   r7   r8   	test_rankx   s    z TestMultivariateNormal.test_rankc          	   C   s  dd }x~t ddD ]n}tj|}xZt d|d D ]F}tj||}t||j}t||f}||d |d |f< ||}t|t||j}	t||}
tt||dd}tt||dd}tt||	dd}t|j	j
| t|j	j
| t|j	j
| ||d | }||}||
}t|| t|| ||d | }||}||
}t|| t|| q:W qW d S )Nc             S   s$   t j| | }tj|\}}}|S )N)r-   r;   r>   scipylinalgsvd)rU   MurV   vr7   r7   r8   _sample_orthonormal_matrix   s    zXTestMultivariateNormal.test_degenerate_distributions.<locals>._sample_orthonormal_matrixr	   r:   T)rO   )rP   r-   r;   r>   rQ   rR   zerosr   r   rS   rT   r2   r   rC   )r4   r^   rU   r@   krV   Zcov_kkZcov_nnr\   Zcov_rryZdistn_kkZdistn_nnZdistn_rrZpdf_kkZpdf_nnZpdf_rrZ	logpdf_kkZ	logpdf_nnZ	logpdf_rrr7   r7   r8   test_degenerate_distributions   s<    






z4TestMultivariateNormal.test_degenerate_distributionsc             C   s   d}d}d}t || }|| }t j||ftd}t || d|| d | d f< ttj|d ttj|d |d |f t j	 t
t j|d |d |f d|f t|}t
|j| d S )Ng     @@d   r,   )dtyper   r	   )r-   expr_   floatZfill_diagonalr   rX   rY   detinfr   slogdetr   log_pdet)r4   Zlarge_total_logZnposZnzeroZlarge_entryrU   r6   psdr7   r7   r8   test_large_pseudo_determinant   s    $
z4TestMultivariateNormal.test_large_pseudo_determinantc             C   s   t jd d}t j||}t ||j}t j|}t jdd|}t|||}t|||}xvt	dD ]j}xdt	dD ]X}	t|||	f ||}
t
|
|||	f  t|||	f ||}
t
|
|||	f dd q|W qnW d S )Ni  rN   r,   r+   gMbP?)rtol)r-   r;   r<   r>   rQ   rR   r   r2   r3   rP   r   )r4   rU   datar6   rA   XZdesired_pdfZdesired_cdfijactualr7   r7   r8   test_broadcasting   s    z(TestMultivariateNormal.test_broadcastingc             C   sn   t ddd}d\}}|d }t|||}t|||}t|| t|||}t|||}t|| d S )Nr   r,   
   )g333333?g?g      ?)r-   linspacer   r2   r   r   r3   )r4   r@   rA   r6   scalerE   rF   r7   r7   r8   test_normal_1D   s    
z%TestMultivariateNormal.test_normal_1Dc             C   s  t ddg}t ddgddgg}d}d|d  }t d	d|}t ||\}}t ||d
f}||d d d d d	f< ||d d d d df< t|||}	t|	|d	d}
t|	|dd}tj||d	 |d d d}tj||d |d d d}t	|
|ddd t	||ddd d S )Ng      @g      @g      ?g?g333333?i     r	   r   r,   )axis)r   r   )locrv   )r	   r	   g{Gz?)rm   atol)
r-   arrayru   Zmeshgridemptyr   r2   r&   r   r   )r4   rA   r6   rU   deltar]   ZxvZyvposr2   Zmargin_xZmargin_yZgauss_xZgauss_yr7   r7   r8   test_marginalization   s     z+TestMultivariateNormal.test_marginalizationc             C   s   t jd t jd}t jd}t t jd}t||}t||t||| t||t||| t|	|t	||| t|
|t
||| d S )Ni  r:   )r-   r;   r<   r>   r?   r   r   r2   rC   r3   rK   )r4   r@   rA   r6   Znorm_frozenr7   r7   r8   test_frozen  s    


z"TestMultivariateNormal.test_frozenc       	   	   C   s   t jd d}t j||}t ||j}tj|\}}t 	|d}d|d< d|d< t |t t 
||j}d}t||d	}t|j|d	}t|jt t |d d  t|j |j d S )
Ni     g      ?g      ?r   gHz>gh㈵>)cond)r-   r;   r<   r>   rQ   rR   rX   rY   Zeighfulldiagr   Zpinvr   rj   sumrD   )	r4   rU   r@   r6   rV   r\   r   rk   Zpsd_pinvr7   r7   r8   test_pseudodet_pinv  s     z*TestMultivariateNormal.test_pseudodet_pinvc             C   s$   dddgdddgg}t tt| d S )Nr	   r,   r+   rN   r:   rx   )r0   r1   r   )r4   r6   r7   r7   r8   test_exception_nonsquare_cov.  s    z3TestMultivariateNormal.test_exception_nonsquare_covc             C   s@   ddgdt jgg}ttt| ddgdt jgg}ttt| d S )Nr	   r   )r-   nanr0   r1   r   rh   )r4   Zcov_nanZcov_infr7   r7   r8   test_exception_nonfinite_cov2  s    z3TestMultivariateNormal.test_exception_nonfinite_covc             C   s    ddgddgg}t tt| d S )Nr	   r   r   )r0   r1   r   )r4   r6   r7   r7   r8   test_exception_non_psd_cov8  s    z1TestMultivariateNormal.test_exception_non_psd_covc             C   s   t jd t jd}t jd}t d}t jj}t|t|| t|tj	||| t|tj
||| t|tj||| t|tj||| d S )Ni  r:   )r:   r:   )r-   r;   r<   r>   onesrY   LinAlgErrorr0   r   r2   rC   r3   rK   )r4   r@   rA   r6   er7   r7   r8   test_exception_singular_cov<  s    
z2TestMultivariateNormal.test_exception_singular_covc             C   s<  t dddddg}t ddd}d	| d }|t | }t |||gj}t d
d	dgd}t d
ddgdddgddd	ggd}t|||}t||dd t dddddg}	t|||}
t|
|	dd t dddddg}t ||gj}t d
d	gd}t d
dgddggd}t|||}t||dd d S )Ng0Q-?gox'V?g[S, t?gDB?gc_.?r   r,   r:   r+   r	   dg      ?g|=)r{   gwk:E]?g̙Z?g0?gL8?gAG*?gh㈵>gIى?gG?gƏ)?gėh?gEE?)	r-   r|   ru   cosrR   r   r2   r   r3   )r4   Zr_pdfr@   ra   zrrA   r6   r2   Zr_cdfr3   Zr_cdf2r2mean2cov2Zcdf2r7   r7   r8   test_R_valuesH  s*    

$



z$TestMultivariateNormal.test_R_valuesc             C   s<   t d}t d}t||dd}| }t|ddg d S )Nr,   )r,   r,   T)rO   r   )r-   r_   r   rvsr   )r4   rA   Z
covariancemodelsampler7   r7   r8   ,test_multivariate_normal_rvs_zero_covariance  s
    

zCTestMultivariateNormal.test_multivariate_normal_rvs_zero_covariancec             C   s   d}d}t jt|d|d}t|j||f t jd tddgddgg|d}t|j|df t ddd}||}t|j|f d S )	Ni,  rN   r	   )rA   r6   sizer,   g?r   )rA   r6   )r   r   r-   r_   r   shaper|   )r4   Nr   r   r\   r7   r7   r8   test_rvs_shape  s    
z%TestMultivariateNormal.test_rvs_shapec             C   sx   t jd d}t j|}t j||}t ||j}d}t|||}tt	
|j|dd t|d|dd d S )Ni  r+   i  g?)rm   r   )r-   r;   r<   r>   rQ   rR   r   r   r   numpyr6   rA   )r4   rU   rA   r[   r6   r   r   r7   r7   r8   test_large_sample  s    z(TestMultivariateNormal.test_large_samplec             C   s   t jd d}t j|}t j||}t ||j}t||}t| t|| t j	
|d }d|t dt j d  t t |  }t||  d S )Ni  r+   r   g      ?r,   r	   )r-   r;   r<   r>   rQ   rR   r   r   entropyrY   ZeigrD   pir   )r4   rU   rA   r[   r6   rveigsdesiredr7   r7   r8   test_entropy  s    
,z#TestMultivariateNormal.test_entropyc             C   s,   t dddg}d}tt t|| d S )Nr	   g      ?)r-   r|   r   re   r   )r4   alphar   r7   r7   r8   test_lnB  s    zTestMultivariateNormal.test_lnBN)__name__
__module____qualname__r9   rB   rG   rJ   rL   rM   rW   rb   rl   rs   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r7   r7   r8   r*   &   s0   

,@r*   c               @   sD   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S )TestMatrixNormalc          	   C   s  d}d}t ||fd}dt | t ||fd }dt | t ||fd }tttt d ttt|t d| ttt||t d ttt||| ttt||| ttt|j|| t jj	}t|t||t 
||f t|t|t 
||f| d S )NrN   r+   g333333?g      ?gffffff?)r:   rN   r+   rt   )r-   r   r/   r0   r1   r   r_   rR   rY   r   r   )r4   num_rowsnum_colsr[   UVr   r7   r7   r8   test_bad_input  s    zTestMatrixNormal.test_bad_inputc             C   s  d}d}t ||fd}dt | t ||fd }dt | t ||fd }t ||f}t |df}t d|f}t |}	t |}
t d}ttj|||dj||f ttj|dj||f ttj|d	j|df ttj|d
jd|f ttj||dj||f ttj||dj||f ttj||dj||f tt|dj|	 tt|dj	|
 tt|d	j
| tt|d	j	| tt|d
j
| tt|d
j| tt||dj	|
 tt||dj|	 tt||dj
| d S )NrN   r+   g333333?g      ?gffffff?r	   )rA   rowcovcolcov)rA   )r   )r   )rA   r   )rA   r   )r   r   )r-   r   r/   r_   r   r   r   r   r   r   rA   )r4   r   r   r[   r   r   ZZZrZZcIrIcZI1r7   r7   r8   test_default_inputs  sD    









z$TestMatrixNormal.test_default_inputsc       
      C   s   d}d}t ||fd}t |d}d}t |d}d}t |}t |}	tt|||djd|  tt|||djd|	  tt|||djd|  tt|||djd|	  d S )NrN   r+   g333333?g?g?)rA   r   r   )r-   r   r/   r   r   r   r   )
r4   r   r   r[   ZUvZUsZVvZVsr   r   r7   r7   r8   test_covariance_expansion  s"    




z*TestMatrixNormal.test_covariance_expansionc             C   s  x t ddD ]}xt ddD ]}t||fd}dt| t||fd }dt| t||fd }t|||d}|jdd}tj|||dd	}t|| |jdd}	||	}
tj|	|||d}t|
| ||	}tj|	|||d}t|| qW qW d S )
Nr	   r:   g333333?g      ?gffffff?)rA   r   r   i  )random_state)rA   r   r   r   )	rP   r-   r   r/   r   r   r   r2   rC   )r4   rp   rq   r[   r   r   frozenrvs1rvs2ro   pdf1pdf2logpdf1logpdf2r7   r7   r8   test_frozen_matrix_normal  s"    




z*TestMatrixNormal.test_frozen_matrix_normalc             C   s  xt ddD ]}xt ddD ]}t||fd}dt| t||fd }dt| t||fd }t|||d}|jdd}||}||}	|j	 }
|j	 }t
||}tj|
||d	}tj|
||d	}t||d
d t|	|d
d qW qW d S )Nr	   r:   g333333?g      ?gffffff?)rA   r   r   i  )r   )rA   r6   g|=)rm   )rP   r-   r   r/   r   r   r2   rC   rR   flattenZkronr   r   )r4   rp   rq   r[   r   r   r   ro   r   r   ZvecXZvecMr6   r   r   r7   r7   r8   test_matches_multivariate5  s     



z*TestMatrixNormal.test_matches_multivariatec             C   sP  d}d}t ||fd}dt | t ||fd }dt | t ||fd }d}t|||d}|j|dd	}|j|d
d	}	t j|t jd d d d d d f |	t jd d d d d d f fdd}
t|
jd|||f |	|
}t|jd|f xTt
dD ]H}x@t
|D ]4}tj	|
||f |||d}t||||f d qW q W d S )NrN   r+   g333333?g      ?gffffff?rt   )rA   r   r   i  )r   r   i  r   )ry   r,   g|=)r-   r   r/   r   r   Zconcatenatenewaxisr   r   rC   rP   r   )r4   r   r   r[   r   r   r   r   ZX1ZX2ro   Zarray_logpdfrp   rq   Zseparate_logpdfr7   r7   r8   test_array_inputL  s$    F

z!TestMatrixNormal.test_array_inputc             C   s   d}d}t ||fd}dt | t ||fd }dt | t ||fd }d}t|||d}|j|dd	}t j|d
d}	t|	|dd t ||| |j	}
t|
|dd t t 
|dd|| |j	}t||dd d S )NrN   r+   g333333?g      ?gffffff?i  )rA   r   r   i  )r   r   r   )ry   g?)r{   r	   r,   )r-   r   r/   r   r   rA   r   r6   reshaperR   Zswapaxes)r4   r   r   r[   r   r   r   r   ro   Zsample_meanZsample_colcovZsample_rowcovr7   r7   r8   test_momentsc  s    zTestMatrixNormal.test_momentsN)
r   r   r   r   r   r   r   r   r   r   r7   r7   r7   r8   r     s   'r   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd 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'S )(TestDirichletc             C   s   t jd t jdd}t jdd|}t|}t| t| t| t| t|	 t	| d}x~t
|D ]r}t jdd|}|t | }t||d d t|d d | t||d d t|d d | q|W d S )Ni  r	       g&.>rc   rt   r   )r-   r;   r<   randintr   r   r   varrA   r   rP   r   r2   rC   )r4   rU   r   r   	num_testsrp   r@   r7   r7   r8   test_frozen_dirichlet{  s    (z#TestDirichlet.test_frozen_dirichletc             C   s   t jd t dddg}t jj|dd}t|jd tttj	|| tttj
|| t	|j| t	|jd d | t
|j| t
|jd d | d S )	Ni  g      ?g       @g      @r   )r   )r   r+   r   )r-   r;   r<   r|   r   r   r   r0   r1   r2   rC   rR   )r4   r   r@   r7   r7   r8   "test_numpy_rvs_shape_compatibility  s    z0TestDirichlet.test_numpy_rvs_shape_compatibilityc             C   sT   t jd dddg}t jjt d|ddj}tttj|| tttj	|| d S )Ni  g      ?g        g      @g&.>r   )r   )
r-   r;   r<   r   maximumrR   r0   r1   r2   rC   )r4   r   r@   r7   r7   r8   test_alpha_with_zeros  s
    
z#TestDirichlet.test_alpha_with_zerosc             C   sT   t jd dddg}t jjt d|ddj}tttj|| tttj	|| d S )Ni  g      ?g       g      @g&.>r   )r   )
r-   r;   r<   r   r   rR   r0   r1   r2   rC   )r4   r   r@   r7   r7   r8    test_alpha_with_negative_entries  s
    
z.TestDirichlet.test_alpha_with_negative_entriesc             C   s|   t ddddg}t ddddg}t|| t|| t ddddg}tt||d	 tt||t d	 d S )
Ng      ?g       @g      @g      @g?g        g?gffffff?rx   )r-   r|   r   r2   rC   r   rD   )r4   r   r@   r7   r7   r8   test_data_with_zeros  s    z"TestDirichlet.test_data_with_zerosc             C   sH   t ddddg}t ddddg}tttj|| tttj|| d S )	Ng      ?g      ?g      @g      @g?g        g?gffffff?)r-   r|   r0   r1   r   r2   rC   )r4   r   r@   r7   r7   r8   $test_data_with_zeros_and_small_alpha  s    z2TestDirichlet.test_data_with_zeros_and_small_alphac             C   sH   t ddddg}t ddddg}tttj|| tttj|| d S )	Ng      ?g       @g      @g      @g?gg333333?gffffff?)r-   r|   r0   r1   r   r2   rC   )r4   r   r@   r7   r7   r8   test_data_with_negative_entries  s    z-TestDirichlet.test_data_with_negative_entriesc             C   sH   t ddddg}t ddddg}tttj|| tttj|| d S )	Ng      ?g       @g      @g      @g?g?g333333?gffffff?)r-   r|   r0   r1   r   r2   rC   )r4   r   r@   r7   r7   r8    test_data_with_too_large_entries  s    z.TestDirichlet.test_data_with_too_large_entriesc             C   s@   t dddg}t dd}tttj|| tttj|| d S )Ng      ?g       @g      @)r,   r   r   g$I$I?)r-   r|   r   r0   r1   r   r2   rC   )r4   r   r@   r7   r7   r8   test_data_too_deep_c  s    z"TestDirichlet.test_data_too_deep_cc             C   sF   t ddgddgg}t dd}tttj|| tttj|| d S )Ng      ?g       @g      @g      @)r,   r,   r   g      ?)r-   r|   r   r0   r1   r   r2   rC   )r4   r   r@   r7   r7   r8   test_alpha_too_deep  s    z!TestDirichlet.test_alpha_too_deepc             C   s8   t dddg}t dd}t|| t|| d S )Ng      ?g       @g      @)r+   r   gUUUUUU?)r-   r|   r   r   r2   rC   )r4   r   r@   r7   r7   r8   test_alpha_correct_depth  s    z&TestDirichlet.test_alpha_correct_depthc             C   s@   t dddg}t dd}tttj|| tttj|| d S )Ng      ?g       @g      @)r+   r   g      ?)r-   r|   r   r0   r1   r   r2   rC   )r4   r   r@   r7   r7   r8   test_non_simplex_data  s    z#TestDirichlet.test_non_simplex_datac             C   sB   t ddddg}t dd}tttj|| tttj|| d S )Ng      ?g       @g      @g      @)r,   r   g      ?)r-   r|   r   r0   r1   r   r2   rC   )r4   r   r@   r7   r7   r8   test_data_vector_too_short  s    z(TestDirichlet.test_data_vector_too_shortc             C   sB   t ddddg}t dd}tttj|| tttj|| d S )Ng      ?g       @g      @g      @)r:   r   g?)r-   r|   r   r0   r1   r   r2   rC   )r4   r   r@   r7   r7   r8   test_data_vector_too_long  s    z'TestDirichlet.test_data_vector_too_longc             C   sL   t dddg}t|}dddg}ddd	g}t| | t| | d S )
Ng      ?g?g?gUUUUUU?g{Gz?gQ?g      ?g?g?)r-   r|   r   r   r   rA   )r4   r   r   Zexpected_varZexpected_meanr7   r7   r8   test_mean_and_var  s    

zTestDirichlet.test_mean_and_varc             C   s`   t dg}t|}t| jd t| jd t|dgjd t|dgjd d S )Ng?r   g      ?)	r-   r|   r   r   rA   r=   r   r2   rC   )r4   r   r   r7   r7   r8   rB     s    z TestDirichlet.test_scalar_valuesc             C   s   t jd t jdd}t jdd|}t|}d}xLt|D ]@}t jdd|}|t | }t|	|d d |	| q@W d S )Ni  r	   r   g&.>rc   rt   r   )
r-   r;   r<   r   r   r   rP   r   r   r2   )r4   rU   r   r   r   rp   r@   r7   r7   r8    test_K_and_K_minus_1_calls_equal  s    z.TestDirichlet.test_K_and_K_minus_1_calls_equalc             C   s   t jd t jdd}t jdd|}t|}d}d}d }xt|D ]}xJt|D ]>}t jdd|}	|	t |	 }	|d k	rt ||	f}qV|	}qVW |	|j
}
d }x0|D ](}|	|}|d k	rt ||}q|}qW t|
| qHW d S )Ni  r	   r   g&.>rc   rt   r:   )r-   r;   r<   r   r   r   rP   r   vstackr2   rR   appendr   )r4   rU   r   r   r   Znum_multipleZxmrp   mr@   Zrmrsxsr   r7   r7   r8   test_multiple_entry_calls  s,    

z'TestDirichlet.test_multiple_entry_callsc             C   s   t jd t jddd}t|}t|d |d }d}xFt|D ]:}t jddd}|t | }t|	||	|g qDW t|
 |
 d  t| | d  d S )Ni  g&.>rc   r,   r   r	   rt   )r-   r;   r<   r   r   r   rP   r   r   r2   rA   r   )r4   r   r   br   rp   r@   r7   r7   r8   test_2D_dirichlet_is_beta)  s    z'TestDirichlet.test_2D_dirichlet_is_betaN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rB   r   r   r   r7   r7   r7   r8   r   y  s&   	
r   c           
   C   s~   t ddg} t dgg}ttt| | yt| | W n@ tk
rx } z"d}tt|d t| | W d d }~X Y nX d S )Ng        g      ?zDimension mismatch)r-   r|   r0   r1   r   r   strlen)r5   sigmar   msgr7   r7   r8   ,test_multivariate_normal_dimensions_mismatch:  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 )TestWishartc             C   s  t jddd}ddgt dt jd t jdddg}x2|D ]*}td|}t|j| t|jj|j q:W t ddgddgg}ddgt jd t ddgddggg}x2|D ]*}td|}t|j| t|jj|j qW tttdt 	d tdt 	d t jddd}tttd| d S )Nr	   r,   )ndminr   )r	   r,   g?r+   )
r-   r|   r_r   r   rv   r   r0   r1   eye)r4   Z
true_scalescalesrv   wr7   r7   r8   test_scale_dimensionsN  s0    





z!TestWishart.test_scale_dimensionsc          
   C   s  ddgt dt jd t jdddt jdgddg}tdd}|t jddd}x|D ]}t||| qXW dddgt jd t jdddgddg}tdd}|t jdddgdd}x|D ]}t||| qW dddgt dt jd t ddgddggt ddgddggd d d d t jf g}tdt d}|t ddgddggd d d d t jf }x|D ]}t||| qvW d S )Nr	   r,   )r   r+   )r	   r,   r+   )r,   r,   r   )r-   r|   r   r   r2   r   r   r   )r4   ro   r   Zdensityr@   r7   r7   r8   test_quantile_dimensionsy  s<    






""
z$TestWishart.test_quantile_dimensionsc       	      C   sv  d}t t |d }t ||d  d |t j|dd< t |j|}g }xhtdD ]\}t t ||d d  }t ||d  d |t j|dd< t |j|}|| qXW t |j}ddt 	dddfd||fg}x|D ]\}}}t
||}t| t
|| t| t
|| t| t
|| t| t
|| t||t
||| qW d S )	NrN   r	   r,   r   )r`   r:   rt   g?)r-   r   r.   tril_indicesrQ   rR   rP   r   r|   ru   r   r   r   rA   moder   r2   )	r4   dimrv   ro   rp   r@   
parametersdfr   r7   r7   r8   r     s(    $$
zTestWishart.test_frozenc             C   s   t jd d}d}t |}t jdddtd}t jdddd}x|D ]}t||}t|}t	|
 |
  t	| |  t	| |  t	|||| |j|d	}	|f}
d
}td|
||	 qFW d S )Ni^ i  r	   rt   r,   )rd   g?)num)r   g{Gz?r   )r-   r;   r<   r   r.   rf   ru   r   r   r   r   rA   r   r2   r   r
   )r4   snr   rv   df_rangero   r   r   cr   argsr   r7   r7   r8   test_1D_is_chisquared  s"    


z!TestWishart.test_1D_is_chisquaredc             C   s  t jd d}d}d}t t dd }t d|t jddd< t |j|}t |df}|j||	 }t
||}t||d	}t| |  t| |  t| |  t jd
ddd}	t||	||	 |j|d}
|d|f}d}td|||
 d S )Ni^ i  rt   rN   r	   rx   r   )r`   )rv   g?)r   )r   r   g{Gz?r   )r-   r;   r<   r   r.   r   rQ   rR   r   Zsqueezer   r   r   r   rA   r   ru   r2   r   r
   )r4   r   r   r   rv   ZlamdaZsigma_lamdar   r   ro   r   r   r   r7   r7   r8   test_is_scaled_chisquared  s(    

z%TestWishart.test_is_scaled_chisquaredN)r   r   r   r   r   r   r   r   r7   r7   r7   r8   r   M  s
   +1 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S )TestMultinomialc             C   sl   t ddd}t|ddd t ddgd	d
dg}t|tjdd t ddgd	ddg}t|tjdd d S )N)r+   rN   r   )g333333?gffffff?g&Mtyg:0yE>)rm   r+   rN   r   g333333?gffffff?)r   logpmfr   r-   ZNAN)r4   vals1vals2vals3r7   r7   r8   test_logpmf  s    zTestMultinomial.test_logpmfc             C   sX   t ddd}tddd}t||dd t dd	d
}tdd	d}t||dd d S )N)r+   rN   r   )g333333?gffffff?r+   g333333?g:0yE>)rm   )rx         )g?g?rx   g?)r   r  r!   r   pmf)r4   val1val2r7   r7   r8   test_reduces_binomial  s    z%TestMultinomial.test_reduces_binomialc             C   sX   ddddg }}ddddd	d
dd
ddd
}x(|D ] }t t||||| dd q0W d S )Nr+   g      ?g      ?g      ?g     @?g     ?g      ?g      `?g     ?g      ?g      ?g      ?g      ?)
)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   g+=)r{   )r   r   r
  )r4   rU   pZr_valsr@   r7   r7   r8   test_R"  s    

zTestMultinomial.test_Rc             C   sH   t jddgd ddd}tjd}|j ddgd dd}t|| d S )Nr+   g      ?r   {   )r   r   )r   )r   r   r-   r;   RandomStater   )r4   Zsc_rvsrndmZnp_rvsr7   r7   r8   test_rvs_np3  s    zTestMultinomial.test_rvs_npc             C   s   t ddd}t|ddd t ddd	}t|d
dd t ddgddggddgddgggdd}t|ddgddggdd tjdtjd}t |dd	}t|tjg tjd t ddgdd	}t|ddd t dddgddddg}t|ddd d S )N)r:   r:   )r	   r	   g:0yE>)rm   )r+   rN   r   )g333333?gffffff?g5
?r+   r   r  r   	   )g?g?g*7?g<Wƌ?)r   r,   )rd   rN   r,   rx   gUUUUUU?gUUUUUU?gߦ?)r   r
  r   r-   r}   float64r   )r4   vals0r  r  r@   r  vals4Zvals5r7   r7   r8   test_pmf:  s    $zTestMultinomial.test_pmfc             C   s
  t ddgdddgddgg}t|dd	gd
d t ddgddgddg}t|ddgd
d t ddgddgggdddg}t|ddggd
d t ddgdgdgggddg}t|dgdgggd
d t ddgddggdggggddg}t|ddggggd
d d S )Nr	   r,   r+   g?g?g?g?gv?g~jt?g:0yE>)rm   rN   r   )r   r
  r   )r4   r  r  r  r  r  r7   r7   r8   test_pmf_broadcastingO  s      &z%TestMultinomial.test_pmf_broadcastingc             C   s:   t dd}dddgdddgddd	gg}t||d
d d S )Nr:   )g?g333333?g      ?g?g333333ӿg      g433333ӿg?g      g      ?g:0yE>)rm   )r   r6   r   )r4   cov1r   r7   r7   r8   test_cov_  s
    zTestMultinomial.test_covc             C   s   t d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ddg}ddgddggddgddggg}t||d	d
 t ddg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 )Nr:   g?g?g?g?g?gܿgg:0yE>)rm   rN   g
ףp=
?g
ףp=
׿g333333?gffffff?g?g333333?gzG?gzGg333333?g333333)r   r6   r   )r4   r  r   cov3cov4cov5cov6r7   r7   r8   test_cov_broadcastingf  s      z%TestMultinomial.test_cov_broadcastingc             C   s*   t dddg}t|tdddd d S )Nr,   g?g?g:0yE>)rm   )r   r   r   r!   )r4   ent0r7   r7   r8   r   t  s    zTestMultinomial.test_entropyc             C   s   t ddgddg}t|tddtddgdd t ddgdd	gd
dgg}t|tddtdd
gdd t dgdggdd	gd
dgg}t|tddtdd
gtddtdd
ggdd d S )Nr,   r+   g?g333333?g:0yE>)rm   r   r  gffffff?g?g333333?)r   r   r   r!   )r4   r!  Zent1Zent2r7   r7   r8   test_entropy_broadcastingz  s     z)TestMultinomial.test_entropy_broadcastingc             C   s&   t dddg}t|ddgdd d S )Nr:   g?g?g      ?g      @g:0yE>)rm   )r   rA   r   )r4   mean1r7   r7   r8   	test_mean  s    zTestMultinomial.test_meanc             C   s2   t ddgddg}t|ddgddggd	d
 d S )Nr:   rx   g?g?g      ?g      @g433333?g433333@g:0yE>)rm   )r   rA   r   )r4   r#  r7   r7   r8   test_mean_broadcasting  s    z&TestMultinomial.test_mean_broadcastingc             C   s   t jd d}d}ddddgddddgddddgddddgddd	d
gg}t j|t jd}t||}t||t||| t||t||| t|	 t	|| d S )Ni     )g?g?g333333?g?r   r	      rt   r  r,   r  )rd   )
r-   r;   r<   asarrayr  r   r   r
  r  r   )r4   rU   Zpvalsr@   Z	mn_frozenr7   r7   r8   r     s    6
zTestMultinomial.test_frozenN)r   r   r   r  r  r  r  r  r  r  r   r   r"  r$  r%  r   r7   r7   r7   r8   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 )TestInvwishartc       	      C   s`  d}t t |d }t ||d  d |t j|dd< t |j|}g }xhtdD ]\}t t ||d d  }t ||d  d |t j|dd< t |j|}|| qXW t |j}ddt 	dddfd||fg}xx|D ]p\}}}t
||}t| t
|| t| t
|| t| t
|| t||t
||| qW d S )	NrN   r	   r,   r   )r`   r:   rt   g?)r-   r   r.   r   rQ   rR   rP   r   r|   ru   r   r   r   rA   r   r   r2   )	r4   r   rv   ro   rp   r@   r   r   iwr7   r7   r8   r     s&    $$
zTestInvwishart.test_frozenc             C   s   t jd d}d}t |}t jdddtd}t jdd	d	d
}x|D ]}t||}t|d dd}t	|
 |
  t	| |  t	|||| |j|d}	|d ddf}
d}td|
||	 qFW d S )Ni^ i  r	   r:      r,   )rd   g?rt   )r   g      ?)rv   )r   r   g{Gz?r   )r-   r;   r<   r   r.   rf   ru   r   r   r   r   rA   r2   r   r
   )r4   r   r   rv   r   ro   r   r*  Zigr   r   r   r7   r7   r8   test_1D_is_invgamma  s     


z"TestInvwishart.test_1D_is_invgammac             C   s|  d}d}t |}d|d< d|d< t||}t||}t jd t||}t jd | }t jd t||}t jd | }	t jd t jjdd}
t jt j	|t j	|d t j	|d	 f d }t 
|}|
|t j|d
d< t j|}||}t ||j}t jt j|}||}t jt ||j}t|| t|| t|| t|	| d S )Nr+   rt   g      ?)r   r	   )r	   r   i )r   r	   r,   r   )r`   )r-   r   r   r   r;   r<   r   normalr   Z	chisquarer   r   rY   ZcholeskyrQ   rR   invr   )r4   r   r   rv   r   r*  Zw_rvsZfrozen_w_rvsZiw_rvsZfrozen_iw_rvsZcovariancesZ	variancesADZDAZmanual_w_rvsZiDZiDAZmanual_iw_rvsr7   r7   r8   test_wishart_invwishart_2D_rvs  sD    









z-TestInvwishart.test_wishart_invwishart_2D_rvsc          	   C   s   t ddddgddddgddddgddddgg}t ddddgddddgddddgddddgg}t ||g}| }t| t d}t|d |d |dd	 t|d |d |dd	 d
S )zRegression test for gh-8844.r,   r	   r   g      ?r+   r   rN   gV瞯<)r{   N)r-   r|   copyr   r   r   rQ   )r4   Za0Za1aainvidentr7   r7   r8   test_cho_inv_batch  s    




z!TestInvwishart.test_cho_inv_batchc          	   C   s  t ddddgddddgddddgddddgg}t ddddgddddgddd	dgddddgg}d
}t|||}|jd }t j|\}}t j|\}}t j||}	|d | || d t d  t	|d | || d d |  d|	
   }
t||
 dS )zRegression test for gh-8844.r,   r	   r   g      ?r+   r  r   r:   r  rx   N)r-   r|   r   rC   r   rY   ri   ZsolverD   r'   tracer   )r4   ro   PsinuZprobr  sigZlogdetXZ	logdetPsir[   expectedr7   r7   r8   test_logpdf_4x4(  s     




PzTestInvwishart.test_logpdf_4x4N)r   r   r   r   r,  r1  r6  r<  r7   r7   r7   r8   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 )TestSpecialOrthoGroupc             C   sl   t jd td}t dddgdddgd	d
dgg}t|| t jjdd}tjd|d}t|| d S )Ni  r+   g(fg^A.g*B?g:d?g2ugi}?gR#xlF?g^`D?g?)r<   )r   )r-   r;   r<   r   r   r|   r   r  )r4   r@   r;  r   r7   r7   r8   test_reproducibilityB  s    

z*TestSpecialOrthoGroup.test_reproducibilityc             C   s<   t ttjd  t ttjd t ttjd t ttjd d S )N)r,   r,   r	   g      @)r0   r1   r   r   )r4   r7   r7   r8   test_invalid_dimN  s    z&TestSpecialOrthoGroup.test_invalid_dimc             C   s4   d}t |}|jdd}t j|dd}t|| d S )Nr   i  )r   )r   r   r   )r4   r   r   r   r   r7   r7   r8   test_frozen_matrixT  s
    z(TestSpecialOrthoGroup.test_frozen_matrixc             C   sh   dd t ddD }dd |D }t|dgd dd	 x,|D ]$}tt||jt|jd
  q<W d S )Nc             S   s$   g | ]}t d D ]}t|qqS )r+   )rP   r   r   ).0r   rp   r7   r7   r8   
<listcomp>^  s   z<TestSpecialOrthoGroup.test_det_and_ortho.<locals>.<listcomp>r,   r&  c             S   s   g | ]}t j|qS r7   )r-   rY   rg   )rA  r@   r7   r7   r8   rB  c  s    g      ?   gvIh%<=)rm   r   )rP   r   r   r-   rQ   rR   r   r   )r4   r   detsr@   r7   r7   r8   test_det_and_ortho]  s    
z(TestSpecialOrthoGroup.test_det_and_orthoc                s|   d}d}d}t jd tj||dd tfdd D  fd	d
 D }fdd
|D }t|gt| | d S )Nr:   i  g?i  )r   ))r   r   )r   r,   )r	   rN   )r,   r+   c             3   s2   | ]*\  ft  fd dD fV  qdS )c                s   g | ]}|   qS r7   r7   )rA  r@   )ecerr7   r8   rB    s    z=TestSpecialOrthoGroup.test_haar.<locals>.<genexpr>.<listcomp>N)sorted)rA  )r   )rF  rG  r8   	<genexpr>  s    z2TestSpecialOrthoGroup.test_haar.<locals>.<genexpr>c                s&   g | ]} D ]}||kr||fqqS r7   r7   )rA  e0e1)elsr7   r8   rB    s    z3TestSpecialOrthoGroup.test_haar.<locals>.<listcomp>c                s&   g | ]\}}t  |  | d  qS )r	   )r   )rA  p0p1)projr7   r8   rB    s    )r-   r;   r<   r   r   dictr   r   )r4   r   samplesks_probpairsks_testsr7   )rL  rO  r   r8   	test_haark  s    
zTestSpecialOrthoGroup.test_haarN)r   r   r   r>  r?  r@  rE  rU  r7   r7   r7   r8   r=  A  s
   	r=  c               @   s<   e Zd Zdd Zdd Zdd Zdd Zejj	d	d
 Z
dS )TestOrthoGroupc             C   sp   t jd td}tjddd}tt j|d t dddgdd	d
gdddgg}t	|| t	|| d S )Ni  r+   )r   r   gmS9?g8e,˿gRVϿgob2g	,ʶgC}Ȇ?gF-YD?g:kO?g-C?)
r-   r;   r<   r   r   r   rY   rg   r|   r   )r4   r@   x2r;  r7   r7   r8   r>    s    

z#TestOrthoGroup.test_reproducibilityc             C   s<   t ttjd  t ttjd t ttjd t ttjd d S )N)r,   r,   r	   g      @)r0   r1   r   r   )r4   r7   r7   r8   r?    s    zTestOrthoGroup.test_invalid_dimc             C   s   dd t ddD }tdd |D }tt|t|jdd tdgd	 d
d |D  tdd |D d	gd	  x:|D ]2}x,|D ]$}tt	||j
t|jd  qW q~W d S )Nc                s"   g | ]  fd dt dD qS )c                s   g | ]}t  qS r7   )r   r   )rA  rp   )r   r7   r8   rB    s   z@TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>.<listcomp>rt   )rP   )rA  r7   )r   r8   rB    s   z5TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>r,   r&  c             S   s   g | ]}d d |D qS )c             S   s   g | ]}t j|qS r7   )r-   rY   rg   )rA  r@   r7   r7   r8   rB    s    z@TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>.<listcomp>r7   )rA  xxr7   r7   r8   rB    s    gvIh%<=)rm   r   rt   c             S   s$   g | ]}t |d k d  jd  qS )r   )r-   nonzeror   )rA  r   r7   r7   r8   rB    s    c             S   s$   g | ]}t |d k d  jd  qS )r   )r-   rY  r   )rA  r   r7   r7   r8   rB    s    )rP   r-   r|   r   fabsr   r   r   r   rQ   rR   r   )r4   r   rD  rX  r@   r7   r7   r8   rE    s    

z!TestOrthoGroup.test_det_and_orthoc                s|   d}d}d}t jd tj||dd tfdd D  fd	d
 D }fdd
|D }t|gt| | d S )Nr:   i  g?i  )r   ))r   r   )r   r,   )r	   rN   )r,   r+   c             3   s2   | ]*\  ft  fd dD fV  qdS )c                s   g | ]}|   qS r7   r7   )rA  r@   )rF  rG  r7   r8   rB    s    z6TestOrthoGroup.test_haar.<locals>.<genexpr>.<listcomp>N)rH  )rA  )r   )rF  rG  r8   rI    s    z+TestOrthoGroup.test_haar.<locals>.<genexpr>c                s&   g | ]} D ]}||kr||fqqS r7   r7   )rA  rJ  rK  )rL  r7   r8   rB    s    z,TestOrthoGroup.test_haar.<locals>.<listcomp>c                s&   g | ]\}}t  |  | d  qS )r	   )r   )rA  rM  rN  )rO  r7   r8   rB    s    )r-   r;   r<   r   r   rP  r   r   )r4   r   rQ  rR  rS  rT  r7   )rL  rO  r   r8   rU    s    
zTestOrthoGroup.test_haarc                sl   t jd dd }xRtddD ]D d fdd		}||}|tjjj}tj||\}}t	d
| q W d S )Ni  c             S   s,   t jt jj| | fd\}}}t ||S )N)r   )r-   rY   rZ   r;   r-  rQ   )r   r\   Z_sr]   r7   r7   r8   random_ortho  s     z<TestOrthoGroup.test_pairwise_distances.<locals>.random_orthor,   rx     绽|=c                s<   t  fddt|D }|t jj| ||jd7 }|S )Nc                s*   g | ]"}t  d  d  d qS ))r   r,   )r-   r   )rA  _)r   r   r7   r8   rB    s   z\TestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statistics.<locals>.<listcomp>)r   )r-   r|   rP   r;   r   r   )r   r   Zepsstats)r   )r   r8   generate_test_statistics  s
    zHTestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statisticsg?)r\  r]  )
r-   r;   r<   rP   rX   r_  r   r   r   r   )r4   r[  r`  r;  rr   Z_Dr  r7   )r   r8   test_pairwise_distances  s    	z&TestOrthoGroup.test_pairwise_distancesN)r   r   r   r>  r?  rE  rU  pytestmarkZslowra  r7   r7   r7   r8   rV    s
   rV  c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestRandomCorrelationc          	   C   sr   t jd d}t|}t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|| d S )Ni  )g      ?g?g333333?g      ?)r   g      ?gʿg3LU?giƖ\g``+ϿgO0)?gqɨ?)r-   r;   r<   r   r   r|   r   )r4   r   r@   rW  r;  r7   r7   r8   r>    s    



z*TestRandomCorrelation.test_reproducibilityc             C   s~   t ttjd  t ttjd t ttjd t ttjdg t ttjddgddgg t ttjddg t ttjdddg d S )	Ntestg      @r	   r,   r+   rN   g      g?)r0   r1   r   r   )r4   r7   r7   r8   test_invalid_eigs  s    z'TestRandomCorrelation.test_invalid_eigsc       
         s   dd  t jd  fddtddD }|dd	d	d	g d
d |D }dd |D }dd |D }dd |D }t||ddd dd |D }x$t||D ]\}}t||dd qW x|D ]}	t|	|	jdd qW d S )Nc             S   s   | | t | S )N)r   )rp   r   r7   r7   r8   r     s    z3TestRandomCorrelation.test_definition.<locals>.normr  c                s    g | ]} |t jj|d qS ))r   )r-   r;   r   )rA  rp   )r   r7   r8   rB    s    z9TestRandomCorrelation.test_definition.<locals>.<listcomp>r,   rx   rN   r   c             S   s   g | ]}d gt | qS )g      ?)r   )rA  r   r7   r7   r8   rB  	  s    c             S   s   g | ]}t |qS r7   )r   r   )rA  r   r7   r7   r8   rB  
  s    c             S   s   g | ]}t t j|qS r7   )r-   rZ  rY   rg   )rA  r@   r7   r7   r8   rB    s    c             S   s   g | ]}t |qS r7   )r-   prod)rA  r   r7   r7   r8   rB    s    gvIh%<=)rm   r{   c             S   s   g | ]}t |qS r7   )r-   r   )rA  r@   r7   r7   r8   rB    s    )rm   )r-   r;   r<   rP   r   r   ziprR   )
r4   r   r   r   rD  Z
dets_knownZdiagsr3  r   r@   r7   )r   r8   test_definition  s    
z%TestRandomCorrelation.test_definitionc          	   C   sf  t jddgddggtd}t|}t|t ddgddgg t jdd t ddgddgg}t jddgdt ddggtd}t| }t||j	
|
| t jd	dgdd
ggtd}t| }t||j	
|
| W d Q R X t jddgddggtd}t| }t|d d t jddgddggtd}t| }t|d d d S )Ng?r   r	   )rd   ignore)Zoverr   gu <7~g?g?r,   )r   r   gMk   @)r-   r|   rf   r   Z_to_corrr   ZerrstateZ	nextafterr2  rR   rQ   )r4   r   gZm0r7   r7   r8   test_to_corr  s"    
""z"TestRandomCorrelation.test_to_corrN)r   r   r   r>  rf  ri  rl  r7   r7   r7   r8   rd    s   	$rd  c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestUnitaryGroupc             C   s^   t jd td}tjddd}t dddgddd	gd
ddgg}t|| t|| d S )Ni  r+   )r   y~p?yZ?y뉦?ĭ?y8Z?&4?yEHξr?8i?ye??+ݓݿyu=ٿB۽'?yqXQÿ?yN6ҿzܷy! 8l?2W'?)r-   r;   r<   r   r   r|   r   )r4   r@   rW  r;  r7   r7   r8   r>  ?  s    

z%TestUnitaryGroup.test_reproducibilityc             C   s<   t ttjd  t ttjd t ttjd t ttjd d S )N)r,   r,   r	   g      @)r0   r1   r   r   )r4   r7   r7   r8   r?  K  s    z!TestUnitaryGroup.test_invalid_dimc             C   sN   dd t ddD }x4|D ],}tt|| jt|jd dd qW d S )Nc             S   s$   g | ]}t d D ]}t|qqS )r+   )rP   r   r   )rA  r   rp   r7   r7   r8   rB  R  s   z3TestUnitaryGroup.test_unitarity.<locals>.<listcomp>r,   r&  r   gV瞯<)r{   )rP   r   r-   rQ   ZconjrR   r   r   )r4   r   r@   r7   r7   r8   test_unitarityQ  s    
zTestUnitaryGroup.test_unitarityc             C   sx   d}d}t jd tj||d}t dd |D }t |j|j}t	|
 tt j dt j j}t|jdk d S )	Nr:   i  i  )r   c             S   s   g | ]}t j|qS r7   )rX   rY   Zeigvals)rA  r@   r7   r7   r8   rB  f  s    z.TestUnitaryGroup.test_haar.<locals>.<listcomp>r,   g?)r-   r;   r<   r   r   r   Zarctan2imagrealr    Zravelr   r   r3   r   Zpvalue)r4   r   rQ  r   r   r@   resr7   r7   r8   rU  Z  s     zTestUnitaryGroup.test_haarN)r   r   r   r>  r?  rn  rU  r7   r7   r7   r8   rm  >  s   	rm  c               @   s  e Zd Zddgddgddgddgddgddgddgddgddgddgg
ddgddgddggddddd	ddd
dddg
fdddgddd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d!d"dggd#d$d%d&d'd(gfgZejd)ed*d+ Zejd)ed,d- Zd.d/ Z	d0d1 Z
ed2d3d4 Zd5d6 Zd7d8 Zd9d:d;d<dgdd<ggd;ddgd<dgdd<ggdfd;d<dgdd<ggd<ddgd<dgdd<ggd<fd<d<gd;d;d<d<gddgddggdfd<d<gd;d<d<d<gddgddggd<fd<d<gd<dgdd<ggd;d<d<gd<dgdd<ggdfd<d<gd<dgdd<ggd<d<d<gd<dgdd<ggd<fgZejd=ed>d? ZddddgdggdfdgdgddgdggdfedgedgddgdggdfgZejd=ed@dA ZdBdC ZdDdE ZdFdG Zd;S )HTestMultivariateTr	   r,   rN   r+   r:   r   g|	ߌ?gv
2R?g0$H?gO`?gՒXO?g	ߌ,?g8N8?gHP?gQI?go_?g9m4?g=U?gˡE?g$C?ghs?gǺ?g!uq?g%C?gS㥛?gOec?gz,C?g	h"l?r   2   g      ?g      ?g      ?gr  gJ#R<g^<gL[<gN=<g`$<zx, loc, shape, df, ansc             C   s(   t |||dd}||}t|| d S )Nr   )r<   )r#   r2   r   )r4   r@   rz   r   r   ansdistvalr7   r7   r8   test_pdf_correctness  s    
z&TestMultivariateT.test_pdf_correctnessc       	      C   s8   t |||dd}||}||}tt|| d S )Nr   )r<   )r#   r2   rC   r   r-   rD   )	r4   r@   rz   r   r   rt  ru  r  r  r7   r7   r8   test_logpdf_correct  s    

z%TestMultivariateT.test_logpdf_correctc          
   C   s>   ddddddddddg
}t j|dd	}t|}t|| d S )
Nr  r   rN   r	   r   r   r+   )r   )r#   r2   r$   r   )r4   r@   rv  rt  r7   r7   r8   test_mvt_with_df_one_is_cauchy  s    
z0TestMultivariateT.test_mvt_with_df_one_is_cauchyc             C   s   d}t ddddd}|jdd}t|\}}||ks8tt ddgd	d
gd
d	ggddd}|jdd}t|\}}||k std S )Ng?r   r	   i )r   r<   )r   r  r+   rt   r   *   )r#   r   r%   AssertionErrorall)r4   Z	P_VAL_MINru  rQ  r^  r  r7   r7   r8   &test_mvt_with_high_df_is_approx_normal  s    z8TestMultivariateT.test_mvt_with_high_df_is_approx_normalz'scipy.stats.multivariate_normal._logpdfc             C   s`   t ddtjdd}t|ts tt jdtjd |jdks>tt jdtjd |jdks\td S )Nr   r	   r   )r   r<   )r   r,   )	r#   r-   rh   
isinstancer   r|  r2   Z
call_countrC   )r4   Zmockru  r7   r7   r8   !test_mvt_with_inf_df_calls_normal  s    z3TestMultivariateT.test_mvt_with_inf_df_calls_normalc       	      C   s"  d}t |}t |}d}t |}t||||}t |sFtt||||}t |sftd}t j||f}t||||}|j	|fkstt||||}|j	|fksttt dt dd
 }t |std}tt dt ddj
|d}|j	|fkstd S )NrN   g      @r   r	   )r   )r-   r_   r   r#   r2   Zisscalarr|  rC   r;   r   r   )	r4   r   rz   r   r   r@   rq  Z	n_samplesr   r7   r7   r8   test_shape_correctness  s(    


 z(TestMultivariateT.test_shape_correctnessc             C   s6   t  }t|jdg t|jdgg |jdks2td S )Nr   r	   )r#   r   rz   r   r   r|  )r4   ru  r7   r7   r8   test_default_arguments  s    z(TestMultivariateT.test_default_arguments)NNNr   r	   r	   )NNr   r   r	   r   Nr   z*loc, shape, df, loc_ans, shape_ans, df_ansc             C   s8   t |||d}t|j| t|j| |j|ks4td S )N)rz   r   r   )r#   r   rz   r   r   r|  )r4   rz   r   r   loc_ans	shape_ansdf_ansru  r7   r7   r8   test_default_args  s    z#TestMultivariateT.test_default_argsc             C   s4   t |||}t|j| t|j| t|j| d S )N)r#   r   rz   r   r   )r4   rz   r   r   r  r  r  ru  r7   r7   r8   &test_scalar_list_and_ndarray_arguments"  s    z8TestMultivariateT.test_scalar_list_and_ndarray_argumentsc             C   s   ddgg}t ttft|d ddgddgddgg}t ttft||d td}td}d}t ttft|||d d}t ttft|||d d S )	Nr	   )rz   r,   r+   )rz   r   r   )rz   r   r   r   )r0   r1   r#   rP  r-   r_   r   )r4   rz   r   r   r7   r7   r8   test_argument_error_handling)  s$    


z.TestMultivariateT.test_argument_error_handlingc             C   sh   t jd}|jdd}t d}t||ddd}t||ddd}|jdd}|jdd}t|| d S )NrN   r+   )r   r,   )r   r<   rt   )r-   r;   r  r   r   r#   r   r   )r4   rngrz   r   Zdist1Zdist2Zsamples1Zsamples2r7   r7   r8   r>  B  s    
z&TestMultivariateT.test_reproducibilityc             C   s6   t ddgddgddggddd}ttjjtf| d S )Nr   r	   F)rz   r   r   rO   )rP  r0   r-   rY   r   r#   )r4   r   r7   r7   r8   test_allow_singularL  s     z%TestMultivariateT.test_allow_singular)r   r   r   Z	PDF_TESTSrb  rc  parametrizerw  rx  rz  r~  r)   r  r  r  ZDEFAULT_ARGS_TESTSr  r-   r|   ZARGS_SHAPES_TESTSr  r  r>  r  r7   r7   r7   r8   rr  l  s|   



	 **"".2(
rr  c               @   s  e Zd Zejdddgddgddfddgddgdejfd	dgddgdejfddgd
dgdejfddgddggddgd
dggddgejejgfd	dgd
dgdejfddgddgdejfddgddgdejfddgddgdejfddgddgdejfg
dd Z	dd Z
dd Zdd Zejddgdgddfddgddgddfddgddggddgddgggddgddgddggdd gdd!ggfeg ejeg ejdg fddgddgddfdddgdd"dgd"d#fgd$d% Zejdddgddgdd&ggddd'gfdgdggdgdggddgd(d)gfdgdgggdgdggddgd(d)ggfdgdggdggggddgd(d)gggfg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dBS )CTestMultivariateHypergeomzx, m, n, expectedr+   rN   r:   rt   r   gr   ry  r	   r,   iir'  r&  r   ic             C   s    t |||}t||dd d S )Ngư>)rm   )r   r  r   )r4   r@   r   rU   r;  valsr7   r7   r8   r  S  s    z%TestMultivariateHypergeom.test_logpmfc             C   st   t jddgddgdd}tjddddd}t||d	d
 t jddgddgdd}tjddddd}t||d	d
 d S )Nr+   r	   rt   r:   rN   )r@   r   rU      )r`   r[   rU   r   g:0yE>)rm   r      )r   r
  r"   r   )r4   r  r  r7   r7   r8   test_reduces_hypergeomq  s    z0TestMultivariateHypergeom.test_reduces_hypergeomc             C   s:   t ddgdd}|jddd}t|d| d	d
 d S )Nr+   r:   rN   )r   rU   i  r  )r   r   r   g{Gz?)rm   )r   r   r   rA   )r4   r   r   r7   r7   r8   test_rvs|  s    z"TestMultivariateHypergeom.test_rvsc             C   sF   t ddgddggddgd}|jddd	}t|d
| dd d S )Nr+   r:   rt   rN   r  )r   rU   )i  r,   r  )r   r   r   g{Gz?)rm   )r   r   r   rA   )r4   r   r   r7   r7   r8   test_rvs_broadcasting  s    z/TestMultivariateHypergeom.test_rvs_broadcastingg zl?r  r  gQ?gE|?g
y?rx   gzp?c             C   s    t |||}t||dd d S )NgHz>)rm   )r   r
  r   )r4   r@   r   rU   r;  r  r7   r7   r8   r    s    z"TestMultivariateHypergeom.test_pmfr  g ?g      ?g        c             C   s    t |||}t||dd d S )NgHz>)rm   )r   r
  r   )r4   r@   r   rU   r;  r  r7   r7   r8   r    s    
z/TestMultivariateHypergeom.test_pmf_broadcastingc             C   sB   t jdddgdd}dddgdd	d
gdd
dgg}t||dd d S )Nr+   r   rt   r&  )r   rU   gf_?g&BUпgCx@ؿggs>d?gZsKg35?g:0yE>)rm   )r   r6   r   )r4   r  r   r7   r7   r8   r    s
    z"TestMultivariateHypergeom.test_covc             C   s   t jddgddggddgd}dd	gd	dggd
dgdd
ggg}t||dd t jdgdggddgd}dggdggg}t||dd t jddgddgd}dd	gd	dggddgddggg}t||dd d S )Nr   r  rt   r  r  r&  )r   rU   g?gg(\?g(\g:0yE>)rm   rN   r:   g        g333333?g333333)r   r6   r   )r4   r  r   r  r  r  r  r7   r7   r8   r     s    z/TestMultivariateHypergeom.test_cov_broadcastingc             C   s4   t jddgdd}tjdddd}t||dd d S )	Nrt   r:   rN   )r   rU   r  )r[   rU   r   g:0yE>)rm   )r   r   r"   r   )r4   var0var1r7   r7   r8   test_var  s    z"TestMultivariateHypergeom.test_varc             C   s   t jddgddgd}t jddgdd}t jddgdd}t|d |dd t|d	 |dd t jddgdd
ggddgd}ddgddgg}t||dd t jdgdggddgd}dgdgg}t||dd d S )Nrt   r:   rN   r  )r   rU   r   g:0yE>)rm   r	   r	  g̍3eY?gI{?g        )r   r   r   )r4   r  r  var2var3Zvar4Zvar5Zvar6r7   r7   r8   test_var_broadcasting  s    z/TestMultivariateHypergeom.test_var_broadcastingc             C   s`   t jddgdd}tjdddd}t|d |dd	 t jd
dgdd}ddg}t||dd	 d S )Nrt   r:   rN   )r   rU   r  )r[   rU   r   r   g:0yE>)rm   r&  r  g      @g      @)r   rA   r"   r   )r4   mean0r#  r   mean3r7   r7   r8   r$    s    z#TestMultivariateHypergeom.test_meanc             C   s@   t jddgddggddgd}ddgd	d
gg}t||dd d S )Nr+   r:   rt   rN   r  )r   rU   g      ?g      @gUUUUUU@gUUUUUU@g:0yE>)rm   )r   rA   r   )r4   r  r#  r7   r7   r8   r%    s    z0TestMultivariateHypergeom.test_mean_broadcastingc             C   s   t jdddgdd}t|dddg t jdddgdd}t|tjtjtjg t jdddgdddggdd}t|tjtjtjgdddggdd t jtg tjdd}t|g  t|j	d	k d S )
Nr   )r   rU   g        r	   r,   g      ?gFFg<)rm   )r   )
r   rA   r   r-   r   r   r|   int_r   r   )r4   r  r#  r   r  r7   r7   r8   test_mean_edge_cases  s    
z.TestMultivariateHypergeom.test_mean_edge_casesc             C   s   t jdddgdd}t|dddgdd t jdddgdd}t|tjtjtjg t jdddgdddggdd}t|tjtjtjgdddggdd t jtg tjdd}t|g  t|j	d	k d S )
Nr   )r   rU   g        gؗҜ<)rm   r	   r,   gFFg<)r   )
r   r   r   r   r-   r   r|   r  r   r   )r4   r  r  r  r  r7   r7   r8   test_var_edge_cases  s    
z-TestMultivariateHypergeom.test_var_edge_casesc             C   s   t jdddgdd}dddgdddgdddgg}t||dd t jdddgdd}dddgdddgdddgg}t|| t jtg tjdd}tjg tjddd}t||dd t	|j
dk d S )	Nr	   r   )r   rU   g        gFFg<)rm   )rd   )r   r   )r   r6   r   r   r-   r|   r  Zfloat_r   r   r   )r4   Zcov0r  r  r  r  r  r7   r7   r8   test_cov_edge_cases  s    
z-TestMultivariateHypergeom.test_cov_edge_casesc             C   s   t jd d}ddddg}ddddgddddgdddd	gddddgddd
dgg}t j|t jd}t||}t||t||| t||t||| t|	 t	|| t|
 t
|| d S )Ni  r&  r   r  r'     r   r	   rt   r,   r  )rd   )r-   r;   r<   r(  r  r   r   r
  r  r   r6   )r4   rU   r   r@   Z
mhg_frozenr7   r7   r8   r     s    


z%TestMultivariateHypergeom.test_frozenc             C   s   t ttjddd t ttjddgd t ttjddgdgd t ttjddgddgd t ttjddgddgd t ttjddgddgd d S )	Nr:   rt   rN   g      @g      @r  g      %@g      /@)r0   r1   r   r
  	TypeError)r4   r7   r7   r8   test_invalid_params  s    z-TestMultivariateHypergeom.test_invalid_paramsN)r   r   r   rb  rc  r  r-   ZNINFr   r  r  r  r  r|   r  r  r  r  r   r  r  r$  r%  r  r  r  r   r  r7   r7   r7   r8   r  R  sV   "$"&4
r  c             C   sd   | j }d| _ | j|ddi t| }| j|ddi}t|}|j|ddi}t|| || _ d S )Ni  r   r  )r   r   pickledumpsloadsr   )distfnr   r  rV   Zr0Z	unpickledr1r7   r7   r8   check_pickling+  s    


r  c           	   C   s   t d} d| d< d| d< tdgtt dgfgtd| fgtd| fgtddd	d
gfgtdgt	dgg}x$|D ]\}}t
|| t|| qjW d S )Nr+   g      ?)r   r	   )r	   r   r7   g      ?rt   r:   g?g?)r,   )r-   r   r   r   r|   r   r   r   r   r   r(   r  )rv   distsr  r   r7   r7   r8   test_random_state_property?  s    




r  )F__doc__r  Znumpy.testingr   r   r   r   r   r   rb  r   r0   Ztest_continuous_basicr
   r   r-   Zscipy.linalgrX   Zscipy.stats._multivariater   r   r   r   Zscipy.statsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   Zscipy.integrater&   Zscipy.specialr'   Zcommon_testsr(   Zunittest.mockr)   r*   r   r   r   r   r  r)  r=  rV  rd  rm  rr  r  r  r  r7   r7   r7   r8   <module>   sN    d   & 1 B @  %E][. g Z