o
    Ö­j"r ã                   @   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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l6m7Z7 ddl6m8Z8m9Z9m:Z: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ƒZEdBd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?ƒZZG d@dA„ dAƒZ[dS )Cz8
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)Útanhsinh)ÚrombÚqmc_quadÚdblquadÚtplquad)Úmultigammaln)Ú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>   ú`/var/www/html/CropPilot/venv/lib/python3.10/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 sw   Y  d}t jt|d�� tjt d¡t d¡d� W d   ƒ n1 sBw   Y  d}t jt|d�� t d¡ W d   ƒ n1 s`w   Y  d	}t jt|d�� t 	t d¡¡ W d   ƒ n1 s�w   Y  d
}t jt|d�� t 
dt d¡f¡ W d   ƒ n1 s¤w   Y  d}t jt|d�� t 
t d¡df¡ W d   ƒ n1 sÇw   Y  d}t jt|d�� t 
g d¢t d¡f¡ W d   ƒ d S 1 síw   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...Ú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	   rD   rE   )Úpytestr   Ú
ValueErrorr*   ÚCovViaPrecisionr7   ÚonesÚeyeÚCovViaDiagonalÚCovViaCholeskyÚCovViaEigendecomposition©ÚselfÚmessager>   r>   r?   Útest_input_validation4   s8   ÿÿÿÿÿÿ"ÿz$TestCovariance.test_input_validationc                 C   s   t | dd�S )NT©Úallow_singular)r   ©Úxr>   r>   r?   Ú<lambda>V   ó   zTestCovariance.<lambda>)ÚDiagonalÚ	PrecisionÚCholeskyÚEigendecompositionÚPSDrH   )é   r	   rE   )r	   é   é   )rE   rb   é   )r	   r   rE   )r`   éÿÿÿÿr   )rd   r`   r   ©r   r   r   )údiagonal full rankzgeneral full rankzdiagonal singularzgeneral singularr	   N)r   éþÿÿÿrd   rg   Úcov_type_namerd   c           	      C   sŠ   t  g d¢¡}g d¢}ttd|› �ƒ}| j| }ttd| ¡ › �ƒ}|||ƒƒ}|||ƒƒ}t|ƒt|ƒu s8J ‚t| 	|¡| 	|¡ƒ d S )NrH   )éüÿÿÿrD   r`   ÚCovViaÚfrom_)
r7   ÚdiagÚgetattrr*   Ú_covariance_preprocessingr+   ÚlowerÚtyper   Úwhiten)	rR   rh   ÚArX   Úcov_typeÚpreprocessingÚfactoryr:   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	ƒr¶d
|vr¶t| |¡|
ƒ t|d	ƒrÏ| t t|ƒ¡¡}t|j| |ƒ d S d S )Nrj   ú does not support ú	 matricesTrU   ì   ÐVGi’VžK rE   ©ÚsizeÚ	_colorizeÚsingular©rD   rb   rE   rD   rd   ©Úaxis)Ú
_cov_typesrI   ÚskipÚ	_matricesrm   r*   rn   r   r@   Úlog_pdetr   Úrankr9   r7   r8   rF   ÚrandomÚdefault_rngrq   ÚUÚhasattrÚcolorizeÚsumrM   ÚlenÚT)rR   rw   rh   rS   rr   rs   rt   ÚpsdÚ
cov_objectÚrngrX   r:   r;   r>   r>   r?   Útest_covariancep   s:   






"
þzTestCovariance.test_covariancer|   r   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 )Nrj   rx   ry   ©çš™™™™™¹?çš™™™™™É?ç333333Ó?TrU   rz   r{   ©r|   Úrandom_state©Úseed)r‚   rI   rƒ   r„   rm   r*   rn   r   r7   r‡   rˆ   ÚrvsÚ
isinstanceÚ	CovViaPSDr@   Úsqueezer   r9   ÚpdfÚlogpdfÚentropy)rR   r|   rw   rh   rS   rr   rs   rt   Úmeanr�   ÚmvnÚdist0Údist1r‘   rX   Ú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 )Nrf   rj   r“   TrU   rz   r{   )r„   rm   r*   rn   r   r7   r‡   rˆ   r@   ÚcdfÚlogcdf)rR   r|   rh   rw   rr   rs   rt   r¢   r�   r£   r¤   r¥   r‘   rX   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   ƒ d S 1 sw   Y  d S )Nz7The `Covariance` class cannot be instantiated directly.rB   )rI   r   ÚNotImplementedErrorr+   rQ   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 s*w   Y  d}t j	 
|¡}t j	 
|¡}t t j |¡¡}t||ƒ}|j|d�}	tj|||d�}
t|	|
ƒ d S )N)r	   rD   g:Œ0âŽyE¾r   zThe input matrix must be...rB   l   .ypGw ©r˜   )r7   rl   r9   ÚzerosrI   r   rJ   r   r›   r‡   rˆ   r+   Úfrom_eigendecompositionÚlinalgÚeighr   )rR   rr   Únr¢   rš   Úrng1Úrng2ÚcovÚrvr:   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sTJ ‚|d |d ks^J ‚d S )	NrD   ©r¢   r¶   r{   ç      ð?ç        g      y@r   r	   )r7   rL   r+   r°   r¯   rM   Úscipyr,   r   r›   r   Úarray)rR   r¢   r¶   Údistr›   r>   r>   r?   Útest_gh19197ÿ   s   

"ÿzTestCovariance.test_gh19197)Ú__name__Ú
__module__Ú__qualname__rT   r7   rl   r±   ÚinvÚcholeskyr²   rn   r½   ÚlistÚ_all_covariance_typesr„   r‚   rI   ÚmarkÚparametrizerv   r’   Útupler¨   r«   r­   Úfilterwarningsr¸   r¿   r>   r>   r>   r?   rA   2   sF    üý


ý
/%

rA   Fc           	      C   s\   |  | | f¡}||j }tj |¡\}}|r"|j| d�dk}d||< |t |¡ |j }|S )Nr{   r   )r‡   rŽ   r7   r±   r²   Únormalrl   )	ÚdimÚevalsr‘   r~   rr   Ú_ÚvÚ	zero_eigsr¶   r>   r>   r?   Ú_random_covariance  s   
rÑ   c                 C   s$   t j | | ¡}tj |¡\}}}|S r6   )r7   r‡   Ú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 )NrE   rD   ©r   r	   ©r   r	   rD   )r7   ÚarangeÚidentityÚassert_raisesrJ   r   rŸ   r©   )rR   Ú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   r`   )
r7   r‡   rš   r   rŸ   r   ÚndimrÒ   Úabsr©   )rR   rX   r¢   r¶   rŸ   r©   r>   r>   r?   Útest_scalar_values/  s"   

z)TestMultivariateNormal.test_scalar_valuesc                 C   óf   t j d¡ t j d¡}t j d¡}t  t j d¡¡}t |||¡}t |||¡}t|t  	|¡ƒ d S ©Nrà   r`   )
r7   r‡   rš   rÒ   rä   r   r    rŸ   r   Úlog©rR   rX   r¢   r¶   Úd1Úd2r>   r>   r?   Útest_logpdfJ  ó   z"TestMultivariateNormal.test_logpdfc                 C   ól   t j d¡ t j d¡}t |¡}t |¡}t |d d¡}t |d d¡}t|t  |¡ƒ t|t  |¡ƒ d S ©Nrà   r`   r	   )	r7   r‡   rš   rÒ   r   r    rŸ   r   rè   ©rR   rX   rê   rë   Úd3Úd4r>   r>   r?   Útest_logpdf_default_valuesT  ó   

z1TestMultivariateNormal.test_logpdf_default_valuesc                 C   ræ   rç   )
r7   r‡   rš   rÒ   rä   r   rª   r©   r   rè   ré   r>   r>   r?   Útest_logcdfa  rí   z"TestMultivariateNormal.test_logcdfc                 C   rî   rï   )	r7   r‡   rš   rÒ   r   rª   r©   r   rè   rð   r>   r>   r?   Útest_logcdf_default_valuesk  rô   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à   rb   r	   TrU   )r7   r‡   rš   rÒ   ÚrangeÚdotrŽ   r   r   r�   r†   )rR   r³   r¢   Úexpected_rankrÖ   r¶   Ú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	   r`   TrU   rd   r»   )r÷   r7   r‡   rÒ   rø   rŽ   r¯   r×   r   r   r�   r†   rŸ   r   r    Úinf)rR   r³   ÚzÚkrÖ   Úcov_kkÚcov_nnrX   rÕ   Úcov_rrÚyÚdistn_kkÚdistn_nnÚdistn_rrÚpdf_kkÚpdf_nnÚpdf_rrÚ	logpdf_kkÚ	logpdf_nnÚ	logpdf_rrÚy_orthÚpdf_rr_orthÚlogpdf_rr_orthr>   r>   r?   Útest_degenerate_distributionsƒ  sR   
ÿÿÿ










Òþz4TestMultivariateNormal.test_degenerate_distributionsc           
      C   sÌ   d}t ddƒD ]\}t d|ƒD ]T}t |¡}t|ƒd d …d |…f }t ||j¡}tj|||d�}tj|||dd�}t	|j
|ƒ t |dk¡sHJ ‚tj|||dd�}	t	|	j
|ƒ t |	tj k¡sbJ ‚qqd S )	Né
   rD   ra   r	   ©r¢   r¶   r|   T)r¢   r¶   rV   r»   )r÷   r7   r¯   r×   rø   rŽ   r   r›   rŸ   r   r|   Úallr    rü   )
rR   rþ   r³   ÚrÚmnrÕ   Ú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   rD   ©Údtyper   r	   )r7   Úexpr¯   ÚfloatÚfill_diagonalr   r¼   r±   Údetrü   r   Úslogdetr   r…   )rR   Úlarge_total_logÚnposÚnzeroÚ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 ]3}t	dƒD ],}	t |||	f ||¡}
t
|
|||	f ƒ t |||	f ||¡}
t
|
|||	f dd� q<q6d S )Nrà   rb   rD   rE   çü©ñÒMbP?©Úrtol)r7   r‡   rš   rÒ   rø   rŽ   r   rŸ   r©   r÷   r   )rR   r³   Údatar¶   r¢   r  Údesired_pdfÚ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   rD   r  )ç333333ó?çÍÌÌÌÌÌì?ç      à?)r7   Úlinspacer   rŸ   r   r   r©   )rR   rX   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      @r1  r•   ç333333ã?i  ra   r	   r   rD   r€   ©r   r   ©Úlocr3  )r	   r	   ç{®Gáz„?©r'  Úatol)
r7   r½   r2  ÚmeshgridÚemptyr   rŸ   r.   r   r   )rR   r¢   r¶   r³   ÚdeltarÏ   ÚxvÚyvÚposrŸ   Úmargin_xÚmargin_yÚgauss_xÚ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ç   )r7   r‡   rš   rÒ   rä   r   r   rŸ   r    r©   rª   )rR   rX   r¢   r¶   Únorm_frozenr>   r>   r?   Útest_frozen$  s   

ÿ
ÿz"TestMultivariateNormal.test_frozenrF   rD   r	   c                 C   sF   t  d¡}t  d¡}t||ƒ}t  |j|¡sJ ‚t  |j|¡s!J ‚d S )N©rD   rD   )r7   rL   rM   r   Úallcloser¢   r¶   )rR   rF   r¢   Úcov_should_berG  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à   rc   r1  rº   r   çH¯¼šò×z>rd   çñhãˆµøä>)Úcond)r7   r‡   rš   rÒ   rø   rŽ   r¼   r±   r²   Úfullrl   r   Úpinvr   r…   rŒ   rè   )	rR   r³   rX   r¶   rÖ   rÕ   rO  r�   Ú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 )NrH   ©rb   r`   ra   ©rÝ   rJ   r   ©rR   r¶   r>   r>   r?   Útest_exception_nonsquare_covZ  ó   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   )r7   ÚnanrÝ   rJ   r   rü   )rR   Úcov_nanÚ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   rd   rU  rV  r>   r>   r?   Útest_exception_non_psd_covd  rX  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   ƒ d S 1 sjw   Y  d S )	Nrà   r`   )r`   r`   rº   r»   z0When `allow_singular is False`, the input matrixrB   ©r¶   )r7   r‡   rš   rÒ   rL   r±   ÚLinAlgErrorrÝ   r   rŸ   r    r©   rª   rI   r   )rR   rX   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   rD   r`   rE   )r	   rE   rD   Úd©r	   rD   r   )rD   r`   r1  )r   r1  rE   ç»½×Ùß|Û=©r;  )gwÐk:¢E]?gë®Ì™ýZ›?g¶0Ëñµ?gLÿß8»?gA¿G*ÀÐ?gñhãˆµøô>)gòIÙ‰?gˆï—Gå­?gÆ�)å‰Ç?gÄ—h»Ú?g•™óEEå?r	   rN  )	r7   r½   r2  ÚcosrŽ   r   rŸ   r   r©   )rR   Úr_pdfrX   r  rý   r  r¢   r¶   rŸ   Úr_cdfr©   Ú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 )NrD   ©rD   rD   TrU   r   )r7   r¯   r   r›   r   )rR   r¢   rF   Ú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,  rb   r	   r  rD   r”   r   r¹   )r   r›   r7   r¯   r   r9   r½   )rR   ÚNrc  rr  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é  rE   éˆ  r”   r&  r   )r7   r‡   rš   rÒ   rø   rŽ   r   r›   r   r¶   r¢   )rR   r³   r¢   rÔ   r¶   r|   rr  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 )Nrv  rE   r   r1  rD   r	   )r7   r‡   rš   rÒ   rø   rŽ   r   r   r¡   r±   Úeigrè   ÚpirŒ   )rR   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	   r1  )r7   r½   r   r  r   )rR   Úalphar|  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   rD   )rb   rE   rD   ra   rE   ©Úlower_limit.r	   rd   r€   )r7   r‡   rˆ   rM   r   r©   Úconcatenater   )rR   r‘   r¢   r¶   ÚaÚbÚcdf1Úcdf2aÚcdf2bÚab1Úab2Úcdf2ab1Úcdf2ab2rn  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�  rE   ©rE   rE   ©rD   rE   ra   r‚  ç-Cëâ6?r&  )	r7   r‡   rˆ   rŽ   r   r©   r  rª   r   )
rR   r‘   r¢   r¶   r…  r†  r‡  rn  Úcdf3Ú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 )	NrE   r~  re   ©r	   r   r	   ©r   r	   r   ©r	   rd   rd   r	   r‚  r   ©r7   r¯   rM   r½   r   r©   r   )rR   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 s-w   Y  tjt|d�� tddg|ƒ W d   ƒ n1 sKw   Y  g d¢}t 
|g d¢|¡}ttj
||d�|ƒ t 
|g d	¢|¡}ttj
|d|d�|ƒ d S )
Nr	   rH   z7`cov` represents a covariance matrix in 3 dimensions...rB   r   )r1  r1  r1  re   r^  r~  )r7   rl   r½   r*   rK   rI   r   rJ   r   r¡   rŸ   r   )rR   ÚPr�   rS   rX   r;   r>   r>   r?   Útest_mean_cov-  s   
ÿÿz$TestMultivariateNormal.test_mean_covc                 C   sJ   ddg}d}t jt|d�� t |¡ W d   ƒ d S 1 sw   Y  d S )Nr	   rE   z`x` must be two-dimensional.rB   )rI   r   rJ   r   Úfit)rR   r(  Ú	error_msgr>   r>   r?   Útest_fit_wrong_fit_data_shape@  s
   "ÿz4TestMultivariateNormal.test_fit_wrong_fit_data_shaperÌ   )rE   r`   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   r€   )ÚddofçVçž¯Ò<rf  r&  )	r7   r‡   rˆ   r   r�  r¢   r¶   rŽ   r   )rR   rÌ   r‘   rX   Úmean_estÚcov_estÚmean_refÚ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)rD   r	   rE   rº   )Úfix_meanÚfix_cov)r7   rP  Ú
atleast_2dr   r�  r   )rR   r(  Ú
mean_fixedÚ	cov_fixedr¢   r¶   r>   r>   r?   Útest_fit_both_parameters_fixedO  s   

ÿ
z5TestMultivariateNormal.test_fit_both_parameters_fixedr¨  rp  ©rE   c                 C   óL   d}t jt|d�� tjt d¡|d� W d   ƒ d S 1 sw   Y  d S )Nzd`fix_mean` must be a one-dimensional array the same length as the dimensionality of the vectors `x`.rB   rD   ©r¨  ©rI   r   rJ   r   r�  r7   rM   )rR   r¨  ra  r>   r>   r?   Ú"test_fit_fix_mean_input_validationX  s   "ÿz9TestMultivariateNormal.test_fit_fix_mean_input_validationr©  rI  )rE   rD   )rb   rb   c                 C   r¯  )Nzn`fix_cov` must be a two-dimensional square array of same side length as the dimensionality of the vectors `x`.rB   rE   ©r©  r±  )rR   r©  ra  r>   r>   r?   Ú+test_fit_fix_cov_input_validation_dimension`  s   "ÿzBTestMultivariateNormal.test_fit_fix_cov_input_validation_dimensionc                 C   sb   d}t jt|d�� t ddgddgg¡}tjt d¡|d� W d   ƒ d S 1 s*w   Y  d S )Nz2`fix_cov` must be symmetric positive semidefinite.rB   rº   r»   g      ð¿rD   r³  )rI   r   rJ   r7   r½   r   r�  rM   )rR   rž  r©  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 sOJ ‚| d¡}dt  ||j¡ }|
| }tj||	|d� 	¡ }||k sqJ ‚d S )	Nr   rE   r�  r  ©r¢   r¶   r|   r˜   r¹   r°  ç:Œ0âŽyE>)r7   r‡   rˆ   rø   rŽ   r   r›   r�  r    rŒ   r   )rR   r‘   r8  rr   r¶   ÚsamplesÚ	mean_freeÚcov_freeÚ	logp_freeÚmean_fixÚcov_fixÚlogp_fixÚmÚcov_perturbedÚlogp_perturbedr>   r>   r?   Útest_fit_fix_meanp  s>   


ÿÿÿ
ÿÿ
þý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 sYJ ‚|	d
| d¡  }tj|||
d� 	¡ }||k srJ ‚d S )Nr   rE   r�  r  r¶  r¹   r³  r   r€   r·  )r7   r‡   rˆ   rø   rŽ   r   r›   r�  r    rŒ   r   r¢   )rR   r‘   r8  rr   r¶   r¸  r¹  rº  r»  r¼  r½  r¾  Úmean_perturbedrÁ  r>   r>   r?   Útest_fit_fix_cov�  s<   

ÿÿÿ
ÿÿþýz'TestMultivariateNormal.test_fit_fix_covN)1rÀ   rÁ   rÂ   rß   rå   rì   ró   rõ   rö   rû   r  r  r$  r.  r4  rF  rH  rI   rÇ   rÈ   r7   rM   r+   Úfrom_diagonalrL  rS  rW  r\  r]  rb  ro  rs  ru  rx  r}  r€  rŽ  r”  rš  rœ  rŸ  r§  r­  r¯   r²  r´  rµ  rÂ  rÄ  r>   r>   r>   r?   rØ   &  sj    

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 )Nrb   rE   r–   r1  çffffffæ?)r`   rb   rE   r  )r7   rP  rÜ   rÝ   rJ   r   r¯   rŽ   r±   r_  r›   rL   )rR   Ú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 )Nrb   rE   r–   r1  rÇ  r	   ©r¢   ÚrowcovÚcolcov)r¢   )rÍ  )rÎ  )r¢   rÎ  )r¢   rÍ  )rÍ  rÎ  )r7   rP  rÜ   r¯   r   r   r›   r9   rÍ  rÎ  r¢   )rR   rÈ  rÉ  rÔ   r‰   rÊ  ÚZÚZrÚZcÚIrÚIcÚ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 )Nrb   rE   r–   r•   r”   rÌ  )r7   rP  rÜ   r   r   rÍ  rÎ  )
rR   rÈ  rÉ  rÔ   ÚUvÚUsÚVvÚVsrÒ  rÓ  r>   r>   r?   Útest_covariance_expansionì  s*   

ÿÿÿÿz*TestMatrixNormal.test_covariance_expansionc                 C   sþ   t ddƒD ]w}t ddƒD ]o}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	   r`   r–   r1  rÇ  rÌ  rà   r®   )r¢   rÍ  rÎ  r˜   )	r÷   r7   rP  rÜ   r   r›   r   rŸ   r    )rR   r+  r,  rÔ   r‰   rÊ  Ú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	   r`   r–   r1  rÇ  rÌ  rà   r®   r¹   re  r&  )r÷   r7   rP  rÜ   r   r›   rŸ   r    r¡   rŽ   ÚflattenÚkronr   r   )rR   r+  r,  rÔ   r‰   rÊ  rÛ  r  rÞ  rà  Úentropy1ÚvecXÚvecMr¶   rß  rá  Úentropy2r>   r>   r?   Útest_matches_multivariate  s*   



ìÿz*TestMatrixNormal.test_matches_multivariatec                 C   sD  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 ] }t
|ƒD ]}tj	|
||f |||d�}t||||f dƒ q…qd S )Nrb   rE   r–   r1  rÇ  r  rÌ  rà   r—   iá  r   r€   rD   re  )r7   rP  rÜ   r   r›   r„  Únewaxisr   r9   r    r÷   r   )rR   rÈ  rÉ  rÔ   r‰   rÊ  rt  rÛ  ÚX1ÚX2r  Úarray_logpdfr+  r,  Ú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 )Nrb   rE   r–   r1  rÇ  éè  rÌ  rà   r—   r   r€   r”   rf  r	   rD   )r7   rP  rÜ   r   r›   r¢   r   r¶   ÚreshaperŽ   Úswapaxes)rR   rÈ  rÉ  rÔ   r‰   rÊ  rt  rÛ  r  Úsample_meanÚsample_colcovÚ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	   rD   rE   rb   rd   r`   r  r   )r¢   rÍ  rÎ  r˜   r|   g¡6‚ÿø?gÇ€À Üó¿g‚¡c´Ï¿@g—ì"ç'ë@gI2Í–é@g^½€Òjy%@gøDn3Á@gëž|\3@)r   r›   r7   r½   r‡   rˆ   r   )rR   r-  Úexpectedr>   r>   r?   Útest_samplesa  s"   
ûÿÿþÿzTestMatrixNormal.test_samplesN)rÀ   rÁ   rÂ   rË  rÕ  rÚ  râ  ré  rï  rö  rø  r>   r>   r>   r?   rÆ  ©  s    'rÆ  c                   @   s¤   e Zd Zd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 ]9}t j dd|¡}|t  |¡ }t| |d d… ¡t |d d… |¡ƒ t| |d d… ¡t |d d… |¡ƒ q=d S ©Nrv  r	   é    ç•Ö&è.>r  r  rd   )r7   r‡   rš   Úrandintr   r   r   Úvarr¢   r¡   r÷   rŒ   rŸ   r    ©rR   r³   r  rc  Ú	num_testsr+  rX   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 )Nrv  ©rº   ç       @ç      @rc   r{   )rc   rE   rd   )r7   r‡   rš   r½   r   r   r9   rÝ   rJ   rŸ   r    rŽ   ©rR   r  rX   r>   r>   r?   Ú"test_numpy_rvs_shape_compatibilityˆ  s   z0TestDirichlet.test_numpy_rvs_shape_compatibilityc                 C   óR   t j d¡ g d¢}t jjt  d|¡dd�j}tttj||ƒ tttj	||ƒ d S )Nrv  )rº   r»   r  rü  rc   r{   ©
r7   r‡   rš   r   ÚmaximumrŽ   rÝ   rJ   rŸ   r    r  r>   r>   r?   Útest_alpha_with_zeros”  ó
   z#TestDirichlet.test_alpha_with_zerosc                 C   r  )Nrv  )rº   g       Àr  rü  rc   r{   r  r  r>   r>   r?   Ú test_alpha_with_negative_entriesœ  r  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•   rÇ  )rº   rº   rº   rº   ra   )r7   r½   r   rŸ   r    r   rè   r  r>   r>   r?   Útest_data_with_zeros¤  s   z"TestDirichlet.test_data_with_zerosc                 C   ó@   t  g d¢¡}t  g d¢¡}tttj||ƒ tttj||ƒ d S )N)rº   r1  r  r  r  ©r7   r½   rÝ   rJ   r   rŸ   r    r  r>   r>   r?   Ú$test_data_with_zeros_and_small_alpha­  ó   z2TestDirichlet.test_data_with_zeros_and_small_alphac                 C   r  )Nr  )r”   çš™™™™™¹¿r–   rÇ  r  r  r>   r>   r?   Útest_data_with_negative_entries³  r  z-TestDirichlet.test_data_with_negative_entriesc                 C   r  )Nr  )r”   çš™™™™™ñ?r–   rÇ  r  r  r>   r>   r?   Ú test_data_with_too_large_entries¹  r  z.TestDirichlet.test_data_with_too_large_entriesc                 C   ó>   t  g d¢¡}t  dd¡}tttj||ƒ tttj||ƒ d S )Nr  )rD   rc   rc   g’$I’$I²?©r7   r½   rP  rÝ   rJ   r   rŸ   r    r  r>   r>   r?   Útest_data_too_deep_c¿  ó   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  )rD   rD   rc   ç      Ð?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  ©rE   rc   çUUUUUUÕ?)r7   r½   rP  r   rŸ   r    r  r>   r>   r?   Útest_alpha_correct_depthË  s   z&TestDirichlet.test_alpha_correct_depthc                 C   r  )Nr  r  r1  r  r  r>   r>   r?   Útest_non_simplex_dataÑ  r  z#TestDirichlet.test_non_simplex_datac                 C   r  )Nr  )rD   rc   r1  r  r  r>   r>   r?   Útest_data_vector_too_short×  r  z(TestDirichlet.test_data_vector_too_shortc                 C   r  )Nr  )r`   rc   r•   r  r  r>   r>   r?   Útest_data_vector_too_longÝ  r  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•   ©r1  çš™™™™™Ù?r”   )çUUUUUUµ?ç{®Gáz´?ç¸…ëQ¸ž?)r(  ç±¿ç‘¿)r+  r)  çOè´�N‹¿)r,  r-  r*  )r7   r½   r   r   r¢   rþ  r¶   )rR   r  rc  Úexpected_meanÚexpected_varÚ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º   )	r7   r½   r   r   r¢   rã   rþ  rŸ   r    )rR   r  rc  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ú  )
r7   r‡   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 ]J}t|ƒD ]}t j dd|¡}	|	t  |	¡ }	|d urFt  ||	f¡}q)|	}q)| 	|j
¡}
d }|D ]}| 	|¡}|d uret  ||¡}qS|}qSt|
|ƒ q#d S )Nrv  r	   rû  rü  r  r  r`   )r7   r‡   rš   rý  r   r   r÷   rŒ   ÚvstackrŸ   rŽ   Úappendr   )rR   r³   r  rc  r   Únum_multipleÚxmr+  r¿  rX   Ú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¡ƒ q!t| 
¡ | 
¡ d ƒ t| ¡ | ¡ d ƒ d S )Nrv  rü  r  rD   r   r	   r  )r7   r‡   rš   r   r   r   r÷   rŒ   r   rŸ   r¢   rþ  )rR   r  rc  r†  r   r+  rX   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$  r1  rå   r2  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 d S  ty? } zd}tt|ƒd t|ƒ… |ƒ W Y d }~d S d }~ww )Nr»   rº   zDimension mismatch)r7   r½   rÝ   rJ   r   r   Ústrr�   )rÞ   Úsigmar`  ra  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ƒ qt  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ƒ qRtttdt  	d¡ƒ tdt  	d¡ƒ t jddd�}tttd|ƒ d S )Nr	   rD   ©Úndminr   ©r	   rD   r  rE   )
r7   r½   Úr_r   r   r3  r9   rÝ   rJ   rM   )rR   Ú
true_scaleÚscalesr3  Ú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| |¡|ƒ q+g d¢t jd t jg d¢dd�g}tddƒ}| t jg d¢dd�¡}|D ]
}t| |¡|ƒ qZd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| |¡|ƒ q³d S )Nr	   rD   r@  rE   rH   rp  r   )r7   r½   rC  r   rŸ   r   rê  rM   )rR   r  rF  ÚdensityrX   r>   r>   r?   Útest_quantile_dimensions|  sR   ú
	ý

ÿ
ÿÿùÿÿÿ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|¡}| |¡ q+t  |¡j}ddt  	ddd¡fd||fg}|D ]C\}}}t
||ƒ}t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| |¡t
 |||¡ƒ qqd S ©	Nrb   r	   rD   rd   ©rþ   r`   r  r”   )r7   rl   rÛ   Útril_indicesrø   rŽ   r÷   r4  r½   r2  r   r   rþ  r¢   Úmoder¡   rŸ   )	rR   rÌ   r3  r  r+  rX   Ú
parametersÚdfrF  r>   r>   r?   rH  ­  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 )NrE   r  r1  rÙ   ©r	   r   iêÈ r{   r	   rD   rd   rK  )r7   rM   r   r‡   rš   r›   rË   rC  Ú	chisquarerl   rL  r±   rÄ   rø   rŽ   r   )rR   rÌ   rO  r3  rF  Úw_rvsÚfrozen_w_rvsÚcovariancesÚ	variancesrr   ÚDÚDAÚ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 ]C}t||ƒ}t|ƒ}t	| 
¡ | 
¡ ƒ t	| ¡ | ¡ ƒ t	| ¡ | ¡ ƒ t	| |¡| |¡ƒ |j|d	�}	|f}
d
}td|
||	ƒ q"d S )Néž^ éô  r	   r  rD   r  r”   ©Únumr{   r9  r   )r7   r‡   rš   rM   rÛ   r  r2  r   r   r   rþ  r¢   r¡   rŸ   r›   r
   )rR   ÚsnrÌ   r3  Údf_ranger  rO  rF  Úcr›   r<   r  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 )NrZ  r[  r  rb   r	   ra   rd   rK  ©r3  r”   r\  r{   r   r9  r   )r7   r‡   rš   rl   rÛ   rL  rø   rŽ   rL   rž   r   r   r   rþ  r¢   r¡   r2  rŸ   r›   r
   )rR   r^  rO  rÌ   r3  ÚlamdaÚsigma_lamdarF  r`  r  r›   r<   r  r>   r>   r?   Útest_is_scaled_chisquared  s(   

z%TestWishart.test_is_scaled_chisquaredN)	rÀ   rÁ   rÂ   rG  rI  rH  rY  ra  re  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s!J ‚t  d	d	gd	d
dg¡}|d	ks2J ‚t  ddgd	ddg¡}t|tjdd� d S )N©rE   rb   rc   ©r–   rÇ  g&Múty»÷¿r·  r&  rE   rb   r   r–   rÇ  rg   )r   Úlogpmfr   r7   rü   rY  )rR   Ú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 )Nrg  rc   rh  rE   r–   r·  r&  )ra   é   é   ©r”   r0  ra   r”   )r   ri  r    r   Úpmf©rR   Ú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 )NrE   )g      À?r  g      ä?g     @Ï?g     ÀÂ?g      ž?g      `?g     ÀÒ?g      ¾?g      ˆ?g      ˜?g      �?)
)r   r   rE   )r	   r   rD   )rD   r   r	   )rE   r   r   rÚ   r~  ©rD   r	   r   )r   rD   r	   rd  )r   rE   r   ç›+¡†›„=rf  )r   r   rr  )rR   r³   ÚpÚr_valsrX   r>   r>   r?   Útest_RT  s   üÿzTestMultinomial.test_Rr³   r   rE   c                 C   sH   t j|dgd ddd�}tj d¡}|j |dgd dd�}t||ƒ d S )Nr  rE   rc   é{   r—   r{   )r   r›   r7   r‡   ÚRandomStater   )rR   r³   Úsc_rvsÚrndmÚ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)r`   r`   ©r	   r	   r·  r&  rg  rc   rh  gö5’á
Í?rE   r   ro  rd   é	   rq  g’¹*7î ?gÄÒ<WÆŒÛ?©r   rD   r  rb   rD   ©rE   rE   r   ra   )gUUUUUUå?r   r   gß¦îáÌ?re   rw  )r   rr  r   r7   r=  Úfloat64r   )	rR   Úvals0rj  rk  rX   rl  rm  Úvals5Ú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	   rD   rE   r”   r0  r•   r%  g´Èv¾ŸÏ?gú~j¼t“Ø?r·  r&  rb   r   )r   rr  r   )rR   r‡  rj  rk  rl  rm  r>   r>   r?   Útest_pmf_broadcastingˆ  s     &z%TestMultinomial.test_pmf_broadcastingr`   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–   r1  r•   r%  r–   r1  rÇ  r·  r&  ©r   r¶   r   )rR   r³   Úcov1rm  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 )Nr`   r”   r0  r•   r%  gÍÌÌÌÌÌÜ?gÍÌÌÌÌÌÜ¿gš™™™™™é¿r·  r&  rb   g
×£p=
×?g
×£p=
×¿r–   rÇ  r'  r5  gáz®Gáê?gáz®Gáê¿r/  g333333ó¿rŒ  ©rR   r�  rm  Úcov3Úcov4Úcov5Úcov6r>   r>   r?   Útest_cov_broadcasting   s     ÿz%TestMultinomial.test_cov_broadcastingrD   c                 C   s*   t  |ddg¡}t|t |d¡dd� d S ©Nr•   r%  r·  r&  ©r   r¡   r   r    )rR   r³   Úent0r>   r>   r?   r}  ®  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 )NrD   rE   r•   r–   r·  r&  rc   ro  rÇ  r'  r5  r–  )rR   r—  Úent1Ú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   )rR   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 )Nr`   ra   r•   r%  rº   r  g433333ó?g433333@r·  r&  r›  )rR   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	   rD   ro  r  )
r7   r‡   rš   r8   r†  r   r   rr  ri  r¡   )rR   r³   ÚpvalsrX   Ú	mn_frozenr>   r>   r?   rH  Í  s   "
zTestMultinomial.test_frozenc                 C   sZ   d}t j d¡}| |¡}d|d< |t  |¡ }t  |¡}t |||¡}t  |¡s+J ‚d S )NéX   l   iŒRZØY g ÂëþKH´9rd   )r7   r‡   rˆ   rŒ   rL   r   ri  Úisfinite)rR   r³   r‘   ry  rX   ri  r>   r>   r?   Útest_gh_11860Ù  s   

zTestMultinomial.test_gh_11860N)rÀ   rÁ   rÂ   rn  rv  r{  rI   rÇ   rÈ   r�  rŠ  r‹  rŽ  r”  r}  rš  r�  rž  rH  rª  r>   r>   r>   r?   rf  ;  s&    



rf  c                   @   ó4   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|¡}| |¡ q+t  |¡j}ddt  	ddd¡fd||fg}|D ]8\}}}t
||ƒ}t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| |¡t
 |||¡ƒ qqd S rJ  )r7   rl   rÛ   rL  rø   rŽ   r÷   r4  r½   r2  r   r   rþ  r¢   rM  r   rŸ   )	rR   rÌ   r3  r  r+  rX   rN  rO  Úiwr>   r>   r?   rH  è  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 ]K}t||ƒ}t|d dd�}t	| 
¡ | 
¡ ƒ t	| ¡ | ¡ ƒ t	| |¡| |¡ƒ |j|d�}	|d ddf}
d}td|
||	ƒ t	| ¡ | ¡ ƒ q"d S )NrZ  r[  r	   r`   é   rD   r  r”   r  r\  r1  rb  r{   r   r9  r   )r7   r‡   rš   rM   rÛ   r  r2  r   r   r   rþ  r¢   rŸ   r›   r
   r¡   )rR   r^  rÌ   r3  r_  r  rO  r­  Úigr›   r<   r  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 )NrE   r  r1  rÙ   rP  iHG	 r{   rD   r	   rd   rK  )r7   rM   r   r‡   rš   r›   rË   rC  rQ  rl   rL  r±   rÄ   ÚsolverŽ   rø   r   )rR   rÌ   rO  r3  r­  Úiw_rvsÚfrozen_iw_rvsrT  rU  rr   rV  ÚLÚmanual_iw_rvsr>   r>   r?   Útest_invwishart_2D_rvs)  s6   

	
þÿü

z%TestInvwishart.test_invwishart_2D_rvsc                 C   sâ   d}d}dD ]h}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�snJ ‚qdS )z1Test that sample mean consistent with known mean.r  é N  )r	   r`   r	   rD   rd   rK  r1  rà   r—   r   r€   r9  rf  N)r7   rl   rÛ   rL  rø   rŽ   r   r¢   rþ  r›   r   ÚppfrJ  )rR   rO  Úsample_sizerÌ   r3  r¾   Ú	Xmean_expÚXvar_expÚ	Xmean_stdr  Ú	Xmean_estÚntestsÚ	fail_rateÚ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.)rD   r	   r   r1  )r	   rD   r1  r1  )r   r1  rE   r	   )r1  r1  r	   rD   )rƒ  rc   rE   r	   )rc   rƒ  r`   r	   )rE   r`   ro  rD   )r	   r	   rD   rƒ  ra   r   rD   r	   r1  N)r7   r½   r   r    r9   r±   r  r±  rè   r2   Útracer   )rR   r  ÚPsiÚnuÚprobry  ÚsigÚlogdetXÚ	logdetPsirÔ   r÷  r>   r>   r?   Útest_logpdf_4x4r  s4   
ý
ý

ÿþý
üzTestInvwishart.test_logpdf_4x4N)rÀ   rÁ   rÂ   rH  r°  r¶  rÁ  rÉ  r>   r>   r>   r?   r¬  ç  s     !.r¬  c                   @   r«  )Ú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é  rE   )gð‘(fÎï¿g^A�È.§¿g*ãB’¡¹?)gñ:Ñdµ¯¨?gÖ‡2uóï¿gi�}ÕÂ›?)gR#xl™F¹?g‚�^`˜D ?gž×ÑÓï?r™   r®   )r7   r‡   rš   r   r›   r½   r   r}  )rR   rX   r÷  r˜   r>   r>   r?   Útest_reproducibilityŒ  s   

þ
z*TestSpecialOrthoGroup.test_reproducibilityc                 C   ó<   t ttjd ƒ t ttjdƒ t ttjdƒ t ttjdƒ d S ©Nrp  r	   râ   )rÝ   rJ   r   r›   ©rR   r>   r>   r?   Útest_invalid_dim˜  ó   z&TestSpecialOrthoGroup.test_invalid_dimc                 C   s4   d}t |ƒ}|jdd�}t j|dd�}t||ƒ d S )Nrc   rà   r®   )r   r›   r   )rR   rÌ   rÛ  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   ó$   g | ]}t d ƒD ]}t |¡‘qqS r®  )r÷   r   r›   ©Ú.0rÌ   r+  r>   r>   r?   Ú
<listcomp>¨  ó    þþz<TestSpecialOrthoGroup.test_det_and_ortho.<locals>.<listcomp>rD   rŸ  c                 S   ó   g | ]}t j |¡‘qS r>   ©r7   r±   r  ©rÕ  rX   r>   r>   r?   rÖ  ­  ó    rº   é   ç‚vIhÂ%<=r&  r   )r÷   r   r   r7   rø   rŽ   rM   r9   )rR   r9  ÚdetsrX   r>   r>   r?   Útest_det_and_ortho§  s   ÿÿÿz(TestSpecialOrthoGroup.test_det_and_orthoc                    óx   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 )Nr`   rð  çš™™™™™©?rË  r{   ©r6  r„  )r	   rb   r�  c                    ó.   i | ]\‰‰ ˆˆ ft ‡ ‡fd d„ˆD ƒƒ“qS )c                    ó   g | ]}|ˆ ˆ  ‘qS r>   r>   rÚ  ©ÚecÚerr>   r?   rÖ  Ë  rÛ  z>TestSpecialOrthoGroup.test_haar.<locals>.<dictcomp>.<listcomp>©Úsorted©rÕ  ©r9  rå  r?   Ú
<dictcomp>Ë  ó   . z3TestSpecialOrthoGroup.test_haar.<locals>.<dictcomp>c                    ó&   g | ]}ˆ D ]
}||kr||f‘qqS r>   r>   ©rÕ  Úe0Úe1©Úelsr>   r?   rÖ  Ì  ó   & z3TestSpecialOrthoGroup.test_haar.<locals>.<listcomp>c                    ó&   g | ]\}}t ˆ | ˆ | ƒd  ‘qS r‚  ©r   ©rÕ  Úp0Úp1©Úprojr>   r?   rÖ  Í  rô  )r7   r‡   rš   r   r›   r   r�   ©rR   rÌ   r¸  Úks_probÚpairsÚks_testsr>   ©ró  rû  r9  r?   Ú	test_haarµ  ó   
zTestSpecialOrthoGroup.test_haarN)rÀ   rÁ   rÂ   rÌ  rÐ  rÒ  rß  r  r>   r>   r>   r?   rÊ  ‹  s    	rÊ  c                   @   s^   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Z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Ë  rE   r®   rd   )gÝÓÕ‹mØ?gÓ hÀ"·¿gE�¹‡„oí?)g~7Ý²Cüì?gž’>­Ä¿g0JÐ_èÙ¿)gÝ±Ø&�Ç¿gü ¤6qrï¿g`Xþ|[°”¿)
r7   r‡   rš   r   r›   r   r±   r  r½   r   )rR   rš   rX   r§   r÷  r>   r>   r?   rÌ  Ò  s   

þ
z#TestOrthoGroup.test_reproducibilityc                 C   rÍ  rÎ  )rÝ   rJ   r   r›   rÏ  r>   r>   r?   rÐ  ß  rÑ  zTestOrthoGroup.test_invalid_dimc                 C   óV   d}t |ƒ}t |dd�}|jdd�}t j|dd�}|jdd�}t||ƒ t||ƒ d S )Nrc   rà   r™   r®   r	   r{   )r   r›   r   ©rR   rÌ   rÛ  Úfrozen_seedrÜ  rÝ  Úrvs3r>   r>   r?   rÒ  å  ó   
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 ¡ƒ q(q$d S )	Nc                    s"   g | ]‰ ‡ fd d„t dƒD ƒ‘qS )c                    s   g | ]}t  ˆ ¡‘qS r>   )r   r›   ©rÕ  r+  ©rÌ   r>   r?   rÖ  ò  s    ÿú@TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>.<listcomp>r  )r÷   rê  r>   r
  r?   rÖ  ò  s
    
þ
ÿz5TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>rD   rŸ  c                 S   s   g | ]	}d d„ |D ƒ‘qS )c                 S   rØ  r>   rÙ  rÚ  r>   r>   r?   rÖ  ÷  rÛ  r  r>   )rÕ  Úxxr>   r>   r?   rÖ  ÷  ó    rÝ  r&  r   )r÷   r7   r½   r   ÚfabsrL   r9   r   rø   rŽ   rM   )rR   r9  rÞ  r  rX   r>   r>   r?   rß  ñ  s   þÿÿÿz!TestOrthoGroup.test_det_and_orthorÌ   )rD   r`   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 r<|
k s?J ‚ J ‚d S )	Nl   ø<`L«‰r r
  rw  r—   r   gffffffî?)Úconfidence_levelr1  )r7   r‡   rˆ   r   r›   r¼   r±   r  rŒ   r�   r,   Ú	binomtestÚproportion_ci)rR   rÌ   r‘   r¾   r›   rÞ  rþ   r³   r:   ÚlowÚhighr>   r>   r?   Útest_det_distribution_gh18272   s   
 z,TestOrthoGroup.test_det_distribution_gh18272c                    rà  )Nr`   rð  rá  i  r{   râ  c                    rã  )c                    rä  r>   r>   rÚ  rå  r>   r?   rÖ  #  rÛ  z7TestOrthoGroup.test_haar.<locals>.<dictcomp>.<listcomp>rè  rê  rë  rå  r?   rì  #  rí  z,TestOrthoGroup.test_haar.<locals>.<dictcomp>c                    rî  r>   r>   rï  rò  r>   r?   rÖ  $  rô  z,TestOrthoGroup.test_haar.<locals>.<listcomp>c                    rõ  r‚  rö  r÷  rú  r>   r?   rÖ  %  rô  )r7   r‡   rš   r   r›   r   r�   rü  r>   r   r?   r    r  zTestOrthoGroup.test_haarc                    sh   t j d¡ dd„ }t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 ©Nr{   )r7   r±   rÓ   r‡   rË   rø   )rÌ   rÕ   Ú_srÏ   r>   r>   r?   Úrandom_ortho-  s    z<TestOrthoGroup.test_pairwise_distances.<locals>.random_orthorD   ra   rð  re  c                    s<   t  ‡‡ fdd„t|ƒD ƒ¡}|t jj| ||jd�7 }|S )Nc                    s*   g | ]}t  ˆˆ d �ˆˆ d � d ¡‘qS )r
  rD   )r7   rŒ   )rÕ  rÎ   )rÌ   r›   r>   r?   rÖ  3  s    ÿÿz\TestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statistics.<locals>.<listcomp>r{   )r7   r½   r÷   r‡   r   r9   )r›   rt  Úepsr,   r
  )r›   r?   Úgenerate_test_statistics2  s
   þzHTestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statisticsrá  )rð  re  )
r7   r‡   rš   r÷   r¼   r,   r   r›   r   r   )rR   r  r  r÷  r-  Ú_Dry  r>   r
  r?   Útest_pairwise_distances(  s   	ñz&TestOrthoGroup.test_pairwise_distancesN)rÀ   rÁ   rÂ   rÌ  rÐ  rÒ  rß  rI   rÇ   rÈ   r  r  Úslowr  r>   r>   r>   r?   r  Ñ  s    
r  c                   @   r«  )Ú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Ë  ©r1  r%  r/  rá   r®   )rº   ç¼Ñ“2©Ç¿ç–AµÁ‰è»?çý¢ý…Í¿)r  rº   ç 4Ô($™Í?çR}ç%èÔ?)r   r"  rº   çqTn¢–æÆ¿)r!  r#  r$  rº   )r7   r‡   rš   r   r›   r½   r   )rR   r{  rX   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	   rD   rE   rb   g      à¿)r	   rD   r”   )rÝ   rJ   r   r›   rÏ  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 )Nr  rË  r™   r®   )r   r›   r   )rR   r{  rÛ  r  rÜ  rÝ  r  r>   r>   r?   rÒ  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� qM|D ]
}	t|	|	jdd� q[d S )Nc                 S   s   | | t |ƒ S r6   )rŒ   )r+  r`  r>   r>   r?   r   m  s   z3TestRandomCorrelation.test_definition.<locals>.normr|  c                    s    g | ]}ˆ |t jj|d �ƒ‘qS )r{   )r7   r‡   r   r	  ©r   r>   r?   rÖ  r  s     z9TestRandomCorrelation.test_definition.<locals>.<listcomp>rD   ra   )rb   r   r   r   c                 S   s   g | ]	}d gt |ƒ ‘qS )rº   )r�   ©rÕ  r`  r>   r>   r?   rÖ  u  r  c                 S   ó   g | ]}t  |¡‘qS r>   )r   r›   r(  r>   r>   r?   rÖ  v  ó    c                 S   s   g | ]}t  t j |¡¡‘qS r>   )r7   r  r±   r  rÚ  r>   r>   r?   rÖ  |  s    c                 S   r)  r>   )r7   Úprodr(  r>   r>   r?   rÖ  }  r*  rÝ  r:  c                 S   r)  r>   )r7   rl   rÚ  r>   r>   r?   rÖ  �  r*  r&  )r7   r‡   rš   r÷   r4  r   ÚziprŽ   )
rR   r{  rL   r9  rÞ  Ú
dets_knownÚdiagsr…  r†  rX   r>   r'  r?   Útest_definitione  s   ÿz%TestRandomCorrelation.test_definitionc                 C   sz  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��W 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€w   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)Úoverrd   gœu ˆ<ä7~r0  r  rD   r6  gMùk   @)r7   r½   r  r   Ú_to_corrr   ÚerrstateÚ	nextafterÚcopyrŽ   rø   )rR   r¿  ÚgÚm0r>   r>   r?   Útest_to_corr‰  s$   
"÷z"TestRandomCorrelation.test_to_corrN)rÀ   rÁ   rÂ   rÌ  r&  rÒ  r/  r8  r>   r>   r>   r?   r  C  s    	$r  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	   rE   r|   ©Nr	   r`   )r`   rb   c           
      C   sv   t j d¡}t||d�}| |¡}t  |¡t  |¡}}|j|||d�j}|j|ks,J ‚t j	j
|dd�}	t|	dƒ d S )Nì   Sid)_i4 r™   r{   rd   r€   rº   )r7   r‡   rˆ   r&   r›   r¯   rM   r   r9   r±   r   r   )
rR   rÌ   r|   r‘   Úuniform_direction_distr¸  r¢   r¶   Úexpected_shapeÚnormsr>   r>   r?   rø  «  s   
z!TestUniformDirection.test_samples)Nr   rp  râ   c                 C   sB   d}t jt|d�� t |¡ W d   ƒ d S 1 sw   Y  d S )NzMDimension of vector must be specified, and must be an integer greater than 0.rB   )rI   r   rJ   r&   r›   )rR   rÌ   rS   r>   r>   r?   rÐ  ¸  s   "ÿz%TestUniformDirection.test_invalid_dimc                 C   sR   d}t |ƒ}t |dd�}|jdd�}t j|dd�}| ¡ }t||ƒ t||ƒ d S )Nr`   rË  r™   r®   )r&   r›   r   r  r>   r>   r?   Útest_frozen_distribution¿  s   
z-TestUniformDirection.test_frozen_distribution)rD   r`   ro  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™   rD   r{   r   rx  rf  é'  rá  )r7   r‡   rˆ   r&   r›   r±   r   r   Úarctan2rz  r   r   r©   Úpvalue)rR   rÌ   r‘   Úspherical_distÚv1Úv2r¸  Ús1Ús2ÚanglesÚuniform_distÚkstest_resultr>   r>   r?   Útest_uniformË  s   
z!TestUniformDirection.test_uniformN)
rÀ   rÁ   rÂ   rI   rÇ   rÈ   rø  rÐ  r?  rK  r>   r>   r>   r?   r9  ª  s    
r9  c                   @   r«  )Ú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Ë  rE   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Õ'Ó?)r7   r‡   rš   r   r›   r½   r   )rR   rX   r§   r÷  r>   r>   r?   rÌ  ä  s   
þÿ
z%TestUnitaryGroup.test_reproducibilityc                 C   rÍ  rÎ  )rÝ   rJ   r   r›   rÏ  r>   r>   r?   rÐ  ò  rÑ  z!TestUnitaryGroup.test_invalid_dimc                 C   r  )Nrc   rË  r™   r®   r	   r{   )r   r›   r   r  r>   r>   r?   rÒ  ø  r  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   rÓ  r®  )r÷   r   r›   rÔ  r>   r>   r?   rÖ  	  r×  z3TestUnitaryGroup.test_unitarity.<locals>.<listcomp>rD   rŸ  r   r¢  rf  )r÷   r   r7   rø   ÚconjrŽ   rM   r9   )rR   r9  rX   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 )	Nr`   rð  rË  r{   c                 S   rØ  r>   )r¼   r±   ÚeigvalsrÚ  r>   r>   r?   rÖ  	  rÛ  z.TestUnitaryGroup.test_haar.<locals>.<listcomp>rD   rá  )r7   r‡   rš   r   r›   r3  rA  ÚimagÚrealr   Úravelr   rz  r©   r   rB  )rR   rÌ   r¸  r9  r{  rX   r:   r>   r>   r?   r  	  s    zTestUnitaryGroup.test_haarN)rÀ   rÁ   rÂ   rÌ  rÐ  rÒ  rN  r  r>   r>   r>   r?   rL  ã  s    	rL  c                   @   s4  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ejj 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	   rD   rb   rE   r`   r   )
ç|	ßŒ–�Œ?çv
®Å2R?rT  g0Ü÷$H?rU  rU  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î?)rd   r	   é2   )rº   r1  r  )r1  rº   r  )r  r  rº   ro  )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   )rR   rX   r8  r9   rO  Úansr¾   Úvalr>   r>   r?   Útest_pdf_correctnessh	  s   
z&TestMultivariateT.test_pdf_correctnessc           	      C   s8   t |||dd�}| |¡}| |¡}tt |¡|ƒ d S rW  )r"   rŸ   r    r   r7   rè   )	rR   rX   r8  r9   rO  rX  r¾   rt  ru  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ƒ  rc   rb   r	   éýÿÿÿrƒ  r   r\  rd   rE   r	   ©rO  )r"   rŸ   r#   r   )rR   rX   rY  rX  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sJ ‚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	   é † ©rO  rš   r{   rg   rE   r  rd   é*   )r"   r›   r$   r  )rR   Ú	P_VAL_MINr¾   r¸  rÎ   ry  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	   rc   r`  r]  rD   )r"   r7   rü   rœ   r   rŸ   Ú
call_countr    )rR   Ú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  |¡s#J ‚t|||ƒ |¡}t  |¡s3J ‚d}t j ||f¡}t|||ƒ |¡}|j|fksNJ ‚t|||ƒ |¡}|j|fks_J ‚tt  d¡t  d¡dƒ 	¡ }t  |¡stJ ‚d}tt  d¡t  d¡dƒj	|d�}|j|fksŽJ ‚d S )Nrb   ç      @rc   r	   r{   )
r7   r¯   rM   r"   rŸ   Úisscalarr    r‡   r9   r›   )	rR   rÌ   r8  r9   rO  rX   r:   Ú	n_samplesr|   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sJ ‚d S )Nr   r	   ©r"   r   r8  r9   rO  )rR   r¾   r>   r>   r?   Útest_default_arguments·	  s   z(TestMultivariateT.test_default_arguments)NNNr   r	   r	   )NNrc   r   r	   rc   Nrc   z*loc, shape, df, loc_ans, shape_ans, df_ansc                 C   s8   t |||d�}t|j|ƒ t|j|ƒ |j|ksJ ‚d S )N©r8  r9   rO  rk  ©rR   r8  r9   rO  Úloc_ansÚ	shape_ansÚdf_ansr¾   r>   r>   r?   Útest_default_argsÈ	  s   z#TestMultivariateT.test_default_argsrd   c                 C   s4   t |||ƒ}t|j|ƒ t|j|ƒ t|j|ƒ d S r6   rk  rn  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	   )r8  rD   rE   )r8  r9   rd   rm  r   )rÝ   rJ   r"   Údictr7   r¯   rM   )rR   r8  r9   rO  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 )Nrb   rE   r{   rD   r`  r  )r7   r‡   r}  r   rM   r"   r›   r   )rR   r‘   r8  r9   r¥   Údist2Úsamples1Ú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)r8  r9   rO  rV   )rt  rÝ   r7   r±   r_  r"   )rR   r<   r>   r>   r?   Útest_allow_singular
  s    z%TestMultivariateT.test_allow_singularr|   )r  rE   )r`   ra   rb   rE   rÌ   )rD   rE   rb   r`   rO  rº   r  c                 C   s<   t t |¡t |¡|ƒ}|j|d�}|j||f ksJ ‚d S r  )r"   r7   r¯   rM   r›   r9   )rR   r|   rÌ   rO  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 )
NrE   r  r~  re   r•  r–  r—  r‚  r   r˜  )rR   r¢   r¶   rO  r†  r…  r™  r©   r>   r>   r?   rš  
  s   

z TestMultivariateT.test_cdf_signs)r	   rD   r`   c                 C   s   |   |¡ d S r6   ©Úcdf_against_mvn_test©rR   rÌ   r>   r>   r?   Ú$test_cdf_against_multivariate_normal
  s   z6TestMultivariateT.test_cdf_against_multivariate_normal)rE   ra   rƒ  c                 C   s   |   dd¡ d S )NrE   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 rE   r  rg   r	   r{   rd   rD   r@  T)rO  rƒ  rV   r˜   )rV   rƒ  çü©ñÒMb@?rf  )r7   r‡   rˆ   r   rÑ   ÚsignrË   r,   r"   r©   r   r   )rR   rÌ   r~   r‘   r³   rF  r¶   r¢   r…  r†  r:   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¡sPJ ‚d S )Nr€  rD   r   r  )r|   r3  rE   )rƒ  r˜   r�  rf  r%  )r7   r‡   rˆ   rË   Úsqrtr,   r"   r©   rü   Útr   r   r  rä   )	rR   r‘   r¶   r¢   rX   rO  r:   r;   Ú	incorrectr>   r>   r?   Útest_cdf_against_univariate_t7
  s   ÿ z/TestMultivariateT.test_cdf_against_univariate_t)rD   rE   r`   r  rš   )ì   no l   øm±, l   �sO l   €�U iOfYl    Ož_ r~   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�� td|
|tj| |	| |ƒd }W d   ƒ n1 sew   Y  t||ddd� tjj	|	|||
||dd�}tj
d
d�� td|
||| |	| |ƒd }W d   ƒ n1 sŸw   Y  t||ddd� d S )Nr‡  z4Agreement with qsimvtv is not great in singular caser  rg   rD   r{   r`   T)r˜   rV   r0  )Úinvalidr·  r   g-Cëâ6*?r%  ©r;  r'  )rƒ  r˜   rV   r‘  )rI   rƒ   r7   r‡   rˆ   r   rÑ   r,   r"   r©   r3  r4   rü   r   )rR   rÌ   rš   r~   r‘   rF  r¶   r¢   r…  r†  rO  r:   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 )NrE   l   	!†y‚ r  rd   r	   r{   T)r~   r`   )r˜   rƒ  c                    s   t j | jˆˆ ˆ¡S r6   )r,   r"   rŸ   rŽ   rW   ©r¶   rO  r¢   r>   r?   Ú	integrandr
  s   zITestMultivariateT.test_cdf_against_generic_integrators.<locals>.integrand)rc  rš   )Úqrngr%  r&  c                     s   t j | d d d… ˆˆ ˆ¡S )Nrd   )r,   r"   rŸ   )Úzyxr‹  r>   r?   rŒ  x
  s   r   rD   )r7   r‡   rˆ   r   rÑ   r,   r"   r©   r/   ÚqmcÚHaltonr   Úintegralr1   )	rR   rÌ   r‘   rF  r…  r†  r:   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ÿ?©r9   rO  re   r®   g¡ø1æ®%Ð?r%  r&  )r7   r‡   rˆ   r½   r,   r"   r©   r   )rR   r‘   r¶   rO  r¾   r:   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 rE   r{   rš   r˜   )	r7   r‡   rˆ   r   rM   r,   r"   r   r©   )rR   rš   r‘   r8  rX   r9   rO  r<   Ú
rng_frozenÚrng_unfrozenr¾   r>   r>   r?   rH  �
  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 )Nrb   r�  r€  r{   r`   r®   c                    s"   t dˆˆ tj |  | ˆ ˆƒd S )Nr@  r   )r4   r7   rü   rW   ©r¶   rO  r¢   r‘   r>   r?   Ú_cdf_1dª
  s   "z2TestMultivariateT.test_vectorized.<locals>._cdf_1drd   r‘  r%  r‰  )	r7   r‡   rˆ   rŽ   r,   r"   r©   Úapply_along_axisr   )rR   rÌ   r³   rr   rX   r:   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	   r1  )r`  )r9   r   r®   g-Cëâ6
?r&  )
r7   r‡   rˆ   r¼   r±   Útoeplitzr,   r"   r©   r   )rR   rÌ   r‘   rr   r:   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 )NrE   r–  )r7   rM   rü   r,   r"   r¡   r   )rR   r¶   rO  Úmvt_entropyÚ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   )rR   rO  r   Ú	t_entropyr>   r>   r?   Útest_entropy_1d¿
  s   z!TestMultivariateT.test_entropy_1dzdf, cov, ref, tolr  gÔøË}’M@rx  r  r1  gŒNfh@r·  c                 C   s.   t  d¡}t |||¡}t| ¡ ||d� d S )NrI  r&  )r7   r¯   r,   r"   r   r¡   )rR   rO  r¶   r;   Útolr8  Úmvtr>   r>   r?   Ú%test_entropy_vs_numerical_integrationÓ
  s   
z7TestMultivariateT.test_entropy_vs_numerical_integrationzdf, dim, ref, tol))r  r	   gDdÿVWø?r¢  )r  r	   gU•“°Ýö?rÝ  )r[  r	   g÷Ž/+¼ö?rx  )ç@Œµx¯Dr	   çZ_2äø³ö?r¢  )ç}Ã”%­I²Tr	   r©  r¢  )r  r  gz©°g#.@r¢  )rð  r  gD¬ë:f,@rÝ  )r¨  r  ç1÷>÷`,@r¢  )rª  r  r«  r¢  )r  r  g8—d¹?‰b@r¢  )rð  r  gç-YÒº¿a@rx  )r¨  r  çZGrš¼a@r¢  )rª  r  r¬  r¢  c                 C   s*   t jt |¡|d�}t| ¡ ||d� d S )Nr–  r&  )r,   r"   r7   rM   r   r¡   )rR   rO  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^  r¢  r&  iý  i   rN  )r7   r½   rŽ   r,   r"   r¡   r   r   )
rR   Ú_Ar¶   rO  Úmul_t_entropyÚmul_norm_entropyÚdf1Údf2Ú	_entropy1Ú	_entropy2r>   r>   r?   Útest_entropy_with_covariance  s"   û
z.TestMultivariateT.test_entropy_with_covariance©F),rÀ   rÁ   rÂ   Ú	PDF_TESTSrI   rÇ   rÈ   rZ  r[  r^  rc  r5   rf  rj  rl  ÚDEFAULT_ARGS_TESTSrr  r7   r½   ÚARGS_SHAPES_TESTSrs  ru  rÌ  ry  rü   rz  rš  r~  r  r|  r†  rŠ  r  r’  r—  rH  r�  rŸ  r¢  r¤  rM   r§  r­  r¶  r>   r>   r>   r?   rS  	  sÖ    
öþè(ûýìÛB


 **""..øÿ
$ýÿ







ÿÿÿ
þ
rS  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, expectedrE   rb   r`   r  rc   g©¥¹Âêñ¿r   r\  éûÿÿÿr	   rD   ri   iúÿÿÿiöÿÿÿr¢  rŸ  rd   iùÿÿÿc                 C   ó    t  |||¡}t||dd� d S )Nç�íµ ÷Æ°>r&  )r   ri  r   ©rR   rX   r¿  r³   r÷  Úvalsr>   r>   r?   rn  "  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 )NrE   r	   r  r`   rb   )rX   r¿  r³   é   )rþ   rÔ   r³   rt  r·  r&  rc   é   )r   rr  r!   r   rs  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 )NrE   r`   rb   ©r¿  r³   rð  r|  r—   r   r9  r&  ©r   r›   r   r¢   ©rR   r·   r›   r>   r>   r?   rz  K  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 )NrE   r`   r  rb   rƒ  rÄ  ©rð  rD   r|  r—   r   r9  r&  rÅ  rÆ  r>   r>   r?   Útest_rvs_broadcastingR  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›   r7   r8   r5  r   )rR   r¿  r³   r:   Úres_exr>   r>   r?   Útest_rvs_gh16171W  s
   
z*TestMultivariateHypergeom.test_rvs_gh16171g z÷lÂâÔ?ro  rƒ  gQ°µ­Ù?gEçÙ³¤|?gé�
¸çyÞ?r  r…  )r`   ra   rc   ra   g‘z²p†?c                 C   r½  ©NrM  r&  ©r   rr  r   r¿  r>   r>   r?   rŠ  b  s   z"TestMultivariateHypergeom.test_pmfrÁ  gõ­ æÎÕ?rº   r»   c                 C   r½  rË  rÌ  r¿  r>   r>   r?   r‹  v  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)rE   rc   r  rŸ  rÄ  )g«×Âf_�ä?çÁ&BUúÐ¿ç–ˆCx¬@Ø¿)rÍ  g�gsƒ>dò?çZ¤ásKì¿)rÎ  rÏ  gö¿3å5ô?r·  r&  ©r   r¶   r   )rR   r�  rm  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 )Nrc   rƒ  r  rÁ  ro  rŸ  rÄ  gÍÌÌÌÌÌð?gÍÌÌÌÌÌð¿gö(\�Âõø?gö(\�Âõø¿r·  r&  rb   r`   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  r`   rb   rÄ  rÁ  ©rÔ   r³   rt  r·  r&  )r   rþ  r!   r   )rR   Ú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  r`   rb   ro  rÄ  r   r·  r&  r	   rp  gÌ�3—eYæ?g�I›ª{¤õ?r»   )r   rþ  r   )rR   rÒ  rÓ  Úvar2Úvar3Úvar4Úvar5Ú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  r`   rb   rÄ  rÁ  rÑ  r   r·  r&  rŸ  ro  g      @r  )r   r¢   r!   r   ©rR   Úmean0rœ  rl  Ú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 )NrE   r`   r  rb   ro  rÄ  rá   râ   gUUUUUU@gUUUUUU@r·  r&  )r   r¢   r   )rR   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 )Nre   r   rÄ  ©r»   r»   r»   ©r	   r   r   rD   r•  )rº   r»   rº   ç—ÔFFõg<r&  r  ©r   )
r   r¢   r   r7   rY  r   r½   Úintr   r9   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 )Nre   r   rÄ  rÞ  g¼‰Ø—²Òœ<r&  rß  rD   r•  rà  r  rá  )
r   rþ  r   r   r7   rY  r½   râ  r   r9   )rR   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&  re   r   r  r6  )r   r¶   r   r   r7   r½   râ  r†  rñ  r   r9   )rR   Ú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Ÿ  )rc   rƒ  r¢  é   r   r¡  r£  r¤  r¥  r  )r7   r‡   rš   r8   râ  r   r   rr  ri  rþ  r¶   )rR   r³   r¿  rX   Ú
mhg_frozenr>   r>   r?   rH  é  s    ÿ

ÿ
ÿz%TestMultivariateHypergeom.test_frozenc                 C   s�   t ttjdddƒ t ttjddgdƒ t ttjddgdgdƒ t ttjddgddgdƒ t ttjddgddgdƒ t ttjddgddgdƒ d S )	Nr`   r  rb   g      @rg  rÁ  g      %@g      /@)rÝ   rJ   r   rr  Ú	TypeErrorrÏ  r>   r>   r?   Útest_invalid_paramsù  s   ÿÿÿz-TestMultivariateHypergeom.test_invalid_paramsN)rÀ   rÁ   rÂ   rI   rÇ   rÈ   r7   rü   rY  rn  rÃ  rz  rÈ  rÊ  r½   râ  rŠ  r‹  rŽ  r”  rÔ  rÚ  r�  rž  rã  rä  ræ  rH  rê  r>   r>   r>   r?   r»  !  sx    ÿëþ
þ
þõþ
"&&üþ
	
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)r7   r‡   rˆ   rÏ  r>   r>   r?   Úget_rng  rZ   zTestRandomTable.get_rngc                 C   s6  d}t jt|d�� tddggddgƒ W d   ƒ n1 sw   Y  d}t jt|d�� tddgddggƒ W d   ƒ n1 sAw   Y  d}t jt|d�� tddgddgƒ W d   ƒ n1 scw   Y  d}t jt|d�� tddgdd	gƒ W d   ƒ n1 s…w   Y  d
}t jt|d�� tddgddgƒ W d   ƒ n1 s§w   Y  d}t jt|d�� tddgg d¢ƒ W d   ƒ n1 sÉw   Y  d}t jt|d�� tddgg d¢ƒ W d   ƒ n1 sëw   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-dimensionalrB   r	   rD   z`col` must be one-dimensionalz*each element of `row` must be non-negativerd   z*each element of `col` must be non-negativerg   z'sums over `row` and `col` must be equalr   z(each element of `row` must be an integerçÍÌÌÌÌÌ @)r	   r	   rD   z(each element of `col` must be an integer)r  r  r	   rE   ©rD   r	   r	   )rI   r   rJ   r%   Ú_process_parametersr   r7   rŒ   )rR   rS   ÚrowÚcolr  r`  r³   r>   r>   r?   Útest_process_parameters	  sD   ÿÿÿÿÿÿÿ

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	   rE   rî  ©Úmethodr˜   )r7   r½   r%   r›   r   )rR   r3  rö  rð  rñ  Úctr÷  Úgotr>   r>   r?   Útest_process_rvs_method_on_None-  s   z/TestRandomTable.test_process_rvs_method_on_Nonec                 C   sX   ddg}g d¢}d}t jt|d�� tj||dd� W d   ƒ d S 1 s%w   Y  d S )Nr	   rE   rî  z$'foo' not recognized, must be one ofrB   Úfoo©rö  )rI   r   rJ   r%   r›   )rR   rð  rñ  rS   r>   r>   r?   Ú$test_process_rvs_method_bad_argument9  s   "ÿz4TestRandomTable.test_process_rvs_method_bad_argumentrÛ  )TFrè   c                    sJ  |   ¡ }ddg‰g d¢‰ tjˆˆ dd|d�}|rtˆˆ ƒnt}t||r%dndƒ‰|s4ˆ‰‡ ‡‡fd	d
„‰|r<‡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 ]!}t|	jd ƒD ]}|	||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÷w   Y  d}tjt|d�� |dggƒ W d   ƒ n	1 �sw   Y  d}tjt|d�� |tjggƒ W d   ƒ n	1 �s8w   Y  d}tjt|d�� |dggƒ W d   ƒ n	1 �sXw   Y  d }tjt|d�� |g d!¢gƒ W d   ƒ n	1 �syw   Y  d"}tjt|d�� |ddgd#d$ggƒ W d   ƒ d S 1 �sžw   Y  d S )%NrD   ra   ©r	   rE   rb   rð  ró  ©r|   rö  r˜   ri  rr  c                    s   ˆ| ˆˆ ƒS r6   r>   rW   )rñ  Úoriginal_methodrð  r>   r?   rö  S  rZ   z/TestRandomTable.test_pmf_logpmf.<locals>.methodc                    s   t  ˆ | ƒ¡S r6   )r7   r  rW   rû  r>   r?   rY   U  s    z1TestRandomTable.test_pmf_logpmf.<locals>.<lambda>r   T©r�   Úreturn_countsr”   r&  )r  r  r	   )r   r	   r	   )rD   r	   rE   rd   r€   rÚ   )r	   rD   rD   rg   z$`x` must be at least two-dimensionalrB   z%`x` must contain only integral valuesr  z)`x` must contain only non-negative valuesz"shape of `x` must agree with `row`rH   z"shape of `x` must agree with `col`rE   rb   )rì  r%   r›   rm   r7   Úuniquer   r�   rÅ   r   rñ  r9   r÷   rŒ   rI   r   rJ   rY  )rR   rÛ  rè   r‘   r›   Úobjrr  Ú
unique_rvsÚcountsry  Úp2Úrvs_ndr+  r,  ÚpijÚrvijÚqijrX   rS   r>   )rñ  rö  rÿ  rð  r?   Útest_pmf_logpmfB  sz   
ÿüÿÿÿÿÿÿ$ÿ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 )NrD   ra   rý  rð  rþ  r   rá  rf  rd   r€   rÇ  rg   )rð  rE   )	rì  r%   r›   r¢   r   r7   rŒ   r   Úbroadcast_to)rR   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 )NrD   ra   rý  r@  ró  rþ  rô  r   r€   ç{®Gáz”?rf  )rì  r%   r›   r7   rþ  r   )rR   r‘   rð  rñ  rÜ  rÝ  r�  rm  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sJ ‚t j||d||  ¡ d�}|jdks-J ‚t||d	 ƒ t j||d	||  ¡ d�}|jd
ksGJ ‚t j||d||  ¡ d�}|jdksZJ ‚t j||d||  ¡ d�}|jdksmJ ‚t| ddd¡|dd� d}	tjt	|	d�� t j||d||  ¡ d� W d   ƒ n1 s™w   Y  tjt	|	d�� t j||t
j||  ¡ d� W d   ƒ d S 1 s¾w   Y  d S )NrD   ra   rý  rõ  r�  r	   rþ  rH   r   )r   rD   rE   r®  )r®  rD   rE   )rb   r`   )rb   r`   rD   rE   rE   r¢  r&  z/`size` must be a non-negative integer or `None`rB   rd   )r%   r›   rì  r9   r   r   rñ  rI   r   rJ   r7   rY  )
rR   rö  rð  rñ  r·   Úrv2Úrv3Úrv4Úrv5rS   r>   r>   r?   Útest_rvs_size¯  sF   
ÿÿÿÿÿÿÿÿ"ÿ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 )NrD   ra   rý  r_  rþ  r   Tr   r  r&  )r%   r›   rì  r7   r  rr  r   r�   )	rR   rö  rð  rñ  r÷  r›   r  r  ry  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 )Nr–  )r	   r   r   r   rð  rõ  )r   r   r   r   .©r%   r›   rì  r7   r¯   r�   r   ©rR   rö  rð  rñ  rc  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Ï   rB  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sBJ ‚t |¡|ksKJ ‚d S )Nr   r	   rE   r  rî  Ú	rvs_rcont)Úscipy.stats._rcontr,   Ú_rcontr7   r½   Úint64rm   rŒ   rì  r9   r�   )rR   rÏ   r  rð  rñ  r›   Ú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 )NrD   ra   rý  r™   )r%   rì  r›   r¢   r   rr  ri  )rR   rð  rñ  rc  rr  r÷  r>   r>   r?   rH    s   zTestRandomTable.test_frozenc                 C   sV   ddg}g d¢}t |||  ¡ d�}t j||d||  ¡ d�}|jd|d�}t||ƒ d S )NrD   ra   rý  r™   r  rþ  )r|   rö  )r%   rì  r›   r   )rR   rö  rð  rñ  rc  r÷  rø  r>   r>   r?   Útest_rvs_frozen$  s   ÿzTestRandomTable.test_rvs_frozenN)rÀ   rÁ   rÂ   rì  rò  rI   rÇ   rÈ   rù  rü  r  r  r  r  r  r  r  r   rH  r!  r>   r>   r>   r?   rë    s:    $ÿ

	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à   r|   ro  )r˜   r›   ÚpickleÚdumpsÚloadsr   )Údistfnr<   r  rÖ   Úr0Ú	unpickledÚr1r>   r>   r?   Úcheck_pickling0  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||ƒ q3d S )NrE   r1  rÙ   rP  r>   rº   r  r`   r&  rI  )r7   rM   r   r   r½   r   r   r   r   r   r3   r)  )r3  Údistsr%  r<   r>   r>   r?   Útest_random_state_propertyD  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Ì   )rD   rE   rb   ra   r|   r:  c                 C   s�   t j d¡}t  |fdt  |¡ ¡}t|d|d�}| |¡}t  |¡t  |¡}}|j	|||d�j
}	|j
|	ks9J ‚t jj|dd�}
t|
dƒ d S )Nr;  r	   r™   r{   rd   r€   rº   )r7   r‡   rˆ   rP  rƒ  r'   r›   r¯   rM   r   r9   r±   r   r   )rR   rÌ   r|   r‘   rÞ   Úvmf_distr¸  r¢   r¶   r=  r>  r>   r>   r?   rø  W  s   
z TestVonMises_Fisher.test_samplesr`   ro  Ú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  )r7   r‡   rˆ   rP  rƒ  r'   r›   )rR   rÌ   r.  r‘   rÞ   r-  r>   r>   r?   Ú test_sampling_high_concentratione  s   z4TestVonMises_Fisher.test_sampling_high_concentrationc                 C   óL   t  d¡}d}tjt|d�� t|dƒ W d   ƒ d S 1 sw   Y  d S )Nrp  z%'mu' must have one-dimensional shape.rB   r	   ©r7   rL   rI   r   rJ   r'   ©rR   rÞ   ra  r>   r>   r?   Útest_two_dimensional_mun  ó
   
"ÿz+TestVonMises_Fisher.test_two_dimensional_muc                 C   r0  )NrI  z%'mu' must be a unit vector of norm 1.rB   r	   r1  r2  r>   r>   r?   Útest_wrong_norm_mut  r4  z&TestVonMises_Fisher.test_wrong_norm_muc                 C   r0  )Nr‚  z$'mu' must have at least two entries.rB   r	   r1  r2  r>   r>   r?   Útest_one_entry_muz  r4  z%TestVonMises_Fisher.test_one_entry_murd   )r`   rE   c                 C   óF   d}t jt|d�� tddg|ƒ W d   ƒ d S 1 sw   Y  d S )Nz"'kappa' must be a positive scalar.rB   r	   r   ©rI   r   rJ   r'   ©rR   r.  ra  r>   r>   r?   Útest_kappa_validation€  s   "ÿz)TestVonMises_Fisher.test_kappa_validationr   r»   c                 C   r7  )NzŸFor 'kappa=0' the von Mises-Fisher distribution becomes the uniform distribution on the sphere surface. Consider using 'scipy.stats.uniform_direction' instead.rB   r	   r   r8  r9  r>   r>   r?   Útest_kappa_zero†  s   "ÿz#TestVonMises_Fisher.test_kappa_zerorö  c                 C   sV   t  g d¢¡}d}tjt|d�� ||ddgdƒ W d   ƒ d S 1 s$w   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.rB   r	   r   ©r7   r½   rI   r   rJ   ©rR   rö  rX   ra  r>   r>   r?   Útest_invalid_shapes_pdf_logpdf�  s
   "ÿz2TestVonMises_Fisher.test_invalid_shapes_pdf_logpdfc                 C   sV   t  ddg¡}d}tjt|d�� ||ddgdƒ W d   ƒ d S 1 s$w   Y  d S )Nr1  r»   ú8'x' must be unit vectors of norm 1 along last dimension.rB   r	   r   r=  r>  r>   r>   r?   Útest_unnormalized_inputš  s
   "ÿz+TestVonMises_Fisher.test_unnormalized_inputzx, mu, kappa, reference)rº   r»   r»   r‘  g÷0ñµ_´?r<  )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   ó"   t ||ƒ |¡}t||dd� d S )NrÝ  r&  )r'   rŸ   r   )rR   rX   rÞ   r.  Ú	referencerŸ   r>   r>   r?   Útest_pdf_accuracy®  ó   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   rB  )Nrx  r&  )r'   r    r   )rR   rX   rÞ   r.  rC  r    r>   r>   r?   Útest_logpdf_accuracyØ  rE  z(TestVonMises_Fisher.test_logpdf_accuracyzdim, kappa, reference))rE   r‘  g®©·£‰?@)rE   r  g¡•p&ÕFü¿)r`   rw  gT†;Ó·&À)ro  r	   go›–ØZ@c                 C   s8   t  |fdt  |¡ ¡}t||ƒ ¡ }t||dd� d S )Nr	   g›+¡†›„=r&  )r7   rP  rƒ  r'   r¡   r   )rR   rÌ   r.  rC  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s+J ‚t|d ƒD ]#}t|d ƒD ]}	||||	d d …f ||ƒ}
t	|
|||	f d	d
� q9q1d S )Nrp  r;  rE   r®   r®  r	   r`   r   r¢  r&  )
r7   r‡   rˆ   r&   r›   rP  rƒ  r9   r÷   r   )rR   rö  Ú	testshaper‘   rX   rÞ   r.  Ú
result_allr+  r,  Ú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®  )r8  r.  rD   r  r®   )r7   r‡   rˆ   r½   rA  r'   r)   r&   r›   r   r¡   rŸ   r    )	rR   r‘   rÞ   Úmu_angler.  ÚvmfÚvonmises_distÚvectorsrH  r>   r>   r?   Útest_vs_vonmises_2d  s   
$z'TestVonMises_Fisher.test_vs_vonmises_2d)rD   rE   ra   zkappa, mu_tol, kappa_tol))r	   rá  rá  )r  r9  r9  )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&  )r7   rP  rƒ  r'   r‡   rˆ   r›   r�  Úarccosrø   r   )rR   rÌ   r.  Úmu_tolÚ	kappa_tolrÞ   r-  r‘   ri  r¸  Úmu_fitÚ	kappa_fitÚangular_errorr>   r>   r?   Útest_fit_accuracy,  s   
z%TestVonMises_Fisher.test_fit_accuracyc                 C   óL   t  d¡}d}tjt|d�� t |¡ W d   ƒ d S 1 sw   Y  d S )Nr®  z'x' must be two dimensional.rB   )r7   r¯   rI   r   rJ   r'   r�  ©rR   rX   ra  r>   r>   r?   Ú#test_fit_error_one_dimensional_data=  r4  z7TestVonMises_Fisher.test_fit_error_one_dimensional_datac                 C   rX  )Nr�  r@  rB   )r7   rL   rI   r   rJ   r'   r�  rY  r>   r>   r?   Ú test_fit_error_unnormalized_dataC  r4  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	   r`   rË  r™   r®   )r7   r½   r'   r›   r   )rR   rÞ   r.  rÛ  r  rÜ  rÝ  r  r>   r>   r?   r?  I  s   

z,TestVonMises_Fisher.test_frozen_distributionN)rÀ   rÁ   rÂ   rI   rÇ   rÈ   rø  r/  r3  r5  r6  r:  r;  r'   rŸ   r    r?  rA  r7   r½   rƒ  rD  rF  rG  r.  rO  rW  rZ  r[  r?  r>   r>   r>   r?   r,  V  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  rD   r{   r	   r®  rd   r€   )r7   r‡   rˆ   r   ÚintegersrŒ   )rR   r¿  r‘   r  rX   r³   r>   r>   r?   Ú
get_paramsX  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 )Nr]  r   r  r  rd   r€   )r7   r‡   rˆ   r   r^  rŒ   r(   r   ri  rr  r¢   rþ  r¶   )rR   r‘   r  rX   r³   rc  r>   r>   r?   rH  `  s   
z$TestDirichletMultinomial.test_frozenc                 C   sö   t  g d¢¡}t  |¡}t  g d¢¡}t |||¡}t |||¡}d}t||ƒ t|t  |¡ƒ |j|j  kr=dks@J ‚ J ‚t j	 
d¡}| ddd¡}| ddd¡}t j|d	d
�}t||ƒ |¡}t |||¡}d}t||ƒ t|t  |¡ƒ d S )NrH   ©rE   rb   r`   gp.¸U.¸µ?r>   r]  r   r  r  rd   r€   g+»©œTº<)r7   r½   rŒ   r(   rr  ri  r   rè   r9   r‡   rˆ   r   r^  )rR   rX   r³   r  r:   Úlogresr;   r‘   r>   r>   r?   Útest_pmf_logpmf_against_Rn  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¡sqJ ‚t 	t||ƒ |¡|  tj k¡s…J ‚d S )Nr	   r   r  r{   r1  rD   )
r_  r   r(   rr  ri  r7   rü   r‡   Úroundr  )rR   r‘   r¿  r  r³   rX   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 )Nra   r  r	   r   )
r7   r8   r(   r   rr  ri  rü   r¢   rþ  r¶   )rR   r³   r  rX   r¾   r>   r>   r?   Útest_dimensionality_one�  s   
z0TestDirichletMultinomial.test_dimensionality_oneÚmethod_namerr  ri  c                 C   sb   |   d¡\}}}}}tt||ƒ|ƒ}ttj|g|j¢R Ž |ƒ}||ƒ}	||jd ƒ}
t|	|
ƒ d S ©Nr  r   ©r_  rm   r(   r,   Ú	betabinomrŽ   r   ©rR   rf  r‘   r¿  r  r³   rX   rö  Ú
ref_methodr:   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 rg  rh  rj  r>   r>   r?   Útest_against_betabinom_moments·  s   z7TestDirichletMultinomial.test_against_betabinom_momentsc           
      C   s   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rZ|fks]J ‚ J ‚| ¡ }	|	j
||fksjJ ‚t|	t  |j¡dd� tt  |	¡| 	¡ ƒ t  tj |	¡d dk¡sŽJ ‚d S )Nr]  r`   r	   r  r{   r  r_  r   r€   rP  r&  r9  r  )r7   r‡   rˆ   r^  r(   r   r   r   r¢   rþ  r9   r¶   rŽ   r   rl   r  r¼   r±   r²   )
rR   r‘   rÌ   r³   r  r¾   r¿  ry  rX   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/w   Y  tt|d�� t g d¢||¡ W d   ƒ n1 sNw   Y  d}tt|d�� t |g d¢|¡ W d   ƒ n1 sow   Y  tt|d�� t |g d	¢|¡ W d   ƒ n1 sŽw   Y  d
}tt|d�� t ||d¡ W d   ƒ n1 s­w   Y  tt|d�� t ||d¡ W d   ƒ n1 sÊw   Y  t  g d¢¡}t  g d¢¡}d}tt|d�� t ||| ¡ ¡ W d   ƒ d S 1 súw   Y  d S )NrH   r`  z,`x` must contain only non-negative integers.rB   )r	   rd   rE   )r	   rí  rE   z*`alpha` must contain only positive values.)rE   r   rb   )rE   rd   rb   z`n` must be a positive integer.gÍÌÌÌÌŒH@r   )r	   rD   rE   rb   z&`x` and `alpha` must be broadcastable.)r7   r½   rŒ   rÝ   rJ   r(   ri  )rR   Úx0Ún0Úalpha0ÚtextrX   r  r>   r>   r?   rT   Ø  s<   
ÿÿÿÿÿÿ"ÿ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s<J ‚tt|ƒƒD ]2}tt|ƒƒD ])}tt|ƒƒD ] }||||f }	|||  ¡ ||  ¡ ||  ¡ ƒ}
t	|	|
ƒ qRqJqBd S )Nr`  rT  ©r`   r`   rc   ©ro  rƒ  r  ra   rc   ro  rH   )rD   rD   rE   )rD   r	   r	   rE   )rD   rE   rb   )
r7   r½   rñ  rm   r(   r9   r÷   r�   rž   r   )rR   rö  r  r³   rX   r:   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r1|jd	ks2J ‚	 tt|ƒƒD ]#}tt|ƒƒD ]}|||f }|||  ¡ ||  ¡ ƒ}	t||	ƒ q@q8d S )
Nr`  rT  rr  rs  ra   rc   ro  r¶   )rE   rb   rE   )	r7   r½   rm   r(   r9   r÷   r�   rž   r   )
rR   rf  r  r³   rö  r:   r,  rþ   rt  r;   r>   r>   r?   Útest_broadcasting_moments  s   "

ýÿz2TestDirichletMultinomial.test_broadcasting_momentsN)rÀ   rÁ   rÂ   Úclassmethodr_  rH  rb  rd  re  rI   rÇ   rÈ   rl  rm  rö  rT   ru  rv  r>   r>   r>   r?   r\  W  s"    





r\  c                   @   sv   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zej	j
ej	 d¡dd„ ƒƒZej	 dejejejejg¡dd„ ƒZdS )ÚTestNormalInverseGammac                    sÈ   t j d¡}| d¡\}}}}t ||||¡‰ tjd| |dt  || | ¡ d�}t  ddd¡}t‡ fd	d
„dt j	|fd�}| 
|¡}	t|j|	ƒ ˆ jd|d�}t |d |j¡\}
}|dksbJ ‚d S )Nì   �&( rb   rD   r	   r7  r¼  r`   r¢  c                    s   ˆ   || ¡S r6   ©rŸ   ©rG  rX   ©Únorm_inv_gammar>   r?   rY   !  ó    z8TestNormalInverseGamma.test_marginal_x.<locals>.<lambda>r   ©r<   r@  r—   r”   )r7   r‡   rˆ   r,   Únormal_inverse_gammar„  rƒ  r2  r-   rü   rŸ   r   r‘  r›   Úks_1sampr©   )rR   r‘   rÞ   Úlmbdar…  r†  r„  rX   r:   r;   rÎ   rB  r>   r|  r?   Útest_marginal_x  s   &
z&TestNormalInverseGamma.test_marginal_xc                    s´   t j d¡}| d¡\}}}}t ||||¡‰ tj||d�}t  ddd¡}t‡ fdd„t j t j|fd�}| 	|¡}	t
|j|	ƒ ˆ jd	|d
�}t |d |j¡\}
}|dksXJ ‚d S )Nry  rb   rb  r”   r  c                    s   ˆ   | |¡S r6   rz  )rX   rG  r|  r>   r?   rY   6  r~  z9TestNormalInverseGamma.test_marginal_s2.<locals>.<lambda>r  r@  r—   r	   )r7   r‡   rˆ   r,   r€  r   r2  r-   rü   rŸ   r   r‘  r›   r�  r©   )rR   r‘   rÞ   r‚  r…  r†  Ú	inv_gammarG  r:   r;   rÎ   rB  r>   r|  r?   Útest_marginal_s2*  s   ÿ
z'TestNormalInverseGamma.test_marginal_s2c           
      C   sx   t j d¡}| d¡d \}}}}|jdd�d \}}t ||||¡ ||¡}tj ||||||¡}	t|t  |	¡ƒ d S )Nry  )rb   r®  r  )rD   r®  r{   )	r7   r‡   rˆ   r,   r€  rŸ   r    r   r  )
rR   r‘   rÞ   r‚  r…  r†  rX   rG  r:   r;   r>   r>   r?   Útest_pdf_logpdf@  s   z&TestNormalInverseGamma.test_pdf_logpdfc           	      C   sž  t j d¡}| d¡\}}}}| d¡\}}t t j|||¡ ||¡}t|t jƒ t |d||¡ ||¡}t|t jƒ t ||d|¡ ||¡}t|t jƒ t |||d¡ ||¡}t|t jƒ t ||||¡ |d¡}t|dƒ t |dt jg||¡ |d¡}t|t jƒ t |d||¡ ¡ }t|t jt jfƒ t ||d|¡ 	¡ }t|t jt jfƒ t
jtdd�� t |||d¡ ¡  W d   ƒ d S 1 sÈw   Y  d S )Nry  rb   rD   rd   r   zDomain error in arguments...rB   )r7   r‡   rˆ   r,   r€  rY  rŸ   r   r¢   rþ  rI   r   rJ   r›   )	rR   r‘   rÞ   r‚  r…  r†  rX   rG  r:   r>   r>   r?   Útest_invalid_and_special_casesI  s,   
"ÿz5TestNormalInverseGamma.test_invalid_and_special_casesc                 C   sü  t j d¡}| d¡}| d¡d }| d¡}| d¡}| d¡}| d¡}t ||||¡}t  ||||||¡}	dd	„ |	D ƒ}
| ||¡}|j|	d
 jksOJ ‚t| 	¡ tjj|
Ž ƒ | 
||¡}|j|	d
 jksjJ ‚t| 	¡ tjj
|
Ž ƒ t  ||||¡}	dd	„ |	D ƒ}
| ¡ }|d
 j|	d
 jks”J ‚t|d
  	¡ |d  	¡ ftjj|
Ž ƒ | ¡ }|d
 j|	d
 jks·J ‚t|d
  	¡ |d  	¡ ftjj|
Ž ƒ d}t j d¡}|j||d�}t j d¡}d}tjj|
||dœŽ}t|d
  |¡|d  |¡f|ƒ d S )Nry  rD   )rE   r	   )rb   r	   r	   )r`   r	   r	   r	   )ra   r	   r	   r	   r	   )rc   r	   r	   r	   r	   r	   c                 S   r)  r>   ©r7   rR  ©rÕ  Úarrr>   r>   r?   rÖ  z  r*  z<TestNormalInverseGamma.test_broadcasting.<locals>.<listcomp>r   c                 S   r)  r>   rˆ  r‰  r>   r>   r?   rÖ  ˆ  r*  r	   )ra   r`   rb   rE   rD   l   ¬�M‹r—   )ra   éx   )r7   r‡   rˆ   r,   r€  Úbroadcast_arraysrŸ   r9   r   rR  r    r¢   rþ  r›   rñ  )rR   r‘   r†  r…  r‚  rÞ   rG  rX   r¾   ÚbroadcastedÚbroadcasted_raveledr:   r|   r9   r;   r>   r>   r?   r.  k  sR   





ÿ
ÿ
ÿ
ÿ
ÿ&z(TestNormalInverseGamma.test_broadcastingr  c                    s®   t j d¡}| d¡\}}}}|d7 }t ||||¡‰ ˆ  ¡ }t‡ fdd„t j t jdt jƒ}t|d |d dd� t‡ fd	d„t j t jdt jƒ}t|d
 |d dd� d S )Nry  rb   rD   c                    s   ˆ   || ¡| S r6   rz  r{  ©r¾   r>   r?   rY   ©  ó    z5TestNormalInverseGamma.test_moments.<locals>.<lambda>r   r¾  r&  c                    s   ˆ   || ¡|  S r6   rz  r{  r�  r>   r?   rY   ¬  r�  r	   )	r7   r‡   rˆ   r,   r€  r¢   r0   rü   r   )rR   r‘   rÞ   r‚  r…  r†  r:   r;   r>   r�  r?   rö  ž  s     z#TestNormalInverseGamma.test_momentsr  c                 C   s  t jdk r
t d¡ t j d¡}|jdddd� |¡\}}}}}}t  d|¡}	t	 
||||¡}
|
 ¡ d	 j|	ks:J ‚|
 ¡ d
 j|	ksEJ ‚|
 ¡ d	 j|	ksPJ ‚|
 ¡ d
 j|	ks[J ‚|
 ¡ d	 j|	ksfJ ‚|
 ¡ d
 j|	ksqJ ‚|
 ||¡j|	ks|J ‚|
 ||¡j|	ks‡J ‚d S )NÚ2z*Scalar dtypes only respected after NEP 50.ry  rE   r  ra   r{   rº   r   r	   )r7   Ú__version__rI   rƒ   r‡   rˆ   r   ÚastypeÚresult_typer,   r€  r›   r  r¢   rþ  r    rŸ   )rR   r  r‘   rX   rG  rÞ   r‚  r…  r†  Ú	dtype_outr¾   r>   r>   r?   Ú
test_dtype¯  s   

"z!TestNormalInverseGamma.test_dtypeN)rÀ   rÁ   rÂ   rƒ  r…  r†  r‡  r.  rI   rÇ   r  Ú	fail_slowrö  rÈ   r7   Úint32Úfloat16Úfloat32r†  r–  r>   r>   r>   r?   rx    s    	"3
rx  r·  )\Ú__doc__r"  Únumpy.testingr   r   r   r   r   r   rI   r   rÝ   Útest_continuous_basicr
   Únumpyr7   Úscipy.linalgr¼   Úscipy.stats._multivariater   r   r   Ú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,   Úscipy.integrater-   r.   r/   r0   r1   Úscipy.specialr2   Úcommon_testsr3   Ú	data._mvtr4   Úunittest.mockr5   r@   rA   rÑ   r×   rØ   rÆ  rù  r>  r?  rf  r¬  rÊ  r  r  r9  rL  rS  r»  rë  r)  r+  r,  r\  rx  r>   r>   r>   r?   Ú<module>   s~     x	 
a      L J l - %Frg9<     e  -   =