U
    »mœd‡· ã                   @   s&  d Z ddlZddlmZmZmZmZmZmZ ddl	Z	ddl	m
Z ddlmZ ddlZddlZddlZddlmZmZmZmZ ddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 dd	lm1Z1m2Z2 dd
l3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: dd„ Z;G dd„ dƒZ<dd„ Z=G dd„ dƒZ>G dd„ dƒZ?G dd„ dƒZ@dd„ ZAG dd„ dƒZBG dd„ dƒZCG d d!„ d!ƒZDG d"d#„ d#ƒZEG d$d%„ d%ƒZFG d&d'„ d'ƒZGG d(d)„ d)ƒZHG d*d+„ d+ƒZIG d,d-„ d-ƒZJG d.d/„ d/ƒZKG d0d1„ d1ƒZLd2d3„ ZMd4d5„ ZNdS )6z8
Test functions for multivariate normal distributions.

é    N)Úassert_allcloseÚassert_almost_equalÚassert_array_almost_equalÚassert_equalÚassert_array_lessÚassert_)Úraisesé   )Úcheck_distribution_rvs)Ú_PSDÚ_lnBÚ_cho_inv_batchÚmultivariate_normal_frozen)Úmultivariate_normalÚmultivariate_hypergeomÚmatrix_normalÚspecial_ortho_groupÚortho_groupÚrandom_correlationÚunitary_groupÚ	dirichletÚbetaÚwishartÚmultinomialÚ
invwishartÚchi2ÚinvgammaÚnormÚuniformÚks_2sampÚkstestÚbinomÚ	hypergeomÚmultivariate_tÚcauchyÚ
normaltestÚrandom_tableÚuniform_direction)Ú_covarianceÚ
Covariance)Úromb)Úmultigammaln)Úcheck_random_state_property)Úpatchc                 O   s:   t  | ¡t  |¡ } }t| |f|ž|Ž t| j|jƒ d S ©N)ÚnpÚasarrayr   r   Úshape)ÚresÚrefÚargsÚkwargs© r6   ú\/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/stats/tests/test_multivariate.pyÚassert_close(   s    r8   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 dddg¡d	ddgdd
dgdddgge dddg¡d	ddgdd	dgdddggdœZeedd… edddg 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S )#ÚTestCovariancec              	   C   s\  d}t jt|d�� t t d¡¡ W 5 Q R X d}t jt|d��  tjt d¡t d¡d� W 5 Q R X d}t jt|d�� t d¡ W 5 Q R X d	}t jt|d�� t 	t d¡¡ W 5 Q R X d
}t jt|d�� t 
dt d¡f¡ W 5 Q R X d}t jt|d�� t 
t d¡df¡ W 5 Q R X d}t jt|d��  t 
dddgt d¡f¡ W 5 Q R X d S )Nz:The input `precision` must be a square, two-dimensional...©Úmatché   z0`precision.shape` must equal `covariance.shape`.é   )Ú
covariancez7The input `diagonal` must be a one-dimensional array...Zalpacaz9The input `cholesky` must be a square, two-dimensional...z4The input `eigenvalues` must be a one-dimensional...z,The input `eigenvectors` must be a square...z9The shapes of `eigenvalues` and `eigenvectors` must be...r	   )Úpytestr   Ú
ValueErrorr(   ÚCovViaPrecisionr/   ÚonesÚeyeZCovViaDiagonalZCovViaCholeskyZCovViaEigendecomposition©ÚselfÚmessager6   r6   r7   Útest_input_validation0   s*    $z$TestCovariance.test_input_validationc                 C   s   t | dd�S )NT©Úallow_singular)r   ©Úxr6   r6   r7   Ú<lambda>R   s    zTestCovariance.<lambda>)ZDiagonalZ	PrecisionZCholeskyZEigendecompositionZPSDr	   r<   r=   é   é   é   é   r   éÿÿÿÿ)údiagonal full rankzgeneral full rankzdiagonal singularzgeneral singularNéþÿÿÿÚcov_type_namec           	      C   sŽ   t  dddg¡}dddg}ttd|› �ƒ}| j| }ttd| ¡ › �ƒ}|||ƒƒ}|||ƒƒ}t|ƒt|ƒkstt‚t	| 
|¡| 
|¡ƒ d S )Nr	   r<   r=   éüÿÿÿrM   ÚCovViaZfrom_)r/   ÚdiagÚgetattrr(   Ú_covariance_preprocessingr)   ÚlowerÚtypeÚAssertionErrorr   Úwhiten)	rE   rT   ÚArK   Úcov_typeÚpreprocessingÚfactoryr2   r3   r6   r6   r7   Útest_factories^   s    

zTestCovariance.test_factoriesÚmatrix_typec                 C   sx  d|› d|› d�}|| j | k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
|k�rt| |¡|
ƒ |	jdd�}
| |
¡}|
|j }t|d jdd�|d jdd�ƒ t|d	ƒ�rtd
|k�rtt| |¡|
ƒ d S )NrV   ú does not support ú	 matricesTrH   ì   ÐVGi’VžK r=   ©ÚsizeZ	_colorizeZsingular©r<   rO   r=   r<   rQ   ©Úaxis)Ú
_cov_typesr?   ÚskipÚ	_matricesrX   r(   rY   r   r8   Úlog_pdetr   Úrankr1   r/   r0   r>   ÚrandomÚdefault_rngr]   ÚUÚhasattrZcolorizeÚsum)rE   rc   rT   rF   r^   r_   r`   ÚpsdÚ
cov_objectÚrngrK   r2   r3   r6   r6   r7   Útest_covariancel   s2    






"zTestCovariance.test_covariancerh   ri   c                 C   sÂ  d|› d|› d�}|| j | kr*t |¡ | j| }ttd|› �ƒ}| j| }dddg}|||ƒƒ}	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 )NrV   rd   re   çš™™™™™¹?çš™™™™™É?ç333333Ó?TrH   rf   rg   ©rh   Úrandom_state©Úseed)rl   r?   rm   rn   rX   r(   rY   r   r/   rq   rr   ÚrvsÚ
isinstanceZ	CovViaPSDr8   Úsqueezer   r1   ÚpdfÚlogpdfÚentropy)rE   rh   rc   rT   rF   r^   r_   r`   Úmeanrw   ÚmvnÚdist0Údist1rx   rK   Úx1Úx2r6   r6   r7   Útest_mvn_with_covariance”   s:    




z'TestCovariance.test_mvn_with_covariancec                 C   sÞ   d}| j | }ttd|› �ƒ}| j| }dddg}|||ƒƒ}t}	t||dd�}
t||dd�}tj d¡}|j|||d	�}t|	 	|||¡|
 	|¡ƒ t| 	|¡|
 	|¡ƒ t|	 
|||¡|
 
|¡ƒ t| 
|¡|
 
|¡ƒ d S )
NrR   rV   rz   r{   r|   TrH   rf   rg   )rn   rX   r(   rY   r   r/   rq   rr   r8   ÚcdfÚlogcdf)rE   rh   rT   rc   r^   r_   r`   r‡   rw   rˆ   r‰   rŠ   rx   rK   r6   r6   r7   Útest_mvn_with_covariance_cdf¼   s    


z+TestCovariance.test_mvn_with_covariance_cdfc              	   C   s(   d}t jt|d�� tƒ  W 5 Q R X d S )Nz7The `Covariance` class cannot be instantiated directly.r:   )r?   r   ÚNotImplementedErrorr)   rD   r6   r6   r7   Útest_covariance_instantiationÖ   s    z,TestCovariance.test_covariance_instantiationzignore::RuntimeWarningc              	   C   s®   t  dddg¡}|jd }t  |¡}tjtdd�� t||ƒ ¡  W 5 Q R X d}t j	 
|¡}t j	 
|¡}t t j |¡¡}t||ƒ}|j|d�}	tj|||d�}
t|	|
ƒ d S )	Nr	   r<   g:Œ0âŽyE¾r   zThe input matrix must be...r:   l   .ypGw ©r~   )r/   rW   r1   Úzerosr?   r   r@   r   r�   rq   rr   r)   Zfrom_eigendecompositionÚlinalgÚeighr   )rE   r^   Únr‡   r€   Zrng1Zrng2ÚcovÚrvr2   r3   r6   r6   r7   Útest_gh9942Û   s    


zTestCovariance.test_gh9942)Ú__name__Ú
__module__Ú__qualname__rG   r/   rW   r•   ÚinvÚcholeskyr–   rY   ÚarrayÚlistZ_all_covariance_typesrn   rl   r?   ÚmarkÚparametrizerb   ry   Útupler�   r�   r’   Úfilterwarningsrš   r6   r6   r6   r7   r9   .   sB   üý

ý
&%
r9   c                 C   s$   t j | | ¡}tj |¡\}}}|S r.   )r/   rq   ÚrandnÚscipyr•   Úsvd)r—   ÚMÚuÚsÚvr6   r6   r7   Ú_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@S )AÚ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 )Nr=   r<   ©r   r	   ©r   r	   r<   )r/   ÚarangeÚidentityÚassert_raisesr@   r   r„   rŽ   )rE   Úmur˜   r6   r6   r7   Ú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   rM   )
r/   rq   r€   r   r„   r   Úndimr¦   ÚabsrŽ   )rE   rK   r‡   r˜   r„   rŽ   r6   r6   r7   Útest_scalar_values  s"    

z)TestMultivariateNormal.test_scalar_valuesc                 C   sf   t j d¡ t j d¡}t j d¡}t  t j d¡¡}t |||¡}t |||¡}t|t  	|¡ƒ d S ©Nr¶   rM   )
r/   rq   r€   r¦   rº   r   r…   r„   r   Úlog©rE   rK   r‡   r˜   Úd1Úd2r6   r6   r7   Útest_logpdf  s    z"TestMultivariateNormal.test_logpdfc                 C   sl   t j d¡ t j d¡}t |¡}t |¡}t |d d¡}t |d d¡}t|t  |¡ƒ t|t  |¡ƒ d S ©Nr¶   rM   r	   )	r/   rq   r€   r¦   r   r…   r„   r   r½   ©rE   rK   r¿   rÀ   Zd3Zd4r6   r6   r7   Útest_logpdf_default_values'  s    

z1TestMultivariateNormal.test_logpdf_default_valuesc                 C   sf   t j d¡ t j d¡}t j d¡}t  t j d¡¡}t |||¡}t |||¡}t|t  	|¡ƒ d S r¼   )
r/   rq   r€   r¦   rº   r   r�   rŽ   r   r½   r¾   r6   r6   r7   Útest_logcdf4  s    z"TestMultivariateNormal.test_logcdfc                 C   sl   t j d¡ t j d¡}t |¡}t |¡}t |d d¡}t |d d¡}t|t  |¡ƒ t|t  |¡ƒ d S rÂ   )	r/   rq   r€   r¦   r   r�   rŽ   r   r½   rÃ   r6   r6   r7   Útest_logcdf_default_values>  s    

z1TestMultivariateNormal.test_logcdf_default_valuesc                 C   sl   t j d¡ d}t j |¡}td|d ƒD ]<}t j ||¡}t  ||j¡}t||dd�}t|j	j
|ƒ q*d S )Nr¶   rO   r	   TrH   )r/   rq   r€   r¦   ÚrangeÚdotÚTr   r   rw   rp   )rE   r—   r‡   Zexpected_rankr«   r˜   Zdistnr6   r6   r7   Ú	test_rankK  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	   rM   TrH   rQ   ç        )rÇ   r/   rq   r¦   rÈ   rÉ   r”   r­   r   r   rw   rp   r„   r   r…   Úinf)rE   r—   ÚzÚkr«   Zcov_kkZcov_nnrK   rª   Zcov_rrÚyZdistn_kkZdistn_nnZdistn_rrZpdf_kkZpdf_nnZpdf_rrZ	logpdf_kkZ	logpdf_nnZ	logpdf_rrZy_orthZpdf_rr_orthZlogpdf_rr_orthr6   r6   r7   Útest_degenerate_distributionsV  sN    
ÿÿÿ










z4TestMultivariateNormal.test_degenerate_distributionsc           
      C   sÌ   d}t ddƒD ]¸}t d|ƒD ]¨}t |¡}t|ƒd d …d |…f }t ||j¡}tj|||d�}tj|||dd�}t	|j
|ƒ t |dk¡s�t‚tj|||dd�}	t	|	j
|ƒ t |	tj k¡st‚qqd S )	Né
   r<   rN   r	   ©r‡   r˜   rh   T)r‡   r˜   rI   rË   )rÇ   r/   r”   r­   rÈ   rÉ   r   r�   r„   r   rh   Úallr\   r…   rÌ   )
rE   rÎ   r—   ÚrZmnrª   ZvrÚXr„   r…   r6   r6   r7   Ú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   r<   ©Zdtyper   r	   )r/   Úexpr”   ÚfloatZfill_diagonalr   r§   r•   ÚdetrÌ   r   Úslogdetr   ro   )rE   Zlarge_total_logZnposZnzeroZlarge_entryr—   r˜   rv   r6   r6   r7   Útest_large_pseudo_determinant   s    $ÿz4TestMultivariateNormal.test_large_pseudo_determinantc                 C   sØ   t j d¡ d}t j ||¡}t  ||j¡}t j |¡}t j dd|¡}t |||¡}t |||¡}t	dƒD ]f}t	dƒD ]X}	t |||	f ||¡}
t
|
|||	f ƒ t |||	f ||¡}
t
|
|||	f dd� qxqld S )Nr¶   rO   r<   r=   gü©ñÒMbP?©Úrtol)r/   rq   r€   r¦   rÈ   rÉ   r   r„   rŽ   rÇ   r   )rE   r—   Údatar˜   r‡   rÕ   Zdesired_pdfZdesired_cdfÚiÚjÚactualr6   r6   r7   Útest_broadcasting¸  s    z(TestMultivariateNormal.test_broadcastingc                 C   sn   t  ddd¡}d\}}|d }t |||¡}t |||¡}t||ƒ t |||¡}t |||¡}t||ƒ d S )Nr   r<   rÑ   )ç333333ó?çÍÌÌÌÌÌì?ç      à?)r/   Úlinspacer   r„   r   r   rŽ   )rE   rK   r‡   r˜   Úscaler¿   rÀ   r6   r6   r7   Útest_normal_1DÐ  s    
z%TestMultivariateNormal.test_normal_1Dc                 C   s  t  ddg¡}t  ddgddgg¡}d}d|d  }t  d	d|¡}t  ||¡\}}t  ||d
f¡}||d d …d d …d	f< ||d d …d d …df< t |||¡}	t|	|d	d�}
t|	|dd�}tj||d	 |d d d�}tj||d |d d d�}t	|
|ddd� t	||ddd� d S )Nr¸   g      @rç   r{   ç333333ã?i  rN   r	   r   r<   rj   ©r   r   )Úlocré   )r	   r	   ç{®Gáz„?©rß   Úatol)
r/   r    rè   ZmeshgridÚemptyr   r„   r*   r   r   )rE   r‡   r˜   r—   Údeltar¬   ZxvZyvÚposr„   Zmargin_xZmargin_yZgauss_xZgauss_yr6   r6   r7   Ú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¼   )r/   rq   r€   r¦   rº   r   r   r„   r…   rŽ   r�   )rE   rK   r‡   r˜   Únorm_frozenr6   r6   r7   Útest_frozen÷  s    

ÿ
ÿz"TestMultivariateNormal.test_frozenr>   r<   r	   c                 C   sF   t  d¡}t  d¡}t||ƒ}t  |j|¡s0t‚t  |j|¡sBt‚d S )N©r<   r<   )r/   rB   rC   r   Zallcloser‡   r\   r˜   )rE   r>   r‡   Zcov_should_berõ   r6   r6   r7   Ú2test_frozen_multivariate_normal_exposes_attributes  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¶   rP   rç   ç      ð?r   çH¯¼šò×z>rQ   çñhãˆµøä>)Úcond)r/   rq   r€   r¦   rÈ   rÉ   r§   r•   r–   ÚfullrW   r   Zpinvr   ro   ru   r½   )	rE   r—   rK   r˜   r«   rª   rü   rv   Zpsd_pinvr6   r6   r7   Útest_pseudodet_pinv  s     z*TestMultivariateNormal.test_pseudodet_pinvc                 C   s$   dddgdddgg}t tt|ƒ d S )Nr	   r<   r=   rO   rM   rN   ©r³   r@   r   ©rE   r˜   r6   r6   r7   Útest_exception_nonsquare_cov-  s    z3TestMultivariateNormal.test_exception_nonsquare_covc                 C   s@   ddgdt jgg}ttt|ƒ ddgdt jgg}ttt|ƒ d S )Nr	   r   )r/   Únanr³   r@   r   rÌ   )rE   Zcov_nanZcov_infr6   r6   r7   Útest_exception_nonfinite_cov1  s    z3TestMultivariateNormal.test_exception_nonfinite_covc                 C   s    ddgddgg}t tt|ƒ d S )Nr	   r   rQ   rÿ   r   r6   r6   r7   Útest_exception_non_psd_cov7  s    z1TestMultivariateNormal.test_exception_non_psd_covc              	   C   sÌ   t j d¡ t j d¡}t j d¡}t  d¡}t jj}t|t||ƒ t|tj	|||ƒ t|tj
|||ƒ t|tj|||ƒ t|tj|||ƒ ddgddgg}d}tjt jj|d�� t|d� W 5 Q R X d S )	Nr¶   rM   )rM   rM   rù   rË   z0When `allow_singular is False`, the input matrixr:   ©r˜   )r/   rq   r€   r¦   rB   r•   ÚLinAlgErrorr³   r   r„   r…   rŽ   r�   r?   r   )rE   rK   r‡   r˜   ÚeÚmsgr6   r6   r7   Útest_exception_singular_cov;  s    
z2TestMultivariateNormal.test_exception_singular_covc                 C   s<  t  dddddg¡}t  ddd¡}d	| d }|t  |¡ }t  |||g¡j}t  d
d	dgd¡}t  d
ddgdddgddd	ggd¡}t |||¡}t||dd� t  dddddg¡}	t |||¡}
t|
|	dd� t  dddddg¡}t  ||g¡j}t  d
d	gd¡}t  d
dgddggd¡}t |||¡}t||dd� d S )Ng¥0Ò÷Q-?gox'‚¤V?g[S,¸� t?gäúóDB…?g³èc_.¹Œ?r   r<   rM   r=   r	   Údrç   ç»½×Ùß|Û=©rð   gwÐk:¢E]?gë®Ì™ýZ›?g¶0Ëñµ?gLÿß8»?gA¿G*ÀÐ?gñhãˆµøô>gòIÙ‰?gˆï—Gå­?gÆ�)å‰Ç?gÄ—h»Ú?g•™óEEå?rû   )	r/   r    rè   ÚcosrÉ   r   r„   r   rŽ   )rE   Zr_pdfrK   rÏ   rÍ   rÔ   r‡   r˜   r„   Zr_cdfrŽ   Zr_cdf2Úr2Úmean2Úcov2Úcdf2r6   r6   r7   Útest_R_valuesN  s6    
 ÿ$
 ÿ
 ÿz$TestMultivariateNormal.test_R_valuesc                 C   s<   t  d¡}t  d¡}t||dd�}| ¡ }t|ddgƒ d S )Nr<   ©r<   r<   TrH   r   )r/   r”   r   r�   r   )rE   r‡   r>   ÚmodelÚsampler6   r6   r7   Ú,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,  rO   r	   rÒ   r<   rz   r   ©r‡   r˜   )r   r�   r/   r”   r   r1   r    )rE   ÚNr
  r  rª   r6   r6   r7   Ú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é  r=   iˆ  rz   rÞ   r   )r/   rq   r€   r¦   rÈ   rÉ   r   r�   r   Únumpyr˜   r‡   )rE   r—   r‡   r©   r˜   rh   r  r6   r6   r7   Ú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 )Nr  r=   r   rç   r<   r	   )r/   rq   r€   r¦   rÈ   rÉ   r   r   r†   r•   Zeigr½   Úpiru   )rE   r—   r‡   r©   r˜   r™   ÚeigsÚdesiredr6   r6   r7   Útest_entropy·  s    
,z#TestMultivariateNormal.test_entropyc                 C   s,   t  dddg¡}d}tt  t|ƒ¡|ƒ d S )Nr	   rç   )r/   r    r   rÙ   r   )rE   Úalphar  r6   r6   r7   Ú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   r<   )rO   r=   r<   rN   r=   ©Zlower_limit.r	   rQ   rj   )r/   rq   rr   rC   r   rŽ   Úconcatenater   )rE   rx   r‡   r˜   ÚaÚbÚcdf1Zcdf2aZcdf2bZab1Zab2Zcdf2ab1Zcdf2ab2r  r6   r6   r7   Ú 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#  r=   )r=   r=   ©r<   r=   rN   r$  g-Cëâ6?rÞ   )	r/   rq   rr   rÉ   r   rŽ   rÙ   r�   r   )
rE   rx   r‡   r˜   r&  r'  r(  r  Zcdf3Zcdf4r6   r6   r7   Ú%test_cdf_with_lower_limit_consistencyã  s    


z<TestMultivariateNormal.test_cdf_with_lower_limit_consistencyc                 C   s–   t  d¡}t  d¡}dddgdddgdddgdddgg}dddgdddgdddgdddgg}t  ddddg¡}tj||||d�}t||d | ƒ d S )Nr=   r	   r   rQ   r$  )r/   r”   rC   r    r   rŽ   r   )rE   r‡   r˜   r'  r&  Zexpected_signsrŽ   r6   r6   r7   Útest_cdf_signsõ  s    

$$z%TestMultivariateNormal.test_cdf_signsc              	   C   sÚ   t  dt  dddg¡ ¡}t |¡}d}tjt|d�� t 	ddg|¡ W 5 Q R X tjt|d�� tddg|ƒ W 5 Q R X dddg}t 
|dddg|¡}ttj
||d�|ƒ t 
|dddg|¡}ttj
|d|d�|ƒ d S )	Nr	   r<   r=   z7`cov` represents a covariance matrix in 3 dimensions...r:   r   rç   r  )r/   rW   r    r(   rA   r?   r   r@   r   r†   r„   r   )rE   ÚPrw   rF   rK   r3   r6   r6   r7   Útest_mean_cov   s    

z$TestMultivariateNormal.test_mean_covN)(r›   rœ   r�   rµ   r»   rÁ   rÄ   rÅ   rÆ   rÊ   rÐ   rÖ   rÝ   rä   rê   rô   rö   r?   r¢   r£   r/   rC   r)   Zfrom_diagonalrø   rþ   r  r  r  r	  r  r  r  r  r   r"  r)  r+  r,  r.  r6   r6   r6   r7   r®   ù   sH   

4þþ
@r®   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTestMatrixNormalc              	   C   s<  d}d}t  ||fd¡}dt  |¡ t  ||fd¡ }dt  |¡ t  ||fd¡ }tttt  d¡ƒ ttt|t  d¡|ƒ ttt||t  d¡ƒ ttt|||ƒ ttt|||ƒ ttt|j||ƒ t jj	}t|tj
||t  ||f¡ƒ t|tj
|t  ||f¡|ƒ t|t||t  ||f¡ƒ t|t|t  ||f¡|ƒ d S )NrO   r=   r|   rç   çffffffæ?)rM   rO   r=   rÑ   )r/   rý   r²   r³   r@   r   r”   rÉ   r•   r  r�   rB   )rE   Únum_rowsÚnum_colsr©   rs   ÚVr  r6   r6   r7   Útest_bad_input  s0      ÿ  ÿ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 )NrO   r=   r|   rç   r0  r	   ©r‡   ÚrowcovÚcolcov)r‡   )r6  )r7  )r‡   r7  )r‡   r6  )r6  r7  )r/   rý   r²   r”   r   r   r�   r1   r6  r7  r‡   )rE   r1  r2  r©   rs   r3  ÚZZZrZZcÚIrÚIcZI1r6   r6   r7   Útest_default_inputs0  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 )NrO   r=   r|   r{   rz   r5  )r/   rý   r²   r   r   r6  r7  )
rE   r1  r2  r©   ZUvZUsZVvZVsr9  r:  r6   r6   r7   Útest_covariance_expansionW  s*    

ÿÿÿÿz*TestMatrixNormal.test_covariance_expansionc                 C   sþ   t ddƒD ]î}t ddƒD ]Þ}t ||fd¡}dt |¡ t ||fd¡ }dt |¡ t ||fd¡ }t|||d�}|jdd�}tj|||dd	�}t||ƒ |jdd�}	| |	¡}
tj|	|||d�}t|
|ƒ | |	¡}tj|	|||d�}t||ƒ qq
d S )
Nr	   rM   r|   rç   r0  r5  r¶   r“   )r‡   r6  r7  r~   )	rÇ   r/   rý   r²   r   r�   r   r„   r…   )rE   rá   râ   r©   rs   r3  ÚfrozenÚrvs1Úrvs2rÕ   Úpdf1Úpdf2Úlogpdf1Úlogpdf2r6   r6   r7   Útest_frozen_matrix_normalm  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||d
d� t|	|d
d� qq
d S )Nr	   rM   r|   rç   r0  r5  r¶   r“   r  r  rÞ   )rÇ   r/   rý   r²   r   r�   r„   r…   rÉ   ÚflattenZkronr   r   )rE   rá   râ   r©   rs   r3  r=  rÕ   r@  rB  ZvecXZvecMr˜   rA  rC  r6   r6   r7   Útest_matches_multivariate…  s     



z*TestMatrixNormal.test_matches_multivariatec                 C   sF  d}d}t  ||fd¡}dt  |¡ t  ||fd¡ }dt  |¡ t  ||fd¡ }d}t|||d�}|j|dd	�}|j|d
d	�}	t j|t jd d …d d …d d …f |	t jd d …d d …d d …f fdd�}
t|
jd|||fƒ | 	|
¡}t|jd|fƒ t
dƒD ]B}t
|ƒD ]4}tj	|
||f |||d�}t||||f dƒ �q
qþd S )NrO   r=   r|   rç   r0  rÑ   r5  r¶   r}   iá  r   rj   r<   r  )r/   rý   r²   r   r�   r%  Únewaxisr   r1   r…   rÇ   r   )rE   r1  r2  r©   rs   r3  r  r=  ZX1ZX2rÕ   Zarray_logpdfrá   râ   Zseparate_logpdfr6   r6   r7   Útest_array_inputœ  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 )NrO   r=   r|   rç   r0  éè  r5  r¶   r}   r   rj   rz   r  r	   r<   )r/   rý   r²   r   r�   r‡   r   r˜   ÚreshaperÉ   Zswapaxes)rE   r1  r2  r©   rs   r3  r  r=  rÕ   Zsample_meanZsample_colcovZsample_rowcovr6   r6   r7   Útest_moments³  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	   r<   r=   rO   rQ   rM   rÑ   r   )r‡   r6  r7  r~   rh   g¡6‚ÿø?gÇ€À Üó¿g‚¡c´Ï¿@g—ì"ç'ë@gI2Í–é@g^½€Òjy%@gøDn3Á@gëž|\3@)r   r�   r/   r    rq   rr   r   )rE   rã   Úexpectedr6   r6   r7   Útest_samplesÉ  s"    
ûÿÿþÿzTestMatrixNormal.test_samplesN)r›   rœ   r�   r4  r;  r<  rD  rF  rH  rK  rM  r6   r6   r6   r7   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 ]r}t j dd|¡}|t  |¡ }t| |d d… ¡t |d d… |¡ƒ t| |d d… ¡t |d d… |¡ƒ qzd S ©Nr  r	   é    ç•Ö&è.>r×   rÑ   rQ   )r/   rq   r€   Úrandintr   r   r   Úvarr‡   r†   rÇ   ru   r„   r…   ©rE   r—   r!  r
  Ú	num_testsrá   rK   r6   r6   r7   Útest_frozen_dirichletÞ  s    (z#TestDirichlet.test_frozen_dirichletc                 C   s¤   t j d¡ t  dddg¡}t jj|dd�}t|jdƒ tttj	||ƒ tttj
||ƒ t 	|j|¡ t 	|jd d… |¡ t 
|j|¡ t 
|jd d… |¡ d S )	Nr  rù   ç       @ç      @rP   rg   )rP   r=   rQ   )r/   rq   r€   r    r   r   r1   r³   r@   r„   r…   rÉ   ©rE   r!  rK   r6   r6   r7   Ú"test_numpy_rvs_shape_compatibilityð  s    z0TestDirichlet.test_numpy_rvs_shape_compatibilityc                 C   sT   t j d¡ dddg}t jjt  d|¡dd�j}tttj||ƒ tttj	||ƒ d S )Nr  rù   rË   rX  rQ  rP   rg   ©
r/   rq   r€   r   ÚmaximumrÉ   r³   r@   r„   r…   rY  r6   r6   r7   Útest_alpha_with_zerosü  s
    
z#TestDirichlet.test_alpha_with_zerosc                 C   sT   t j d¡ dddg}t jjt  d|¡dd�j}tttj||ƒ tttj	||ƒ d S )Nr  rù   g       ÀrX  rQ  rP   rg   r[  rY  r6   r6   r7   Ú test_alpha_with_negative_entries  s
    
z.TestDirichlet.test_alpha_with_negative_entriesc                 C   s|   t  ddddg¡}t  ddddg¡}t ||¡ t ||¡ t  ddddg¡}tt ||¡d	ƒ tt ||¡t  d	¡ƒ d S )
Nrù   rW  rX  ç      @rz   rË   r{   r0  rN   )r/   r    r   r„   r…   r   r½   rY  r6   r6   r7   Útest_data_with_zeros  s    z"TestDirichlet.test_data_with_zerosc                 C   sH   t  ddddg¡}t  ddddg¡}tttj||ƒ tttj||ƒ d S )	Nrù   rç   rX  r_  rz   rË   r{   r0  ©r/   r    r³   r@   r   r„   r…   rY  r6   r6   r7   Ú$test_data_with_zeros_and_small_alpha  s    z2TestDirichlet.test_data_with_zeros_and_small_alphac                 C   sH   t  ddddg¡}t  ddddg¡}tttj||ƒ tttj||ƒ d S )	Nrù   rW  rX  r_  rz   çš™™™™™¹¿r|   r0  ra  rY  r6   r6   r7   Útest_data_with_negative_entries  s    z-TestDirichlet.test_data_with_negative_entriesc                 C   sH   t  ddddg¡}t  ddddg¡}tttj||ƒ tttj||ƒ d S )	Nrù   rW  rX  r_  rz   çš™™™™™ñ?r|   r0  ra  rY  r6   r6   r7   Ú test_data_with_too_large_entries!  s    z.TestDirichlet.test_data_with_too_large_entriesc                 C   s@   t  dddg¡}t  dd¡}tttj||ƒ tttj||ƒ d S )Nrù   rW  rX  )r<   rP   rP   g’$I’$I²?©r/   r    rý   r³   r@   r   r„   r…   rY  r6   r6   r7   Útest_data_too_deep_c'  s    z"TestDirichlet.test_data_too_deep_cc                 C   sF   t  ddgddgg¡}t  dd¡}tttj||ƒ tttj||ƒ d S )Nrù   rW  rX  r_  )r<   r<   rP   ç      Ð?rg  rY  r6   r6   r7   Útest_alpha_too_deep-  s    z!TestDirichlet.test_alpha_too_deepc                 C   s8   t  dddg¡}t  dd¡}t ||¡ t ||¡ d S )Nrù   rW  rX  ©r=   rP   çUUUUUUÕ?)r/   r    rý   r   r„   r…   rY  r6   r6   r7   Útest_alpha_correct_depth3  s    z&TestDirichlet.test_alpha_correct_depthc                 C   s@   t  dddg¡}t  dd¡}tttj||ƒ tttj||ƒ d S )Nrù   rW  rX  rk  rç   rg  rY  r6   r6   r7   Útest_non_simplex_data9  s    z#TestDirichlet.test_non_simplex_datac                 C   sB   t  ddddg¡}t  dd¡}tttj||ƒ tttj||ƒ d S )Nrù   rW  rX  r_  )r<   rP   rç   rg  rY  r6   r6   r7   Útest_data_vector_too_short?  s    z(TestDirichlet.test_data_vector_too_shortc                 C   sB   t  ddddg¡}t  dd¡}tttj||ƒ tttj||ƒ d S )Nrù   rW  rX  r_  )rM   rP   r{   rg  rY  r6   r6   r7   Útest_data_vector_too_longE  s    z'TestDirichlet.test_data_vector_too_longc                 C   sL   t  dddg¡}t|ƒ}dddg}ddd	g}t| ¡ |ƒ t| ¡ |ƒ d S )
Nrù   çš™™™™™é?r{   gUUUUUUµ?g{®Gáz´?g¸…ëQ¸ž?rç   çš™™™™™Ù?rz   )r/   r    r   r   rS  r‡   )rE   r!  r
  Zexpected_varZexpected_meanr6   r6   r7   Útest_mean_and_varK  s    

zTestDirichlet.test_mean_and_varc                 C   s`   t  dg¡}t|ƒ}t| ¡ jdƒ t| ¡ jdƒ t| dg¡jdƒ t| dg¡jdƒ d S )Nr{   r   rù   )	r/   r    r   r   r‡   r¹   rS  r„   r…   )rE   r!  r
  r6   r6   r7   r»   U  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 rO  )
r/   rq   r€   rR  r   r   rÇ   ru   r   r„   rT  r6   r6   r7   Ú test_K_and_K_minus_1_calls_equal`  s    z.TestDirichlet.test_K_and_K_minus_1_calls_equalc                 C   sà   t j d¡ t j dd¡}t j dd|¡}t|ƒ}d}d}d }t|ƒD ]”}t|ƒD ]>}t j dd|¡}	|	t  |	¡ }	|d k	rŒt  ||	f¡}qR|	}qR| 	|j
¡}
d }|D ](}| 	|¡}|d k	rÊt  ||¡}q¦|}q¦t|
|ƒ qFd S )Nr  r	   rP  rQ  r×   rÑ   rM   )r/   rq   r€   rR  r   r   rÇ   ru   Úvstackr„   rÉ   Úappendr   )rE   r—   r!  r
  rU  Znum_multipleZxmrá   ÚmrK   ZrmÚrsÚxsrÔ   r6   r6   r7   Útest_multiple_entry_callso  s,    
z'TestDirichlet.test_multiple_entry_callsc                 C   s®   t j d¡ t j ddd¡}t|ƒ}t|d |d ƒ}d}t|ƒD ]:}t j ddd¡}|t  |¡ }t| 	|¡| 	|g¡ƒ qBt| 
¡ | 
¡ d ƒ t| ¡ | ¡ d ƒ d S )Nr  rQ  r×   r<   r   r	   rÑ   )r/   rq   r€   r   r   r   rÇ   ru   r   r„   r‡   rS  )rE   r!  r
  r'  rU  rá   rK   r6   r6   r7   Útest_2D_dirichlet_is_betaŒ  s    z'TestDirichlet.test_2D_dirichlet_is_betaN)r›   rœ   r�   rV  rZ  r]  r^  r`  rb  rd  rf  rh  rj  rm  rn  ro  rp  rs  r»   rt  rz  r{  r6   r6   r6   r7   rN  Ü  s&   	
rN  c               
   C   s~   t  ddg¡} t  dgg¡}ttt| |ƒ zt| |ƒ W n@ tk
rx } z"d}tt|ƒd t|ƒ… |ƒ W 5 d }~X Y nX d S )NrË   rù   zDimension mismatch)r/   r    r³   r@   r   r   ÚstrÚlen)r´   Úsigmar  r  r6   r6   r7   Ú,test_multivariate_normal_dimensions_mismatch�  s    r  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestWishartc                 C   s  t jddd�}ddgt  d¡t jd t jddd�g}|D ]*}td|ƒ}t|j|ƒ t|jj|jƒ q8t  ddgddgg¡}ddgt jd t  ddgddgg¡g}|D ]*}td|ƒ}t|j|ƒ t|jj|jƒ q¤tttdt  	d¡ƒ tdt  	d¡ƒ t jddd�}tttd|ƒ d S )Nr	   r<   ©Zndminr   ©r	   r<   re  r=   )
r/   r    Úr_r   r   ré   r1   r³   r@   rC   )rE   Z
true_scaleÚscalesré   Úwr6   r6   r7   Útest_scale_dimensions±  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| |¡|ƒ qVdddgt jd t jdddgdd�g}tddƒ}| t jdddgdd�¡}|D ]}t| |¡|ƒ qºdddgt  d¡t jd t  ddgddgg¡t  ddgddgg¡d d …d d …t jf g}tdt  d¡ƒ}| t  ddgddgg¡d d …d d …t jf ¡}|D ]}t| |¡|ƒ �qld S )Nr	   r<   r�  r=   ©r	   r<   r=   r  r   )r/   r    rƒ  r   r„   r   rG  rC   )rE   rÕ   r…  ZdensityrK   r6   r6   r7   Útest_quantile_dimensionsÜ  sP    ú	
ý

ÿ
ÿÿùÿÿz$TestWishart.test_quantile_dimensionsc           	      C   sn  d}t  t  |¡d ¡}t  ||d  d ¡|t j|dd�< t  |j|¡}g }tdƒD ]\}t  t  |¡|d d  ¡}t  ||d  d ¡|t j|dd�< t  |j|¡}| |¡ qVt  |¡j}ddt  	ddd¡fd||fg}|D ]†\}}}t
||ƒ}t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| |¡t
 |||¡ƒ qâd S ©	NrO   r	   r<   rQ   ©rÎ   rM   rÑ   rz   )r/   rW   r±   Útril_indicesrÈ   rÉ   rÇ   rv  r    rè   r   r   rS  r‡   Úmoder†   r„   )	rE   Údimré   rÕ   rá   rK   Ú
parametersÚdfr…  r6   r6   r7   rö     s*    $$þ
zTestWishart.test_frozenc                 C   sÐ   t j d¡ d}d}t  |¡}t jdddtd�}t jdddd�}|D ]†}t||ƒ}t|ƒ}t	| 
¡ | 
¡ ƒ t	| ¡ | ¡ ƒ t	| ¡ | ¡ ƒ t	| |¡| |¡ƒ |j|d	�}	|f}
d
}td|
||	ƒ qDd S )Néž^ éô  r	   rÑ   r<   rØ   rz   ©Únumrg   rî   r   )r/   rq   r€   rC   r±   rÚ   rè   r   r   r   rS  r‡   r†   r„   r�   r
   )rE   Úsnr�  ré   Údf_rangerÕ   r�  r…  Úcr�   r4   r!  r6   r6   r7   Útest_1D_is_chisquared-  s"    

z!TestWishart.test_1D_is_chisquaredc                 C   s  t j d¡ d}d}d}t  t  d¡d ¡}t  d¡|t jddd�< t  |j|¡}t  |df¡}|j |¡ |¡ 	¡ }t
||ƒ}t||d	�}t| ¡ | ¡ ƒ t| ¡ | ¡ ƒ t| ¡ | ¡ ƒ t jd
ddd�}	t| |	¡| |	¡ƒ |j|d�}
|d|f}d}td|||
ƒ d S )Nr�  r‘  rÑ   rO   r	   rN   rQ   rŠ  ©ré   rz   r’  rg   r   rî   r   )r/   rq   r€   rW   r±   r‹  rÈ   rÉ   rB   rƒ   r   r   r   rS  r‡   r†   rè   r„   r�   r
   )rE   r”  r�  r�  ré   ZlamdaZsigma_lamdar…  r–  rÕ   r�   r4   r!  r6   r6   r7   Útest_is_scaled_chisquaredL  s(    

z%TestWishart.test_is_scaled_chisquaredN)r›   rœ   r�   r†  rˆ  rö   r—  r™  r6   r6   r6   r7   r€  °  s
   +1 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S )ÚTestMultinomialc                 C   sl   t  ddd¡}t|ddd� t  ddgd	d
dg¡}t|tjdd� t  ddgd	ddg¡}t|tjdd� d S )N©r=   rO   rP   ©r|   r0  g&Múty»÷¿ç:Œ0âŽyE>rÞ   r=   rO   r   r|   r0  rS   )r   Úlogpmfr   r/   ZNAN)rE   Úvals1Úvals2Úvals3r6   r6   r7   Útest_logpmfp  s    zTestMultinomial.test_logpmfc                 C   sX   t  ddd¡}t ddd¡}t||dd� t  dd	d
¡}t dd	d¡}t||dd� d S )Nr›  rP   rœ  r=   r|   r�  rÞ   )rN   é   é   ©rz   ræ   rN   rz   )r   rž  r!   r   Úpmf©rE   Úval1Úval2r6   r6   r7   Útest_reduces_binomialz  s    z%TestMultinomial.test_reduces_binomialc                 C   sT   ddddg }}ddddd	d
dd
dddœ
}|D ] }t t |||¡|| dd� q.d S )Nr=   g      À?ri  g      ä?g     @Ï?g     ÀÂ?g      ž?g      `?g     ÀÒ?g      ¾?g      ˆ?g      ˜?g      �?)
)r   r   r=   )r	   r   r<   )r<   r   r	   )r=   r   r   r°   )r	   r	   r	   )r<   r	   r   )r   r<   r	   )r	   r<   r   )r   r=   r   ç›+¡†›„=r  )r   r   r¦  )rE   r—   ÚpZr_valsrK   r6   r6   r7   Útest_R…  s        üzTestMultinomial.test_Rc                 C   sH   t jddgd ddd�}tj d¡}|j ddgd dd�}t||ƒ d S )Nr=   ri  rP   é{   r}   rg   )r   r�   r/   rq   ÚRandomStater   )rE   Zsc_rvsÚrndmZnp_rvsr6   r6   r7   Útest_rvs_np–  s    zTestMultinomial.test_rvs_npc                 C   sü   t  ddd¡}t|ddd� t  ddd	¡}t|d
dd� t  ddgddggddgddgggdd¡}t|ddgddggdd� tjdtjd�}t  |dd	¡}t|tjg tjd�ƒ t  ddgdd	¡}t|ddd� t  dddgddddg¡}t|ddd� d S )N)rM   rM   ©r	   r	   r�  rÞ   r›  rP   rœ  gö5’á
Í?r=   r   r£  rQ   é	   r¥  g’¹*7î ?gÄÒ<WÆŒÛ?©r   r<   rØ   rO   r<   rN   gUUUUUUå?rl  gß¦îáÌ?)r   r¦  r   r/   rñ   Úfloat64r   )rE   Úvals0rŸ  r   rK   r¡  Úvals4Zvals5r6   r6   r7   Útest_pmf�  s    $ÿzTestMultinomial.test_pmfc                 C   s
  t  ddgdddgddgg¡}t|dd	gd
d� t  ddgddgddg¡}t|ddgd
d� t  ddgddgggdddg¡}t|ddggd
d� t  ddgdgdgggddg¡}t|dgdgggd
d� t  ddgddggdggggddg¡}t|ddggggd
d� d S )Nr	   r<   r=   rz   ræ   r{   rq  g´Èv¾ŸÏ?gú~j¼t“Ø?r�  rÞ   rO   r   )r   r¦  r   )rE   r¶  rŸ  r   r¡  r·  r6   r6   r7   Útest_pmf_broadcasting²  s      &z%TestMultinomial.test_pmf_broadcastingc                 C   s:   t  dd¡}dddgdddgddd	gg}t||d
d� d S )NrM   )r{   r|   rç   rq  g333333Ó¿ç      à¿g433333Ó¿gÌÌÌÌÌÌð?g      è¿g      ô?r�  rÞ   ©r   r˜   r   ©rE   Úcov1r  r6   r6   r7   Ú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 )NrM   rz   ræ   r{   rq  gÍÌÌÌÌÌÜ?gÍÌÌÌÌÌÜ¿gš™™™™™é¿r�  rÞ   rO   g
×£p=
×?g
×£p=
×¿r|   r0  rr  rë   gáz®Gáê?gáz®Gáê¿rå   g333333ó¿r»  ©rE   r½  r  Úcov3Úcov4Úcov5Úcov6r6   r6   r7   Útest_cov_broadcastingÉ  s      ÿz%TestMultinomial.test_cov_broadcastingc                 C   s*   t  dddg¡}t|t dd¡dd� d S )Nr<   r{   rq  r�  rÞ   ©r   r†   r   r!   )rE   Úent0r6   r6   r7   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 )Nr<   r=   r{   r|   r�  rÞ   rP   r£  r0  rr  rë   rÅ  )rE   rÆ  Zent1Zent2r6   r6   r7   Útest_entropy_broadcastingÝ  s    ÿÿ ÿýz)TestMultinomial.test_entropy_broadcastingc                 C   s&   t  dddg¡}t|ddgdd� d S )NrM   r{   rq  rù   r_  r�  rÞ   ©r   r‡   r   ©rE   Úmean1r6   r6   r7   Ú	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 )NrM   rN   r{   rq  rù   r_  g433333ó?g433333@r�  rÞ   rÈ  rÉ  r6   r6   r7   Útest_mean_broadcastingð  s    z&TestMultinomial.test_mean_broadcastingc                 C   s²   t j d¡ d}d}ddddgddddgddddgddddgddd	d
gg}t j|t jd�}t||ƒ}t| |¡t |||¡ƒ t| |¡t |||¡ƒ t| 	¡ t 	||¡ƒ d S )Nr¶   é   )rz   r{   r|   rr  r   r	   é   rÑ   r³  r<   r£  rØ   )
r/   rq   r€   r0   rµ  r   r   r¦  rž  r†   )rE   r—   ZpvalsrK   Z	mn_frozenr6   r6   r7   rö   ô  s    6
zTestMultinomial.test_frozenc                 C   sZ   d}t j d¡}| |¡}d|d< |t  |¡ }t  |¡}t |||¡}t  |¡sVt‚d S )NéX   l   iŒRZØY g ÂëþKH´9rQ   )	r/   rq   rr   ru   rB   r   rž  Úisfiniter\   )rE   r—   rx   r¬  rK   rž  r6   r6   r7   Útest_gh_11860   s    

zTestMultinomial.test_gh_11860N)r›   rœ   r�   r¢  rª  r­  r±  r¸  r¹  r¾  rÄ  r   rÇ  rË  rÌ  rö   rÑ  r6   r6   r6   r7   rš  o  s   
rš  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestInvwishartc           	      C   sX  d}t  t  |¡d ¡}t  ||d  d ¡|t j|dd�< t  |j|¡}g }tdƒD ]\}t  t  |¡|d d  ¡}t  ||d  d ¡|t j|dd�< t  |j|¡}| |¡ qVt  |¡j}ddt  	ddd¡fd||fg}|D ]p\}}}t
||ƒ}t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| ¡ t
 ||¡ƒ t| |¡t
 |||¡ƒ qâd S r‰  )r/   rW   r±   r‹  rÈ   rÉ   rÇ   rv  r    rè   r   r   rS  r‡   rŒ  r   r„   )	rE   r�  ré   rÕ   rá   rK   rŽ  r�  Úiwr6   r6   r7   rö     s(    $$þ
zTestInvwishart.test_frozenc                 C   sÎ   t j d¡ d}d}t  |¡}t jdddtd�}t jdd	d	d
�}|D ]„}t||ƒ}t|d dd�}t	| 
¡ | 
¡ ƒ t	| ¡ | ¡ ƒ t	| |¡| |¡ƒ |j|d�}	|d ddf}
d}td|
||	ƒ qDd S )Nr�  r‘  r	   rM   é   r<   rØ   rz   rÑ   r’  rç   r˜  rg   r   rî   r   )r/   rq   r€   rC   r±   rÚ   rè   r   r   r   rS  r‡   r„   r�   r
   )rE   r”  r�  ré   r•  rÕ   r�  rÓ  Zigr�   r4   r!  r6   r6   r7   Útest_1D_is_invgamma/  s     

z"TestInvwishart.test_1D_is_invgammac                 C   s|  d}d}t  |¡}d|d< d|d< t||ƒ}t||ƒ}t j d¡ t ||¡}t j d¡ | ¡ }t j d¡ t ||¡}t j d¡ | ¡ }	t j d¡ t jjdd�}
t jt j 	|¡t j 	|d ¡t j 	|d	 ¡f d }t  
|¡}|
|t j|d
d�< t j |¡}| |¡}t  ||j¡}t j t j |¡¡}| |¡}t j t  ||j¡¡}t||ƒ t||ƒ t||ƒ t|	|ƒ d S )Nr=   rÑ   rç   r¯   ©r	   r   iêÈ rg   r	   r<   rQ   rŠ  )r/   rC   r   r   rq   r€   r�   Únormalrƒ  Z	chisquarerW   r‹  r•   rŸ   rÈ   rÉ   rž   r   )rE   r�  r�  ré   r…  rÓ  Zw_rvsZfrozen_w_rvsZiw_rvsZfrozen_iw_rvsZcovariancesZ	variancesr^   ÚDZDAZmanual_w_rvsZiDZiDAZmanual_iw_rvsr6   r6   r7   Útest_wishart_invwishart_2D_rvsM  sJ    



þÿü





z-TestInvwishart.test_wishart_invwishart_2D_rvsc              	   C   sÈ   t  ddddgddddgddddgddddgg¡}t  ddddgddddgddddgddddgg¡}t  ||g¡}| ¡ }t|ƒ t  d¡}t|d  |d ¡|dd	� t|d  |d ¡|dd	� d
S )úRegression test for gh-8844.r<   r	   r   rç   r=   rQ   rO   çVçž¯Ò<r  N)r/   r    Úcopyr   rC   r   rÈ   )rE   Za0Za1r&  ÚainvÚidentr6   r6   r7   Útest_cho_inv_batchˆ  s     


ý


ý
z!TestInvwishart.test_cho_inv_batchc              	   C   s  t  ddddgddddgddddgddddgg¡}t  ddddgddddgddd	dgddddgg¡}d
}t |||¡}|jd }t j |¡\}}t j |¡\}}t j ||¡}	|d | || d t  d¡  t	|d |ƒ || d d |  d|	 
¡   }
t||
ƒ dS )rÚ  r<   r	   r   rç   r=   r³  rP   rM   r£  rN   N)r/   r    r   r…   r1   r•   rÜ   Zsolver½   r+   Útracer   )rE   rÕ   ÚPsiÚnuZprobr¬  ÚsigZlogdetXZ	logdetPsir©   rL  r6   r6   r7   Útest_logpdf_4x4™  s4    


ý


ý

ÿþý
üzTestInvwishart.test_logpdf_4x4N)r›   rœ   r�   rö   rÕ  rÙ  rß  rä  r6   r6   r6   r7   rÒ    s
    ;rÒ  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestSpecialOrthoGroupc                 C   sl   t j d¡ t d¡}t  dddgdddgd	d
dgg¡}t||ƒ t jjdd�}tjd|d�}t||ƒ d S )Né  r=   gð‘(fÎï¿g^A�È.§¿g*ãB’¡¹?gñ:Ñdµ¯¨?gÖ‡2uóï¿gi�}ÕÂ›?gR#xl™F¹?g‚�^`˜D ?gž×ÑÓï?r   r“   )r/   rq   r€   r   r�   r    r   r¯  )rE   rK   rL  r~   r6   r6   r7   Útest_reproducibility³  s    
þ
z*TestSpecialOrthoGroup.test_reproducibilityc                 C   s<   t ttjd ƒ t ttjdƒ t ttjdƒ t ttjdƒ d S ©Nr  r	   r¸   )r³   r@   r   r�   ©rE   r6   r6   r7   Útest_invalid_dim¿  s    z&TestSpecialOrthoGroup.test_invalid_dimc                 C   s4   d}t |ƒ}|jdd�}t j|dd�}t||ƒ d S )NrP   r¶   r“   )r   r�   r   )rE   r�  r=  r>  r?  r6   r6   r7   Útest_frozen_matrixÅ  s
    z(TestSpecialOrthoGroup.test_frozen_matrixc                 C   sd   dd„ t ddƒD ƒ}dd„ |D ƒ}t|dgd dd	� |D ]$}tt ||j¡t |jd
 ¡ƒ q:d S )Nc                 S   s$   g | ]}t d ƒD ]}t |¡‘qqS ©r=   )rÇ   r   r�   ©Ú.0r�  rá   r6   r6   r7   Ú
<listcomp>Ï  s   
 þz<TestSpecialOrthoGroup.test_det_and_ortho.<locals>.<listcomp>r<   rÍ  c                 S   s   g | ]}t j |¡‘qS r6   ©r/   r•   rÛ   ©rî  rK   r6   r6   r7   rï  Ô  s     rù   é   ç‚vIhÂ%<=rÞ   r   )rÇ   r   r   r/   rÈ   rÉ   rC   r1   )rE   ry  ÚdetsrK   r6   r6   r7   Útest_det_and_orthoÎ  s    ÿÿz(TestSpecialOrthoGroup.test_det_and_orthoc                    s|   d}d}d}t j d¡ tj||d�‰d‰ t‡fdd„ˆ D ƒƒ‰‡ fd	d
„ˆ D ƒ}‡fdd
„|D ƒ}t|gt|ƒ |ƒ d S )NrM   rI  çš™™™™™©?ræ  rg   ©rì   r´  )r	   rO   r*  c                 3   s2   | ]*\‰‰ ˆˆ ft ‡ ‡fd d„ˆD ƒƒfV  qdS )c                    s   g | ]}|ˆ ˆ  ‘qS r6   r6   rñ  ©ÚecZerr6   r7   rï  ò  s     z=TestSpecialOrthoGroup.test_haar.<locals>.<genexpr>.<listcomp>N©Úsorted©rî  ©ry  rø  r7   Ú	<genexpr>ò  s     z2TestSpecialOrthoGroup.test_haar.<locals>.<genexpr>c                    s&   g | ]}ˆ D ]}||kr||f‘qqS r6   r6   ©rî  Ze0Úe1©Úelsr6   r7   rï  ó  s
        z3TestSpecialOrthoGroup.test_haar.<locals>.<listcomp>c                    s&   g | ]\}}t ˆ | ˆ | ƒd  ‘qS r²  ©r   ©rî  Úp0Úp1©Úprojr6   r7   rï  ô  s     )r/   rq   r€   r   r�   Údictr   r}  ©rE   r�  ÚsamplesZks_probÚpairsZks_testsr6   ©r  r  ry  r7   Ú	test_haarÜ  s    
zTestSpecialOrthoGroup.test_haarN)r›   rœ   r�   rç  rê  rë  rõ  r  r6   r6   r6   r7   rå  ²  s
   	rå  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zej	j
dd„ ƒZdS )ÚTestOrthoGroupc                 C   st   d}t j |¡ t d¡}tjd|d�}tt j |¡dƒ t  dddgdd	d
gdddgg¡}t	||ƒ t	||ƒ d S )Nræ  r=   r“   rQ   gÝÓÕ‹mØ?gÓ hÀ"·¿gE�¹‡„oí?g~7Ý²Cüì?gž’>­Ä¿g0JÐ_èÙ¿gÝ±Ø&�Ç¿gü ¤6qrï¿g`Xþ|[°”¿)
r/   rq   r€   r   r�   r   r•   rÛ   r    r   )rE   r€   rK   rŒ   rL  r6   r6   r7   rç  ø  s    
þ
z#TestOrthoGroup.test_reproducibilityc                 C   s<   t ttjd ƒ t ttjdƒ t ttjdƒ t ttjdƒ d S rè  )r³   r@   r   r�   ré  r6   r6   r7   rê    s    zTestOrthoGroup.test_invalid_dimc                 C   sV   d}t |ƒ}t |dd�}|jdd�}t j|dd�}|jdd�}t||ƒ t||ƒ d S )NrP   r¶   r   r“   r	   rg   )r   r�   r   ©rE   r�  r=  Úfrozen_seedr>  r?  Úrvs3r6   r6   r7   rë    s    
z!TestOrthoGroup.test_frozen_matrixc                 C   s°   dd„ t ddƒD ƒ}t dd„ |D ƒ¡}tt |¡t |j¡dd� tdgd	 d
d„ |D ƒƒ tdd„ |D ƒd	gd	 ƒ |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 r6   )r   r�   ©rî  rá   ©r�  r6   r7   rï    s   ÿú@TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>.<listcomp>rÑ   )rÇ   rü  r6   r  r7   rï    s   þ
ÿz5TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>r<   rÍ  c                 S   s   g | ]}d d„ |D ƒ‘qS )c                 S   s   g | ]}t j |¡‘qS r6   rð  rñ  r6   r6   r7   rï    s     r  r6   )rî  Úxxr6   r6   r7   rï    s     ró  rÞ   r   rÑ   c                 S   s$   g | ]}t  |d k ¡d  jd  ‘qS ©r   ©r/   Znonzeror1   ©rî  r
  r6   r6   r7   rï  #  s     c                 S   s$   g | ]}t  |d k ¡d  jd  ‘qS r  r  r  r6   r6   r7   rï  $  s     )rÇ   r/   r    r   ÚfabsrB   r1   r   r   rÈ   rÉ   rC   )rE   ry  rô  r  rK   r6   r6   r7   rõ    s    þÿz!TestOrthoGroup.test_det_and_orthoc                    s|   d}d}d}t j d¡ tj||d�‰d‰ t‡fdd„ˆ D ƒƒ‰‡ fd	d
„ˆ D ƒ}‡fdd
„|D ƒ}t|gt|ƒ |ƒ d S )NrM   rI  rö  i  rg   r÷  c                 3   s2   | ]*\‰‰ ˆˆ ft ‡ ‡fd d„ˆD ƒƒfV  qdS )c                    s   g | ]}|ˆ ˆ  ‘qS r6   r6   rñ  rø  r6   r7   rï  B  s     z6TestOrthoGroup.test_haar.<locals>.<genexpr>.<listcomp>Nrú  rü  rý  rø  r7   rþ  B  s     z+TestOrthoGroup.test_haar.<locals>.<genexpr>c                    s&   g | ]}ˆ D ]}||kr||f‘qqS r6   r6   rÿ  r  r6   r7   rï  C  s
        z,TestOrthoGroup.test_haar.<locals>.<listcomp>c                    s&   g | ]\}}t ˆ | ˆ | ƒd  ‘qS r²  r  r  r  r6   r7   rï  D  s     )r/   rq   r€   r   r�   r	  r   r}  r
  r6   r  r7   r  ,  s    
zTestOrthoGroup.test_haarc                    sh   t j d¡ dd„ }tddƒD ]D‰ d‡ fdd	„	}||ƒ}|tjjjƒ}tj ||¡\}}t	d
|ƒ qd S )Nræ  c                 S   s,   t j t jj| | fd�¡\}}}t  ||¡S ©Nrg   )r/   r•   r¨   rq   r×  rÈ   )r�  rª   Z_sr¬   r6   r6   r7   Úrandom_orthoL  s     z<TestOrthoGroup.test_pairwise_distances.<locals>.random_orthor<   rN   rI  r  c                    s<   t  ‡‡ fdd„t|ƒD ƒ¡}|t jj| ||jd�7 }|S )Nc                    s*   g | ]"}t  ˆˆ d �ˆˆ d � d ¡‘qS )r  r<   )r/   ru   )rî  Ú_)r�  r�   r6   r7   rï  R  s   ÿz\TestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statistics.<locals>.<listcomp>rg   )r/   r    rÇ   rq   r   r1   )r�   r  ZepsÚstatsr  )r�   r7   Úgenerate_test_statisticsQ  s
    þzHTestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statisticsrö  )rI  r  )
r/   rq   r€   rÇ   r§   r  r   r�   r   r   )rE   r  r  rL  rã   Z_Dr¬  r6   r  r7   Útest_pairwise_distancesG  s    	z&TestOrthoGroup.test_pairwise_distancesN)r›   rœ   r�   rç  rê  rë  rõ  r  r?   r¢   Zslowr   r6   r6   r6   r7   r  ÷  s   r  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestRandomCorrelationc              	   C   sr   t j d¡ d}t |¡}tj|dd�}t  ddddgdddd	gdddd
gdd	d
dgg¡}t||ƒ t||ƒ d S )Nræ  ©rç   rq  rå   r·   r“   rù   g¼Ñ“2©Ç¿g–AµÁ‰è»?gý¢ý…Í¿g 4Ô($™Í?gR}ç%èÔ?gqTn¢–æÆ¿)r/   rq   r€   r   r�   r    r   )rE   r  rK   rŒ   rL  r6   r6   r7   rç  b  s    



ý
z*TestRandomCorrelation.test_reproducibilityc                 C   s~   t ttjd ƒ t ttjdƒ t ttjdƒ t ttjdgƒ t ttjddgddggƒ t ttjddgƒ t ttjdddgƒ d S )	NÚtestr¸   r	   r<   r=   rO   rº  rz   )r³   r@   r   r�   ré  r6   r6   r7   Útest_invalid_eigsn  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   )rE   r  r=  r  r>  r?  r  r6   r6   r7   rë  w  s    
z(TestRandomCorrelation.test_frozen_matrixc           
         sÔ   dd„ ‰ t j d¡ ‡ fdd„tddƒD ƒ}| dd	d	d	g¡ d
d„ |D ƒ}dd„ |D ƒ}dd„ |D ƒ}dd„ |D ƒ}t||ddd� dd„ |D ƒ}t||ƒD ]\}}t||dd� qž|D ]}	t|	|	jdd� qºd S )Nc                 S   s   | | t |ƒ S r.   )ru   )rá   r  r6   r6   r7   r   ‹  s    z3TestRandomCorrelation.test_definition.<locals>.normr®  c                    s    g | ]}ˆ |t jj|d �ƒ‘qS )rg   )r/   rq   r   r  ©r   r6   r7   rï  �  s     z9TestRandomCorrelation.test_definition.<locals>.<listcomp>r<   rN   rO   r   c                 S   s   g | ]}d gt |ƒ ‘qS )rù   )r}  ©rî  r  r6   r6   r7   rï  “  s     c                 S   s   g | ]}t  |¡‘qS r6   )r   r�   r&  r6   r6   r7   rï  ”  s     c                 S   s   g | ]}t  t j |¡¡‘qS r6   )r/   r  r•   rÛ   rñ  r6   r6   r7   rï  š  s     c                 S   s   g | ]}t  |¡‘qS r6   )r/   Úprodr&  r6   r6   r7   rï  ›  s     ró  rï   c                 S   s   g | ]}t  |¡‘qS r6   )r/   rW   rñ  r6   r6   r7   rï  Ÿ  s     rÞ   )r/   rq   r€   rÇ   rv  r   ÚziprÉ   )
rE   r  rB   ry  rô  Z
dets_knownZdiagsr&  r'  rK   r6   r%  r7   Útest_definitionƒ  s    z%TestRandomCorrelation.test_definitionc              	   C   sf  t jddgddggtd�}t |¡}t|t  ddgddgg¡ƒ t jdd��¤ t  ddgddgg¡}t jddgdt  dd¡ggtd�}t | ¡ ¡}t||j	 
|¡ 
|¡ƒ t jd	dgdd
ggtd�}t | ¡ ¡}t||j	 
|¡ 
|¡ƒ W 5 Q R X t jddgddggtd�}t | ¡ ¡}t|d dƒ t jddgddggtd�}t | ¡ ¡}t|d dƒ d S )Nrz   r   r	   rØ   Úignore)ZoverrQ   gœu ˆ<ä7~ræ   re  r<   rì   gMùk   @)r/   r    rÚ   r   Z_to_corrr   ZerrstateZ	nextafterrÜ  rÉ   rÈ   )rE   rw  ÚgZm0r6   r6   r7   Útest_to_corr§  s"    
""z"TestRandomCorrelation.test_to_corrN)r›   rœ   r�   rç  r$  rë  r)  r,  r6   r6   r6   r7   r!  a  s
   	$r!  c                   @   s~   e Zd Zej dddg¡ej dddddg¡dd	„ ƒƒZej ddd
ddg¡dd„ ƒZdd„ Zej ddddg¡dd„ ƒZ	dS )ÚTestUniformDirectionr�  r	   r=   rh   NrM   )rM   rO   c           
      C   sv   t j d¡}t||d�}| |¡}t  |¡t  |¡ }}|j|||d�j}|j|ksXt	‚t j
j|dd�}	t|	dƒ d S )Nl   Sid)_i4 r   rg   rQ   rj   rù   )r/   rq   rr   r'   r�   r”   rC   r   r1   r\   r•   r   r   )
rE   r�  rh   rx   Zuniform_direction_distr  r‡   r˜   Zexpected_shapeZnormsr6   r6   r7   rM  É  s    
z!TestUniformDirection.test_samplesr   r  r¸   c              	   C   s,   d}t jt|d�� t |¡ W 5 Q R X d S )NzMDimension of vector must be specified, and must be an integer greater than 0.r:   )r?   r   r@   r'   r�   )rE   r�  rF   r6   r6   r7   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 )NrM   ræ  r   r“   )r'   r�   r   r  r6   r6   r7   Útest_frozen_distributionÝ  s    
z-TestUniformDirection.test_frozen_distributionr<   r£  c                 C   s¾   t j d¡}t||d�}|jdd�\}}||| | 8 }|t j |¡ }t|| ddd� |jdd�}|| }|| }t  ||¡}	|	t j	7 }	|	dt j	  }	t
ƒ }
t|	|
jƒ}|jd	ksºt‚d S )
Nl   @9š¼Y sr   r<   rg   r   r«  r  é'  rö  )r/   rq   rr   r'   r�   r•   r   r   Úarctan2r  r   r    rŽ   Úpvaluer\   )rE   r�  rx   Zspherical_distZv1Zv2r  Ús1Ús2ZanglesZuniform_distZkstest_resultr6   r6   r7   Útest_uniformé  s    
z!TestUniformDirection.test_uniform)
r›   rœ   r�   r?   r¢   r£   rM  rê  r.  r4  r6   r6   r6   r7   r-  È  s   
r-  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestUnitaryGroupc                 C   s^   t j d¡ t d¡}tjddd�}t  dddgddd	gd
ddgg¡}t||ƒ t||ƒ d S )Nræ  r=   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Õ'Ó?)r/   rq   r€   r   r�   r    r   )rE   rK   rŒ   rL  r6   r6   r7   rç    s    
þ
z%TestUnitaryGroup.test_reproducibilityc                 C   s<   t ttjd ƒ t ttjdƒ t ttjdƒ t ttjdƒ d S rè  )r³   r@   r   r�   ré  r6   r6   r7   rê    s    z!TestUnitaryGroup.test_invalid_dimc                 C   sV   d}t |ƒ}t |dd�}|jdd�}t j|dd�}|jdd�}t||ƒ t||ƒ d S )NrP   ræ  r   r“   r	   rg   )r   r�   r   r  r6   r6   r7   rë    s    
z#TestUnitaryGroup.test_frozen_matrixc                 C   sJ   dd„ t ddƒD ƒ}|D ],}tt || ¡ j¡t |jd ¡dd� qd S )Nc                 S   s$   g | ]}t d ƒD ]}t |¡‘qqS rì  )rÇ   r   r�   rí  r6   r6   r7   rï     s   
 þz3TestUnitaryGroup.test_unitarity.<locals>.<listcomp>r<   rÍ  r   rÛ  r  )rÇ   r   r/   rÈ   ZconjrÉ   rC   r1   )rE   ry  rK   r6   r6   r7   Ú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 )	NrM   rI  ræ  rg   c                 S   s   g | ]}t j |¡‘qS r6   )r§   r•   Zeigvalsrñ  r6   r6   r7   rï  4  s     z.TestUnitaryGroup.test_haar.<locals>.<listcomp>r<   rö  )r/   rq   r€   r   r�   ru  r0  ÚimagÚrealr    Zravelr   r  rŽ   r   r1  )rE   r�  r  ry  r  rK   r2   r6   r6   r7   r  (  s     zTestUnitaryGroup.test_haarN)r›   rœ   r�   rç  rê  rë  r6  r  r6   r6   r6   r7   r5     s
   	r5  c                   @   s  e Zd Zddgddgddgddgddgddgddgddgddgddgg
ddgddgddggddddd	ddd
dddg
fdddgdddgdddgdddgdddggdddgdd d!gd dd"gd!d"dggd#d$d%d&d'd(gfgZej d)e¡d*d+„ ƒZej d)e¡d,d-„ ƒZd.d/„ Z	d0d1„ Z
ed2ƒd3d4„ ƒZd5d6„ Zd7d8„ Zd9d:d;d<dgdd<ggd;ddgd<dgdd<ggdfd;d<dgdd<ggd<ddgd<dgdd<ggd<fd<d<gd;d;d<d<gddgddggdfd<d<gd;d<d<d<gddgddggd<fd<d<gd<dgdd<ggd;d<d<gd<dgdd<ggdfd<d<gd<dgdd<ggd<d<d<gd<dgdd<ggd<fgZej d=e¡d>d?„ ƒZddddgdggdfdgdgddgdggdfe dg¡e dg¡ddgdggdfgZej d=e¡d@dA„ ƒZdBdC„ ZdDdE„ ZdFdG„ Zej dHdIdJg¡ej dKddddg¡ej dLddMejg¡dNdO„ ƒƒƒZd;S )PÚTestMultivariateTr	   r<   rO   r=   rM   r   g|	ßŒ–�Œ?gv
®Å2R?g0Ü÷$H?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î?rQ   é2   rù   rç   ri  rc  r£  gJ#Ž¥RÉ<g^Ó±�Ê<gš‹L[É<gêN=à¼Ê<gü`$æ§ÁË<zx, loc, shape, df, ansc                 C   s(   t |||dd�}| |¡}t||ƒ d S ©Nr   r   )r#   r„   r   )rE   rK   rí   r1   r�  ÚansÚdistÚvalr6   r6   r7   Útest_pdf_correctnessƒ  s    
z&TestMultivariateT.test_pdf_correctnessc           	      C   s8   t |||dd�}| |¡}| |¡}tt |¡|ƒ d S r;  )r#   r„   r…   r   r/   r½   )	rE   rK   rí   r1   r�  r<  r=  r¨  r©  r6   r6   r7   Útest_logpdf_correct‰  s    

z%TestMultivariateT.test_logpdf_correctc              
   C   s>   ddddddddddg
}t j|dd	�}t |¡}t||ƒ d S )
Nr³  rP   rO   r	   éýÿÿÿr   rQ   r=   ©r�  )r#   r„   r$   r   )rE   rK   r>  r<  r6   r6   r7   Útest_mvt_with_df_one_is_cauchy‘  s    
z0TestMultivariateT.test_mvt_with_df_one_is_cauchyc                 C   s„   d}t ddddd�}|jdd�}t|ƒ\}}||ks8t‚t ddgd	d
gd
d	ggddd�}|jdd�}t|ƒ\}}||k ¡ s€t‚d S )Nrz   r   r	   é † ©r�  r€   rg   rS   r=   rÑ   rQ   é*   )r#   r�   r%   r\   rÓ   )rE   Z	P_VAL_MINr=  r  r  r¬  r6   r6   r7   Ú&test_mvt_with_high_df_is_approx_normal—  s    ÿz8TestMultivariateT.test_mvt_with_high_df_is_approx_normalz'scipy.stats.multivariate_normal._logpdfc                 C   s`   t ddtjdd�}t|tƒs t‚t jdtjd� |jdks>t‚t jdtjd� |jdks\t‚d S )Nr   r	   rP   rE  rB  r<   )	r#   r/   rÌ   r‚   r   r\   r„   Z
call_countr…   )rE   Zmockr=  r6   r6   r7   Ú!test_mvt_with_inf_df_calls_normal©  s    z3TestMultivariateT.test_mvt_with_inf_df_calls_normalc           	      C   s"  d}t  |¡}t  |¡}d}t  |¡}t|||ƒ |¡}t  |¡sFt‚t|||ƒ |¡}t  |¡sft‚d}t j ||f¡}t|||ƒ |¡}|j	|fksœt‚t|||ƒ |¡}|j	|fks¾t‚tt  d¡t  d¡dƒ 
¡ }t  |¡sèt‚d}tt  d¡t  d¡dƒj
|d�}|j	|fk�st‚d S )NrO   ç      @rP   r	   rg   )r/   r”   rC   r#   r„   Zisscalarr\   r…   rq   r1   r�   )	rE   r�  rí   r1   r�  rK   r2   Z	n_samplesrh   r6   r6   r7   Útest_shape_correctness²  s(    


 z(TestMultivariateT.test_shape_correctnessc                 C   s6   t ƒ }t|jdgƒ t|jdggƒ |jdks2t‚d S )Nr   r	   ©r#   r   rí   r1   r�  r\   )rE   r=  r6   r6   r7   Útest_default_argumentsÒ  s    z(TestMultivariateT.test_default_arguments)NNNr   r	   r	   )NNrP   r   r	   rP   NrP   z*loc, shape, df, loc_ans, shape_ans, df_ansc                 C   s8   t |||d�}t|j|ƒ t|j|ƒ |j|ks4t‚d S )N©rí   r1   r�  rK  ©rE   rí   r1   r�  Zloc_ansZ	shape_ansZdf_ansr=  r6   r6   r7   Útest_default_argsã  s    z#TestMultivariateT.test_default_argsc                 C   s4   t |||ƒ}t|j|ƒ t|j|ƒ t|j|ƒ d S r.   )r#   r   rí   r1   r�  rN  r6   r6   r7   Ú&test_scalar_list_and_ndarray_argumentsð  s    z8TestMultivariateT.test_scalar_list_and_ndarray_argumentsc                 C   sš   ddgg}t ttft|d�Ž ddgddgddgg}t ttft||d�Ž t d¡}t d¡}d}t ttft|||d�Ž d}t ttft|||d�Ž d S )	Nr	   )rí   r<   r=   )rí   r1   rQ   rM  r   )r³   r@   r#   r	  r/   r”   rC   )rE   rí   r1   r�  r6   r6   r7   Ú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 )NrO   r=   rg   r<   rE  rÑ   )r/   rq   r¯  r   rC   r#   r�   r   )rE   rx   rí   r1   rŠ   Zdist2Zsamples1Zsamples2r6   r6   r7   rç  	  s    
z&TestMultivariateT.test_reproducibilityc                 C   s6   t ddgddgddggddd�}ttjjtf|Ž d S )Nr   r	   F)rí   r1   r�  rI   )r	  r³   r/   r•   r  r#   )rE   r4   r6   r6   r7   Útest_allow_singular	  s     z%TestMultivariateT.test_allow_singularrh   )rÑ   r=   )rM   rN   rO   r=   r�  r�  rW  c                 C   s<   t t |¡t |¡|ƒ}|j|d�}|j||f ks8t‚d S r  )r#   r/   r”   rC   r�   r1   r\   )rE   rh   r�  r�  r=  r�   r6   r6   r7   Útest_rvs	  s    zTestMultivariateT.test_rvs)r›   rœ   r�   Z	PDF_TESTSr?   r¢   r£   r?  r@  rC  rG  r-   rH  rJ  rL  ZDEFAULT_ARGS_TESTSrO  r/   r    ZARGS_SHAPES_TESTSrP  rQ  rç  rR  rÌ   rS  r6   r6   r6   r7   r9  :  s¤   
öþöè(ûýûìÛB


 **""..ø
$ý

r9  c                   @   s  e Zd Zej dddgddgddfddgddgdejfd	dgddgdejfddgd
dgdejfddgddggddgd
dggddgejejgfd	dgd
dgdejfddgddgdejfddgddgdejfddgddgdejfddgddgdejfg
¡dd„ ƒZ	dd„ Z
dd„ Zdd„ Zej ddddddgdfdddddg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 g ej¡e g ej¡dg fddgddgddfdddgdd&dgd&d'fg¡d(d)„ ƒZej dddgddgdd*ggdd d+gfdgdggdgdggddgd,d-gfdgdgggdgdggddgd,d-ggfdgdggdggggddgd,d-gggfg¡d.d/„ ƒZd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Zd>d?„ Zd@dA„ ZdBdC„ ZdDdE„ ZdFS )GÚTestMultivariateHypergeomzx, m, n, expectedr=   rO   rM   rÑ   rP   g©¥¹Âêñ¿r   rA  éûÿÿÿr	   r<   rU   iúÿÿÿiöÿÿÿrÎ  rÍ  rQ   iùÿÿÿc                 C   s    t  |||¡}t||dd� d S )Ng�íµ ÷Æ°>rÞ   )r   rž  r   ©rE   rK   rw  r—   rL  Úvalsr6   r6   r7   r¢  )	  s    z%TestMultivariateHypergeom.test_logpmfc                 C   st   t jddgddgdd�}tjddddd�}t||d	d
� t jddgddgdd�}tjddddd�}t||d	d
� d S )Nr=   r	   rÑ   rM   rO   )rK   rw  r—   é   )rÎ   r©   r—   r  r�  rÞ   rP   é   )r   r¦  r"   r   r§  r6   r6   r7   Útest_reduces_hypergeomG	  s    z0TestMultivariateHypergeom.test_reduces_hypergeomc                 C   s:   t ddgdd�}|jddd�}t| d¡| ¡ d	d
� d S )Nr=   rM   rO   ©rw  r—   rI  r®  r}   r   rî   rÞ   ©r   r�   r   r‡   ©rE   r™   r�   r6   r6   r7   rS  R	  s    z"TestMultivariateHypergeom.test_rvsc                 C   sF   t ddgddggddgd�}|jddd	�}t| d
¡| ¡ dd� d S )Nr=   rM   rÑ   rO   r³  r[  ©rI  r<   r®  r}   r   rî   rÞ   r\  r]  r6   r6   r7   Útest_rvs_broadcastingY	  s    z/TestMultivariateHypergeom.test_rvs_broadcastingzm, nrÔ  c                 C   s8   t  ||¡}t |¡}| ¡ }|||dk< t||ƒ d S )Nr   )r   r�   r/   r0   rÜ  r   )rE   rw  r—   r2   Zres_exr6   r6   r7   Útest_rvs_gh16171^	  s
    
z*TestMultivariateHypergeom.test_rvs_gh16171g z÷lÂâÔ?r£  r³  gQ°µ­Ù?gEçÙ³¤|?gé�
¸çyÞ?rN   g‘z²p†?c                 C   s    t  |||¡}t||dd� d S ©Nrú   rÞ   ©r   r¦  r   rV  r6   r6   r7   r¸  i	  s    z"TestMultivariateHypergeom.test_pmfrX  gõ­ æÎÕ?rù   rË   c                 C   s    t  |||¡}t||dd� d S ra  rb  rV  r6   r6   r7   r¹  }	  s    
z/TestMultivariateHypergeom.test_pmf_broadcastingc                 C   sB   t jdddgdd�}dddgdd	d
gdd
dgg}t||dd� d S )Nr=   rP   rÑ   rÍ  r[  g«×Âf_�ä?gÁ&BUúÐ¿g–ˆCx¬@Ø¿g�gsƒ>dò?gZ¤ásKì¿gö¿3å5ô?r�  rÞ   ©r   r˜   r   r¼  r6   r6   r7   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 )NrP   r³  rÑ   rX  r£  rÍ  r[  gÍÌÌÌÌÌð?gÍÌÌÌÌÌð¿gö(\�Âõø?gö(\�Âõø¿r�  rÞ   rO   rM   rË   g333333é?g333333é¿rc  r¿  r6   r6   r7   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Ñ   rM   rO   r[  rX  ©r©   r—   r  r�  rÞ   )r   rS  r"   r   )rE   Úvar0Úvar1r6   r6   r7   Ú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Ñ   rM   rO   r£  r[  r   r�  rÞ   r	   r¤  gÌ�3—eYæ?g�I›ª{¤õ?rË   )r   rS  r   )rE   re  rf  Úvar2Úvar3Zvar4Zvar5Zvar6r6   r6   r7   Ú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Ñ   rM   rO   r[  rX  rd  r   r�  rÞ   rÍ  r£  g      @r_  )r   r‡   r"   r   ©rE   Úmean0rÊ  r  Zmean3r6   r6   r7   rË  µ	  s    z#TestMultivariateHypergeom.test_meanc                 C   s@   t jddgddggddgd�}ddgd	d
gg}t||dd� d S )Nr=   rM   rÑ   rO   r£  r[  r·   r¸   gUUUUUU@gUUUUUU@r�  rÞ   )r   r‡   r   )rE   rl  rÊ  r6   r6   r7   rÌ  ¿	  s    z0TestMultivariateHypergeom.test_mean_broadcastingc                 C   sÄ   t jdddgdd�}t|dddgƒ t jdddgdd�}t|tjtjtjgƒ t jdddgdddggdd�}t|tjtjtjgdddggdd� t jt g tj¡dd�}t|g ƒ t|j	d	kƒ d S )
Nr   r[  rË   r	   r<   rù   ç—ÔFFõg<rÞ   r  )
r   r‡   r   r/   r  r   r    Úint_r   r1   rk  r6   r6   r7   Útest_mean_edge_casesÄ	  s    ÿ
z.TestMultivariateHypergeom.test_mean_edge_casesc                 C   sÈ   t jdddgdd�}t|dddgdd� t jdddgdd�}t|tjtjtjgƒ t jdddgdddggdd�}t|tjtjtjgdddggdd� t jt g tj¡dd�}t|g ƒ t|j	d	kƒ d S )
Nr   r[  rË   g¼‰Ø—²Òœ<rÞ   r	   r<   rm  r  )
r   rS  r   r   r/   r  r    rn  r   r1   )rE   re  rf  rh  ri  r6   r6   r7   Útest_var_edge_casesÓ	  s    ÿ
z-TestMultivariateHypergeom.test_var_edge_casesc                 C   sÈ   t jdddgdd�}dddgdddgdddgg}t||dd� t jdddgdd�}dddgdddgdddgg}t||ƒ t jt g tj¡dd�}tjg tjd� dd¡}t||dd� t	|j
dkƒ d S )	Nr	   r   r[  rË   rm  rÞ   rØ   rì   )r   r˜   r   r   r/   r    rn  Zfloat_rJ  r   r1   )rE   Zcov0r½  rÀ  rÁ  rÂ  rÃ  r6   r6   r7   Útest_cov_edge_casesâ	  s    
z-TestMultivariateHypergeom.test_cov_edge_casesc                 C   sÐ   t j d¡ d}ddddg}ddddgddddgdddd	gddddgddd
dgg}t j|t jd�}t||ƒ}t| |¡t |||¡ƒ t| |¡t |||¡ƒ t| 	¡ t 	||¡ƒ t| 
¡ t 
||¡ƒ d S )Nr¶   rÍ  rP   r³  rÎ  é   r   r	   rÑ   r<   r£  rØ   )r/   rq   r€   r0   rn  r   r   r¦  rž  rS  r˜   )rE   r—   rw  rK   Z
mhg_frozenr6   r6   r7   rö   ð	  s"    
 
ÿ

ÿ
ÿz%TestMultivariateHypergeom.test_frozenc                 C   s�   t ttjdddƒ t ttjddgdƒ t ttjddgdgdƒ t ttjddgddgdƒ t ttjddgddgdƒ t ttjddgddgdƒ d S )	NrM   rÑ   rO   g      @rI  rX  g      %@g      /@)r³   r@   r   r¦  Ú	TypeErrorré  r6   r6   r7   Útest_invalid_params 
  s     ÿ ÿ ÿz-TestMultivariateHypergeom.test_invalid_paramsN)r›   rœ   r�   r?   r¢   r£   r/   ZNINFr  r¢  rZ  rS  r_  r`  r    rn  r¸  r¹  r¾  rÄ  rg  rj  rË  rÌ  ro  rp  rq  rö   rt  r6   r6   r6   r7   rT  (	  s~    
ÿëþ
 
 þ
 þõþ
"&&üþ	

rT  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)r/   rq   rr   ré  r6   r6   r7   Úget_rng
  s    zTestRandomTable.get_rngc              	   C   s²  d}t jt|d�� tddggddgƒ W 5 Q R X d}t jt|d�� tddgddggƒ W 5 Q R X d}t jt|d�� tddgddgƒ W 5 Q R X d}t jt|d�� tddgdd	gƒ W 5 Q R X d
}t jt|d�� tddgddgƒ W 5 Q R X d}t jt|d�� tddgdddgƒ W 5 Q R X d}t jt|d�� tddgdddgƒ W 5 Q R X ddg}dddg}t ddgdddg¡\}}}t||ƒ t||ƒ |t |¡k�s®t‚d S )Nz`row` must be one-dimensionalr:   r	   r<   z`col` must be one-dimensionalz*each element of `row` must be non-negativerQ   z*each element of `col` must be non-negativerS   z'sums over `row` and `col` must be equalr   z(each element of `row` must be an integergÍÌÌÌÌÌ @z(each element of `col` must be an integerre  r=   )	r?   r   r@   r&   Z_process_parametersr   r/   ru   r\   )rE   rF   ÚrowÚcolrÔ   r–  r—   r6   r6   r7   Útest_process_parameters
  s6    


z'TestRandomTable.test_process_parameterszscale,method))r	   Úboyett)r×   Ú	patefieldc                 C   s\   t  ddg¡| }t  dddg¡| }t}|j|||dd�}|j||d dd�}t||ƒ d S )Nr	   r=   r<   ©Úmethodr~   )r/   r    r&   r�   r   )rE   ré   r}  rw  rx  ÚctrL  Úgotr6   r6   r7   Útest_process_rvs_method_on_None4
  s    z/TestRandomTable.test_process_rvs_method_on_Nonec              	   C   sD   ddg}dddg}d}t jt|d�� tj||dd� W 5 Q R X d S )Nr	   r=   r<   z$'foo' not recognized, must be one ofr:   Zfoo©r}  )r?   r   r@   r&   r�   )rE   rw  rx  rF   r6   r6   r7   Ú$test_process_rvs_method_bad_argument@
  s
    
z4TestRandomTable.test_process_rvs_method_bad_argumentr=  )TFr½   c              	      sÚ  |   ¡ }ddg‰dddg‰ tjˆˆ dd|d�}|r<tˆˆ ƒnt}t||rLd	nd
ƒ‰|sjˆ‰‡ ‡‡fdd„‰|rz‡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üt‚t|	jd ƒD ]F}t|	jd ƒD ]0}|	||f }|||f }||ƒ}t	||ƒ �q�q
dddgdddgg}t	tj|dd�ˆƒ ||ƒ}	|	dk�s�t‚dddgdddgg}t	tj|dd�ˆ ƒ ||ƒ}	|	dk�sÎt‚d}tjt|d�� |dgƒ W 5 Q R X d}tjt|d�� |dggƒ W 5 Q R X d}tjt|d�� |tjggƒ W 5 Q R X d}tjt|d�� |dggƒ W 5 Q R X d}tjt|d�� |dddggƒ W 5 Q R X d}tjt|d�� |ddgddggƒ W 5 Q R X d S )Nr<   rN   r	   r=   rO   rI  rz  ©rh   r}  r~   rž  r¦  c                    s   ˆ| ˆˆ ƒS r.   r6   rJ   )rx  Úoriginal_methodrw  r6   r7   r}  Z
  s    z/TestRandomTable.test_pmf_logpmf.<locals>.methodc                    s   t  ˆ | ƒ¡S r.   )r/   rÙ   rJ   r�  r6   r7   rL   \
  ó    z1TestRandomTable.test_pmf_logpmf.<locals>.<lambda>r   T©rk   Zreturn_countsrz   rÞ   )rÑ   r×   rQ   rj   rS   z$`x` must be at least two-dimensionalr:   z%`x` must contain only integral valuesre  z)`x` must contain only non-negative valuesz"shape of `x` must agree with `row`z"shape of `x` must agree with `col`)rv  r&   r�   rX   r/   Úuniquer   r}  r¡   r   rJ  r1   r\   rÇ   ru   r?   r   r@   r  )rE   r=  r½   rx   r�   Úobjr¦  Ú
unique_rvsÚcountsr¬  Úp2Zrvs_ndrá   râ   ZpijZrvijZqijrK   rF   r6   )rx  r}  r„  rw  r7   Útest_pmf_logpmfI
  sn    

 ÿÿzTestRandomTable.test_pmf_logpmfr}  )rz  r{  c                 C   sœ   |   ¡ }ddg}dddg}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 )Nr<   rN   r	   r=   rO   rI  rƒ  r   rö  r  rQ   rj   r^  rS   )rI  r=   )	rv  r&   r�   r‡   r   r/   ru   r   Zbroadcast_to)rE   r}  rx   rw  rx  r�   r‡   r6   r6   r7   Útest_rvs_mean™
  s    
ÿzTestRandomTable.test_rvs_meanc                 C   sp   |   ¡ }ddg}dddg}tj||dd|d�}tj||dd	|d�}tj|d
d�}tj|d
d�}t||dd� d S )Nr<   rN   r	   r=   rO   r/  rz  rƒ  r{  r   rj   ç{®Gáz”?r  )rv  r&   r�   r/   rS  r   )rE   rx   rw  rx  r>  r?  r½  r  r6   r6   r7   Útest_rvs_cov¨
  s    
ÿÿzTestRandomTable.test_rvs_covc           
   	   C   sb  ddg}dddg}t j||||  ¡ d�}|jdks6t‚t j||d||  ¡ d�}|jd	ks\t‚t||d
 ƒ t j||d
||  ¡ d�}|jdks�t‚t j||d||  ¡ d�}|jdks¶t‚t j||d||  ¡ d�}|jdksÜt‚t| ddd¡|dd� d}	tj	t
|	d�� t j||d||  ¡ d� W 5 Q R X tj	t
|	d��  t j||tj||  ¡ d� W 5 Q R X d S )Nr<   rN   r	   r=   rO   r|  r*  rƒ  r‡  r   )r   r<   r=   rÔ  )rÔ  r<   r=   )rO   rM   )rO   rM   r<   r=   rÛ  rÞ   z/`size` must be a non-negative integer or `None`r:   rQ   )r&   r�   rv  r1   r\   r   r   rJ  r?   r   r@   r/   r  )
rE   r}  rw  rx  r™   Zrv2Zrv3Zrv4Zrv5rF   r6   r6   r7   Útest_rvs_size¶
  sB    

ÿÿÿÿÿÿÿzTestRandomTable.test_rvs_sizec           	      C   sj   ddg}dddg}t }|j||d||  ¡ d�}tj|dd	d
�\}}| |||¡}t|t|ƒ |dd� d S )Nr<   rN   r	   r=   rO   rD  rƒ  r   Tr†  rŽ  rÞ   )r&   r�   rv  r/   r‡  r¦  r   r}  )	rE   r}  rw  rx  r~  r�   r‰  rŠ  r¬  r6   r6   r7   Útest_rvs_methodà
  s    
ÿzTestRandomTable.test_rvs_methodc                 C   s€   dddg}ddddg}t ||ƒ}|jd||  ¡ d�}t dt|ƒt|ƒf¡}ddddgddddgddddgg|d< t||ƒ d S )Nr   r	   rI  r|  .©r&   r�   rv  r/   r”   r}  r   ©rE   r}  rw  rx  r
  r™   rL  r6   r6   r7   Útest_rvs_with_zeros_in_col_rowõ
  s    




þz.TestRandomTable.test_rvs_with_zeros_in_col_row)Nrz  r{  rx  r   rw  c                 C   sD   t ||ƒ}|jd||  ¡ d�}t dt|ƒt|ƒf¡}t||ƒ d S )NrÑ   r|  r’  r“  r6   r6   r7   Útest_rvs_with_edge_cases  s    
z(TestRandomTable.test_rvs_with_edge_casesr¬   r‚  c                 C   sœ   dd l m  m} tjddgtjd�}tjdddgtjd�}t|d|› �ƒ}t |¡}||||d|  ¡ ƒ}|j	dt
|ƒt
|ƒfks†t‚t |¡|ks˜t‚d S )Nr   r	   r=   rØ   r<   Z	rvs_rcont)Zscipy.stats._rcontr  Ú_rcontr/   r    Zint64rX   ru   rv  r1   r}  r\   )rE   r¬   r–  rw  rx  r�   ZntotÚresultr6   r6   r7   Útest_rvs_rcont
  s    
zTestRandomTable.test_rvs_rcontc                 C   s†   ddg}dddg}t |||  ¡ d�}| ¡ }t  ||¡}t|| ¡ ƒ t  |||¡}t|| |¡ƒ t  |||¡}t|| |¡ƒ d S )Nr<   rN   r	   r=   rO   r   )r&   rv  r�   r‡   r   r¦  rž  )rE   rw  rx  r
  r  rL  r6   r6   r7   rö     s    
zTestRandomTable.test_frozenc                 C   sX   ddg}dddg}t |||  ¡ d�}t j||d||  ¡ d�}|jd|d	�}t||ƒ d S )
Nr<   rN   r	   r=   rO   r   rÑ   rƒ  )rh   r}  )r&   rv  r�   r   )rE   r}  rw  rx  r
  rL  r  r6   r6   r7   Útest_rvs_frozen+  s    
ÿzTestRandomTable.test_rvs_frozenN)r›   rœ   r�   rv  ry  r?   r¢   r£   r€  r‚  rŒ  r�  r�  r�  r‘  r”  r•  r˜  rö   r™  r6   r6   r6   r7   ru  
  s8   $ÿ

	N

)


ru  c                 C   sd   | j }d| _ | j|ddiŽ t | ¡}| j|ddiŽ}t |¡}|j|ddiŽ}t||ƒ || _ d S )Nr¶   rh   r£  )r~   r�   ÚpickleÚdumpsÚloadsr   )Údistfnr4   r°  r«   Zr0Z	unpickledÚr1r6   r6   r7   Úcheck_pickling6  s    


rŸ  c               	   C   sŠ   t  d¡} d| d< d| d< tdgtt  dg¡fgtd| fgtd| fgtddd	d
gfgtdgt	dgg}|D ]\}}t
||ƒ t||ƒ qhd S )Nr=   rç   r¯   rÖ  r6   rù   rÑ   rM   rr  rz   r÷   )r/   rC   r   r   r    r   r   r   r   r   r,   rŸ  )ré   Údistsr�  r4   r6   r6   r7   Útest_random_state_propertyJ  s    


ù	
r¡  )OÚ__doc__rš  Znumpy.testingr   r   r   r   r   r   r?   r   r³   Ztest_continuous_basicr
   r  r/   Zscipy.linalgr§   Zscipy.stats._multivariater   r   r   r   Zscipy.statsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   Zscipy.integrater*   Zscipy.specialr+   Zcommon_testsr,   Zunittest.mockr-   r8   r9   r­   r®   r/  rN  r  r€  rš  rÒ  rå  r  r!  r-  r5  r9  rT  ru  rŸ  r¡  r6   r6   r6   r7   Ú<module>   sb    l F     I B @   %Ejg8: o e  ,