a
    ˆù»jôe ã                   @   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 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-m.Z.m/Z/m0Z0m1Z1m2Z2 dd	lm3Z3m4Z4 dd
lm5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZA ddlBmCZC dd„ ZDG dd„ dƒZEd@dd„ZFdd„ ZGG dd„ dƒZHG dd„ dƒZIG dd„ dƒZJd d!„ ZKG d"d#„ d#ƒZLG d$d%„ d%ƒZMG d&d'„ d'ƒZNG d(d)„ d)ƒZOG d*d+„ d+ƒZPG d,d-„ d-ƒZQG d.d/„ d/ƒZRG d0d1„ d1ƒZSG d2d3„ d3ƒZTG d4d5„ d5ƒZUG d6d7„ d7ƒZVd8d9„ ZWd:d;„ ZXG d<d=„ d=ƒZYG d>d?„ d?ƒZZdS )Az8
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Ú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Úrandom_tableÚuniform_directionÚvonmises_fisherÚdirichlet_multinomialÚvonmises)Ú_covarianceÚ
Covariance)Ústats)ÚrombÚqmc_quadÚtplquad)Úmultigammaln)ÚVersion)Úcheck_random_state_property)Ú_qsimvtv)Úpatchc                 O   s@   t  | ¡t  |¡ } }t| |g|¢R i |¤Ž t| j|jƒ d S ©N)ÚnpÚasarrayr   r   Úshape)ÚresÚrefÚargsÚkwargs© r=   úIE:\soccer\ml_env\Lib\site-packages\scipy/stats/tests/test_multivariate.pyÚassert_close,   s    r?   c                   @   s„  e Zd Zdd„ Zejejjejjejj	dd„ dœZ
e ee
ƒ¡Ze g d¢¡g d¢g d¢g d	¢ge g d
¢¡g d¢g d¢g d¢gdœZeedd… eg d¢ edd… dœZej dedd… ¡dd„ ƒZej deeƒ¡ej de¡dd„ ƒƒZej ddeƒ ddg¡ej deeƒ¡ej de¡dd„ ƒƒƒZej deƒ dg¡ej de¡dd„ ƒƒZd d!„ Zej d"¡d#d$„ ƒZd%d&„ ZdS )'ÚTestCovariancec                 C   sî  d}t jt|d��  t t d¡¡ W d   ƒ n1 s80    Y  d}t jt|d��* tjt d¡t d¡d� W d   ƒ n1 s„0    Y  d}t jt|d�� t d¡ W d   ƒ n1 sÀ0    Y  d	}t jt|d��  t 	t d¡¡ W d   ƒ n1 �s0    Y  d
}t jt|d��$ t 
dt d¡f¡ W d   ƒ n1 �sL0    Y  d}t jt|d��$ t 
t d¡df¡ W d   ƒ n1 �s”0    Y  d}t jt|d��( t 
g d¢t d¡f¡ W d   ƒ n1 �sà0    Y  d S )Nz:The input `precision` must be a square, two-dimensional...©Úmatché   z0`precision.shape` must equal `covariance.shape`.é   )Ú
covariancez7The input `diagonal` must be a one-dimensional array...Zalpacaz9The input `cholesky` must be a square, two-dimensional...z4The input `eigenvalues` must be a one-dimensional...z,The input `eigenvectors` must be a square...z9The shapes of `eigenvalues` and `eigenvectors` must be...©r	   rC   rD   )Úpytestr   Ú
ValueErrorr*   ÚCovViaPrecisionr6   ÚonesÚeyeZCovViaDiagonalZCovViaCholeskyZCovViaEigendecomposition©ÚselfÚmessager=   r=   r>   Útest_input_validation4   s*    .8(044z$TestCovariance.test_input_validationc                 C   s   t | dd�S )NT©Úallow_singular)r   ©Úxr=   r=   r>   Ú<lambda>V   s    zTestCovariance.<lambda>)ZDiagonalZ	PrecisionZCholeskyZEigendecompositionZPSDrF   )é   r	   rD   )r	   é   é   )rD   rW   é   )r	   r   rD   )rU   éÿÿÿÿr   )rY   rU   r   ©r   r   r   )údiagonal full rankzgeneral full rankzdiagonal singularzgeneral singularr	   N)r   éþÿÿÿrY   r\   Úcov_type_namerY   c           	      C   sŠ   t  g d¢¡}g d¢}ttd|› �ƒ}| j| }ttd| ¡ › �ƒ}|||ƒƒ}|||ƒƒ}t|ƒt|ƒkspJ ‚t| 	|¡| 	|¡ƒ d S )NrF   )éüÿÿÿrC   rU   ÚCovViaZfrom_)
r6   ÚdiagÚgetattrr*   Ú_covariance_preprocessingr+   ÚlowerÚtyper   Úwhiten)	rM   r]   ÚArS   Úcov_typeÚpreprocessingÚfactoryr9   r:   r=   r=   r>   Útest_factoriesb   s    
zTestCovariance.test_factoriesÚmatrix_typec                 C   s¨  d|› d|› d�}|| j | vr*t |¡ | j| }ttd|› �ƒ}| j| }t|dd�}|||ƒƒ}t|j	|j	ƒ t
|j|jƒ t
|jt |¡jƒ t|jt |¡ƒ tj d¡}	|	jdd�}
| |
¡}|
|j }t|| || ƒ t|d	ƒ�rd
|v�rt| |¡|
ƒ |	jdd�}
| |
¡}|
|j }t|d jdd�|d jdd�ƒ t|d	ƒ�rtd
|v�rtt| |¡|
ƒ t|d	ƒ�r¤| t t|ƒ¡¡}t|j| |ƒ d S )Nr_   ú does not support ú	 matricesTrP   ì   ÐVGi’VžK rD   ©ÚsizeZ	_colorizeÚsingular©rC   rW   rD   rC   rY   ©Úaxis)Ú
_cov_typesrG   ÚskipÚ	_matricesra   r*   rb   r   r?   Úlog_pdetr   Úrankr8   r6   r7   rE   ÚrandomÚdefault_rngre   ÚUÚhasattrZcolorizeÚsumrK   ÚlenÚT)rM   rk   r]   rN   rf   rg   rh   ÚpsdÚ
cov_objectÚrngrS   r9   r:   r=   r=   r>   Útest_covariancep   s8    






"zTestCovariance.test_covariancerp   rr   c                 C   sÀ  d|› d|› d�}|| j | vr*t |¡ | j| }ttd|› �ƒ}| j| }g d¢}|||ƒƒ}	t}
t||dd�}t||	dd�}tj	 
d¡}|j|||d�}tj	 
d¡}|
j||	||d	�}tj	 
d¡}|
||	|d
�j|d�}t|	tjƒ�rt|t |¡ƒ t|t |¡ƒ n&t|j|jƒ t|j|jƒ t||ƒ t|
 |||	¡| |¡ƒ t| |¡| |¡ƒ t|
 |||	¡| |¡ƒ t| |¡| |¡ƒ t|
 ||	¡| ¡ ƒ t| ¡ | ¡ ƒ d S )Nr_   rl   rm   ©çš™™™™™¹?çš™™™™™É?ç333333Ó?TrP   rn   ro   ©rp   Úrandom_state©Úseed)ru   rG   rv   rw   ra   r*   rb   r   r6   rz   r{   ÚrvsÚ
isinstanceZ	CovViaPSDr?   Úsqueezer   r8   ÚpdfÚlogpdfÚentropy)rM   rp   rk   r]   rN   rf   rg   rh   Úmeanr‚   ÚmvnÚdist0Údist1rƒ   rS   Úx1Úx2r=   r=   r>   Útest_mvn_with_covariance¡   s:    



z'TestCovariance.test_mvn_with_covariancec                 C   sÜ   d}| j | }ttd|› �ƒ}| j| }g d¢}|||ƒƒ}t}	t||dd�}
t||dd�}tj d¡}|j|||d�}t|	 	|||¡|
 	|¡ƒ t| 	|¡|
 	|¡ƒ t|	 
|||¡|
 
|¡ƒ t| 
|¡|
 
|¡ƒ d S )Nr[   r_   r…   TrP   rn   ro   )rw   ra   r*   rb   r   r6   rz   r{   r?   ÚcdfÚlogcdf)rM   rp   r]   rk   rf   rg   rh   r“   r‚   r”   r•   r–   rƒ   rS   r=   r=   r>   Útest_mvn_with_covariance_cdfÉ   s    

z+TestCovariance.test_mvn_with_covariance_cdfc                 C   s<   d}t jt|d�� tƒ  W d   ƒ n1 s.0    Y  d S )Nz7The `Covariance` class cannot be instantiated directly.rA   )rG   r   ÚNotImplementedErrorr+   rL   r=   r=   r>   Útest_covariance_instantiationã   s    z,TestCovariance.test_covariance_instantiationzignore::RuntimeWarningc                 C   sÀ   t  g d¢¡}|jd }t  |¡}tjtdd�� t||ƒ ¡  W d   ƒ n1 sT0    Y  d}t j	 
|¡}t j	 
|¡}t t j |¡¡}t||ƒ}|j|d�}	tj|||d�}
t|	|
ƒ d S )N)r	   rC   g:Œ0âŽyE¾r   zThe input matrix must be...rA   l   .ypGw ©rŠ   )r6   r`   r8   ÚzerosrG   r   rH   r   r�   rz   r{   r+   Úfrom_eigendecompositionÚlinalgÚeighr   )rM   rf   Únr“   rŒ   Zrng1Zrng2ÚcovÚrvr9   r:   r=   r=   r>   Útest_gh9942è   s    

,
zTestCovariance.test_gh9942c                 C   sÀ   t  d¡}t t  d¡t  d¡f¡}tjj||d�}|j	d d�}t
||ƒ tjj t  ddg¡t  ddgddgg¡f¡}tjj||d�}|j	d d�}|d |d ks¨J ‚|d |d ks¼J ‚d S )	NrC   ©r“   r¥   ro   ç      ð?ç        g      y@r   r	   )r6   rJ   r+   r¡   r    rK   Úscipyr,   r   r�   r   Úarray)rM   r“   r¥   Údistr�   r=   r=   r>   Útest_gh19197ÿ   s    

"ÿzTestCovariance.test_gh19197)Ú__name__Ú
__module__Ú__qualname__rO   r6   r`   r¢   ÚinvÚcholeskyr£   rb   r¬   ÚlistZ_all_covariance_typesrw   ru   rG   ÚmarkÚparametrizerj   r„   Útupler™   rœ   rž   Úfilterwarningsr§   r®   r=   r=   r=   r>   r@   2   sD   üý


ý
/%

r@   Fc           	      C   s\   |  | | f¡}||j }tj |¡\}}|rD|j| d�dk}d||< |t |¡ |j }|S )Nro   r   )rz   r€   r6   r¢   r£   Únormalr`   )	ÚdimZevalsrƒ   rq   rf   Ú_ÚvZ	zero_eigsr¥   r=   r=   r>   Ú_random_covariance  s    
r½   c                 C   s$   t j | | ¡}tj |¡\}}}|S r5   )r6   rz   Úrandnr«   r¢   Úsvd)r¤   ÚMÚuÚsr¼   r=   r=   r>   Ú_sample_orthonormal_matrix   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ej de d¡e ddg¡g¡d d!„ ƒZd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Z d2d3„ Z!d4d5„ Z"d6d7„ Z#d8d9„ Z$d:d;„ Z%d<d=„ Z&d>d?„ Z'd@dA„ Z(ej dBdC¡dDdE„ ƒZ)dFdG„ Z*ej dHe +dI¡e +dJ¡g¡dKdL„ ƒZ,ej dMe +dN¡e +dO¡e +dP¡g¡dQdR„ ƒZ-dSdT„ Z.dUdV„ Z/dWdX„ Z0dYS )ZÚ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 )NrD   rC   ©r   r	   ©r   r	   rC   )r6   ÚarangeÚidentityÚassert_raisesrH   r   r�   rš   )rM   Úmur¥   r=   r=   r>   Ú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 )NéÒ  )ç      ø?g333333û?ç      @r   rU   )
r6   rz   rŒ   r   r�   r   Úndimr¾   Úabsrš   )rM   rS   r“   r¥   r�   rš   r=   r=   r>   Ú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 ©NrÌ   rU   )
r6   rz   rŒ   r¾   rÐ   r   r‘   r�   r   Úlog©rM   rS   r“   r¥   Úd1Úd2r=   r=   r>   Ú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 ©NrÌ   rU   r	   )	r6   rz   rŒ   r¾   r   r‘   r�   r   rÓ   ©rM   rS   rÕ   rÖ   Zd3Zd4r=   r=   r>   Ú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 rÒ   )
r6   rz   rŒ   r¾   rÐ   r   r›   rš   r   rÓ   rÔ   r=   r=   r>   Ú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 rØ   )	r6   rz   rŒ   r¾   r   r›   rš   r   rÓ   rÙ   r=   r=   r>   Útest_logcdf_default_valuesk  s    

z1TestMultivariateNormal.test_logcdf_default_valuesc                 C   sl   t j d¡ d}t j |¡}td|d ƒD ]<}t j ||¡}t  ||j¡}t||dd�}t|j	j
|ƒ q*d S )NrÌ   rW   r	   TrP   )r6   rz   rŒ   r¾   ÚrangeÚdotr€   r   r   r‚   ry   )rM   r¤   r“   Zexpected_rankrÂ   r¥   Zdistnr=   r=   r>   Ú	test_rankx  s    z TestMultivariateNormal.test_rankc              	   C   sÔ  t ddƒD �]Â}tj |¡}t d|ƒD �]¤}tj ||¡}t ||j¡}t ||f¡}||d |…d |…f< t |¡}|d |… |d |…< t|ƒ}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||ƒ |
|d d …df  }| |¡}| |¡}t	|dƒ t	|tj ƒ q&q
d S )Nr	   rU   TrP   rY   rª   )rÝ   r6   rz   r¾   rÞ   r€   r    rÃ   r   r   r‚   ry   r�   r   r‘   Úinf)rM   r¤   ÚzÚkrÂ   Zcov_kkZcov_nnrS   rÁ   Zcov_rrÚyZdistn_kkZdistn_nnZdistn_rrZpdf_kkZpdf_nnZpdf_rrZ	logpdf_kkZ	logpdf_nnZ	logpdf_rrZy_orthZpdf_rr_orthZlogpdf_rr_orthr=   r=   r>   Útest_degenerate_distributionsƒ  sN    
ÿÿÿ










z4TestMultivariateNormal.test_degenerate_distributionsc           
      C   sÌ   d}t ddƒD ]¸}t d|ƒD ]¨}t |¡}t|ƒd d …d |…f }t ||j¡}tj|||d�}tj|||dd�}t	|j
|ƒ t |dk¡s�J ‚tj|||dd�}	t	|	j
|ƒ t |	tj k¡sJ ‚qqd S )	Né
   rC   rV   r	   ©r“   r¥   rp   T)r“   r¥   rQ   rª   )rÝ   r6   r    rÃ   rÞ   r€   r   r�   r�   r   rp   Úallr‘   rà   )
rM   râ   r¤   ÚrZmnrÁ   ZvrÚXr�   r‘   r=   r=   r>   Útest_degenerate_array·  s"    

ÿ
ÿz,TestMultivariateNormal.test_degenerate_arrayc                 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   rC   ©Zdtyper   r	   )r6   Úexpr    ÚfloatZfill_diagonalr   r«   r¢   Údetrà   r   Úslogdetr   rx   )rM   Zlarge_total_logZnposZnzeroZlarge_entryr¤   r¥   r�   r=   r=   r>   Ú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 |||¡}t	dƒD ]f}t	dƒD ]X}	t |||	f ||¡}
t
|
|||	f ƒ t |||	f ||¡}
t
|
|||	f dd� qxqld S )NrÌ   rW   rC   rD   çü©ñÒMbP?©Úrtol)r6   rz   rŒ   r¾   rÞ   r€   r   r�   rš   rÝ   r   )rM   r¤   Údatar¥   r“   ré   Zdesired_pdfZdesired_cdfÚiÚjÚactualr=   r=   r>   Útest_broadcastingå  s    z(TestMultivariateNormal.test_broadcastingc                 C   sn   t  ddd¡}d\}}|d }t |||¡}t |||¡}t||ƒ t |||¡}t |||¡}t||ƒ d S )Nr   rC   rå   )ç333333ó?çÍÌÌÌÌÌì?ç      à?)r6   Úlinspacer   r�   r   r   rš   )rM   rS   r“   r¥   ÚscalerÕ   rÖ   r=   r=   r>   Ú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 )NrÎ   g      @rü   r‡   ç333333ã?i  rV   r	   r   rC   rs   ©r   r   )Úlocrþ   )r	   r	   ç{®Gáz„?©rô   Úatol)
r6   r¬   rý   ZmeshgridÚemptyr   r�   r-   r   r   )rM   r“   r¥   r¤   Údeltar¼   ZxvZyvÚposr�   Zmargin_xZmargin_yZgauss_xZgauss_yr=   r=   r>   Ú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 rÒ   )r6   rz   rŒ   r¾   rÐ   r   r   r�   r‘   rš   r›   )rM   rS   r“   r¥   Únorm_frozenr=   r=   r>   Útest_frozen$  s    

ÿ
ÿz"TestMultivariateNormal.test_frozenrE   rC   r	   c                 C   sF   t  d¡}t  d¡}t||ƒ}t  |j|¡s0J ‚t  |j|¡sBJ ‚d S )N©rC   rC   )r6   rJ   rK   r   Úallcloser“   r¥   )rM   rE   r“   Zcov_should_ber
  r=   r=   r>   Ú2test_frozen_multivariate_normal_exposes_attributes2  s
    


zITestMultivariateNormal.test_frozen_multivariate_normal_exposes_attributesc           	   	   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 )
NrÌ   rX   rü   r©   r   çH¯¼šò×z>rY   çñhãˆµøä>)Úcond)r6   rz   rŒ   r¾   rÞ   r€   r«   r¢   r£   Úfullr`   r   Zpinvr   rx   r~   rÓ   )	rM   r¤   rS   r¥   rÂ   rÁ   r  r�   Zpsd_pinvr=   r=   r>   Útest_pseudodet_pinv@  s     z*TestMultivariateNormal.test_pseudodet_pinvc                 C   s    g d¢g d¢g}t tt|ƒ d S )NrF   ©rW   rU   rV   ©rÉ   rH   r   ©rM   r¥   r=   r=   r>   Útest_exception_nonsquare_covZ  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   )r6   ÚnanrÉ   rH   r   rà   )rM   Zcov_nanZcov_infr=   r=   r>   Útest_exception_nonfinite_cov^  s    z3TestMultivariateNormal.test_exception_nonfinite_covc                 C   s    ddgddgg}t tt|ƒ d S )Nr	   r   rY   r  r  r=   r=   r>   Útest_exception_non_psd_covd  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dgddgg}d}tjt jj|d�� t|d� W d   ƒ n1 sÒ0    Y  d S )	NrÌ   rU   )rU   rU   r©   rª   z0When `allow_singular is False`, the input matrixrA   ©r¥   )r6   rz   rŒ   r¾   rJ   r¢   ÚLinAlgErrorrÉ   r   r�   r‘   rš   r›   rG   r   )rM   rS   r“   r¥   ÚeÚmsgr=   r=   r>   Útest_exception_singular_covh  s    
z2TestMultivariateNormal.test_exception_singular_covc                 C   s"  t  g d¢¡}t  ddd¡}d| d }|t  |¡ }t  |||g¡j}t  g d¢d¡}t  g d¢g d	¢g d
¢gd¡}t |||¡}t||dd� t  g d¢¡}	t |||¡}
t|
|	dd� t  g d¢¡}t  ||g¡j}t  ddgd¡}t  ddgddggd¡}t |||¡}t||dd� d S )N)g¥0Ò÷Q-?gox'‚¤V?g[S,¸� t?gäúóDB…?g³èc_.¹Œ?r   rC   rU   rD   )r	   rD   rC   Úd©r	   rC   r   )rC   rU   rü   )r   rü   rD   ç»½×Ùß|Û=©r  )gwÐk:¢E]?gë®Ì™ýZ›?g¶0Ëñµ?gLÿß8»?gA¿G*ÀÐ?gñhãˆµøô>)gòIÙ‰?gˆï—Gå­?gÆ�)å‰Ç?gÄ—h»Ú?g•™óEEå?r	   r  )	r6   r¬   rý   Úcosr€   r   r�   r   rš   )rM   Zr_pdfrS   rã   rá   rè   r“   r¥   r�   Zr_cdfrš   Zr_cdf2Úr2Úmean2Úcov2Úcdf2r=   r=   r>   Útest_R_values{  s$    z$TestMultivariateNormal.test_R_valuesc                 C   s<   t  d¡}t  d¡}t||dd�}| ¡ }t|ddgƒ d S )NrC   ©rC   rC   TrP   r   )r6   r    r   r�   r   )rM   r“   rE   ÚmodelÚsampler=   r=   r>   Ú,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,  rW   r	   ræ   rC   r†   r   r¨   )r   r�   r6   r    r   r8   r¬   )rM   ÚNr   r,  rÁ   r=   r=   r>   Ú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 )Né  rD   éˆ  r†   ró   r   )r6   rz   rŒ   r¾   rÞ   r€   r   r�   r   Únumpyr¥   r“   )rM   r¤   r“   rÀ   r¥   rp   r,  r=   r=   r>   Ú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 )Nr0  rD   r   rü   rC   r	   )r6   rz   rŒ   r¾   rÞ   r€   r   r   r’   r¢   ZeigrÓ   Úpir~   )rM   r¤   r“   rÀ   r¥   r¦   ÚeigsÚdesiredr=   r=   r>   Útest_entropyä  s    
,z#TestMultivariateNormal.test_entropyc                 C   s*   t  g d¢¡}d}tt  t|ƒ¡|ƒ d S )N©r	   r	   r	   rü   )r6   r¬   r   rí   r   )rM   Úalphar6  r=   r=   r>   Útest_lnBö  s    zTestMultivariateNormal.test_lnBc                 C   sþ   t j d¡}ddg}t  d¡}| d¡d d }| d¡d d }tj||||d�}t |||¡}t |||¡}t j|ddd	…f |dd	d…f fd
d�}	t j|dd	d…f |ddd	…f fd
d�}
t |	||¡}t |
||¡}|| | | }t||ƒ d S )Nì   FòYc@Y r   rC   )rW   rD   rC   rV   rD   ©Úlower_limit.r	   rY   rs   )r6   rz   r{   rK   r   rš   Úconcatenater   )rM   rƒ   r“   r¥   ÚaÚbÚcdf1Zcdf2aZcdf2bZab1Zab2Zcdf2ab1Zcdf2ab2r(  r=   r=   r>   Ú test_cdf_with_lower_limit_arraysü  s    
**z7TestMultivariateNormal.test_cdf_with_lower_limit_arraysc           
      C   sÔ   t j d¡}| d¡}| d¡}||j }| d¡d d }| d¡d d }tj||||d�}t||ƒj||d�}t  tj||||d�¡}t  t||ƒj||d�¡}	t||dd� t||dd� t|	|dd� d S )	Nr;  rD   ©rD   rD   ©rC   rD   rV   r<  ç-Cëâ6?ró   )	r6   rz   r{   r€   r   rš   rí   r›   r   )
rM   rƒ   r“   r¥   r?  r@  rA  r(  Zcdf3Zcdf4r=   r=   r>   Ú%test_cdf_with_lower_limit_consistency  s    


z<TestMultivariateNormal.test_cdf_with_lower_limit_consistencyc                 C   s‚   t  d¡}t  d¡}g d¢g d¢g d¢g d¢g}g d¢g d¢g d¢g d¢g}t  g d¢¡}tj||||d�}t||d | ƒ d S )	NrD   r8  rZ   ©r	   r   r	   ©r   r	   r   ©r	   rY   rY   r	   r<  r   ©r6   r    rK   r¬   r   rš   r   )rM   r“   r¥   r@  r?  Úexpected_signsrš   r=   r=   r>   Útest_cdf_signs"  s    

z%TestMultivariateNormal.test_cdf_signsc                 C   sú   t  dt  g d¢¡ ¡}t |¡}d}tjt|d��  t 	ddg|¡ W d   ƒ n1 sZ0    Y  tjt|d�� tddg|ƒ W d   ƒ n1 s–0    Y  g d¢}t 
|g d¢|¡}ttj
||d�|ƒ t 
|g d	¢|¡}ttj
|d|d�|ƒ d S )
Nr	   rF   z7`cov` represents a covariance matrix in 3 dimensions...rA   r   )rü   rü   rü   rZ   r  r8  )r6   r`   r¬   r*   rI   rG   r   rH   r   r’   r�   r   )rM   ÚPr‚   rN   rS   r:   r=   r=   r>   Útest_mean_cov-  s    
.,z$TestMultivariateNormal.test_mean_covc                 C   sH   ddg}d}t jt|d�� t |¡ W d   ƒ n1 s:0    Y  d S )Nr	   rD   z`x` must be two-dimensional.rA   )rG   r   rH   r   Úfit)rM   rõ   Ú	error_msgr=   r=   r>   Útest_fit_wrong_fit_data_shape@  s    z4TestMultivariateNormal.test_fit_wrong_fit_data_shaperº   )rD   rU   c                 C   sh   t j d¡}| d|f¡}t |¡\}}t j|dd�t j|jdd� }}t||dd� t||dd� d S )	Nì   ¼@‡,„Q| rë   r   rs   )ZddofçVçž¯Ò<r#  ró   )	r6   rz   r{   r   rO  r“   r¥   r€   r   )rM   rº   rƒ   rS   Zmean_estZcov_estZmean_refZcov_refr=   r=   r>   Útest_fit_correctnessF  s     z+TestMultivariateNormal.test_fit_correctnessc                 C   sF   t  dd¡}d}t  d¡}tj|||d�\}}t||ƒ t||ƒ d S )N)rC   r	   rD   r©   )Úfix_meanÚfix_cov)r6   r  Z
atleast_2dr   rO  r   )rM   rõ   Z
mean_fixedZ	cov_fixedr“   r¥   r=   r=   r>   Útest_fit_both_parameters_fixedO  s    
ÿ

z5TestMultivariateNormal.test_fit_both_parameters_fixedrU  r*  ©rD   c                 C   sJ   d}t jt|d��$ tjt d¡|d� W d   ƒ n1 s<0    Y  d S )Nzd`fix_mean` must be a one-dimensional array the same length as the dimensionality of the vectors `x`.rA   rC   ©rU  ©rG   r   rH   r   rO  r6   rK   )rM   rU  r  r=   r=   r>   Ú"test_fit_fix_mean_input_validationX  s    z9TestMultivariateNormal.test_fit_fix_mean_input_validationrV  r  )rD   rC   )rW   rW   c                 C   sJ   d}t jt|d��$ tjt d¡|d� W d   ƒ n1 s<0    Y  d S )Nzn`fix_cov` must be a two-dimensional square array of same side length as the dimensionality of the vectors `x`.rA   rD   ©rV  rZ  )rM   rV  r  r=   r=   r>   Ú+test_fit_fix_cov_input_validation_dimension`  s    zBTestMultivariateNormal.test_fit_fix_cov_input_validation_dimensionc                 C   s`   d}t jt|d��: t ddgddgg¡}tjt d¡|d� W d   ƒ n1 sR0    Y  d S )Nz2`fix_cov` must be symmetric positive semidefinite.rA   r©   rª   g      ð¿rC   r\  )rG   r   rH   r6   r¬   r   rO  rK   )rM   rP  rV  r=   r=   r>   Ú*test_fit_fix_cov_not_positive_semidefinitej  s    zATestMultivariateNormal.test_fit_fix_cov_not_positive_semidefinitec                 C   sæ   t j d¡}| d¡}| d¡}t  ||j¡}tj||d|d�}t |¡\}}tj|||d� 	¡ }tj||d�\}	}
t
|	|ƒ tj||	|
d� 	¡ }||k sžJ ‚| d¡}dt  ||j¡ }|
| }tj||	|d� 	¡ }||k sâJ ‚d S )	NrR  rD   rC  rë   ©r“   r¥   rp   rŠ   r¨   rY  ç:Œ0âŽyE>)r6   rz   r{   rÞ   r€   r   r�   rO  r‘   r~   r   )rM   rƒ   r  rf   r¥   ÚsamplesÚ	mean_freeÚcov_freeÚ	logp_freeÚmean_fixÚcov_fixÚlogp_fixÚmZcov_perturbedÚlogp_perturbedr=   r=   r>   Útest_fit_fix_meanp  s2    


ÿÿ

ÿ

þ
z(TestMultivariateNormal.test_fit_fix_meanc                 C   sè   t j d¡}| d¡}| d¡}t  ||j¡}tj||d|d�}t |¡\}}tj|||d� 	¡ }tj||d�\}	}
t
|	t j|dd	�ƒ t
|
|ƒ tj||	|
d� 	¡ }||k s²J ‚|	d
| d¡  }tj|||
d� 	¡ }||k säJ ‚d S )NrR  rD   rC  rë   r_  r¨   r\  r   rs   r`  )r6   rz   r{   rÞ   r€   r   r�   rO  r‘   r~   r   r“   )rM   rƒ   r  rf   r¥   ra  rb  rc  rd  re  rf  rg  Zmean_perturbedri  r=   r=   r>   Útest_fit_fix_cov�  s0    

ÿÿ

ÿ
þ
z'TestMultivariateNormal.test_fit_fix_covN)1r¯   r°   r±   rË   rÑ   r×   rÚ   rÛ   rÜ   rß   rä   rê   rñ   rù   rÿ   r	  r  rG   rµ   r¶   r6   rK   r+   Zfrom_diagonalr  r  r  r  r  r  r)  r-  r/  r3  r7  r:  rB  rF  rL  rN  rQ  rT  rW  r    r[  r]  r^  rj  rk  r=   r=   r=   r>   rÄ   &  sh   

4þþ
@
	ÿ
þ
rÄ   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )Ú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j
||t  ||f¡ƒ t|tj
|t  ||f¡|ƒ t|t||t  ||f¡ƒ t|t|t  ||f¡|ƒ d S )NrW   rD   rˆ   rü   çffffffæ?)rU   rW   rD   rå   )r6   r  rÈ   rÉ   rH   r   r    r€   r¢   r  r�   rJ   )rM   Únum_rowsÚnum_colsrÀ   r|   ÚVr  r=   r=   r>   Ú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 )NrW   rD   rˆ   rü   rm  r	   ©r“   ÚrowcovÚcolcov)r“   )rs  )rt  )r“   rt  )r“   rs  )rs  rt  )r6   r  rÈ   r    r   r   r�   r8   rs  rt  r“   )rM   rn  ro  rÀ   r|   rp  ÚZZZrZZcÚIrÚIcZI1r=   r=   r>   Útest_default_inputsÅ  sR    


ÿÿÿÿÿÿÿ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 )NrW   rD   rˆ   r‡   r†   rr  )r6   r  rÈ   r   r   rs  rt  )
rM   rn  ro  rÀ   ZUvZUsZVvZVsrv  rw  r=   r=   r>   Útest_covariance_expansionì  s*    

ÿÿÿÿz*TestMatrixNormal.test_covariance_expansionc                 C   sþ   t ddƒD ]î}t 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q
d S )
Nr	   rU   rˆ   rü   rm  rr  rÌ   rŸ   )r“   rs  rt  rŠ   )	rÝ   r6   r  rÈ   r   r�   r   r�   r‘   )rM   rö   r÷   rÀ   r|   rp  ÚfrozenÚrvs1Úrvs2ré   Úpdf1Úpdf2Úlogpdf1Úlogpdf2r=   r=   r>   Útest_frozen_matrix_normal  s$    
ÿ



z*TestMatrixNormal.test_frozen_matrix_normalc                 C   s  t ddƒD �]
}t 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j||d	�}t||d
d� t|	|d
d� t|
|ƒ qq
d S )Nr	   rU   rˆ   rü   rm  rr  rÌ   rŸ   r¨   r"  ró   )rÝ   r6   r  rÈ   r   r�   r�   r‘   r’   r€   ÚflattenZkronr   r   )rM   rö   r÷   rÀ   r|   rp  rz  ré   r}  r  Zentropy1ZvecXZvecMr¥   r~  r€  Zentropy2r=   r=   r>   Útest_matches_multivariate  s&    



z*TestMatrixNormal.test_matches_multivariatec                 C   sF  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ƒ t
dƒD ]B}t
|ƒD ]4}tj	|
||f |||d�}t||||f dƒ �q
qþd S )NrW   rD   rˆ   rü   rm  rå   rr  rÌ   r‰   iá  r   rs   rC   r"  )r6   r  rÈ   r   r�   r>  Únewaxisr   r8   r‘   rÝ   r   )rM   rn  ro  rÀ   r|   rp  r.  rz  ZX1ZX2ré   Zarray_logpdfrö   r÷   Zseparate_logpdfr=   r=   r>   Útest_array_input4  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 )NrW   rD   rˆ   rü   rm  éè  rr  rÌ   r‰   r   rs   r†   r#  r	   rC   )r6   r  rÈ   r   r�   r“   r   r¥   Úreshaper€   Zswapaxes)rM   rn  ro  rÀ   r|   rp  r.  rz  ré   Zsample_meanZsample_colcovZsample_rowcovr=   r=   r>   Útest_momentsK  s     ÿzTestMatrixNormal.test_momentsc                 C   s†   t jt ddgddgg¡t ddgddgg¡t ddgddgg¡tj d¡dd	�}t d
dgddggddgddggg¡}t||ƒ d S )Nr	   rC   rD   rW   rY   rU   rå   r   )r“   rs  rt  rŠ   rp   g¡6‚ÿø?gÇ€À Üó¿g‚¡c´Ï¿@g—ì"ç'ë@gI2Í–é@g^½€Òjy%@gøDn3Á@gëž|\3@)r   r�   r6   r¬   rz   r{   r   )rM   rø   Úexpectedr=   r=   r>   Útest_samplesa  s"    
ûÿÿþÿzTestMatrixNormal.test_samplesN)r¯   r°   r±   rq  rx  ry  r�  rƒ  r…  rˆ  rŠ  r=   r=   r=   r>   rl  ©  s   'rl  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}t
|ƒD ]r}t j dd|¡}|t  |¡ }t| |d d… ¡t |d d… |¡ƒ t| |d d… ¡t |d d… |¡ƒ qzd S ©Nr0  r	   é    ç•Ö&è.>rë   rå   rY   )r6   rz   rŒ   Úrandintr   r   r   Úvarr“   r’   rÝ   r~   r�   r‘   ©rM   r¤   r9  r   Ú	num_testsrö   rS   r=   r=   r>   Útest_frozen_dirichletv  s    (z#TestDirichlet.test_frozen_dirichletc                 C   s¢   t j d¡ t  g d¢¡}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 )Nr0  ©r©   ç       @ç      @rX   ro   )rX   rD   rY   )r6   rz   rŒ   r¬   r   r   r8   rÉ   rH   r�   r‘   r€   ©rM   r9  rS   r=   r=   r>   Ú"test_numpy_rvs_shape_compatibilityˆ  s    z0TestDirichlet.test_numpy_rvs_shape_compatibilityc                 C   sR   t j d¡ g d¢}t jjt  d|¡dd�j}tttj||ƒ tttj	||ƒ d S )Nr0  )r©   rª   r–  rŽ  rX   ro   ©
r6   rz   rŒ   r   Úmaximumr€   rÉ   rH   r�   r‘   r—  r=   r=   r>   Útest_alpha_with_zeros”  s
    z#TestDirichlet.test_alpha_with_zerosc                 C   sR   t j d¡ g d¢}t jjt  d|¡dd�j}tttj||ƒ tttj	||ƒ d S )Nr0  )r©   g       Àr–  rŽ  rX   ro   r™  r—  r=   r=   r>   Ú test_alpha_with_negative_entriesœ  s
    z.TestDirichlet.test_alpha_with_negative_entriesc                 C   sp   t  g d¢¡}t  g d¢¡}t ||¡ t ||¡ t  g d¢¡}tt ||¡dƒ tt ||¡t  d¡ƒ d S )N©r©   r•  r–  ç      @©r†   rª   r‡   rm  )r©   r©   r©   r©   rV   )r6   r¬   r   r�   r‘   r   rÓ   r—  r=   r=   r>   Útest_data_with_zeros¤  s    z"TestDirichlet.test_data_with_zerosc                 C   s@   t  g d¢¡}t  g d¢¡}tttj||ƒ tttj||ƒ d S )N)r©   rü   r–  rž  rŸ  ©r6   r¬   rÉ   rH   r   r�   r‘   r—  r=   r=   r>   Ú$test_data_with_zeros_and_small_alpha­  s    z2TestDirichlet.test_data_with_zeros_and_small_alphac                 C   s@   t  g d¢¡}t  g d¢¡}tttj||ƒ tttj||ƒ d S )Nr�  )r†   çš™™™™™¹¿rˆ   rm  r¡  r—  r=   r=   r>   Útest_data_with_negative_entries³  s    z-TestDirichlet.test_data_with_negative_entriesc                 C   s@   t  g d¢¡}t  g d¢¡}tttj||ƒ tttj||ƒ d S )Nr�  )r†   çš™™™™™ñ?rˆ   rm  r¡  r—  r=   r=   r>   Ú test_data_with_too_large_entries¹  s    z.TestDirichlet.test_data_with_too_large_entriesc                 C   s>   t  g d¢¡}t  dd¡}tttj||ƒ tttj||ƒ d S )Nr”  )rC   rX   rX   g’$I’$I²?©r6   r¬   r  rÉ   rH   r   r�   r‘   r—  r=   r=   r>   Ú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 )Nr©   r•  r–  rž  )rC   rC   rX   ç      Ð?r§  r—  r=   r=   r>   Útest_alpha_too_deepÅ  s    z!TestDirichlet.test_alpha_too_deepc                 C   s6   t  g d¢¡}t  dd¡}t ||¡ t ||¡ d S )Nr”  ©rD   rX   çUUUUUUÕ?)r6   r¬   r  r   r�   r‘   r—  r=   r=   r>   Útest_alpha_correct_depthË  s    z&TestDirichlet.test_alpha_correct_depthc                 C   s>   t  g d¢¡}t  dd¡}tttj||ƒ tttj||ƒ d S )Nr”  r«  rü   r§  r—  r=   r=   r>   Útest_non_simplex_dataÑ  s    z#TestDirichlet.test_non_simplex_datac                 C   s>   t  g d¢¡}t  dd¡}tttj||ƒ tttj||ƒ d S )Nr�  )rC   rX   rü   r§  r—  r=   r=   r>   Útest_data_vector_too_short×  s    z(TestDirichlet.test_data_vector_too_shortc                 C   s>   t  g d¢¡}t  dd¡}tttj||ƒ tttj||ƒ d S )Nr�  )rU   rX   r‡   r§  r—  r=   r=   r>   Útest_data_vector_too_longÝ  s    z'TestDirichlet.test_data_vector_too_longc                 C   sj   t  g d¢¡}t|ƒ}g d¢}g d¢}g d¢g d¢g d¢g}t| ¡ |ƒ t| ¡ |ƒ t| ¡ |ƒ d S )N)r©   çš™™™™™é?r‡   ©rü   çš™™™™™Ù?r†   )çUUUUUUµ?ç{®Gáz´?ç¸…ëQ¸ž?)r´  ç±¿ç‘¿)r·  rµ  çOè´�N‹¿)r¸  r¹  r¶  )r6   r¬   r   r   r“   r�  r¥   )rM   r9  r   Zexpected_meanZexpected_varZexpected_covr=   r=   r>   Útest_mean_var_covã  s    ýzTestDirichlet.test_mean_var_covc                 C   s`   t  dg¡}t|ƒ}t| ¡ jdƒ t| ¡ jdƒ t| dg¡jdƒ t| dg¡jdƒ d S )Nr‡   r   r©   )	r6   r¬   r   r   r“   rÏ   r�  r�   r‘   )rM   r9  r   r=   r=   r>   rÑ   õ  s    z TestDirichlet.test_scalar_valuesc                 C   s„   t j d¡ t j dd¡}t j dd|¡}t|ƒ}d}t|ƒD ]@}t j dd|¡}|t  |¡ }t| 	|d d… ¡| 	|¡ƒ q>d S rŒ  )
r6   rz   rŒ   r�  r   r   rÝ   r~   r   r�   r‘  r=   r=   r>   Ú 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 }t|ƒD ]”}t|ƒD ]>}t j dd|¡}	|	t  |	¡ }	|d urŒt  ||	f¡}qR|	}qR| 	|j
¡}
d }|D ](}| 	|¡}|d urÊt  ||¡}q¦|}q¦t|
|ƒ qFd S )Nr0  r	   r�  rŽ  rë   rå   rU   )r6   rz   rŒ   r�  r   r   rÝ   r~   Úvstackr�   r€   Úappendr   )rM   r¤   r9  r   r’  Znum_multipleZxmrö   rh  rS   ZrmÚrsÚxsrè   r=   r=   r>   Ú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}t|ƒD ]:}t j ddd¡}|t  |¡ }t| 	|¡| 	|g¡ƒ qBt| 
¡ | 
¡ d ƒ t| ¡ | ¡ d ƒ d S )Nr0  rŽ  rë   rC   r   r	   rå   )r6   rz   rŒ   r   r   r   rÝ   r~   r   r�   r“   r�  )rM   r9  r   r@  r’  rö   rS   r=   r=   r>   Ú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º  rÑ   r»  rÀ  rÁ  r=   r=   r=   r>   r‹  t  s&   	r‹  c               
   C   s€   t  ddg¡} t  dgg¡}ttt| |ƒ zt| |ƒ W nB tyz } z*d}tt|ƒd t|ƒ… |ƒ W Y d }~n
d }~0 0 d S )Nrª   r©   zDimension mismatch)r6   r¬   rÉ   rH   r   r   Ústrr   )rÊ   Úsigmar  r  r=   r=   r>   Ú,test_multivariate_normal_dimensions_mismatch=  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 )ÚTestWishartc                 C   s  t jddd�}ddgt  d¡t jd t jddd�g}|D ]*}td|ƒ}t|j|ƒ t|jj|jƒ q8t  ddgddgg¡}ddgt jd t  ddgddgg¡g}|D ]*}td|ƒ}t|j|ƒ t|jj|jƒ q¤tttdt  	d¡ƒ tdt  	d¡ƒ t jddd�}tttd|ƒ d S )Nr	   rC   ©Zndminr   ©r	   rC   r¥  rD   )
r6   r¬   Úr_r   r   rþ   r8   rÉ   rH   rK   )rM   Z
true_scaleÚscalesrþ   Úwr=   r=   r>   Útest_scale_dimensionsQ  s8    û

ÿ
ÿý
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�¡}|D ]}t| |¡|ƒ qVg d¢t jd t jg d¢dd�g}tddƒ}| t jg d¢dd�¡}|D ]}t| |¡|ƒ q´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 ¡}|D ]}t| |¡|ƒ �qfd S )Nr	   rC   rÆ  rD   rF   r*  r   )r6   r¬   rÈ  r   r�   r   r„  rK   )rM   ré   rÊ  ZdensityrS   r=   r=   r>   Útest_quantile_dimensions|  sP    ú	
ý

ÿ
ÿÿùÿÿz$TestWishart.test_quantile_dimensionsc           	      C   sn  d}t  t  |¡d ¡}t  ||d  d ¡|t j|dd�< t  |j|¡}g }tdƒD ]\}t  t  |¡|d d  ¡}t  ||d  d ¡|t j|dd�< t  |j|¡}| |¡ qVt  |¡j}ddt  	ddd¡fd||fg}|D ]†\}}}t
||ƒ}t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| |¡t
 |||¡ƒ qâd S ©	NrW   r	   rC   rY   ©râ   rU   rå   r†   )r6   r`   rÇ   Útril_indicesrÞ   r€   rÝ   r½  r¬   rý   r   r   r�  r“   Úmoder’   r�   )	rM   rº   rþ   ré   rö   rS   Ú
parametersÚdfrÊ  r=   r=   r>   r  ­  s*    $$þ
zTestWishart.test_frozenc                 C   sþ   d}d}t  |¡}d|d< d|d< t||ƒ}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||ƒ t||ƒ d S )NrD   rå   rü   rÅ   ©r	   r   iêÈ ro   r	   rC   rY   rÎ  )r6   rK   r   rz   rŒ   r�   r¹   rÈ  Ú	chisquarer`   rÏ  r¢   r³   rÞ   r€   r   )rM   rº   rÒ  rþ   rÊ  Zw_rvsZfrozen_w_rvsÚcovariancesÚ	variancesrf   ÚDZDAZmanual_w_rvsr=   r=   r>   Útest_wishart_2D_rvsÍ  s6    


þÿü


zTestWishart.test_wishart_2D_rvsc                 C   sÐ   t j d¡ d}d}t  |¡}t jdddtd�}t jdddd�}|D ]†}t||ƒ}t|ƒ}t	| 
¡ | 
¡ ƒ t	| ¡ | ¡ ƒ t	| ¡ | ¡ ƒ t	| |¡| |¡ƒ |j|d	�}	|f}
d
}td|
||	ƒ qDd S )Néž^ éô  r	   rå   rC   rì   r†   ©Únumro   r  r   )r6   rz   rŒ   rK   rÇ   rî   rý   r   r   r   r�  r“   r’   r�   r�   r
   )rM   Úsnrº   rþ   Údf_rangeré   rÒ  rÊ  Úcr�   r;   r9  r=   r=   r>   Ú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 )NrÙ  rÚ  rå   rW   r	   rV   rY   rÎ  ©rþ   r†   rÛ  ro   r   r  r   )r6   rz   rŒ   r`   rÇ   rÏ  rÞ   r€   rJ   r�   r   r   r   r�  r“   r’   rý   r�   r�   r
   )rM   rÝ  rÒ  rº   rþ   ZlamdaZsigma_lamdarÊ  rß  ré   r�   r;   r9  r=   r=   r>   Útest_is_scaled_chisquared  s(    

z%TestWishart.test_is_scaled_chisquaredN)	r¯   r°   r±   rË  rÌ  r  rØ  rà  râ  r=   r=   r=   r>   rÅ  P  s   +1 ,rÅ  c                   @   sÄ   e Zd Zdd„ Zdd„ Zdd„ Zej ddd	g¡d
d„ ƒZ	dd„ Z
dd„ Zej dddg¡dd„ ƒZdd„ Zej dddg¡dd„ ƒZdd„ Zej dddg¡dd„ ƒZdd„ Zdd„ Zd d!„ Zd"S )#ÚTestMultinomialc                 C   sŽ   t  ddd¡}t|ddd� t  ddgd	d
dg¡}|tj ksBJ ‚t  d	d	gd	d
dg¡}|d	ksdJ ‚t  ddgd	ddg¡}t|tjdd� d S )N©rD   rW   rX   ©rˆ   rm  g&Múty»÷¿r`  ró   rD   rW   r   rˆ   rm  r\   )r   Úlogpmfr   r6   rà   r  )rM   Úvals1Úvals2Úvals3Úvals4r=   r=   r>   Ú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 )Nrä  rX   rå  rD   rˆ   r`  ró   )rV   é   é   ©r†   rû   rV   r†   )r   ræ  r    r   Úpmf©rM   Úval1Úval2r=   r=   r>   Útest_reduces_binomialI  s    z%TestMultinomial.test_reduces_binomialc                 C   sR   dg d¢ }}ddddddd	dd
ddœ
}|D ] }t t |||¡|| dd� q,d S )NrD   )g      À?r©  g      ä?g     @Ï?g     ÀÂ?g      ž?g      `?g     ÀÒ?g      ¾?g      ˆ?g      ˜?g      �?)
)r   r   rD   )r	   r   rC   )rC   r   r	   )rD   r   r   rÆ   r8  ©rC   r	   r   )r   rC   r	   r!  )r   rD   r   ç›+¡†›„=r#  )r   r   rï  )rM   r¤   ÚpZr_valsrS   r=   r=   r>   Útest_RT  s    üzTestMultinomial.test_Rr¤   r   rD   c                 C   sH   t j|dgd ddd�}tj d¡}|j |dgd dd�}t||ƒ d S )Nr©  rD   rX   é{   r‰   ro   )r   r�   r6   rz   ÚRandomStater   )rM   r¤   Zsc_rvsÚrndmZnp_rvsr=   r=   r>   Útest_rvs_npe  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  g d¢dg d¢¡}t|ddd� t  g d¢dg d¢¡}|dk�sJ ‚t  g d¢dg d¢¡}|dk�s<J ‚d S )N)rU   rU   ©r	   r	   r`  ró   rä  rX   rå  gö5’á
Í?rD   r   rì  rY   é	   rî  g’¹*7î ?gÄÒ<WÆŒÛ?©r   rC   rì   rW   rC   ©rD   rD   r   rV   )gUUUUUUå?r¬  r   gß¦îáÌ?rZ   rô  )r   rï  r   r6   r  Úfloat64r   )	rM   Úvals0rç  rè  rS   ré  rê  Zvals5Zvals6r=   r=   r>   Útest_pmfm  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	   rC   rD   r†   rû   r‡   r±  g´Èv¾ŸÏ?gú~j¼t“Ø?r`  ró   rW   r   )r   rï  r   )rM   r  rç  rè  ré  rê  r=   r=   r>   Útest_pmf_broadcastingˆ  s      &z%TestMultinomial.test_pmf_broadcastingrU   c                 C   sŽ   t  |d¡}|d d | d d | d d g| d d |d d | d d g| d d | d d |d d gg}t||dd� d S )	N)r‡   rˆ   rü   r‡   r±  rˆ   rü   rm  r`  ró   ©r   r¥   r   )rM   r¤   Úcov1r'  r=   r=   r>   Ú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 )NrU   r†   rû   r‡   r±  gÍÌÌÌÌÌÜ?gÍÌÌÌÌÌÜ¿gš™™™™™é¿r`  ró   rW   g
×£p=
×?g
×£p=
×¿rˆ   rm  r³  r   gáz®Gáê?gáz®Gáê¿rú   g333333ó¿r  ©rM   r  r'  Úcov3Úcov4Úcov5Úcov6r=   r=   r>   Útest_cov_broadcasting   s      ÿz%TestMultinomial.test_cov_broadcastingrC   c                 C   s*   t  |ddg¡}t|t |d¡dd� d S ©Nr‡   r±  r`  ró   ©r   r’   r   r    )rM   r¤   Úent0r=   r=   r>   r7  ®  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 )NrC   rD   r‡   rˆ   r`  ró   rX   rì  rm  r³  r   r  )rM   r  Zent1Zent2r=   r=   r>   Útest_entropy_broadcastingµ  s    ÿÿ ÿýz)TestMultinomial.test_entropy_broadcastingc                 C   s.   t  |ddg¡}t||d |d gdd� d S r  ©r   r“   r   )rM   r¤   Úmean1r=   r=   r>   Ú	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 )NrU   rV   r‡   r±  r©   rž  g433333ó?g433333@r`  ró   r  )rM   r  r=   r=   r>   Útest_mean_broadcastingÉ  s    z&TestMultinomial.test_mean_broadcastingc                 C   sž   t j d¡ d}d}g d¢g d¢g d¢g d¢g d¢g}t j|t jd	�}t||ƒ}t| |¡t |||¡ƒ t| |¡t |||¡ƒ t| 	¡ t 	||¡ƒ d S )
NrÌ   é   )r†   r‡   rˆ   r³  ©r   r   r   r  ©r   r   r	   é   ©r   r	   r	   rå   ©r	   r	   r	   rý  ©r	   r	   rC   rì  rì   )
r6   rz   rŒ   r7   r   r   r   rï  ræ  r’   )rM   r¤   ZpvalsrS   Z	mn_frozenr=   r=   r>   r  Í  s    "
zTestMultinomial.test_frozenc                 C   sZ   d}t j d¡}| |¡}d|d< |t  |¡ }t  |¡}t |||¡}t  |¡sVJ ‚d S )NéX   l   iŒRZØY g ÂëþKH´9rY   )r6   rz   r{   r~   rJ   r   ræ  Úisfinite)rM   r¤   rƒ   rö  rS   ræ  r=   r=   r>   Útest_gh_11860Ù  s    

zTestMultinomial.test_gh_11860N)r¯   r°   r±   rë  ró  r÷  rG   rµ   r¶   rû  r  r  r  r  r7  r  r  r  r  r  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 )ÚTestInvwishartc           	      C   sX  d}t  t  |¡d ¡}t  ||d  d ¡|t j|dd�< t  |j|¡}g }tdƒD ]\}t  t  |¡|d d  ¡}t  ||d  d ¡|t j|dd�< t  |j|¡}| |¡ qVt  |¡j}ddt  	ddd¡fd||fg}|D ]p\}}}t
||ƒ}t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| |¡t
 |||¡ƒ qâd S rÍ  )r6   r`   rÇ   rÏ  rÞ   r€   rÝ   r½  r¬   rý   r   r   r�  r“   rÐ  r   r�   )	rM   rº   rþ   ré   rö   rS   rÑ  rÒ  Úiwr=   r=   r>   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
�}|D ]–}t||ƒ}t|d dd�}t	| 
¡ | 
¡ ƒ t	| ¡ | ¡ ƒ t	| |¡| |¡ƒ |j|d�}	|d ddf}
d}td|
||	ƒ t	| ¡ | ¡ ƒ qDd S )NrÙ  rÚ  r	   rU   é   rC   rì   r†   rå   rÛ  rü   rá  ro   r   r  r   )r6   rz   rŒ   rK   rÇ   rî   rý   r   r   r   r�  r“   r�   r�   r
   r’   )rM   rÝ  rº   rþ   rÞ  ré   rÒ  r   Zigr�   r;   r9  r=   r=   r>   Útest_1D_is_invgamma  s"    

z"TestInvwishart.test_1D_is_invgammac                 C   s  d}d}t  |¡}d|d< d|d< t||ƒ}t j d¡ t ||¡}t j d¡ | ¡ }t j d¡ t jjdd�}t jt j |d ¡t j |d	 ¡t j |¡f d }t  	|¡}	||	t j
|d
d�< t j |¡}
t j |	j|
j¡j}t  ||j¡}t||ƒ t||ƒ d S )NrD   rå   rü   rÅ   rÓ  iHG	 ro   rC   r	   rY   rÎ  )r6   rK   r   rz   rŒ   r�   r¹   rÈ  rÔ  r`   rÏ  r¢   r³   Úsolver€   rÞ   r   )rM   rº   rÒ  rþ   r   Ziw_rvsZfrozen_iw_rvsrÕ  rÖ  rf   r×  ÚLZmanual_iw_rvsr=   r=   r>   Útest_invwishart_2D_rvs)  s6    

	
þÿü

z%TestInvwishart.test_invwishart_2D_rvsc                 C   sâ   d}d}dD ]Ð}t  t  |¡d ¡}t  ||d  d ¡|t j|dd�< t  |j|¡}t||ƒ}| ¡ }| ¡ }|| d }|j	|d	d
�}	|	jdd�}
||d  d }d| }t
 d|d  ¡}t j|
| | d|d�sJ ‚qdS )z1Test that sample mean consistent with known mean.rå   é N  )r	   rU   r	   rC   rY   rÎ  rü   rÌ   r‰   r   rs   r  r#  N)r6   r`   rÇ   rÏ  rÞ   r€   r   r“   r�  r�   r   Zppfr  )rM   rÒ  Zsample_sizerº   rþ   r­   Z	Xmean_expZXvar_expZ	Xmean_stdré   Z	Xmean_estZntestsZ	fail_rateZmax_diffr=   r=   r>   Útest_sample_meanW  s(    $

ýzTestInvwishart.test_sample_meanc                 C   sì   t  g d¢g d¢g d¢g d¢g¡}t  g d¢g d¢g d¢g d¢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.)rC   r	   r   rü   )r	   rC   rü   rü   )r   rü   rD   r	   )rü   rü   r	   rC   )rý  rX   rD   r	   )rX   rý  rU   r	   )rD   rU   rì  rC   )r	   r	   rC   rý  rV   r   rC   r	   rü   N)r6   r¬   r   r‘   r8   r¢   rð   r#  rÓ   r0   Útracer   )rM   ré   ÚPsiÚnuZprobrö  ÚsigZlogdetXZ	logdetPsirÀ   r‰  r=   r=   r>   Útest_logpdf_4x4r  s4    
ý
ý

ÿþý
üzTestInvwishart.test_logpdf_4x4N)r¯   r°   r±   r  r"  r%  r'  r,  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 )ÚTestSpecialOrthoGroupc                 C   sf   t j d¡ t d¡}t  g d¢g d¢g d¢g¡}t||ƒ t jjdd�}tjd|d�}t||ƒ d S )Né  rD   )gð‘(fÎï¿g^A�È.§¿g*ãB’¡¹?)gñ:Ñdµ¯¨?gÖ‡2uóï¿gi�}ÕÂ›?)gR#xl™F¹?g‚�^`˜D ?gž×ÑÓï?r‹   rŸ   )r6   rz   rŒ   r   r�   r¬   r   rù  )rM   rS   r‰  rŠ   r=   r=   r>   Útest_reproducibilityŒ  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 ©Nr*  r	   rÎ   )rÉ   rH   r   r�   ©rM   r=   r=   r>   Útest_invalid_dim˜  s    z&TestSpecialOrthoGroup.test_invalid_dimc                 C   s4   d}t |ƒ}|jdd�}t j|dd�}t||ƒ d S )NrX   rÌ   rŸ   )r   r�   r   )rM   rº   rz  r{  r|  r=   r=   r>   Útest_frozen_matrixž  s
    z(TestSpecialOrthoGroup.test_frozen_matrixc                 C   sd   dd„ t ddƒD ƒ}dd„ |D ƒ}t|dgd dd	� |D ]$}tt ||j¡t |jd
 ¡ƒ q:d S )Nc                 S   s$   g | ]}t d ƒD ]}t |¡‘qqS rX  )rÝ   r   r�   ©Ú.0rº   rö   r=   r=   r>   Ú
<listcomp>¨  s   þz<TestSpecialOrthoGroup.test_det_and_ortho.<locals>.<listcomp>rC   r  c                 S   s   g | ]}t j |¡‘qS r=   ©r6   r¢   rï   ©r5  rS   r=   r=   r>   r6  ­  ó    r©   é   ç‚vIhÂ%<=ró   r   )rÝ   r   r   r6   rÞ   r€   rK   r8   )rM   r¿  ÚdetsrS   r=   r=   r>   Útest_det_and_ortho§  s    ÿÿz(TestSpecialOrthoGroup.test_det_and_orthoc                    sx   d}d}d}t j d¡ tj||d�‰d‰ ‡fdd„ˆ D ƒ‰‡ fd	d
„ˆ D ƒ}‡fdd
„|D ƒ}t|gt|ƒ |ƒ d S )NrU   r†  çš™™™™™©?r.  ro   ©r  rþ  )r	   rW   rD  c                    s.   i | ]&\‰‰ ˆˆ ft ‡ ‡fd d„ˆD ƒƒ“qS )c                    s   g | ]}|ˆ ˆ  ‘qS r=   r=   r8  ©ÚecZerr=   r>   r6  Ë  r9  z>TestSpecialOrthoGroup.test_haar.<locals>.<dictcomp>.<listcomp>©Úsorted©r5  ©r¿  r@  r>   Ú
<dictcomp>Ë  r9  z3TestSpecialOrthoGroup.test_haar.<locals>.<dictcomp>c                    s&   g | ]}ˆ D ]}||kr||f‘qqS r=   r=   ©r5  Ze0Úe1©Úelsr=   r>   r6  Ì  r9  z3TestSpecialOrthoGroup.test_haar.<locals>.<listcomp>c                    s&   g | ]\}}t ˆ | ˆ | ƒd  ‘qS rü  ©r   ©r5  Úp0Úp1©Úprojr=   r>   r6  Í  r9  )r6   rz   rŒ   r   r�   r   r   ©rM   rº   ra  Zks_probÚpairsZks_testsr=   ©rJ  rP  r¿  r>   Ú	test_haarµ  s    
zTestSpecialOrthoGroup.test_haarN)r¯   r°   r±   r/  r2  r3  r=  rT  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ej 	d	g d
¢¡dd„ ƒZ
dd„ Zejjdd„ ƒZdS )ÚTestOrthoGroupc                 C   sn   d}t j |¡ t d¡}tjd|d�}tt j |¡dƒ t  g d¢g d¢g d¢g¡}t	||ƒ t	||ƒ d S )Nr.  rD   rŸ   rY   )gÝÓÕ‹mØ?gÓ hÀ"·¿gE�¹‡„oí?)g~7Ý²Cüì?gž’>­Ä¿g0JÐ_èÙ¿)gÝ±Ø&�Ç¿gü ¤6qrï¿g`Xþ|[°”¿)
r6   rz   rŒ   r   r�   r   r¢   rï   r¬   r   )rM   rŒ   rS   r˜   r‰  r=   r=   r>   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 r0  )rÉ   rH   r   r�   r1  r=   r=   r>   r2  ß  s    zTestOrthoGroup.test_invalid_dimc                 C   sV   d}t |ƒ}t |dd�}|jdd�}t j|dd�}|jdd�}t||ƒ t||ƒ d S )NrX   rÌ   r‹   rŸ   r	   ro   )r   r�   r   ©rM   rº   rz  Úfrozen_seedr{  r|  Úrvs3r=   r=   r>   r3  å  s    
z!TestOrthoGroup.test_frozen_matrixc                 C   s|   dd„ t ddƒD ƒ}t dd„ |D ƒ¡}tt |¡t |j¡dd� |D ].}|D ]$}tt ||j	¡t 
|jd ¡ƒ qPqHd S )	Nc                    s"   g | ]‰ ‡ fd d„t dƒD ƒ‘qS )c                    s   g | ]}t  ˆ ¡‘qS r=   )r   r�   ©r5  rö   ©rº   r=   r>   r6  ò  s   ÿú@TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>.<listcomp>rå   )rÝ   rD  r=   rZ  r>   r6  ò  s   þ
ÿz5TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>rC   r  c                 S   s   g | ]}d d„ |D ƒ‘qS )c                 S   s   g | ]}t j |¡‘qS r=   r7  r8  r=   r=   r>   r6  ÷  r9  r[  r=   )r5  Úxxr=   r=   r>   r6  ÷  r9  r;  ró   r   )rÝ   r6   r¬   r   ÚfabsrJ   r8   r   rÞ   r€   rK   )rM   r¿  r<  r\  rS   r=   r=   r>   r=  ñ  s    þÿz!TestOrthoGroup.test_det_and_orthorº   )rC   rU   rå   r!  c                 C   s€   t j d¡}t|d�}|jd|d�}tj |¡}t  |dk¡}t	|ƒ}t
 ||¡}|jdd�\}	}
|	d  k rv|
k s|n J ‚d S )	Nl   ø<`L«‰r rZ  r1  r‰   r   gffffffî?)Zconfidence_levelrü   )r6   rz   r{   r   r�   r«   r¢   rï   r~   r   r,   Z	binomtestZproportion_ci)rM   rº   rƒ   r­   r�   r<  râ   r¤   r9   ÚlowÚhighr=   r=   r>   Útest_det_distribution_gh18272   s    
z,TestOrthoGroup.test_det_distribution_gh18272c                    sx   d}d}d}t j d¡ tj||d�‰d‰ ‡fdd„ˆ D ƒ‰‡ fd	d
„ˆ D ƒ}‡fdd
„|D ƒ}t|gt|ƒ |ƒ d S )NrU   r†  r>  i  ro   r?  c                    s.   i | ]&\‰‰ ˆˆ ft ‡ ‡fd d„ˆD ƒƒ“qS )c                    s   g | ]}|ˆ ˆ  ‘qS r=   r=   r8  r@  r=   r>   r6  #  r9  z7TestOrthoGroup.test_haar.<locals>.<dictcomp>.<listcomp>rB  rD  rE  r@  r>   rF  #  r9  z,TestOrthoGroup.test_haar.<locals>.<dictcomp>c                    s&   g | ]}ˆ D ]}||kr||f‘qqS r=   r=   rG  rI  r=   r>   r6  $  r9  z,TestOrthoGroup.test_haar.<locals>.<listcomp>c                    s&   g | ]\}}t ˆ | ˆ | ƒd  ‘qS rü  rK  rL  rO  r=   r>   r6  %  r9  )r6   rz   rŒ   r   r�   r   r   rQ  r=   rS  r>   rT    s    
zTestOrthoGroup.test_haarc                    sh   t j d¡ dd„ }tddƒD ]D‰ d‡ fdd	„	}||ƒ}|tjjjƒ}tj ||¡\}}t	d
|ƒ qd S )Nr.  c                 S   s,   t j t jj| | fd�¡\}}}t  ||¡S ©Nro   )r6   r¢   r¿   rz   r¹   rÞ   )rº   rÁ   Z_sr¼   r=   r=   r>   Úrandom_ortho-  s     z<TestOrthoGroup.test_pairwise_distances.<locals>.random_orthorC   rV   r†  r"  c                    s<   t  ‡‡ fdd„t|ƒD ƒ¡}|t jj| ||jd�7 }|S )Nc                    s*   g | ]"}t  ˆˆ d �ˆˆ d � d ¡‘qS )rZ  rC   )r6   r~   )r5  r»   )rº   r�   r=   r>   r6  3  s   ÿz\TestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statistics.<locals>.<listcomp>ro   )r6   r¬   rÝ   rz   r   r8   )r�   r.  Úepsr,   rZ  )r�   r>   Úgenerate_test_statistics2  s
    þzHTestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statisticsr>  )r†  r"  )
r6   rz   rŒ   rÝ   r«   r,   r   r�   r   r   )rM   rb  rd  r‰  rø   Z_Drö  r=   rZ  r>   Útest_pairwise_distances(  s    	z&TestOrthoGroup.test_pairwise_distancesN)r¯   r°   r±   r/  r2  r3  r=  rG   rµ   r¶   r`  rT  Zslowre  r=   r=   r=   r>   rU  Ñ  s   
rU  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestRandomCorrelationc                 C   sb   t j d¡ d}t |¡}tj|dd�}t  g d¢g d¢g d¢g d¢g¡}t||ƒ t||ƒ d S )Nr.  ©rü   r±  rú   rÍ   rŸ   )r©   ç¼Ñ“2©Ç¿ç–AµÁ‰è»?çý¢ý…Í¿)rh  r©   ç 4Ô($™Í?çR}ç%èÔ?)ri  rk  r©   çqTn¢–æÆ¿)rj  rl  rm  r©   )r6   rz   rŒ   r   r�   r¬   r   )rM   r5  rS   r˜   r‰  r=   r=   r>   r/  D  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g d¢ƒ d S )	NÚtestrÎ   r	   rC   rD   rW   g      à¿)r	   rC   r†   )rÉ   rH   r   r�   r1  r=   r=   r>   Útest_invalid_eigsP  s    z'TestRandomCorrelation.test_invalid_eigsc                 C   sR   d}t |ƒ}t |dd�}t j|dd�}|jdd�}| ¡ }t||ƒ t||ƒ d S )Nrg  r.  r‹   rŸ   )r   r�   r   )rM   r5  rz  rW  r{  r|  rX  r=   r=   r>   r3  Y  s    
z(TestRandomCorrelation.test_frozen_matrixc           
         sÐ   dd„ ‰ t j d¡ ‡ fdd„tddƒD ƒ}| g d¢¡ d	d„ |D ƒ}d
d„ |D ƒ}dd„ |D ƒ}dd„ |D ƒ}t||ddd� dd„ |D ƒ}t||ƒD ]\}}t||dd� qš|D ]}	t|	|	jdd� q¶d S )Nc                 S   s   | | t |ƒ S r5   )r~   )rö   r  r=   r=   r>   r   m  s    z3TestRandomCorrelation.test_definition.<locals>.normrø  c                    s    g | ]}ˆ |t jj|d �ƒ‘qS )ro   )r6   rz   r   rY  ©r   r=   r>   r6  r  r9  z9TestRandomCorrelation.test_definition.<locals>.<listcomp>rC   rV   )rW   r   r   r   c                 S   s   g | ]}d gt |ƒ ‘qS )r©   )r   ©r5  r  r=   r=   r>   r6  u  r9  c                 S   s   g | ]}t  |¡‘qS r=   )r   r�   rq  r=   r=   r>   r6  v  r9  c                 S   s   g | ]}t  t j |¡¡‘qS r=   )r6   r]  r¢   rï   r8  r=   r=   r>   r6  |  r9  c                 S   s   g | ]}t  |¡‘qS r=   )r6   Úprodrq  r=   r=   r>   r6  }  r9  r;  r  c                 S   s   g | ]}t  |¡‘qS r=   )r6   r`   r8  r=   r=   r>   r6  �  r9  ró   )r6   rz   rŒ   rÝ   r½  r   Úzipr€   )
rM   r5  rJ   r¿  r<  Z
dets_knownZdiagsr?  r@  rS   r=   rp  r>   Útest_definitione  s    z%TestRandomCorrelation.test_definitionc                 C   s|  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   ƒ n1 �s0    Y  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 )Nr†   r   r	   rì   Úignore)ZoverrY   gœu ˆ<ä7~rû   r¥  rC   r  gMùk   @)r6   r¬   rî   r   Z_to_corrr   ÚerrstateÚ	nextafterÚcopyr€   rÞ   )rM   rh  ÚgZm0r=   r=   r>   Útest_to_corr‰  s"    
"8z"TestRandomCorrelation.test_to_corrN)r¯   r°   r±   r/  ro  r3  rt  rz  r=   r=   r=   r>   rf  C  s
   	$rf  c                   @   st   e Zd Zej dddg¡ej dg d¢¡dd„ ƒƒZej dg d¢¡d	d
„ ƒZdd„ Zej dg d¢¡dd„ ƒZ	dS )ÚTestUniformDirectionrº   r	   rD   rp   ©Nr	   rU   )rU   rW   c           
      C   sv   t j d¡}t||d�}| |¡}t  |¡t  |¡ }}|j|||d�j}|j|ksXJ ‚t j	j
|dd�}	t|	dƒ d S )Nì   Sid)_i4 r‹   ro   rY   rs   r©   )r6   rz   r{   r&   r�   r    rK   r   r8   r¢   r   r   )
rM   rº   rp   rƒ   Zuniform_direction_distra  r“   r¥   Úexpected_shapeÚnormsr=   r=   r>   rŠ  «  s    
z!TestUniformDirection.test_samples)Nr   r*  rÎ   c                 C   s@   d}t jt|d�� t |¡ W d   ƒ n1 s20    Y  d S )NzMDimension of vector must be specified, and must be an integer greater than 0.rA   )rG   r   rH   r&   r�   )rM   rº   rN   r=   r=   r>   r2  ¸  s    z%TestUniformDirection.test_invalid_dimc                 C   sR   d}t |ƒ}t |dd�}|jdd�}t j|dd�}| ¡ }t||ƒ t||ƒ d S )NrU   r.  r‹   rŸ   )r&   r�   r   rV  r=   r=   r>   Útest_frozen_distribution¿  s    
z-TestUniformDirection.test_frozen_distribution)rC   rU   rì  c                 C   s¾   t j d¡}t||d�}|jdd�\}}||| | 8 }|t j |¡ }t|| ddd� |jdd�}|| }|| }t  ||¡}	|	t j	7 }	|	dt j	  }	t
ƒ }
t|	|
jƒ}|jd	ksºJ ‚d S )
Nl   @9š¼Y sr‹   rC   ro   r   rõ  r#  é'  r>  )r6   rz   r{   r&   r�   r¢   r   r   Úarctan2r4  r   r   rš   Úpvalue)rM   rº   rƒ   Zspherical_distZv1Zv2ra  Ús1Ús2ÚanglesZuniform_distZkstest_resultr=   r=   r>   Útest_uniformË  s    
z!TestUniformDirection.test_uniformN)
r¯   r°   r±   rG   rµ   r¶   rŠ  r2  r€  r‡  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 )ÚTestUnitaryGroupc                 C   sX   t j d¡ t d¡}tjddd�}t  g d¢g d¢g d¢g¡}t||ƒ t||ƒ d S )Nr.  rD   rŸ   )y~½pçÂÓ?yÎZ×?y“§¬¦ë‰¦?ÊÄ­‚èã?y¬8ÕZ˜…Ä?‘&Þž4ã?)yEHÝÎ¾rç?8iÍÓ?y¡eÝ?¢³?+ö—Ý“‡Ý¿yŸu�–=Ù¿B˜Û½Ü'—?)yqXøQÃ¿Ÿ��·±ÙÖ?yˆ˜Në6Ò¿º¿zÜ·Úá¿yŽ! 8ölã?2WÕ'Ó?)r6   rz   rŒ   r   r�   r¬   r   )rM   rS   r˜   r‰  r=   r=   r>   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 r0  )rÉ   rH   r   r�   r1  r=   r=   r>   r2  ò  s    z!TestUnitaryGroup.test_invalid_dimc                 C   sV   d}t |ƒ}t |dd�}|jdd�}t j|dd�}|jdd�}t||ƒ t||ƒ d S )NrX   r.  r‹   rŸ   r	   ro   )r   r�   r   rV  r=   r=   r>   r3  ø  s    
z#TestUnitaryGroup.test_frozen_matrixc                 C   sJ   dd„ t ddƒD ƒ}|D ],}tt || ¡ j¡t |jd ¡dd� qd S )Nc                 S   s$   g | ]}t d ƒD ]}t |¡‘qqS rX  )rÝ   r   r�   r4  r=   r=   r>   r6  	  s   þz3TestUnitaryGroup.test_unitarity.<locals>.<listcomp>rC   r  r   rS  r#  )rÝ   r   r6   rÞ   Zconjr€   rK   r8   )rM   r¿  rS   r=   r=   r>   Útest_unitarity	  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 )	NrU   r†  r.  ro   c                 S   s   g | ]}t j |¡‘qS r=   )r«   r¢   Zeigvalsr8  r=   r=   r>   r6  	  r9  z.TestUnitaryGroup.test_haar.<locals>.<listcomp>rC   r>  )r6   rz   rŒ   r   r�   r¼  r‚  ÚimagÚrealr   Zravelr   r4  rš   r   rƒ  )rM   rº   ra  r¿  r5  rS   r9   r=   r=   r>   rT  	  s     zTestUnitaryGroup.test_haarN)r¯   r°   r±   r/  r2  r3  r‰  rT  r=   r=   r=   r>   rˆ  ã  s
   	rˆ  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g d¢fg d¢g d	¢g d
¢g d¢g d¢gg d¢g d¢g d¢g d¢gdg d¢fgZej de¡dd„ ƒZej de¡dd„ ƒZdd„ Z	dd„ Z
edƒdd„ ƒZdd „ Zd!d"„ Zd#d$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+d,„ ƒZd-d.„ Zd/d0„ Zd1d2„ Zej d3d4d5g¡ej d6g d7¢¡ej d8d9d:ejg¡d;d<„ ƒƒƒZd=d>„ Zej d6g d?¢¡d@dA„ ƒZej d6g dB¢¡dCdD„ ƒZdqdFdG„ZdHdI„ Zej d6g dJ¢¡ej dKg dL¢¡ej dMdEdNg¡dOdP„ ƒƒƒZdQdR„ Z dSdT„ Z!dUdV„ Z"dWdX„ Z#ej d6dY¡dZd[„ ƒZ$d\d]„ Z%ej d8g d^¢¡d_d`„ ƒZ&ej dadbe 'dd¡dcddfdee dfdgddbgg¡dgdhfg¡didj„ ƒZ(ej dkg dl¢¡dmdn„ ƒZ)dodp„ Z*d%S )rÚTestMultivariateTr	   rC   rW   rD   rU   r   )
ç|	ßŒ–�Œ?çv
®Å2R?r�  g0Ü÷$H?rŽ  rŽ  g�¥Oäïû`?gåïÕ’XO?g†	ßŒ–�,?g8ÝàN¹8?)gðHPüï?g“©‚QI�À?góÒo_ê?)g9ÖÅm4€ß?g=›UŸ«á?gË¡E¶óýæ?)gÝ$�•CÓ?gh³êsµÃ?gÇº¸�à?)g–!Žuqã?g%�•C‹Ð?gÏ÷Sã¥›ì?)gO¯”eˆcá?gz¥,Cëà?g•Ô	h"lî?)rY   r	   é2   )r©   rü   r©  )rü   r©   r£  )r©  r£  r©   rì  )gJ#Ž¥RÉ<g^Ó±�Ê<gš‹L[É<gêN=à¼Ê<gü`$æ§ÁË<zx, loc, shape, df, ansc                 C   s(   t |||dd�}| |¡}t||ƒ d S ©Nr   r‹   )r"   r�   r   )rM   rS   r  r8   rÒ  Úansr­   Úvalr=   r=   r>   Útest_pdf_correctnessh	  s    
z&TestMultivariateT.test_pdf_correctnessc           	      C   s8   t |||dd�}| |¡}| |¡}tt |¡|ƒ d S r�  )r"   r�   r‘   r   r6   rÓ   )	rM   rS   r  r8   rÒ  r‘  r­   rñ  rò  r=   r=   r>   Útest_logpdf_correctn	  s    

z%TestMultivariateT.test_logpdf_correctc                 C   s.   g d¢}t j|dd�}t |¡}t||ƒ d S )N)
rý  rX   rW   r	   éýÿÿÿrý  r   r•  rY   rD   r	   ©rÒ  )r"   r�   r#   r   )rM   rS   r’  r‘  r=   r=   r>   Útest_mvt_with_df_one_is_cauchyv	  s    
z0TestMultivariateT.test_mvt_with_df_one_is_cauchyc                 C   s„   d}t ddddd�}|jdd�}t|ƒ\}}||ks8J ‚t ddgd	d
gd
d	ggddd�}|jdd�}t|ƒ\}}||k ¡ s€J ‚d S )Nr†   r   r	   é † ©rÒ  rŒ   ro   r\   rD   rå   rY   é*   )r"   r�   r$   rç   )rM   Z	P_VAL_MINr­   ra  r»   rö  r=   r=   r>   Ú&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 J ‚t jdtjd� |jdks>J ‚t jdtjd� |jdks\J ‚d S )Nr   r	   rX   r™  r–  rC   )r"   r6   rà   rŽ   r   r�   Z
call_countr‘   )rM   Zmockr­   r=   r=   r>   Ú!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  |¡sFJ ‚t|||ƒ |¡}t  |¡sfJ ‚d}t j ||f¡}t|||ƒ |¡}|j|fksœJ ‚t|||ƒ |¡}|j|fks¾J ‚tt  d¡t  d¡dƒ 	¡ }t  |¡sèJ ‚d}tt  d¡t  d¡dƒj	|d�}|j|fk�sJ ‚d S )NrW   ç      @rX   r	   ro   )
r6   r    rK   r"   r�   Zisscalarr‘   rz   r8   r�   )	rM   rº   r  r8   rÒ  rS   r9   Ú	n_samplesrp   r=   r=   r>   Útest_shape_correctness—	  s(    


 z(TestMultivariateT.test_shape_correctnessc                 C   s6   t ƒ }t|jdgƒ t|jdggƒ |jdks2J ‚d S )Nr   r	   ©r"   r   r  r8   rÒ  )rM   r­   r=   r=   r>   Útest_default_arguments·	  s    z(TestMultivariateT.test_default_arguments)NNNr   r	   r	   )NNrX   r   r	   rX   NrX   z*loc, shape, df, loc_ans, shape_ans, df_ansc                 C   s8   t |||d�}t|j|ƒ t|j|ƒ |j|ks4J ‚d S )N©r  r8   rÒ  r   ©rM   r  r8   rÒ  Zloc_ansZ	shape_ansZdf_ansr­   r=   r=   r>   Útest_default_argsÈ	  s    z#TestMultivariateT.test_default_argsrY   c                 C   s4   t |||ƒ}t|j|ƒ t|j|ƒ t|j|ƒ d S r5   r   r£  r=   r=   r>   Ú&test_scalar_list_and_ndarray_argumentsÖ	  s    z8TestMultivariateT.test_scalar_list_and_ndarray_argumentsc                 C   sª   ddgg}t ttfi t|d�¤Ž ddgddgddgg}t ttfi t||d�¤Ž t d¡}t d¡}d}t ttfi t|||d�¤Ž d}t ttfi t|||d�¤Ž d S )	Nr	   )r  rC   rD   )r  r8   rY   r¢  r   )rÉ   rH   r"   Údictr6   r    rK   )rM   r  r8   rÒ  r=   r=   r>   Útest_argument_error_handlingß	  s4    
ÿþÿ
þ

ÿþÿþ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 )NrW   rD   ro   rC   r™  rå   )r6   rz   rù  r   rK   r"   r�   r   )rM   rƒ   r  r8   r–   Zdist2Zsamples1Zsamples2r=   r=   r>   r/  ø	  s    
z&TestMultivariateT.test_reproducibilityc                 C   s:   t ddgddgddggddd�}ttjjtfi |¤Ž d S )Nr   r	   F)r  r8   rÒ  rQ   )r¦  rÉ   r6   r¢   r  r"   )rM   r;   r=   r=   r>   Útest_allow_singular
  s     z%TestMultivariateT.test_allow_singularrp   )rå   rD   )rU   rV   rW   rD   rº   )rC   rD   rW   rU   rÒ  r©   r•  c                 C   s<   t t |¡t |¡|ƒ}|j|d�}|j||f ks8J ‚d S ra  )r"   r6   r    rK   r�   r8   )rM   rp   rº   rÒ  r­   r�   r=   r=   r>   Útest_rvs
  s    zTestMultivariateT.test_rvsc                 C   sˆ   t  d¡}t  d¡}d}g d¢g d¢g d¢g d¢g}g d¢g d¢g d¢g d¢g}t  g d¢¡}tj|||||d�}t||d	 | ƒ d S )
NrD   rå   r8  rZ   rG  rH  rI  r<  r   rJ  )rM   r“   r¥   rÒ  r@  r?  rK  rš   r=   r=   r>   rL  
  s    

z TestMultivariateT.test_cdf_signs)r	   rC   rU   rå   c                 C   s   |   |¡ d S r5   ©Úcdf_against_mvn_test©rM   rº   r=   r=   r>   Ú$test_cdf_against_multivariate_normal
  s    z6TestMultivariateT.test_cdf_against_multivariate_normal)rD   rV   rý  c                 C   s   |   dd¡ d S )NrD   Trª  r¬  r=   r=   r>   Ú-test_cdf_against_multivariate_normal_singular 
  s    z?TestMultivariateT.test_cdf_against_multivariate_normal_singularFc              	   C   sÔ   t j d¡}d}d|jdd|d� }t||||ƒ}d|jdd|d� t  |j|d�¡ }d|jdd||fd�  | }d|jdd||fd� | }	tjj	|	||d	|d
|d�}
tj
j	|	||d
|d�}t|
|dd� d S )Nì   ]J>?a rD   rå   r\   r	   ro   rY   rC   r�  T)rÒ  r=  rQ   rŠ   )rQ   r=  çü©ñÒMb@?r#  )r6   rz   r{   r   r½   Úsignr¹   r,   r"   rš   r   r   )rM   rº   rq   rƒ   r¤   rÊ  r¥   r“   r?  r@  r9   r:   r=   r=   r>   r«  %
  s    &ÿÿz&TestMultivariateT.cdf_against_mvn_testc           	      C   s¤   t j d¡}d}d}|jdt  |¡d�}d}tjj||||t j |d�}tj	 |||t  |¡¡}tj
 ||t  |¡¡}t||dd	� t  t  || ¡d
k¡s J ‚d S )Nr¯  rC   r   rå   )rp   rþ   rD   )r=  rŠ   r°  r#  rò   )r6   rz   r{   r¹   Úsqrtr,   r"   rš   rà   Útr   r   rç   rÐ   )	rM   rƒ   r¥   r“   rS   rÒ  r9   r:   Z	incorrectr=   r=   r>   Útest_cdf_against_univariate_t7
  s    ÿz/TestMultivariateT.test_cdf_against_univariate_t)rC   rD   rU   rå   rŒ   )ì   no l   øm±, l   �sO l   €�U iOfYl    Ož_ rq   Tc              	   C   s^  |r|dkrt  d¡ tj |¡}d|jdd|d� }t||||ƒ}| |¡}| |¡ }| |¡}	| ¡ d }
tjj	|	|||
|dd	�}tj
d
d��0 td|
|tj| |	| |ƒd }W d   ƒ n1 sÊ0    Y  t||ddd� tjj	|	|||
||dd�}tj
d
d��. td|
||| |	| |ƒd }W d   ƒ n1 �s@0    Y  t||ddd� d S )Nrµ  z4Agreement with qsimvtv is not great in singular caserå   r\   rC   ro   rU   T)rŠ   rQ   ru  )Úinvalidr&  r   g-Cëâ6*?rò   ©r  rô   )r=  rŠ   rQ   rE  )rG   rv   r6   rz   r{   r   r½   r,   r"   rš   rv  r3   rà   r   )rM   rº   rŒ   rq   rƒ   rÊ  r¥   r“   r?  r@  rÒ  r9   r:   r=   r=   r>   Útest_cdf_against_qsimvtvF
  s*    


ÿ>ÿ>z*TestMultivariateT.test_cdf_against_qsimvtvc           	   	      s  d}t j d¡}d|jdd|d� }t|||dd�‰ | |¡‰| |¡ }| |¡}| ¡ d	 ‰tjj|ˆˆ ˆ||d
�}‡ ‡‡fdd„}t|||tj	j
||d�d�}t||jdd� ‡ ‡‡fdd„}t||d |d |d |d |d |d ƒ}t||d dd� d S )NrD   l   	!†y‚ rå   rY   r	   ro   T)rq   rU   )rŠ   r=  c                    s   t j | jˆˆ ˆ¡S r5   )r,   r"   r�   r€   rR   ©r¥   rÒ  r“   r=   r>   Ú	integrandq
  s    zITestMultivariateT.test_cdf_against_generic_integrators.<locals>.integrand)r   rŒ   )Zqrngrò   ró   c                     s   t j | d d d… ˆˆ ˆ¡S )NrY   )r,   r"   r�   )Zzyxr¹  r=   r>   rº  w
  s    r   rC   )r6   rz   r{   r   r½   r,   r"   rš   r.   ZqmcZHaltonr   Zintegralr/   )	rM   rº   rƒ   rÊ  r?  r@  r9   rº  r:   r=   r¹  r>   Ú$test_cdf_against_generic_integratorsc
  s"    

ÿ,z6TestMultivariateT.test_cdf_against_generic_integratorsc                 C   sb   t j d¡}t  g d¢g d¢g d¢g¡}d}tj||d�}|jg d¢|d�}d	}t||d
d� d S )Nl   ËJ½a )gço!ß@çSÛ<ÄõÞÍ?çÍ^SsûÑ@)r¼  g’R·P…¬=@ç“jTŠ0@)r½  r¾  g™ˆÐk`-3@gú WÀKÿ?©r8   rÒ  rZ   rŸ   g¡ø1æ®%Ð?rò   ró   )r6   rz   r{   r¬   r,   r"   rš   r   )rM   rƒ   r¥   rÒ  r­   r9   r:   r=   r=   r>   Útest_against_matlab}
  s    
þz%TestMultivariateT.test_against_matlabc                 C   s˜   d}t j |¡}|jdd�}|jdd�| }t  d¡}| ¡ }|||f}t j |¡}t j |¡}	tj|d|iŽ}
t|
 |¡tj|g|¢R d|	iŽƒ d S )Nl   2m rD   ro   rŒ   rŠ   )	r6   rz   r{   r   rK   r,   r"   r   rš   )rM   rŒ   rƒ   r  rS   r8   rÒ  r;   Z
rng_frozenZrng_unfrozenr­   r=   r=   r>   r  Ž
  s    


ÿzTestMultivariateT.test_frozenc                    sž   d}d}t j d¡‰ˆj||fd�}||j ‰ ˆ |¡‰ˆ ||f ¡}ˆ ¡ d ‰tjj|ˆˆ ˆˆd�}‡ ‡‡‡fdd„}t  |d	|¡}t||d
dd� d S )NrW   rD  r¯  ro   rU   rŸ   c                    s"   t dˆˆ tj |  | ˆ ˆƒd S )Nr�  r   )r3   r6   rà   rR   ©r¥   rÒ  r“   rƒ   r=   r>   Ú_cdf_1d©
  s    z2TestMultivariateT.test_vectorized.<locals>._cdf_1drY   rE  rò   r·  )	r6   rz   r{   r€   r,   r"   rš   Zapply_along_axisr   )rM   rº   r¤   rf   rS   r9   rÂ  r:   r=   rÁ  r>   Útest_vectorized�
  s    

z!TestMultivariateT.test_vectorizedr«  c                 C   sd   t j d¡}tjjdgdg|d   d�}tj|d�jdg| |d�}d|d  }t	||dd	� d S )
Nr¯  r	   rü   )rß  )r8   r   rŸ   g-Cëâ6
?ró   )
r6   rz   r{   r«   r¢   Ztoeplitzr,   r"   rš   r   )rM   rº   rƒ   rf   r9   r:   r=   r=   r>   Útest_against_analytical¯
  s
    z)TestMultivariateT.test_against_analyticalc                 C   s@   t  dd¡}t j}tjj||d�}tj d |¡}||ks<J ‚d S )NrD   r¿  )r6   rK   rà   r,   r"   r’   r   )rM   r¥   rÒ  Úmvt_entropyZmvn_entropyr=   r=   r>   Útest_entropy_inf_df·
  s
    z%TestMultivariateT.test_entropy_inf_df)r	   rå   rë   c                 C   s0   t jjd|d�}t jj|d�}t||dd� d S )Nr©   r¿  r–  r;  ró   )r,   r"   r’   r³  r   )rM   rÒ  rÅ  Z	t_entropyr=   r=   r>   Útest_entropy_1d¾
  s    z!TestMultivariateT.test_entropy_1dzdf, cov, ref, tolrå   gÔøË}’M@rõ  rë   rü   gŒNfh@r`  c                 C   s.   t  d¡}t |||¡}t| ¡ ||d� d S )Nr  ró   )r6   r    r,   r"   r   r’   )rM   rÒ  r¥   r:   Útolr  Úmvtr=   r=   r>   Ú%test_entropy_vs_numerical_integrationÒ
  s    
z7TestMultivariateT.test_entropy_vs_numerical_integrationzdf, dim, ref, tol))rå   r	   gDdÿVWø?rS  )rë   r	   gU•“°Ýö?r;  )rÚ  r	   g÷Ž/+¼ö?rõ  )ç@Œµx¯Dr	   çZ_2äø³ö?rS  )ç}Ã”%­I²Tr	   rÌ  rS  )rå   rå   gz©°g#.@rS  )r†  rå   gD¬ë:f,@r;  )rË  rå   ç1÷>÷`,@rS  )rÍ  rå   rÎ  rS  )rå   rë   g8—d¹?‰b@rS  )r†  rë   gç-YÒº¿a@rõ  )rË  rë   çZGrš¼a@rS  )rÍ  rë   rÏ  rS  c                 C   s*   t jt |¡|d�}t| ¡ ||d� d S )Nr¿  ró   )r,   r"   r6   rK   r   r’   )rM   rÒ  rº   r:   rÈ  rÉ  r=   r=   r>   Útest_extreme_entropyÛ
  s    #z&TestMultivariateT.test_extreme_entropyc           
      C   sž   t  g d¢g d¢g d¢g d¢g d¢g¡}||j }d}tjj||d�}td |d� ¡ }t||d	d
� d}d}tjj||d�}tjj||d�}	t||	dd
� d S )N)g¸…ëQ¸ö?g
×£p=
·?g\�Âõ(\ß¿çÃõ(\�ÂÅ?g®Gáz®ç?)g®Gázò¿g{®Gáz„¿g¸…ëQ¸æ?r³  gìQ¸…ëá¿)g…ëQ¸ñ?g)\�Âõ(Ü?gìQ¸…ëÑ¿g)\�Âõ(Ü¿g�Âõ(\�Ò?)g      ø¿g®Gázî¿gq=
×£på¿g\�Âõ(\ç?gš™™™™™ñ¿)rÑ  g{®Gáz´¿g\�Âõ(\÷?g{®GázÔ¿gÃõ(\�Âõ?rË  r¿  r  rS  ró   iý  i   r  )r6   r¬   r€   r,   r"   r’   r   r   )
rM   Z_Ar¥   rÒ  Zmul_t_entropyZmul_norm_entropyZdf1Zdf2Z	_entropy1Z	_entropy2r=   r=   r>   Útest_entropy_with_covariance  s"    û
z.TestMultivariateT.test_entropy_with_covariance)F)+r¯   r°   r±   Z	PDF_TESTSrG   rµ   r¶   r“  r”  r—  r›  r4   rœ  rŸ  r¡  ZDEFAULT_ARGS_TESTSr¤  r6   r¬   ZARGS_SHAPES_TESTSr¥  r§  r/  r¨  rà   r©  rL  r­  r®  r«  r´  r¸  r»  rÀ  r  rÃ  rÄ  rÆ  rÇ  rK   rÊ  rÐ  rÒ  r=   r=   r=   r>   rŒ  	  sÒ   
öþè(ûýìÛB


 **""..øÿ
$ýÿ






ÿÿÿ
þ
rŒ  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g d¢dfg d¢dfddgdfdgdff¡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jg ed'�ejg ed'�dg fddgddgddfg d(¢g d)¢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d0d1gfdgdgggdgdggddgd0d1ggfdgdggdggggddgd0d1gggfg¡d2d3„ ƒZd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Zd>d?„ Zd@dA„ ZdBdC„ ZdDdE„ ZdFdG„ ZdHdI„ ZdJS )KÚTestMultivariateHypergeomzx, m, n, expectedrD   rW   rU   rå   rX   g©¥¹Âêñ¿r   r•  éûÿÿÿr	   rC   r^   iúÿÿÿiöÿÿÿr  r  rY   iùÿÿÿc                 C   s    t  |||¡}t||dd� d S )Ng�íµ ÷Æ°>ró   )r   ræ  r   ©rM   rS   rh  r¤   r‰  Úvalsr=   r=   r>   rë  !  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 )NrD   r	   rå   rU   rW   )rS   rh  r¤   é   )râ   rÀ   r¤   r.  r`  ró   rX   é   )r   rï  r!   r   rð  r=   r=   r>   Útest_reduces_hypergeom?  s    z0TestMultivariateHypergeom.test_reduces_hypergeomc                 C   s:   t ddgdd�}|jddd�}t| d¡| ¡ d	d
� d S )NrD   rU   rW   ©rh  r¤   r†  rø  r‰   r   r  ró   ©r   r�   r   r“   ©rM   r¦   r�   r=   r=   r>   r©  J  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 )NrD   rU   rå   rW   rý  rÚ  ©r†  rC   rø  r‰   r   r  ró   rÛ  rÜ  r=   r=   r>   Útest_rvs_broadcastingQ  s    z/TestMultivariateHypergeom.test_rvs_broadcastingzm, n)r   r   r!  r   r   )r   r   r   r   r   c                 C   s8   t  ||¡}t |¡}| ¡ }|||dk< t||ƒ d S )Nr   )r   r�   r6   r7   rx  r   )rM   rh  r¤   r9   Zres_exr=   r=   r>   Útest_rvs_gh16171V  s
    
z*TestMultivariateHypergeom.test_rvs_gh16171g z÷lÂâÔ?rì  rý  gQ°µ­Ù?gEçÙ³¤|?gé�
¸çyÞ?rì   rÿ  )rU   rV   rX   rV   g‘z²p†?c                 C   s    t  |||¡}t||dd� d S ©Nr  ró   ©r   rï  r   rÕ  r=   r=   r>   r  a  s    z"TestMultivariateHypergeom.test_pmfr×  gõ­ æÎÕ?r©   rª   c                 C   s    t  |||¡}t||dd� d S rà  rá  rÕ  r=   r=   r>   r  u  s    
z/TestMultivariateHypergeom.test_pmf_broadcastingc                 C   s:   t jg d¢dd�}g d¢g d¢g d¢g}t||dd� d S )	N)rD   rX   rå   r  rÚ  )g«×Âf_�ä?çÁ&BUúÐ¿ç–ˆCx¬@Ø¿)râ  g�gsƒ>dò?çZ¤ásKì¿)rã  rä  gö¿3å5ô?r`  ró   ©r   r¥   r   )rM   r  r'  r=   r=   r>   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 )NrX   rý  rå   r×  rì  r  rÚ  gÍÌÌÌÌÌð?gÍÌÌÌÌÌð¿gö(\�Âõø?gö(\�Âõø¿r`  ró   rW   rU   rª   g333333é?g333333é¿rå  r  r=   r=   r>   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 )	Nrå   rU   rW   rÚ  r×  ©rÀ   r¤   r.  r`  ró   )r   r�  r!   r   )rM   Úvar0Úvar1r=   r=   r>   Ú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 )Nrå   rU   rW   rì  rÚ  r   r`  ró   r	   rí  gÌ�3—eYæ?g�I›ª{¤õ?rª   )r   r�  r   )rM   rç  rè  Úvar2Úvar3Zvar4Zvar5Zvar6r=   r=   r>   Ú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 )Nrå   rU   rW   rÚ  r×  ræ  r   r`  ró   r  rì  g      @rž  )r   r“   r!   r   ©rM   Úmean0r  r&  Zmean3r=   r=   r>   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 )NrD   rU   rå   rW   rì  rÚ  rÍ   rÎ   gUUUUUU@gUUUUUU@r`  ró   )r   r“   r   )rM   rî  r  r=   r=   r>   r  ·  s    z0TestMultivariateHypergeom.test_mean_broadcastingc                 C   s¸   t jg d¢dd�}t|g d¢ƒ t jg d¢dd�}t|tjtjtjgƒ t jg d¢g d¢gdd�}t|tjtjtjgg d¢gd	d
� t jtjg td�dd�}t|g ƒ t|j	dkƒ d S )NrZ   r   rÚ  ©rª   rª   rª   ©r	   r   r   rC   rG  )r©   rª   r©   ç—ÔFFõg<ró   rì   ©r   )
r   r“   r   r6   r  r   r¬   Úintr   r8   rí  r=   r=   r>   Útest_mean_edge_cases¼  s    ÿ
z.TestMultivariateHypergeom.test_mean_edge_casesc                 C   s¼   t jg d¢dd�}t|g d¢dd� t jg d¢dd�}t|tjtjtjgƒ t jg d¢g d	¢gdd�}t|tjtjtjgg d¢gd
d� t jtjg td�dd�}t|g ƒ t|j	dkƒ d S )NrZ   r   rÚ  rï  g¼‰Ø—²Òœ<ró   rð  rC   rG  rñ  rì   rò  )
r   r�  r   r   r6   r  r¬   ró  r   r8   )rM   rç  rè  rê  rë  r=   r=   r>   Útest_var_edge_casesË  s    ÿ
z-TestMultivariateHypergeom.test_var_edge_casesc                 C   s¸   t jg d¢dd�}g d¢g d¢g d¢g}t||dd� t jg d¢dd�}g d¢g d¢g d¢g}t||ƒ t jtjg td	�dd�}tjg tjd	� dd¡}t||dd� t	|j
d
kƒ d S )Nrð  r	   rÚ  rï  rñ  ró   rZ   r   rì   r  )r   r¥   r   r   r6   r¬   ró  r   r‡  r   r8   )rM   Zcov0r  r  r	  r
  r  r=   r=   r>   Útest_cov_edge_casesÚ  s    
z-TestMultivariateHypergeom.test_cov_edge_casesc                 C   s¶   t j d¡ d}g d¢}g d¢g d¢g d¢g d¢g d¢g}t j|td	�}t||ƒ}t| |¡t |||¡ƒ t| |¡t |||¡ƒ t| 	¡ t 	||¡ƒ t| 
¡ t 
||¡ƒ d S )
NrÌ   r  )rX   rý  r  é   r  r  r  r  r  rì   )r6   rz   rŒ   r7   ró  r   r   rï  ræ  r�  r¥   )rM   r¤   rh  rS   Z
mhg_frozenr=   r=   r>   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 )	NrU   rå   rW   g      @r�  r×  g      %@g      /@)rÉ   rH   r   rï  Ú	TypeErrorr1  r=   r=   r>   Útest_invalid_paramsø  s    ÿÿÿz-TestMultivariateHypergeom.test_invalid_paramsN)r¯   r°   r±   rG   rµ   r¶   r6   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Ó     sv   ÿëþ
þ
þõþ
"&&üþ	

rÓ  c                   @   s0  e Zd Zdd„ Zdd„ Zej dd¡dd„ ƒZd	d
„ Z	ej dd¡ej dd¡dd„ ƒƒZ
ej dd¡dd„ ƒZdd„ Zej dd¡dd„ ƒZej dd¡dd„ ƒZej dd¡dd„ ƒZej dd¡ej dg dgf¡ej dg dgf¡d d!„ ƒƒƒZej d"d#¡d$d%„ ƒZd&d'„ Zej dd¡d(d)„ ƒZd*S )+ÚTestRandomTablec                 C   s   t j d¡S )Nl   ÖO˜f½E)r6   rz   r{   r1  r=   r=   r>   Úget_rng  s    zTestRandomTable.get_rngc                 C   s>  d}t jt|d��$ tddggddgƒ W d   ƒ n1 s<0    Y  d}t jt|d��$ tddgddggƒ W d   ƒ n1 s‚0    Y  d}t jt|d��" tddgddgƒ W d   ƒ n1 sÆ0    Y  d}t jt|d��" tddgdd	gƒ W d   ƒ n1 �s0    Y  d
}t jt|d��" tddgddgƒ W d   ƒ n1 �sR0    Y  d}t jt|d��" tddgg d¢ƒ W d   ƒ n1 �s˜0    Y  d}t jt|d��" tddgg d¢ƒ W d   ƒ n1 �sÞ0    Y  ddg}g d¢}t ddgg d¢¡\}}}t||ƒ t||ƒ |t |¡k�s:J ‚d S )Nz`row` must be one-dimensionalrA   r	   rC   z`col` must be one-dimensionalz*each element of `row` must be non-negativerY   z*each element of `col` must be non-negativer\   z'sums over `row` and `col` must be equalr   z(each element of `row` must be an integerçÍÌÌÌÌÌ @)r	   r	   rC   z(each element of `col` must be an integer)r¥  r¥  r	   rD   ©rC   r	   r	   )rG   r   rH   r%   Z_process_parametersr   r6   r~   )rM   rN   ÚrowÚcolrè   rß  r¤   r=   r=   r>   Útest_process_parameters  s6    2202222

z'TestRandomTable.test_process_parameterszscale,method))r	   Úboyett)rë   Ú	patefieldc                 C   sZ   t  ddg¡| }t  g d¢¡| }t}|j|||dd�}|j||d dd�}t||ƒ d S )Nr	   rD   rý  ©ÚmethodrŠ   )r6   r¬   r%   r�   r   )rM   rþ   r  rþ  rÿ  Úctr‰  Úgotr=   r=   r>   Útest_process_rvs_method_on_None,  s    z/TestRandomTable.test_process_rvs_method_on_Nonec                 C   sV   ddg}g d¢}d}t jt|d��  tj||dd� W d   ƒ n1 sH0    Y  d S )Nr	   rD   rý  z$'foo' not recognized, must be one ofrA   Zfoo©r  )rG   r   rH   r%   r�   )rM   rþ  rÿ  rN   r=   r=   r>   Ú$test_process_rvs_method_bad_argument8  s
    z4TestRandomTable.test_process_rvs_method_bad_argumentrz  )TFrÓ   c                    sR  |   ¡ }ddg‰g d¢‰ tjˆˆ dd|d�}|r:tˆˆ ƒnt}t||rJdndƒ‰|shˆ‰‡ ‡‡fd	d
„‰|rx‡fdd„nˆ}tj|ddd�\}}||ƒ}	t|	t|ƒ |dd� |t|d ƒƒ}
t	|
|	d ƒ | 
d|jdd …  ¡}||ƒ}	|	jdksúJ ‚t|	jd ƒD ]F}t|	jd ƒD ]0}|	||f }|||f }||ƒ}t	||ƒ �q�qg d¢g d¢g}t	tj|dd�ˆƒ ||ƒ}	|	dk�sŠJ ‚g d¢g d¢g}t	tj|dd�ˆ ƒ ||ƒ}	|	dk�sÄJ ‚d}tjt|d�� |dgƒ W d   ƒ n1 �sø0    Y  d}tjt|d�� |dggƒ W d   ƒ n1 �s80    Y  d}tjt|d�� |tjggƒ W d   ƒ n1 �sz0    Y  d}tjt|d�� |dggƒ W d   ƒ n1 �sº0    Y  d }tjt|d�� |g d!¢gƒ W d   ƒ n1 �sü0    Y  d"}tjt|d��$ |ddgd#d$ggƒ W d   ƒ n1 �sD0    Y  d S )%NrC   rV   ©r	   rD   rW   r†  r  ©rp   r  rŠ   ræ  rï  c                    s   ˆ| ˆˆ ƒS r5   r=   rR   )rÿ  Úoriginal_methodrþ  r=   r>   r  R  s    z/TestRandomTable.test_pmf_logpmf.<locals>.methodc                    s   t  ˆ | ƒ¡S r5   )r6   rí   rR   r  r=   r>   rT   T  r9  z1TestRandomTable.test_pmf_logpmf.<locals>.<lambda>r   T©rt   Zreturn_countsr†   ró   )rå   rë   r	   )r   r	   r	   )rC   r	   rD   rY   rs   rÆ   )r	   rC   rC   r\   z$`x` must be at least two-dimensionalrA   z%`x` must contain only integral valuesr¥  z)`x` must contain only non-negative valuesz"shape of `x` must agree with `row`rF   z"shape of `x` must agree with `col`rD   rW   )rû  r%   r�   ra   r6   Úuniquer   r   r´   r   r‡  r8   rÝ   r~   rG   r   rH   r  )rM   rz  rÓ   rƒ   r�   Úobjrï  Ú
unique_rvsÚcountsrö  Zp2Zrvs_ndrö   r÷   ZpijZrvijZqijrS   rN   r=   )rÿ  r  r  rþ  r>   Útest_pmf_logpmfA  sl    
ÿ*,.,.ÿzTestRandomTable.test_pmf_logpmfr  )r  r  c                 C   sš   |   ¡ }ddg}g d¢}tj||d||d�}t ||¡}tt |¡t |¡ƒ t| d¡|dd� t|jd	d
�t |d¡ƒ t|jdd
�t |d¡ƒ d S )NrC   rV   r
  r†  r  r   r>  r#  rY   rs   rÝ  r\   )r†  rD   )	rû  r%   r�   r“   r   r6   r~   r   Zbroadcast_to)rM   r  rƒ   rþ  rÿ  r�   r“   r=   r=   r>   Útest_rvs_mean‘  s    ÿzTestRandomTable.test_rvs_meanc                 C   sn   |   ¡ }ddg}g d¢}tj||dd|d�}tj||dd|d�}tj|dd	�}tj|dd	�}t||d
d� d S )NrC   rV   r
  r�  r  r  r  r   rs   ç{®Gáz”?r#  )rû  r%   r�   r6   r�  r   )rM   rƒ   rþ  rÿ  r{  r|  r  r'  r=   r=   r>   Útest_rvs_cov   s    ÿÿzTestRandomTable.test_rvs_covc           
      C   sŒ  ddg}g d¢}t j||||  ¡ d�}|jdks4J ‚t j||d||  ¡ d�}|jdksZJ ‚t||d	 ƒ t j||d	||  ¡ d�}|jd
ksŽJ ‚t j||d||  ¡ d�}|jdks´J ‚t j||d||  ¡ d�}|jdksÚJ ‚t| ddd¡|dd� d}	tjt	|	d��( t j||d||  ¡ d� W d   ƒ n1 �s40    Y  tjt	|	d��* t j||t
j||  ¡ d� W d   ƒ n1 �s~0    Y  d S )NrC   rV   r
  r  rD  r	   r  rF   r   )r   rC   rD   r!  )r!  rC   rD   )rW   rU   )rW   rU   rC   rD   rD   rS  ró   z/`size` must be a non-negative integer or `None`rA   rY   )r%   r�   rû  r8   r   r   r‡  rG   r   rH   r6   r  )
rM   r  rþ  rÿ  r¦   Zrv2Zrv3Zrv4Zrv5rN   r=   r=   r>   Útest_rvs_size®  sB    
ÿÿÿÿÿÿ&ÿzTestRandomTable.test_rvs_sizec           	      C   sh   ddg}g d¢}t }|j||d||  ¡ d�}tj|ddd�\}}| |||¡}t|t|ƒ |d	d
� d S )NrC   rV   r
  r˜  r  r   Tr  r  ró   )r%   r�   rû  r6   r  rï  r   r   )	rM   r  rþ  rÿ  r  r�   r  r  rö  r=   r=   r>   Útest_rvs_methodØ  s    ÿzTestRandomTable.test_rvs_methodc                 C   sn   g d¢}g d¢}t ||ƒ}|jd||  ¡ d�}t dt|ƒt|ƒf¡}g d¢g d¢g d¢g|d< t||ƒ d S )NrH  )r	   r   r   r   r†  r  )r   r   r   r   .©r%   r�   rû  r6   r    r   r   ©rM   r  rþ  rÿ  r   r¦   r‰  r=   r=   r>   Útest_rvs_with_zeros_in_col_rowí  s    
þz.TestRandomTable.test_rvs_with_zeros_in_col_row)Nr  r  rÿ  r   rþ  c                 C   sD   t ||ƒ}|jd||  ¡ d�}t dt|ƒt|ƒf¡}t||ƒ d S )Nrå   r  r  r  r=   r=   r>   Útest_rvs_with_edge_casesù  s    
z(TestRandomTable.test_rvs_with_edge_casesr¼   rÇ  c                 C   sš   dd l m  m} tjddgtjd�}tjg d¢tjd�}t|d|› �ƒ}t |¡}||||d|  ¡ ƒ}|j	dt
|ƒt
|ƒfks„J ‚t |¡|ks–J ‚d S )Nr   r	   rD   rì   rý  Z	rvs_rcont)Zscipy.stats._rcontr,   Ú_rcontr6   r¬   Zint64ra   r~   rû  r8   r   )rM   r¼   r  rþ  rÿ  r�   ZntotÚresultr=   r=   r>   Útest_rvs_rcont  s    
zTestRandomTable.test_rvs_rcontc                 C   s„   ddg}g d¢}t |||  ¡ d�}| ¡ }t  ||¡}t|| ¡ ƒ t  |||¡}t|| |¡ƒ t  |||¡}t|| |¡ƒ d S )NrC   rV   r
  r‹   )r%   rû  r�   r“   r   rï  ræ  )rM   rþ  rÿ  r   r,  r‰  r=   r=   r>   r    s    zTestRandomTable.test_frozenc                 C   sV   ddg}g d¢}t |||  ¡ d�}t j||d||  ¡ d�}|jd|d�}t||ƒ d S )NrC   rV   r
  r‹   rå   r  )rp   r  )r%   rû  r�   r   )rM   r  rþ  rÿ  r   r‰  r  r=   r=   r>   Útest_rvs_frozen#  s    ÿzTestRandomTable.test_rvs_frozenN)r¯   r°   r±   rû  r   rG   rµ   r¶   r  r	  r  r  r  r  r  r  r  r  r  r  r=   r=   r=   r>   rú    s8   $ÿ

	N

)


rú  c                 C   sd   | j }d| _ | j|ddiŽ t | ¡}| j|ddiŽ}t |¡}|j|ddiŽ}t||ƒ || _ d S )NrÌ   rp   rì  )rŠ   r�   ÚpickleÚdumpsÚloadsr   )Údistfnr;   rú  rÂ   Zr0Z	unpickledÚr1r=   r=   r>   Ú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g d	¢fgtd
gt	d
gg}|D ]\}}t
||ƒ t||ƒ qfd S )NrD   rü   rÅ   rÓ  r=   r©   rå   rU   r²  r  )r6   rK   r   r   r¬   r   r   r   r   r   r2   r%  )rþ   Údistsr#  r;   r=   r=   r>   Útest_random_state_propertyC  s    


ù	
r'  c                   @   s  e Zd Zej dg d¢¡ej dg d¢¡dd„ ƒƒZej dddg¡ej d	g d
¢¡dd„ ƒƒZdd„ Zdd„ Z	dd„ Z
ej d	ddg¡dd„ ƒZej d	ddg¡dd„ ƒZej dejejg¡dd„ ƒZej dejejg¡dd„ ƒZej d e g d!¢¡e g d!¢¡d"d#fe g d$¢¡e g d%¢¡d"d&fe g d!¢¡e g d!¢¡d'd(fe g d$¢¡e g d%¢¡d'd)fe g d!¢¡e e d*¡e d+¡dg¡d,d-fe g d$¢¡e g d!¢¡d,d.fe g d/¢¡e g d/¢¡d,d0fe g d/¢¡e e d*¡e d+¡dddg¡d,d1fe g d/¢¡e e d2¡e d3¡dddg¡d,d4fg	¡d5d6„ ƒZej d e g d!¢¡e g d!¢¡d"d7fe g d$¢¡e g d%¢¡d"d8fe g d!¢¡e g d!¢¡d'd9fe g d$¢¡e g d%¢¡d'd:fe g d!¢¡e e d*¡e d+¡dg¡d,d;fe g d$¢¡e g d!¢¡d,d<fe g d/¢¡e g d/¢¡d,d=fe g d/¢¡e e d*¡e d+¡dddg¡d,d>fe g d/¢¡e e d2¡e d3¡dddg¡d,d?fg	¡d@dA„ ƒZej dBg dC¢¡dDdE„ ƒZej dejejg¡dFdG„ ƒZdHdI„ Zej dg dJ¢¡ej dKg dL¢¡dMdN„ ƒƒZdOdP„ ZdQdR„ ZdSdT„ ZdUS )VÚTestVonMises_Fisherrº   )rC   rD   rW   rV   rp   r|  c                 C   s�   t j d¡}t  |fdt  |¡ ¡}t|d|d�}| |¡}t  |¡t  |¡ }}|j	|||d�j
}	|j
|	ksrJ ‚t jj|dd�}
t|
dƒ d S )Nr}  r	   r‹   ro   rY   rs   r©   )r6   rz   r{   r  r²  r'   r�   r    rK   r   r8   r¢   r   r   )rM   rº   rp   rƒ   rÊ   Úvmf_distra  r“   r¥   r~  r  r=   r=   r>   rŠ  V  s    
z TestVonMises_Fisher.test_samplesrU   rì  Úkappa)g  4&õkCrË  gêŒ 9Y>)Fc                 C   s@   t j d¡}t  |fdt  |¡ ¡}t|||d�}| d¡ d S )Nr}  r	   r‹   rå   )r6   rz   r{   r  r²  r'   r�   )rM   rº   r*  rƒ   rÊ   r)  r=   r=   r>   Ú test_sampling_high_concentrationd  s    z4TestVonMises_Fisher.test_sampling_high_concentrationc                 C   sJ   t  d¡}d}tjt|d�� t|dƒ W d   ƒ n1 s<0    Y  d S )Nr*  z%'mu' must have one-dimensional shape.rA   r	   ©r6   rJ   rG   r   rH   r'   ©rM   rÊ   r  r=   r=   r>   Útest_two_dimensional_mum  s    
z+TestVonMises_Fisher.test_two_dimensional_muc                 C   sJ   t  d¡}d}tjt|d�� t|dƒ W d   ƒ n1 s<0    Y  d S )Nr  z%'mu' must be a unit vector of norm 1.rA   r	   r,  r-  r=   r=   r>   Útest_wrong_norm_mus  s    
z&TestVonMises_Fisher.test_wrong_norm_muc                 C   sJ   t  d¡}d}tjt|d�� t|dƒ W d   ƒ n1 s<0    Y  d S )Nrü  z$'mu' must have at least two entries.rA   r	   r,  r-  r=   r=   r>   Útest_one_entry_muy  s    
z%TestVonMises_Fisher.test_one_entry_murY   )rU   rD   c                 C   sD   d}t jt|d�� tddg|ƒ W d   ƒ n1 s60    Y  d S )Nz"'kappa' must be a positive scalar.rA   r	   r   ©rG   r   rH   r'   ©rM   r*  r  r=   r=   r>   Útest_kappa_validation  s    z)TestVonMises_Fisher.test_kappa_validationr   rª   c                 C   sD   d}t jt|d�� tddg|ƒ W d   ƒ n1 s60    Y  d S )NzŸFor 'kappa=0' the von Mises-Fisher distribution becomes the uniform distribution on the sphere surface. Consider using 'scipy.stats.uniform_direction' instead.rA   r	   r   r1  r2  r=   r=   r>   Útest_kappa_zero…  s    z#TestVonMises_Fisher.test_kappa_zeror  c                 C   sT   t  g d¢¡}d}tjt|d��  ||ddgdƒ W d   ƒ n1 sF0    Y  d S )N©r©   rª   r   znThe dimensionality of the last axis of 'x' must match the dimensionality of the von Mises Fisher distribution.rA   r	   r   ©r6   r¬   rG   r   rH   ©rM   r  rS   r  r=   r=   r>   Útest_invalid_shapes_pdf_logpdf�  s    z2TestVonMises_Fisher.test_invalid_shapes_pdf_logpdfc                 C   sT   t  ddg¡}d}tjt|d��  ||ddgdƒ W d   ƒ n1 sF0    Y  d S )Nrü   rª   ú8'x' must be unit vectors of norm 1 along last dimension.rA   r	   r   r6  r7  r=   r=   r>   Útest_unnormalized_input™  s    z+TestVonMises_Fisher.test_unnormalized_inputzx, mu, kappa, reference)r©   rª   rª   rE  g÷0ñµ_´?r5  )rª   rª   r©   g»ô7m0_´?rë   gLI‹«»Ô/@gFíK:h*7g\�Âõ(\ï?r  iÐ  gó3pˆBæ£>gÐ7Kõäs@)r©   rª   rª   rª   rª   go´Éé½¿ø@gW+x\Á(?r±  r‡   gSô‹³ð-c                 C   s"   t ||ƒ |¡}t||dd� d S )Nr;  ró   )r'   r�   r   )rM   rS   rÊ   r*  Ú	referencer�   r=   r=   r>   Útest_pdf_accuracy­  s    z%TestVonMises_Fisher.test_pdf_accuracygÅ[d6U?Àgþ1*¤‰?ÀgÑJ8“j#@g©=f«äNXÀg][«­,Àg1V‡V@g‰|¿˜'@gm¢FÚ&!Àg–ÈeÏóhÀc                 C   s"   t ||ƒ |¡}t||dd� d S )Nrõ  ró   )r'   r‘   r   )rM   rS   rÊ   r*  r;  r‘   r=   r=   r>   Útest_logpdf_accuracy×  s    z(TestVonMises_Fisher.test_logpdf_accuracyzdim, kappa, reference))rD   rE  g®©·£‰?@)rD   rë   g¡•p&ÕFü¿)rU   r1  gT†;Ó·&À)rì  r	   go›–ØZ@c                 C   s8   t  |fdt  |¡ ¡}t||ƒ ¡ }t||dd� d S )Nr	   g›+¡†›„=ró   )r6   r  r²  r'   r’   r   )rM   rº   r*  r;  rÊ   r’   r=   r=   r>   Útest_entropy_accuracy  s    z)TestVonMises_Fisher.test_entropy_accuracyc                 C   s®   d}t j d¡}tdƒj||d�}t  ddt  d¡ ¡}d}||||ƒ}|j|ksVJ ‚t|d ƒD ]F}t|d ƒD ]4}	||||	d d …f ||ƒ}
t	|
|||	f d	d
� qrqbd S )Nr*  r}  rD   rŸ   rX  r	   rU   r   rS  ró   )
r6   rz   r{   r&   r�   r  r²  r8   rÝ   r   )rM   r  Z	testshaperƒ   rS   rÊ   r*  Z
result_allrö   r÷   Zcurrent_valr=   r=   r>   rù     s    z%TestVonMises_Fisher.test_broadcastingc           	      C   sÀ   t j d¡}t  ddg¡}t  |d |d ¡}d}t||ƒ}t||d�}tdƒjd|d�}t  |d d …df |d d …df ¡}t	| 
¡ | 
¡ ƒ t	| |¡| |¡ƒ t	| |¡| |¡ƒ d S )	Nr}  r   r	   r!  )r  r*  rC   rå   rŸ   )r6   rz   r{   r¬   r‚  r'   r)   r&   r�   r   r’   r�   r‘   )	rM   rƒ   rÊ   Zmu_angler*  ZvmfZvonmises_distZvectorsr†  r=   r=   r>   Útest_vs_vonmises_2d  s    
$z'TestVonMises_Fisher.test_vs_vonmises_2d)rC   rD   rV   zkappa, mu_tol, kappa_tol))r	   r>  r>  )rå   r  r  )rë   ç{®Gázt?r  )r†  rò   r  c                 C   s€   t  |fdt  |¡ ¡}t||ƒ}t j d¡}d}|j||d�}	t |	¡\}
}t  | 	|
¡¡}t
|d|dd� t
|||d� d S )	Nr	   r}  r�  rŸ   rª   r   r·  ró   )r6   r  r²  r'   rz   r{   r�   rO  ZarccosrÞ   r   )rM   rº   r*  Zmu_tolZ	kappa_tolrÊ   r)  rƒ   rž  ra  Zmu_fitZ	kappa_fitZangular_errorr=   r=   r>   Útest_fit_accuracy+  s    
z%TestVonMises_Fisher.test_fit_accuracyc                 C   sJ   t  d¡}d}tjt|d�� t |¡ W d   ƒ n1 s<0    Y  d S )NrX  z'x' must be two dimensional.rA   )r6   r    rG   r   rH   r'   rO  ©rM   rS   r  r=   r=   r>   Ú#test_fit_error_one_dimensional_data<  s    
z7TestVonMises_Fisher.test_fit_error_one_dimensional_datac                 C   sJ   t  d¡}d}tjt|d�� t |¡ W d   ƒ n1 s<0    Y  d S )NrC  r9  rA   )r6   rJ   rG   r   rH   r'   rO  rB  r=   r=   r>   Ú test_fit_error_unnormalized_dataB  s    
z4TestVonMises_Fisher.test_fit_error_unnormalized_datac                 C   sf   t  g d¢¡}d}t||ƒ}t||dd�}|jdd�}tj||dd�}| ¡ }t||ƒ t||ƒ d S )N)r   r   r	   rU   r.  r‹   rŸ   )r6   r¬   r'   r�   r   )rM   rÊ   r*  rz  rW  r{  r|  rX  r=   r=   r>   r€  H  s    

z,TestVonMises_Fisher.test_frozen_distributionN)r¯   r°   r±   rG   rµ   r¶   rŠ  r+  r.  r/  r0  r3  r4  r'   r�   r‘   r8  r:  r6   r¬   r²  r<  r=  r>  rù   r?  rA  rC  rD  r€  r=   r=   r=   r>   r(  U  sè   

	ÿ
ÿ
ÿÿÿÿþÿþÿýÿýìÿ
ÿÿÿÿþÿþÿýÿýìÿ
ÿ
ÿ
ÿr(  c                   @   s°   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ Ze	j
 dddg¡dd„ ƒZe	j
 dddg¡dd„ ƒZdd„ Zdd„ Ze	j
 dddg¡dd„ ƒZe	j
 dg d¢¡dd„ ƒZdS )ÚTestDirichletMultinomialc                 C   sJ   t j d¡}|jdddd�}|jdd|dfd�}|jdd	�}|||||fS )
Nì   ðt7ž)r   rë   rC   ro   r	   r!  rY   rs   )r6   rz   r{   r   Úintegersr~   )rM   rh  rƒ   r9  rS   r¤   r=   r=   r>   Ú
get_paramsW  s
    z#TestDirichletMultinomial.get_paramsc                 C   sº   t j d¡}| ddd¡}| ddd¡}t j|dd�}t||ƒ}t| |¡t |||¡ƒ t| 	|¡t 	|||¡ƒ t| 
¡ t 
||¡ƒ t| ¡ t ||¡ƒ t| ¡ t ||¡ƒ d S )NrF  r   rë   rå   rY   rs   )r6   rz   r{   r   rG  r~   r(   r   ræ  rï  r“   r�  r¥   )rM   rƒ   r9  rS   r¤   r   r=   r=   r>   r  _  s    
z$TestDirichletMultinomial.test_frozenc                 C   sô   t  g d¢¡}t  |¡}t  g d¢¡}t |||¡}t |||¡}d}t||ƒ t|t  |¡ƒ |j|j  krxdks~n J ‚t j	 
d¡}| ddd¡}| ddd¡}t j|d	d
�}t||ƒ |¡}t |||¡}d}t||ƒ t|t  |¡ƒ d S )NrF   ©rD   rW   rU   gp.¸U.¸µ?r=   rF  r   rë   rå   rY   rs   g+»©œTº<)r6   r¬   r~   r(   rï  ræ  r   rÓ   r8   rz   r{   r   rG  )rM   rS   r¤   r9  r9   Zlogresr:   rƒ   r=   r=   r>   Útest_pmf_logpmf_against_Rm  s$    


z2TestDirichletMultinomial.test_pmf_logpmf_against_Rc                 C   s  |   d¡\}}}}}|d7 }tt||ƒ |¡dƒ tt||ƒ |¡tj ƒ |   d¡\}}}}}|jdd�dk}t || d ¡||< tt||ƒ |¡| dƒ tt||ƒ |¡| tj ƒ t 	t||ƒ |¡|  dk¡sâJ ‚t 	t||ƒ |¡|  tj k¡�sJ ‚d S )Nr	   r   rå   ro   rü   rC   )
rH  r   r(   rï  ræ  r6   rà   rz   Úroundrç   )rM   rƒ   rh  r9  r¤   rS   rö   r=   r=   r>   Útest_pmf_logpmf_supportŒ  s    $z0TestDirichletMultinomial.test_pmf_logpmf_supportc                 C   sš   d}dg}t  |g¡}t||ƒ}t| |¡dƒ t| |d ¡dƒ t| |¡dƒ t| |d ¡t j ƒ t| ¡ |ƒ t| ¡ dƒ t| 	¡ dƒ d S )NrV   rå   r	   r   )
r6   r7   r(   r   rï  ræ  rà   r“   r�  r¥   )rM   r¤   r9  rS   r­   r=   r=   r>   Útest_dimensionality_oneœ  s    
z0TestDirichletMultinomial.test_dimensionality_oneÚmethod_namerï  ræ  c                 C   sb   |   d¡\}}}}}tt||ƒ|ƒ}ttj|g|j¢R Ž |ƒ}||ƒ}	||jd ƒ}
t|	|
ƒ d S ©Nrë   r   ©rH  ra   r(   r,   Z	betabinomr€   r   ©rM   rN  rƒ   rh  r9  r¤   rS   r  Z
ref_methodr9   r:   r=   r=   r>   Útest_against_betabinom_pmf«  s    z3TestDirichletMultinomial.test_against_betabinom_pmfr“   r�  c                 C   sd   |   d¡\}}}}}tt||ƒ|ƒ}ttj|g|j¢R Ž |ƒ}|ƒ d d …df }	|ƒ }
t|	|
ƒ d S rO  rP  rQ  r=   r=   r>   Útest_against_betabinom_moments¶  s    z7TestDirichletMultinomial.test_against_betabinom_momentsc                 C   sB  d}t tjƒt dƒk r"tj|d� tj d¡}d}| dd¡}|j|d�d	 }t||ƒ}d
}|j	||d�}|j
|||d�}	t| ¡ tj|	dd�dd� t| ¡ tj|	dd�dd� | ¡ j| ¡ j  krÔ|fksÚn J ‚| ¡ }
|
j||fksôJ ‚t|
t |	j¡dd� tt |
¡| ¡ ƒ t tj |
¡d dk¡�s>J ‚d S )Nz/Needs NumPy 1.22.0 for multinomial broadcastingz1.22.0)ÚreasonrF  rU   r	   rë   ro   rå   r˜  r   rs   r@  ró   r  r  )r1   r6   Ú__version__rG   rv   rz   r{   rG  r(   r   r   r   r“   r�  r8   r¥   r€   r   r`   rç   r«   r¢   r£   )rM   rN   rƒ   rº   r¤   r9  r­   rh  rö  rS   r¥   r=   r=   r>   rˆ  Á  s&    
(z%TestDirichletMultinomial.test_momentsc                 C   s  t  g d¢¡}t  |¡}t  g d¢¡}d}tt|d��" t g d¢||¡ W d   ƒ n1 s^0    Y  tt|d��" t g d¢||¡ W d   ƒ n1 sœ0    Y  d}tt|d��" t |g d¢|¡ W d   ƒ n1 sÞ0    Y  tt|d��" t |g d	¢|¡ W d   ƒ n1 �s0    Y  d
}tt|d�� t ||d¡ W d   ƒ n1 �s^0    Y  tt|d�� t ||d¡ W d   ƒ n1 �sš0    Y  t  g d¢¡}t  g d¢¡}d}tt|d��" t ||| ¡ ¡ W d   ƒ n1 �sú0    Y  d S )NrF   rI  z,`x` must contain only non-negative integers.rA   )r	   rY   rD   )r	   rü  rD   z*`alpha` must contain only positive values.)rD   r   rW   )rD   rY   rW   z`n` must be a positive integer.gÍÌÌÌÌŒH@r   )r	   rC   rD   rW   z&`x` and `alpha` must be broadcastable.)r6   r¬   r~   rÉ   rH   r(   ræ  )rM   Zx0Zn0Zalpha0ÚtextrS   r9  r=   r=   r>   rO   Û  s.    
0002..z.TestDirichletMultinomial.test_input_validationr  c                 C   sî   t  g d¢g d¢g d¢g d¢g¡}t  dgdgdgg¡}t  g d¢g d	¢g¡ d
¡}tt|ƒ}||||ƒ}|jdksxJ ‚tt|ƒƒD ]d}tt|ƒƒD ]R}tt|ƒƒD ]@}||||f }	|||  ¡ ||  ¡ ||  ¡ ƒ}
t	|	|
ƒ q¤q”q„d S )NrI  r  ©rU   rU   rX   ©rì  rý  rå   rV   rX   rì  rF   )rC   rC   rD   )rC   r	   r	   rD   )rC   rD   rW   )
r6   r¬   r‡  ra   r(   r8   rÝ   r   r�   r   )rM   r  r9  r¤   rS   r9   rö   r÷   râ   Úres_ijkr:   r=   r=   r>   Útest_broadcasting_pmfù  s    "
$z.TestDirichletMultinomial.test_broadcasting_pmf)r“   r�  r¥   c           
      C   sÀ   t  g d¢g d¢g d¢g d¢g¡}t  dgdgdgg¡}tt|ƒ}|||ƒ}|dkr`|jd	kshnd
shJ ‚tt|ƒƒD ]F}tt|ƒƒD ]4}|||f }|||  ¡ ||  ¡ ƒ}	t||	ƒ q„qtd S )NrI  r  rW  rX  rV   rX   rì  r¥   )rD   rW   rD   )rD   rW   rD   rD   )	r6   r¬   ra   r(   r8   rÝ   r   r�   r   )
rM   rN  r9  r¤   r  r9   r÷   râ   rY  r:   r=   r=   r>   Útest_broadcasting_moments  s    "

z2TestDirichletMultinomial.test_broadcasting_momentsN)r¯   r°   r±   ÚclassmethodrH  r  rJ  rL  rM  rG   rµ   r¶   rR  rS  rˆ  rO   rZ  r[  r=   r=   r=   r>   rE  V  s    





rE  )F)[Ú__doc__r   Znumpy.testingr   r   r   r   r   r   rG   r   rÉ   Ztest_continuous_basicr
   r2  r6   Zscipy.linalgr«   Zscipy.stats._multivariater   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$   r%   r&   r'   r(   r)   r*   r+   r,   Zscipy.integrater-   r.   r/   Zscipy.specialr0   Zscipy._lib._pep440r1   Zcommon_testsr2   Z	data._mvtr3   Zunittest.mockr4   r?   r@   r½   rÃ   rÄ   rl  r‹  rÄ  rÅ  rã  r  r-  rU  rf  r{  rˆ  rŒ  rÓ  rú  r%  r'  r(  rE  r=   r=   r=   r>   Ú<module>   sz    x	 a
      L J l - %Frg9<     e  -  