o
    g                    @   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| |g|R i | t| j|j d S N)npasarrayr   r   shape)resrefargskwargs r6   a/home/ubuntu/cloudmapper/venv/lib/python3.10/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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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 sw   Y  d
}t jt|d t
dtdf W d    n1 sw   Y  d}t jt|d t
tddf W d    n1 sw   Y  d}t jt|d t
g dtdf W d    d S 1 sw   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	   r<   r=   )pytestr   
ValueErrorr(   CovViaPrecisionr/   oneseyeCovViaDiagonalCovViaCholeskyCovViaEigendecompositionselfmessager6   r6   r7   test_input_validation0   s8   "z$TestCovariance.test_input_validationc                 C   s   t | ddS )NTallow_singular)r   xr6   r6   r7   <lambda>R      zTestCovariance.<lambda>)Diagonal	PrecisionCholeskyEigendecompositionPSDr@   )   r	   r=   )r	         )r=   rZ      )r	   r   r=   )rX   r   )r\   rX   r   r   r   r   )diagonal full rankzgeneral full rankzdiagonal singularzgeneral singularr	   N)r   r\   r_   cov_type_namer\   c           	      C   s   t g d}g d}ttd| }| j| }ttd|  }|||}|||}t|t|ks8J t|	||	| d S )Nr@   )r<   rX   CovViafrom_)
r/   diaggetattrr(   _covariance_preprocessingr)   lowertyper   whiten)	rJ   r`   ArP   cov_typepreprocessingfactoryr2   r3   r6   r6   r7   test_factories^   s   
zTestCovariance.test_factoriesmatrix_typec                 C   sx  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	rd
|vrt|||
 |	jdd}
||
}|
|j }t|d jdd|d jdd t|d	rd
|vrt|||
 d S d S d S )Nrb    does not support 	 matricesTrM      VGiVK r=   size	_colorizesingularr<   rZ   r=   r<   r\   axis)
_cov_typesrA   skip	_matricesre   r(   rf   r   r8   log_pdetr   rankr1   r/   r0   r>   randomdefault_rngri   Uhasattrcolorizesum)rJ   ro   r`   rK   rj   rk   rl   psd
cov_objectrngrP   r2   r3   r6   r6   r7   test_covariancel   s4   






"zTestCovariance.test_covariancert   rw   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rt|t| t|t| nt|j|j t|j|j t|| t|
|||	|| t|||| t|
|||	|| t|||| t|
||	|  t| |  d S )Nrb   rp   rq   皙?皙?333333?TrM   rr   rs   rt   random_stateseed)rz   rA   r{   r|   re   r(   rf   r   r/   r   r   rvs
isinstance	CovViaPSDr8   squeezer   r1   pdflogpdfentropy)rJ   rt   ro   r`   rK   rj   rk   rl   meanr   mvndist0dist1r   rP   x1x2r6   r6   r7   test_mvn_with_covariance   s:   



z'TestCovariance.test_mvn_with_covariancec                 C   s   d}| j | }ttd| }| j| }g d}|||}t}	t||dd}
t||dd}tjd}|j|||d}t|		||||
	| t|	||
	| t|	
||||

| t|
||

| d S )Nr^   rb   r   TrM   rr   rs   )r|   re   r(   rf   r   r/   r   r   r8   cdflogcdf)rJ   rt   r`   ro   rj   rk   rl   r   r   r   r   r   r   rP   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 d    d S 1 sw   Y  d S )Nz7The `Covariance` class cannot be instantiated directly.r:   )rA   r   NotImplementedErrorr)   rI   r6   r6   r7   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	   r<   g:0yEr   zThe input matrix must be...r:   l   .ypGw r   )r/   rd   r1   zerosrA   r   rB   r   r   r   r   r)   from_eigendecompositionlinalgeighr   )rJ   rj   nr   r   rng1rng2covrvr2   r3   r6   r6   r7   test_gh9942   s   


zTestCovariance.test_gh9942)__name__
__module____qualname__rL   r/   rd   r   invcholeskyr   rf   arraylist_all_covariance_typesr|   rz   rA   markparametrizern   r   tupler   r   r   filterwarningsr   r6   r6   r6   r7   r9   .   sD    



&%
r9   c                 C   s$   t j| | }tj|\}}}|S r.   )r/   r   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dd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;S )<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_raisesrB   r   r   r   )rJ   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   rX   )
r/   r   r   r   r   r   ndimr   absr   )rJ   rP   r   r   r   r   r6   r6   r7   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   rX   )
r/   r   r   r   r   r   r   r   r   logrJ   rP   r   r   d1d2r6   r6   r7   test_logpdf     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   rX   r	   )	r/   r   r   r   r   r   r   r   r   rJ   rP   r   r   d3d4r6   r6   r7   test_logpdf_default_values'     

z1TestMultivariateNormal.test_logpdf_default_valuesc                 C   r   r   )
r/   r   r   r   r   r   r   r   r   r   r   r6   r6   r7   test_logcdf4  r   z"TestMultivariateNormal.test_logcdfc                 C   r   r   )	r/   r   r   r   r   r   r   r   r   r   r6   r6   r7   test_logcdf_default_values>  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   rZ   r	   TrM   )r/   r   r   r   rangedotTr   r   r   r~   )rJ   r   r   expected_rankr   r   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	   rX   TrM   r\           )r   r/   r   r   r   r   r   r   r   r   r   r~   r   r   r   inf)rJ   r   zkr   cov_kkcov_nnrP   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_orthr6   r6   r7   test_degenerate_distributionsV  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
   r<   rY   r	   r   r   rt   T)r   r   rN   r   )r   r/   r   r   r   r   r   r   r   r   rt   allr   r   )
rJ   r   r   rmnr   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<   dtyper   r	   )r/   expr   floatfill_diagonalr   r   r   detr   r   slogdetr   r}   )rJ   large_total_lognposnzerolarge_entryr   r   r   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 ]3}t	dD ],}	t|||	f ||}
t
|
|||	f  t|||	f ||}
t
|
|||	f dd q<q6d S )Nr   rZ   r<   r=   gMbP?rtol)r/   r   r   r   r   r   r   r   r   r   r   )rJ   r   datar   r   r  desired_pdf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   )rJ   rP   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  rY   r	   r   r<   rx   r   r   )locr  )r	   r	   {Gz?r  atol)
r/   r   r  meshgridemptyr   r   r*   r   r   )rJ   r   r   r   deltar   xvyvposr   margin_xmargin_ygauss_x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/   r   r   r   r   r   r   r   r   r   r   )rJ   rP   r   r   norm_frozenr6   r6   r7   test_frozen  s   


z"TestMultivariateNormal.test_frozenc           	   	   C   s   t jd d}t j||}t ||j}tj|\}}t 	|d}d|d< d|d< t |t t 
||j}d}t||d	}t|j|d	}t|jt t |d d  t|j |j d S )
Nr   r[   r        ?r   Hz>r\   h㈵>)cond)r/   r   r   r   r   r   r   r   r   fullrd   r   pinvr   r}   r   r   )	rJ   r   rP   r   r   r   r7  r   psd_pinvr6   r6   r7   test_pseudodet_pinv  s    z*TestMultivariateNormal.test_pseudodet_pinvc                 C   s    g dg dg}t tt| d S )Nr@   )rZ   rX   rY   r   rB   r   rJ   r   r6   r6   r7   test_exception_nonsquare_cov     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   rB   r   r   )rJ   cov_nancov_infr6   r6   r7   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   r\   r<  r=  r6   r6   r7   test_exception_non_psd_cov)  r?  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   rX   )rX   rX   r4  r   z0When `allow_singular is False`, the input matrixr:   r   )r/   r   r   r   rD   r   LinAlgErrorr   r   r   r   r   r   rA   r   )rJ   rP   r   r   emsgr6   r6   r7   test_exception_singular_cov-  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)g0Q-?gox'V?g[S, t?gDB?gc_.?r   r<   rX   r=   )r	   r=   r<   dr	   r<   r   )r<   rX   r  )r   r  r=   绽|=r&  )gwk:E]?g̙Z?g0?gL8?gAG*?gh㈵>)gIى?gG?gƏ)?gėh?gEE?r	   r6  )	r/   r   r  cosr   r   r   r   r   )rJ   r_pdfrP   r   r   r   r   r   r   r_cdfr   r_cdf2r2mean2cov2cdf2r6   r6   r7   test_R_values@  s$   z$TestMultivariateNormal.test_R_valuesc                 C   s<   t d}t d}t||dd}| }t|ddg d S )Nr<   r<   r<   TrM   r   )r/   r   r   r   r   )rJ   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,  rZ   r	   r   r<   r   r   r   r   )r   r   r/   r   r   r1   r   )rJ   NrJ  rY  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  r   r  r   )r/   r   r   r   r   r   r   r   r   numpyr   r   )rJ   r   r   r   r   rt   rY  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/   r   r   r   r   r   r   r   r   r   eigr   pir   )rJ   r   r   r   r   r   eigsdesiredr6   r6   r7   test_entropy  s   
,z#TestMultivariateNormal.test_entropyc                 C   s*   t g d}d}tt t|| d S )Nr	   r	   r	   r  )r/   r   r   r  r   )rJ   alphard  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   FYc@Y r   r<   )rZ   r=   r<   rY   r=   lower_limit.r	   r\   rx   )r/   r   r   rE   r   r   concatenater   )rJ   r   r   r   abcdf1cdf2acdf2bab1ab2cdf2ab1cdf2ab2rU  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 )	Nri  r=   )r=   r=   r<   r=   rY   rj  g-C6?r  )	r/   r   r   r   r   r   r  r   r   )
rJ   r   r   r   rm  rn  ro  rU  cdf3cdf4r6   r6   r7   %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 )	Nr=   rf  r]   r	   r   r	   r   r	   r   )r	   r\   r\   r	   rj  r   )r/   r   rE   r   r   r   r   )rJ   r   r   rn  rm  expected_signsr   r6   r6   r7   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	   r@   z7`cov` represents a covariance matrix in 3 dimensions...r:   r   )r  r  r  r]   rE  rf  )r/   rd   r   r(   rC   rA   r   rB   r   r   r   r   )rJ   Pr   rK   rP   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   r1  r3  r;  r>  rC  rD  rI  rV  rZ  r]  r`  re  rh  rv  rz  r~  r  r6   r6   r6   r7   r      s<    

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 )NrZ   r=   r   r  ffffff?)rX   rZ   r=   r   )r/   r8  r   r   rB   r   r   r   r   rF  r   rD   )rJ   num_rowsnum_colsr   r   VrG  r6   r6   r7   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 )NrZ   r=   r   r  r  r	   r   rowcovcolcov)r   )r  )r  )r   r  )r   r  )r  r  )r/   r8  r   r   r   r   r   r1   r  r  r   )rJ   r  r  r   r   r  ZZrZcIrIcI1r6   r6   r7   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 )NrZ   r=   r   r   r   r  )r/   r8  r   r   r   r  r  )
rJ   r  r  r   UvUsVvVsr  r  r6   r6   r7   test_covariance_expansionI  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	   rX   r   r  r  r  r   r   )r   r  r  r   )	r   r/   r8  r   r   r   r   r   r   )rJ   r  r  r   r   r  frozenrvs1rvs2r  pdf1pdf2logpdf1logpdf2r6   r6   r7   test_frozen_matrix_normal_  s(   




z*TestMatrixNormal.test_frozen_matrix_normalc                 C   s   t ddD ]u}t ddD ]m}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	   rX   r   r  r  r  r   r   r[  rL  r  )r   r/   r8  r   r   r   r   r   r   flattenkronr   r   )rJ   r  r  r   r   r  r  r  r  r  vecXvecMr   r  r  r6   r6   r7   test_matches_multivariatew  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 qqd S )NrZ   r=   r   r  r  r   r  r   r   i  r   rx   r<   rL  )r/   r8  r   r   r   rl  newaxisr   r1   r   r   r   )rJ   r  r  r   r   r  r\  r  X1X2r  array_logpdfr  r  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 )NrZ   r=   r   r  r    r  r   r   r   rx   r   rM  r	   r<   )r/   r8  r   r   r   r   r   r   reshaper   swapaxes)rJ   r  r  r   r   r  r\  r  r  sample_meansample_colcov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=   rZ   r\   rX   r   r   )r   r  r  r   rt   g6?gǀgcϿ@g"'@gI2͖@g^jy%@gDn3@g|\3@)r   r   r/   r   r   r   r   )rJ   r  expectedr6   r6   r7   test_samples  s"   
zTestMatrixNormal.test_samplesN)r   r   r   r  r  r  r  r  r  r  r  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 ]9}t jdd|}|t | }t||d d t|d d | t||d d t|d d | q=d S Nr^  r	       &.>r  r   r\   )r/   r   r   randintr   r   r   varr   r   r   r   r   r   rJ   r   rg  rJ  	num_testsr  rP   r6   r6   r7   test_frozen_dirichlet  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 )Nr^  r4         @      @r[   rs   )r[   r=   r\   )r/   r   r   r   r   r   r1   r   rB   r   r   r   rJ   rg  rP   r6   r6   r7   "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 )Nr^  )r4  r   r  r  r[   rs   
r/   r   r   r   maximumr   r   rB   r   r   r  r6   r6   r7   test_alpha_with_zeros  
   z#TestDirichlet.test_alpha_with_zerosc                 C   r  )Nr^  )r4  g       r  r  r[   rs   r  r  r6   r6   r7    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r4  r  r        @r   r   r   r  )r4  r4  r4  r4  rY   )r/   r   r   r   r   r   r   r  r6   r6   r7   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)r4  r  r  r  r  r/   r   r   rB   r   r   r   r  r6   r6   r7   $test_data_with_zeros_and_small_alpha     z2TestDirichlet.test_data_with_zeros_and_small_alphac                 C   r  )Nr  )r   皙r   r  r  r  r6   r6   r7   test_data_with_negative_entries  r  z-TestDirichlet.test_data_with_negative_entriesc                 C   r  )Nr  )r   皙?r   r  r  r  r6   r6   r7    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  )r<   r[   r[   g$I$I?r/   r   r8  r   rB   r   r   r   r  r6   r6   r7   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 )Nr4  r  r  r  )r<   r<   r[         ?r  r  r6   r6   r7   test_alpha_too_deep  s   z!TestDirichlet.test_alpha_too_deepc                 C   s6   t g d}t dd}t|| t|| d S )Nr  r=   r[   UUUUUU?)r/   r   r8  r   r   r   r  r6   r6   r7   test_alpha_correct_depth%  s   z&TestDirichlet.test_alpha_correct_depthc                 C   r  )Nr  r  r  r  r  r6   r6   r7   test_non_simplex_data+  r  z#TestDirichlet.test_non_simplex_datac                 C   r  )Nr  )r<   r[   r  r  r  r6   r6   r7   test_data_vector_too_short1  r  z(TestDirichlet.test_data_vector_too_shortc                 C   r  )Nr  )rX   r[   r   r  r  r6   r6   r7   test_data_vector_too_long7  r  z'TestDirichlet.test_data_vector_too_longc                 C   sF   t g d}t|}g d}g d}t| | t| | d S )N)r4  皙?r   )gUUUUUU?g{Gz?gQ?r  皙?r   )r/   r   r   r   r  r   )rJ   rg  rJ  expected_varexpected_meanr6   r6   r7   test_mean_and_var=  s   zTestDirichlet.test_mean_and_varc                 C   s`   t dg}t|}t| jd t| jd t|dgjd t|dgjd d S )Nr   r   r4  )	r/   r   r   r   r   r   r  r   r   )rJ   rg  rJ  r6   r6   r7   r   G  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  )
r/   r   r   r  r   r   r   r   r   r   r  r6   r6   r7    test_K_and_K_minus_1_calls_equalR  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 )Nr^  r	   r  r  r  r   rX   )r/   r   r   r  r   r   r   r   vstackr   r   appendr   )rJ   r   rg  rJ  r  num_multiplexmr  mrP   rmrsxsr   r6   r6   r7   test_multiple_entry_callsa  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 )Nr^  r  r  r<   r   r	   r   )r/   r   r   r   r   r   r   r   r   r   r   r  )rJ   rg  rJ  rn  r  r  rP   r6   r6   r7   test_2D_dirichlet_is_beta~  s   z'TestDirichlet.test_2D_dirichlet_is_betaN)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r6   r6   r6   r7   r    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   r4  zDimension mismatch)r/   r   r   rB   r   r   strlen)r   sigmarG  rH  r6   r6   r7   ,test_multivariate_normal_dimensions_mismatch  s   (r  c                   @   4   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 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	   r<   ndminr   r	   r<   r  r=   )
r/   r   r_r   r   r  r1   r   rB   rE   )rJ   
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||| 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||| qd S )Nr	   r<   r  r=   r@   rW  r   )r/   r   r  r   r   r   r  rE   )rJ   r  r  densityrP   r6   r6   r7   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 	NrZ   r	   r<   r\   r   rX   r   r   )r/   rd   r   tril_indicesr   r   r   r  r   r  r   r   r  r   moder   r   )	rJ   dimr  r  r  rP   
parametersdfr  r6   r6   r7   r3    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 ]C}t||}t|}t	|
 |
  t	| |  t	| |  t	|||| |j|d	}	|f}
d
}td|
||	 q"d S )N^   r	   r   r<   r  r   numrs   r$  r   )r/   r   r   rE   r   r	  r  r   r   r   r  r   r   r   r   r
   )rJ   snr  r  df_ranger  r  r  cr   r4   rg  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   rZ   r	   rY   r\   r   r  r   r  rs   r   r$  r   )r/   r   r   rd   r   r  r   r   rD   r   r   r   r   r  r   r   r  r   r   r
   )rJ   r
  r  r  r  lamdasigma_lamdar  r  r  r   r4   rg  r6   r6   r7   test_is_scaled_chisquared>  s(   

z%TestWishart.test_is_scaled_chisquaredN)r   r   r   r  r  r3  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=   rZ   r[   r   r  g&Mty:0yE>r  r=   rZ   r   r   r  r_   )r   logpmfr   r/   NAN)rJ   vals1vals2vals3r6   r6   r7   test_logpmfb  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  r[   r  r=   r   r  r  )rY         r   r  rY   r   )r   r  r!   r   pmfrJ   val1val2r6   r6   r7   test_reduces_binomiall  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 )Nr=   )g      ?r  g      ?g     @?g     ?g      ?g      `?g     ?g      ?g      ?g      ?g      ?)
)r   r   r=   )r	   r   r<   )r<   r   r	   )r=   r   r   r   rf  )r<   r	   r   )r   r<   r	   rK  )r   r=   r   +=rM  )r   r   r  )rJ   r   pr_valsrP   r6   r6   r7   test_Rw  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=   r  r[   {   r   rs   )r   r   r/   r   RandomStater   )rJ   sc_rvsrndm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 g ddg d}t|ddd d S )N)rX   rX   r	   r	   r  r  r  r[   r  g5
?r=   r   r  r\   	   r  g*7?g<Wƌ?r   r<   r  rZ   r<   r=   r=   r   rY   )gUUUUUU?r  r   gߦ?)r   r  r   r/   r(  float64r   )rJ   vals0r  r  rP   r  vals4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=   r   r  r   r  gv?g~jt?r  r  rZ   r   )r   r  r   )rJ   r3  r  r  r  r4  r6   r6   r7   test_pmf_broadcasting  s     &z%TestMultinomial.test_pmf_broadcastingc                 C   s4   t dd}g dg dg dg}t||dd d S )NrX   )r   r   r  )r  g333333ӿ      )g433333ӿg?      )r8  r9  g      ?r  r  r   r   r   rJ   cov1rT  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 )NrX   r   r  r   r  g?gܿgr  r  rZ   g
ףp=
?g
ףp=
׿r   r  r  r!  gzG?gzGr  g333333r:  rJ   r<  rT  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   r  r  r  r   r   r   r!   )rJ   ent0r6   r6   r7   re    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  r[   r  r  r  r!  rD  )rJ   rE  ent1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 )NrX   r   r  r4  r  r  r  r   r   r   rJ   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 )NrX   rY   r   r  r4  r  g433333?g433333@r  r  rI  rJ  r6   r6   r7   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   rN  r   r   r	      r   r	   r	   r   r	   r	   r	   r/  r	   r	   r<   r  r  )
r/   r   r   r0   r2  r   r   r  r  r   )rJ   r   pvalsrP   	mn_frozenr6   r6   r7   r3    s   "
zTestMultinomial.test_frozenc                 C   sZ   d}t jd}||}d|d< |t | }t |}t|||}t |s+J d S )NX   l   iRZY gKH9r\   )r/   r   r   r   rD   r   r  isfinite)rJ   r   r   r%  rP   r  r6   r6   r7   test_gh_11860  s   

zTestMultinomial.test_gh_11860N)r   r   r   r  r#  r'  r-  r6  r7  r=  rC  re  rH  rL  rM  r3  rY  r6   r6   r6   r7   r  a  s    
r  c                   @   r  )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 r  )r/   rd   r   r  r   r   r   r  r   r  r   r   r  r   r  r   r   )	rJ   r  r  r  r  rP   r  r  iwr6   r6   r7   r3    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 ]B}t||}t|d dd}t	|
 |
  t	| |  t	|||| |j|d}	|d ddf}
d}td|
||	 q"d S )Nr  r  r	   rX      r<   r  r   r   r  r  r  rs   r   r$  r   )r/   r   r   rE   r   r	  r  r   r   r   r  r   r   r   r
   )rJ   r
  r  r  r  r  r  r[  igr   r4   rg  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 rs   r	   r<   r\   r   )r/   rE   r   r   r   r   r   normalr  	chisquarerd   r  r   r   r   r   r   r   )rJ   r  r  r  r  r[  w_rvsfrozen_w_rvsiw_rvsfrozen_iw_rvscovariances	variancesrj   DDAmanual_w_rvsiDiDAmanual_iw_rvsr6   r6   r7   test_wishart_invwishart_2D_rvs?  sJ   









z-TestInvwishart.test_wishart_invwishart_2D_rvsc                 C   s   t g dg dg dg dg}t g dg dg dg d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	   r<   r  r  r   r  r=   r	   r  r  r	   r<   )r<   r\   r   r  )r\   r<   r  r  )r  r  r	   rZ   rZ   r   V瞯<rM  r	   N)r/   r   copyr   rE   r   r   )rJ   a0a1rm  ainvidentr6   r6   r7   test_cho_inv_batchz  s    


 z!TestInvwishart.test_cho_inv_batchc                 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 )ro  rp  rq  rr  rs  )r/  r[   r=   r	   )r[   r/  rX   r	   )r=   rX   r  r<   )r	   r	   r<   r/  rY   r   r<   r	   r  N)r/   r   r   r   r1   r   r  solver   r+   tracer   )rJ   r  Psinuprobr%  siglogdetX	logdetPsir   r  r6   r6   r7   test_logpdf_4x4  s4   




zTestInvwishart.test_logpdf_4x4N)r   r   r   r3  r^  rn  rz  r  r6   r6   r6   r7   rZ     s     ;rZ  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  r=   )g(fg^A.g*B?)g:d?g2ugi}?)gR#xlF?g^`D?g?r   r   )r/   r   r   r   r   r   r   r)  )rJ   rP   r  r   r6   r6   r7   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 NrW  r	   r   )r   rB   r   r   rJ   r6   r6   r7   test_invalid_dim     z&TestSpecialOrthoGroup.test_invalid_dimc                 C   s4   d}t |}|jdd}t j|dd}t|| d S )Nr[   r   r   )r   r   r   )rJ   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   $   g | ]}t d D ]}t|qqS r=   )r   r   r   .0r  r  r6   r6   r7   
<listcomp>      z<TestSpecialOrthoGroup.test_det_and_ortho.<locals>.<listcomp>r<   rN  c                 S      g | ]}t j|qS r6   r/   r   r  r  rP   r6   r6   r7   r        r4     vIh%<=r  r   )r   r   r   r/   r   r   rE   r1   )rJ   r  detsrP   r6   r6   r7   test_det_and_ortho  s   z(TestSpecialOrthoGroup.test_det_and_orthoc                    |   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 )NrX   r  皙?r  rs   r"  r0  )r	   rZ   rw  c                 3   4    | ]\  ft  fd dD fV  qdS )c                       g | ]}|   qS r6   r6   r  ecerr6   r7   r    r  z=TestSpecialOrthoGroup.test_haar.<locals>.<genexpr>.<listcomp>Nsortedr  r  r  r7   	<genexpr>     2 z2TestSpecialOrthoGroup.test_haar.<locals>.<genexpr>c                    &   g | ]} D ]
}||kr||fqqS r6   r6   r  e0e1elsr6   r7   r       & z3TestSpecialOrthoGroup.test_haar.<locals>.<listcomp>c                    &   g | ]\}}t  |  | d  qS r.  r   r  p0p1projr6   r7   r    r  )r/   r   r   r   r   dictr   r  rJ   r  samplesks_probpairsks_testsr6   r  r  r  r7   	test_haar     
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   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  r=   r   r\   )gm?gӠh"gEo?)g~7ݲC?g>Ŀg0J_ٿ)gݱ&ǿg 6qrg`X|[)
r/   r   r   r   r   r   r   r  r   r   )rJ   r   rP   r   r  r6   r6   r7   r    s   


z#TestOrthoGroup.test_reproducibilityc                 C   r  r  )r   rB   r   r   r  r6   r6   r7   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 )Nr[   r   r   r   r	   rs   )r   r   r   rJ   r  r  frozen_seedr  r  rvs3r6   r6   r7   r       
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  qBq>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<   rN  c                 S   s   g | ]	}d d |D qS )c                 S   r  r6   r  r  r6   r6   r7   r    r  r  r6   )r  xxr6   r6   r7   r        r  r  r   r   c                 S   $   g | ]}t |d k d  jd  qS r   r/   nonzeror1   r  rJ  r6   r6   r7   r       $ c                 S   r  r  r  r  r6   r6   r7   r    r  )r   r/   r   r   fabsrD   r1   r   r   r   r   rE   )rJ   r  r  r  rP   r6   r6   r7   r  	  s   z!TestOrthoGroup.test_det_and_orthoc                    r  )NrX   r  r  i  rs   r  c                 3   r  )c                    r  r6   r6   r  r  r6   r7   r  4  r  z6TestOrthoGroup.test_haar.<locals>.<genexpr>.<listcomp>Nr  r  r  r  r7   r  4  r  z+TestOrthoGroup.test_haar.<locals>.<genexpr>c                    r  r6   r6   r  r  r6   r7   r  5  r  z,TestOrthoGroup.test_haar.<locals>.<listcomp>c                    r  r.  r  r  r  r6   r7   r  6  r  )r/   r   r   r   r   r  r   r  r  r6   r  r7   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 Nrs   )r/   r   r   r   r`  r   )r  r   _sr   r6   r6   r7   random_ortho>  s    z<TestOrthoGroup.test_pairwise_distances.<locals>.random_orthor<   rY   r  rL  c                    s<   t  fddt|D }|t jj| ||jd7 }|S )Nc                    s*   g | ]}t  d  d  d qS )r  r<   )r/   r   )r  _)r  r   r6   r7   r  D  s    z\TestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statistics.<locals>.<listcomp>rs   )r/   r   r   r   r   r1   )r   r\  epsstatsr  )r   r7   generate_test_statisticsC  s
   zHTestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statisticsr  )r  rL  )
r/   r   r   r   r   r  r   r   r   r   )rJ   r  r  r  r  _Dr%  r6   r  r7   test_pairwise_distances9  s   	z&TestOrthoGroup.test_pairwise_distancesN)r   r   r   r  r  r  r  r  rA   r   slowr  r6   r6   r6   r7   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  r  r  r  r   r   )r4  ѓ2ǿA?Ϳ)r  r4  4($?R}%?)r  r  r4  qTnƿ)r  r  r  r4  )r/   r   r   r   r   r   r   )rJ   rc  rP   r   r  r6   r6   r7   r  T  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	   r<   r=   rZ   r8  )r	   r<   r   )r   rB   r   r   r  r6   r6   r7   test_invalid_eigs`  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   )rJ   rc  r  r  r  r  r  r6   r6   r7   r  i  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 r.   )r   )r  rG  r6   r6   r7   r   }  s   z3TestRandomCorrelation.test_definition.<locals>.normr(  c                    s    g | ]} |t jj|d qS )rs   )r/   r   r   r  r   r6   r7   r    s     z9TestRandomCorrelation.test_definition.<locals>.<listcomp>r<   rY   )rZ   r   r   r   c                 S   s   g | ]	}d gt | qS )r4  )r  r  rG  r6   r6   r7   r    r  c                 S      g | ]}t |qS r6   )r   r   r  r6   r6   r7   r        c                 S   s   g | ]}t t j|qS r6   )r/   r  r   r  r  r6   r6   r7   r    s    c                 S   r  r6   )r/   prodr  r6   r6   r7   r    r  r  r%  c                 S   r  r6   )r/   rd   r  r6   r6   r7   r    r  r  )r/   r   r   r   r  r   zipr   )
rJ   rc  rD   r  r  
dets_knowndiagsrm  rn  rP   r6   r  r7   test_definitionu  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 sw   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)overr\   gu <7~r  r  r<   r"  gMk   @)r/   r   r	  r   _to_corrr   errstate	nextafterru  r   r   )rJ   r  g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  S  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	   r=   rt   )Nr	   rX   )rX   rZ   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 )Nl   Sid)_i4 r   rs   r\   rx   r4  )r/   r   r   r'   r   r   rE   r   r1   r   r   r   )
rJ   r  rt   r   uniform_direction_distr  r   r   expected_shapenormsr6   r6   r7   r    s   
z!TestUniformDirection.test_samples)Nr   rW  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.r:   )rA   r   rB   r'   r   )rJ   r  rK   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 )NrX   r  r   r   )r'   r   r   r  r6   r6   r7   test_frozen_distribution  s   
z-TestUniformDirection.test_frozen_distribution)r<   rX   r  c                 C   s   t jd}t||d}|jdd\}}||| | 8 }|t j| }t|| ddd |jdd}|| }|| }t ||}	|	t j	7 }	|	dt j	  }	t
 }
t|	|
j}|jd	ks]J d S )
Nl   @9Y sr   r<   rs   r   r$  rM  '  r  )r/   r   r   r'   r   r   r   r   arctan2rb  r   r    r   pvalue)rJ   r  r   spherical_distv1v2r  s1s2anglesuniform_distkstest_resultr6   r6   r7   test_uniform  s   
z!TestUniformDirection.test_uniformN)
r   r   r   rA   r   r   r  r  r  r  r6   r6   r6   r7   r    s    
r  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  r=   r   )y~p?yZ?y뉦?ĭ?y8Z?&4?)yEHξr?8i?ye??+ݓݿyu=ٿB۽'?)yqXQÿ?yN6ҿzܷy! 8l?2W'?)r/   r   r   r   r   r   r   )rJ   rP   r   r  r6   r6   r7   r    s   


z%TestUnitaryGroup.test_reproducibilityc                 C   r  r  )r   rB   r   r   r  r6   r6   r7   r    r  z!TestUnitaryGroup.test_invalid_dimc                 C   r  )Nr[   r  r   r   r	   rs   )r   r   r   r  r6   r6   r7   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  r6   r6   r7   r    r  z3TestUnitaryGroup.test_unitarity.<locals>.<listcomp>r<   rN  r   rt  rM  )r   r   r/   r   conjr   rE   r1   )rJ   r  rP   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 )	NrX   r  r  rs   c                 S   r  r6   )r   r   eigvalsr  r6   r6   r7   r  &  r  z.TestUnitaryGroup.test_haar.<locals>.<listcomp>r<   r  )r/   r   r   r   r   r  r  imagrealr    ravelr   rb  r   r   r  )rJ   r  r  r  rc  rP   r2   r6   r6   r7   r    s    zTestUnitaryGroup.test_haarN)r   r   r   r  r  r  r
  r  r6   r6   r6   r7   r    s    	r  c                   @   s  e Zd Zddgddgddgddgddgddgddgddgddgddgg
ddgddgddggdg dfg dg d	g d
g dg dgg dg dg dg dgdg dfgZejdedd Zejdedd Zdd Z	dd Z
eddd Zdd  Zd!d" Zd#d$d%d&dgdd&ggd%ddgd&dgdd&ggdfd%d&dgdd&ggd&ddgd&dgdd&ggd&fd&d&gd%d%d&d&gddgddggdfd&d&gd%d&d&d&gddgddggd&fd&d&gd&dgdd&ggd%d&d&gd&dgdd&ggdfd&d&gd&dgdd&ggd&d&d&gd&dgdd&ggd&fgZejd'ed(d) Zd*ddd*gdggdfd*gdgdd*gdggdfed*gedgdd*gdggdfgZejd'ed+d, Zd-d. Zd/d0 Zd1d2 Zejd3d4d5gejd6g d7ejd8d9d:ejgd;d< Zd%S )=TestMultivariateTr	   r<   rZ   r=   rX   r   )
|	ߌ?v
2R?r  g0$H?r  r  gO`?gՒXO?g	ߌ,?g8N8?)gHP?gQI?go_?)g9m4?g=U?gˡE?)g$C?ghs?gǺ?)g!uq?g%C?gS㥛?)gOec?gz,C?g	h"l?)r\   r	   2   )r4  r  r  )r  r4  r  )r  r  r4  r  )gJ#R<g^<gL[<gN=<g`$<zx, loc, shape, df, ansc                 C   s(   t |||dd}||}t|| d S Nr   r   )r#   r   r   )rJ   rP   r#  r1   r  ansdistvalr6   r6   r7   test_pdf_correctnessu  s   
z&TestMultivariateT.test_pdf_correctnessc           	      C   s8   t |||dd}||}||}tt|| d S r  )r#   r   r   r   r/   r   )	rJ   rP   r#  r1   r  r  r  r!  r"  r6   r6   r7   test_logpdf_correct{  s   

z%TestMultivariateT.test_logpdf_correctc                 C   s.   g d}t j|dd}t|}t|| d S )N)
r/  r[   rZ   r	   r/  r   r  r\   r=   r	   r  )r#   r   r$   r   )rJ   rP   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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	   順 r  r   rs   r_   r=   r   r\   *   )r#   r   r%   r   )rJ   	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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	   r[   r  r  r<   )r#   r/   r   r   r   r   
call_countr   )rJ   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 |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sJ d S )NrZ         @r[   r	   rs   )
r/   r   rE   r#   r   isscalarr   r   r1   r   )	rJ   r  r#  r1   r  rP   r2   	n_samplesrt   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sJ d S )Nr   r	   r#   r   r#  r1   r  )rJ   r  r6   r6   r7   test_default_arguments  s   z(TestMultivariateT.test_default_arguments)NNNr   r	   r	   )NNr[   r   r	   r[   Nr[   z*loc, shape, df, loc_ans, shape_ans, df_ansc                 C   s8   t |||d}t|j| t|j| |j|ksJ d S )Nr#  r1   r  r(  rJ   r#  r1   r  loc_ans	shape_ansdf_ansr  r6   r6   r7   test_default_args  s   z#TestMultivariateT.test_default_argsr\   c                 C   s4   t |||}t|j| t|j| t|j| d S r.   r(  r+  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i t|d ddgddgddgg}t ttfi t||d td}td}d}t ttfi t|||d d}t ttfi t|||d d S )	Nr	   )r#  r<   r=   )r#  r1   r\   r*  r   )r   rB   r#   r  r/   r   rE   )rJ   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 )NrZ   r=   rs   r<   r  r   )r/   r   r)  r   rE   r#   r   r   )rJ   r   r#  r1   r   dist2samples1samples2r6   r6   r7   r  	  s   
z&TestMultivariateT.test_reproducibilityc                 C   s:   t ddgddgddggddd}ttjjtfi | d S )Nr   r	   F)r#  r1   r  rN   )r  r   r/   r   rF  r#   )rJ   r4   r6   r6   r7   test_allow_singular	  s    z%TestMultivariateT.test_allow_singularrt   )r   r=   )rX   rY   rZ   r=   r  )r<   r=   rZ   rX   r  r4  r  c                 C   s<   t t|t||}|j|d}|j||f ksJ d S r  )r#   r/   r   rE   r   r1   )rJ   rt   r  r  r  r   r6   r6   r7   test_rvs	  s   zTestMultivariateT.test_rvs)r   r   r   	PDF_TESTSrA   r   r   r  r  r  r   r-   r#  r'  r)  DEFAULT_ARGS_TESTSr/  r/   r   ARGS_SHAPES_TESTSr0  r1  r  r5  r   r6  r6   r6   r6   r7   r  ,  s    
(B


 **""..
$

r  c                   @   s
  e Zd Zejdddgddgddfddgddgdejfd	dgddgdejfddgd
dgdejfddgddggddgd
dggddgejejgfd	dgd
dgdejfddgddgdejfddgddgdejfddgddgdejfddgddgdejfg
dd Z	dd Z
dd Zdd Zejdg ddfg ddfddgdfdgdffdd  Zejddgdgddfddgddgdd!fddgdd"ggdd#gddgggddgd"d"gd"dggd$d%gdd&ggfeg ejeg ej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d/d0gfdgdgggdgdggddgd/d0ggfdgdggdggggddgd/d0gggfgd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Zd?d@ ZdAdB ZdCdD ZdEdF ZdGdH ZdIS )JTestMultivariateHypergeomzx, m, n, expectedr=   rZ   rX   r   r[   gr   r  r	   r<   ra   iirQ  rN  r\   ic                 C       t |||}t||dd d S )Ngư>r  )r   r  r   rJ   rP   r  r   r  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   rX   rZ   )rP   r  r      )r   r   r   r\  r  r  r[      )r   r  r"   r   r   r6   r6   r7   test_reduces_hypergeom9	  s   z0TestMultivariateHypergeom.test_reduces_hypergeomc                 C   s:   t ddgdd}|jddd}t|d| d	d
 d S )Nr=   rX   rZ   r  r   r  r(  r   r   r$  r  r   r   r   r   rJ   r   r   r6   r6   r7   r6  D	  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=   rX   r   rZ   r/  rB  r  r<   r(  r   r   r$  r  rC  rD  r6   r6   r7   test_rvs_broadcastingK	  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   r/   r0   ru  r   )rJ   r  r   r2   res_exr6   r6   r7   test_rvs_gh16171P	  s
   
z*TestMultivariateHypergeom.test_rvs_gh16171g zl?r  r/  gQ?gE|?g
y?r1  )rX   rY   r[   rY   gzp?c                 C   r<  Nr5  r  r   r  r   r=  r6   r6   r7   r6  [	  s   z"TestMultivariateHypergeom.test_pmfr?  g ?r4  r   c                 C   r<  rI  rJ  r=  r6   r6   r7   r7  o	  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)r=   r[   r   rN  rB  )gf_?&BUп疈Cx@ؿ)rK  ggs>d?ZsK)rL  rM  g3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 )Nr[   r/  r   r?  r  rN  rB  g?gg(\?g(\r  r  rZ   rX   r   g333333?g333333rN  r>  r6   r6   r7   rC  	  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   rX   rZ   rB  r?  r   r   r\  r  r  )r   r  r"   r   )rJ   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   rX   rZ   r  rB  r   r  r  r	   r  g̍3eY?gI{?r   )r   r  r   )rJ   rP  rQ  var2var3var4var5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   rX   rZ   rB  r?  rO  r   r  r  rN  r  g      @r  )r   r   r"   r   rJ   mean0rK  rS  mean3r6   r6   r7   rL  	  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=   rX   r   rZ   r  rB  r   r   gUUUUUU@gUUUUUU@r  r  )r   r   r   )rJ   rZ  rK  r6   r6   r7   rM  	  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g tjdd}t|g  t|j	dk d S )Nr]   r   rB  r   r   r   r	   r   r   r<   r{  )r4  r   r4  FFg<r  r  )
r   r   r   r/   r@  r   r   int_r   r1   rY  r6   r6   r7   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g tjdd}t|g  t|j	dk d S )Nr]   r   rB  r\  gؗҜ<r  r]  r<   r{  r^  r  )
r   r  r   r   r/   r@  r   r_  r   r1   )rJ   rP  rQ  rS  rT  r6   r6   r7   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g tjdd}tjg tjd	dd}t||dd t	|j
d
k d S )Nr]  r	   rB  r\  r^  r  r]   r   r  r"  )r   r   r   r   r/   r   r_  float_r  r   r1   )rJ   cov0r<  r?  r@  rA  rB  r6   r6   r7   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 jd	}t||}t||t||| t||t||| t|	 t	|| t|
 t
|| d S )
Nr   rN  )r[   r/  rQ     rO  rP  rR  rS  rT  r  )r/   r   r   r0   r_  r   r   r  r  r  r   )rJ   r   r  rP   
mhg_frozenr6   r6   r7   r3  	  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 )	NrX   r   rZ   g      @r$  r?  g      %@g      /@)r   rB   r   r  	TypeErrorr  r6   r6   r7   test_invalid_params	  s   z-TestMultivariateHypergeom.test_invalid_paramsN)r   r   r   rA   r   r   r/   NINFr@  r  rA  r6  rF  rH  r   r_  r6  r7  r=  rC  rR  rX  rL  rM  r`  ra  rd  r3  rh  r6   r6   r6   r7   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fE)r/   r   r   r  r6   r6   r7   get_rng	  rR   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 sw   Y  d
}t jt|d tddgddg W d    n1 sw   Y  d}t jt|d tddgg d W d    n1 sw   Y  d}t jt|d tddgg d W d    n1 sw   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-dimensionalr:   r	   r<   z`col` must be one-dimensionalz*each element of `row` must be non-negativer\   z*each element of `col` must be non-negativer_   z'sums over `row` and `col` must be equalr   z(each element of `row` must be an integerg @)r	   r	   r<   z(each element of `col` must be an integer)r  r  r	   r=   r<   r	   r	   )rA   r   rB   r&   _process_parametersr   r/   r   )rJ   rK   rowcolr   r  r   r6   r6   r7   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	   r=   rl  methodr   )r/   r   r&   r   r   )rJ   r  rt  rn  ro  ctr  gotr6   r6   r7   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	   r=   rl  z$'foo' not recognized, must be one ofr:   foort  )rA   r   rB   r&   r   )rJ   rn  ro  rK   r6   r6   r7   $test_process_rvs_method_bad_argument2
  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	|| qqg dg dg}t	tj|dd ||}	|	dksJ g dg dg}t	tj|dd  ||}	|	dksJ d}tjt|d |dg W d    n1 sw   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 sw   Y  d S )%Nr<   rY   r	   r=   rZ   r  rq  rt   rt  r   r  r  c                    s   |  S r.   r6   rO   )ro  original_methodrn  r6   r7   rt  L
  rR   z/TestRandomTable.test_pmf_logpmf.<locals>.methodc                    s   t  | S r.   )r/   r  rO   ry  r6   r7   rQ   N
  s    z1TestRandomTable.test_pmf_logpmf.<locals>.<lambda>r   Try   return_countsr   r  )r   r  r	   )r   r	   r	   )r<   r	   r=   r\   rx   r   )r	   r<   r<   r_   z$`x` must be at least two-dimensionalr:   z%`x` must contain only integral valuesr  z)`x` must contain only non-negative valuesz"shape of `x` must agree with `row`r@   z"shape of `x` must agree with `col`r=   rZ   )rk  r&   r   re   r/   uniquer   r  r   r   r  r1   r   r   rA   r   rB   r@  )rJ   r  r   r   r   objr  
unique_rvscountsr%  p2rvs_ndr  r  pijrvijqijrP   rK   r6   )ro  rt  r}  rn  r7   test_pmf_logpmf;
  sz   
$zTestRandomTable.test_pmf_logpmfrt  )rq  rr  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 )Nr<   rY   r{  r  r|  r   r  rM  r\   rx   rE  r_   )r  r=   )	rk  r&   r   r   r   r/   r   r   broadcast_to)rJ   rt  r   rn  ro  r   r   r6   r6   r7   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 )Nr<   rY   r{  r  rq  r|  rr  r   rx   {Gz?rM  )rk  r&   r   r/   r  r   )rJ   r   rn  ro  r  r  r<  rT  r6   r6   r7   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 sw   Y  tjt	|	d t j||t
j||  d W d    d S 1 sw   Y  d S )Nr<   rY   r{  rs  rw  r	   r|  r@   r   )r   r<   r=   r\  )r\  r<   r=   )rZ   rX   )rZ   rX   r<   r=   r=   rt  r  z/`size` must be a non-negative integer or `None`r:   r\   )r&   r   rk  r1   r   r   r  rA   r   rB   r/   r@  )
rJ   rt  rn  ro  r   rv2rv3rv4rv5rK   r6   r6   r7   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 )Nr<   rY   r{  r  r|  r   Tr~  r  r  )r&   r   rk  r/   r  r  r   r  )	rJ   rt  rn  ro  ru  r   r  r  r%  r6   r6   r7   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  rs  )r   r   r   r   .r&   r   rk  r/   r   r  r   rJ   rt  rn  ro  rJ  r   r  r6   r6   r7   test_rvs_with_zeros_in_col_row
  s   
z.TestRandomTable.test_rvs_with_zeros_in_col_row)Nrq  rr  ro  r   rn  c                 C   sD   t ||}|jd||  d}tdt|t|f}t|| d S )Nr   rs  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g dtjd}t|d| }t|}||||d|  }|j	dt
|t
|fksBJ t||ksKJ d S )Nr   r	   r=   r  rl  	rvs_rcont)scipy.stats._rcontr  _rcontr/   r   int64re   r   rk  r1   r  )rJ   r   r  rn  ro  r   ntotresultr6   r6   r7   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 )Nr<   rY   r{  r   )r&   rk  r   r   r   r  r  )rJ   rn  ro  rJ  rY  r  r6   r6   r7   r3    s   zTestRandomTable.test_frozenc                 C   sV   ddg}g d}t |||  d}t j||d||  d}|jd|d}t|| d S )Nr<   rY   r{  r   r   r|  )rt   rt  )r&   rk  r   r   )rJ   rt  rn  ro  rJ  r  rv  r6   r6   r7   test_rvs_frozen  s   zTestRandomTable.test_rvs_frozenN)r   r   r   rk  rp  rA   r   r   rw  rz  r  r  r  r  r  r  r  r  r3  r  r6   r6   r6   r7   rj  	  s:    $

	N

)


rj  c                 C   sd   | j }d| _ | j|ddi t| }| j|ddi}t|}|j|ddi}t|| || _ d S )Nr   rt   r  )r   r   pickledumpsloadsr   )distfnr4   r+  r   r0	unpickledr1r6   r6   r7   check_pickling(  s   



r  c                  C   s   t d} d| d< d| d< tdgtt dgfgtd| fgtd| fgtdg d	fgtd
gt	d
gg}|D ]\}}t
|| t|| q3d S )Nr=   r  r   r_  r6   r4  r   rX   r  )r<   )r/   rE   r   r   r   r   r   r   r   r   r,   r  )r  distsr  r4   r6   r6   r7   test_random_state_property<  s   


	
r  )O__doc__r  numpy.testingr   r   r   r   r   r   rA   r   r   test_continuous_basicr
   r_  r/   scipy.linalgr   scipy.stats._multivariater   r   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)   scipy.integrater*   scipy.specialr+   common_testsr,   unittest.mockr-   r8   r9   r   r   r  r  r  r  r  rZ  r  r  r  r  r  r  r:  rj  r  r  r6   r6   r6   r7   <module>   sd     l F     I B @   %Ejg8: o e  ,