o
    5ήcK                    @   s  d Z ddlZddlmZmZmZmZmZmZ ddl	Z	ddl	m
Z ddlmZ ddlZddlZddlZddlmZmZmZmZ ddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. dd	l/m0Z0 dd
l1m2Z2 ddl3m4Z4 ddl5m6Z6 dd Z7G dd dZ8G dd dZ9G dd dZ:dd Z;G dd dZ<G dd dZ=G dd dZ>G dd dZ?G dd  d Z@G d!d" d"ZAG d#d$ d$ZBG d%d& d&ZCG d'd( d(ZDd)d* ZEd+d, ZFdS )-z8
Test functions for multivariate normal distributions.

    N)assert_allcloseassert_almost_equalassert_array_almost_equalassert_equalassert_array_lessassert_)raises   )check_distribution_rvs)_PSD_lnB_cho_inv_batchmultivariate_normal_frozen)multivariate_normalmultivariate_hypergeommatrix_normalspecial_ortho_grouportho_grouprandom_correlationunitary_group	dirichletbetawishartmultinomial
invwishartchi2invgammanormuniformks_2sampkstestbinom	hypergeommultivariate_tcauchy
normaltest)romb)multigammaln)check_random_state_property)patchc                 C   s$   t j| | }tj|\}}}|S N)nprandomrandnscipylinalgsvd)nMusv r6   J/tmp/pip-target-vg8gfxp4/lib/python/scipy/stats/tests/test_multivariate.py_sample_orthonormal_matrix&   s   r8   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d3S )4TestMultivariateNormalc                 C   s`   t d}t d}tttjd|| tttjd|| tttjd|| tttjd|| d S )N      r   r	   r   r	   r;   )r+   arangeidentityassert_raises
ValueErrorr   pdfcdf)selfmucovr6   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      )
r+   r,   seedr   rB   r   ndimr-   absrC   )rD   xmeanrF   rB   rC   r6   r6   r7   test_scalar_values5   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 NrH   rK   )
r+   r,   rL   r-   rN   r   logpdfrB   r   logrD   rO   rP   rF   d1d2r6   r6   r7   test_logpdfP      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 NrH   rK   r	   )	r+   r,   rL   r-   r   rT   rB   r   rU   rD   rO   rW   rX   d3d4r6   r6   r7   test_logpdf_default_valuesZ      

z1TestMultivariateNormal.test_logpdf_default_valuesc                 C   rR   rS   )
r+   r,   rL   r-   rN   r   logcdfrC   r   rU   rV   r6   r6   r7   test_logcdfg   rZ   z"TestMultivariateNormal.test_logcdfc                 C   r[   r\   )	r+   r,   rL   r-   r   rb   rC   r   rU   r]   r6   r6   r7   test_logcdf_default_valuesq   ra   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 )NrH      r	   Tallow_singular)r+   r,   rL   r-   rangedotTr   r   cov_inforank)rD   r1   rP   expected_rankr4   rF   distnr6   r6   r7   	test_rank~   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	   rK   Trf           )rh   r+   r,   r-   ri   rj   zerosr8   r   r   rk   rl   rB   r   rT   inf)rD   r1   zkr4   cov_kkcov_nnrO   r3   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_distributions   sR   











z4TestMultivariateNormal.test_degenerate_distributionsc           
      C   s   d}t ddD ]\}t d|D ]T}t|}t|d d d |f }t||j}tj|||d}tj|||dd}t	|j
| t|dksHJ tj|||dd}	t	|	j
| t|	tj ksbJ qqd S )	N
   r;      r	   rP   rF   sizeT)rP   rF   rg   rq   )rh   r+   rr   r8   ri   rj   r   rvsrB   r   r   allrT   rs   )
rD   ru   r1   rmnr3   vrXrB   rT   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+   exprr   floatfill_diagonalr   r.   r/   detrs   r   slogdetr   log_pdet)rD   large_total_lognposnzerolarge_entryr1   rF   psdr6   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 )NrH   re   r;   r:   gMbP?rtol)r+   r,   rL   r-   ri   rj   r   rB   rC   rh   r   )rD   r1   datarF   rP   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   rB   r   r   rC   )rD   rO   rP   rF   scalerW   rX   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 )NrJ   g      @r   皙?333333?i  r   r	   r   r;   axisr   r   )locr   )r	   r	   {Gz?r   atol)
r+   arrayr   meshgridemptyr   rB   r&   r   r   )rD   rP   rF   r1   deltar5   xvyvposrB   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 rS   )r+   r,   rL   r-   rN   r   r   rB   rT   rC   rb   )rD   rO   rP   rF   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 )
NrH      r         ?r   Hz>rp   h㈵>)cond)r+   r,   rL   r-   ri   rj   r.   r/   eighfulldiagr   pinvr   r   sumrU   )	rD   r1   rO   rF   r4   r3   r   r   psd_pinvr6   r6   r7   test_pseudodet_pinv8  s    z*TestMultivariateNormal.test_pseudodet_pinvc                 C   s    g dg dg}t tt| d S )Nr	   r;   r:   )re   rK   r   r@   rA   r   rD   rF   r6   r6   r7   test_exception_nonsquare_covR     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@   rA   r   rs   )rD   cov_nancov_infr6   r6   r7   test_exception_nonfinite_covV  s   z3TestMultivariateNormal.test_exception_nonfinite_covc                 C   s    ddgddgg}t tt| d S )Nr	   r   rp   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 )	NrH   rK   )rK   rK   r   rq   z0When `allow_singular is False`, the input matrix)match)rF   )r+   r,   rL   r-   onesr/   LinAlgErrorr@   r   rB   rT   rC   rb   pytestr   )rD   rO   rP   rF   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;   rK   r:   )r	   r:   r;   dr	   r;   r   )r;   rK   r   )r   r   r:   绽|=r   )gwk:E]?g̙Z?g0?gL8?gAG*?r   )gIى?gG?gƏ)?gėh?gEE?r	   )	r+   r   r   cosrj   r   rB   r   rC   )rD   r_pdfrO   ry   rt   r   rP   rF   rB   r_cdfrC   r_cdf2r2mean2cov2cdf2r6   r6   r7   test_R_valuess  s$   z$TestMultivariateNormal.test_R_valuesc                 C   s<   t d}t d}t||dd}| }t|ddg d S )Nr;   r;   r;   Trf   r   )r+   rr   r   r   r   )rD   rP   
covariance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,  re   r	   r   r;   皙?r   rP   rF   )r   r   r+   rr   r   shaper   )rD   Nr   r   r3   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,   rL   r-   ri   rj   r   r   r   numpyrF   rP   )rD   r1   rP   r2   rF   r   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+   r,   rL   r-   ri   rj   r   r   entropyr/   eigrU   pir   )rD   r1   rP   r2   rF   rv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   )rD   alphar  r6   r6   r7   test_lnB  s   zTestMultivariateNormal.test_lnBN)__name__
__module____qualname__rG   rQ   rY   r`   rc   rd   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r6   r6   r6   r7   r9   ,   s4    

4@r9   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestMatrixNormalc              	   C   s  d}d}t ||fd}dt | t ||fd }dt | t ||fd }tttt d ttt|t d| ttt||t d ttt||| ttt||| ttt|j|| t jj	}t|t||t 
||f t|t|t 
||f| d S )Nre   r:   333333?r   ffffff?)rK   re   r:   r   )r+   r   r?   r@   rA   r   rr   rj   r/   r   r   )rD   num_rowsnum_colsr2   UVr   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 )Nre   r:   r  r   r  r	   rP   rowcovcolcov)rP   )r  )r  )rP   r  )rP   r  )r  r  )r+   r   r?   rr   r   r   r   r   r  r  rP   )rD   r  r  r2   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 )Nre   r:   r  r   r   r  )r+   r   r?   r   r   r  r  )
rD   r  r  r2   UvUsVvVsr  r  r6   r6   r7   test_covariance_expansion2  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	   rK   r  r   r  r  rH   random_state)rP   r  r  r#  )	rh   r+   r   r?   r   r   r   rB   rT   )rD   r   r   r2   r  r  frozenrvs1rvs2r   pdf1pdf2logpdf1logpdf2r6   r6   r7   test_frozen_matrix_normalH  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	   rK   r  r   r  r  rH   r"  r   r   r   )rh   r+   r   r?   r   r   rB   rT   rj   flattenkronr   r   )rD   r   r   r2   r  r  r$  r   r'  r)  vecXvecMrF   r(  r*  r6   r6   r7   test_matches_multivariate`  s$   



z*TestMatrixNormal.test_matches_multivariatec                 C   sD  d}d}t ||fd}dt | t ||fd }dt | t ||fd }d}t|||d}|j|dd	}|j|d
d	}	t j|t jd d d d d d f |	t jd d d d d d f fdd}
t|
jd|||f |	|
}t|jd|f t
dD ] }t
|D ]}tj	|
||f |||d}t||||f d qqd S )Nre   r:   r  r   r  r   r  rH   r   r#  i  r   r   r;   r   )r+   r   r?   r   r   concatenatenewaxisr   r   rT   rh   r   )rD   r  r  r2   r  r  r   r$  X1X2r   array_logpdfr   r   separate_logpdfr6   r6   r7   test_array_inputw  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 )Nre   r:   r  r   r    r  rH   r1  r   r   r   r   r	   r;   )r+   r   r?   r   r   rP   r   rF   reshaperj   swapaxes)rD   r  r  r2   r  r  r   r$  r   sample_meansample_colcovsample_rowcovr6   r6   r7   test_moments  s$   zTestMatrixNormal.test_momentsN)
r  r	  r
  r  r  r!  r+  r0  r8  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   rp   )r+   r,   rL   randintr   r   r   varrP   r   rh   r   rB   rT   rD   r1   r  r   	num_testsr   rO   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   r          @      @r   r   )r   r:   rp   )r+   r,   rL   r   r   r   r   r@   rA   rB   rT   rj   rD   r  rO   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   )r   rq   rK  rC  r   rL  
r+   r,   rL   r   maximumrj   r@   rA   rB   rT   rM  r6   r6   r7   test_alpha_with_zeros  
   z#TestDirichlet.test_alpha_with_zerosc                 C   rO  )Nr   )r   g       rK  rC  r   rL  rP  rM  r6   r6   r7    test_alpha_with_negative_entries  rS  z.TestDirichlet.test_alpha_with_negative_entriesc                 C   sp   t g d}t g d}t|| t|| t g d}tt||d tt||t d d S )Nr   rJ  rK        @r   rq   r   r  )r   r   r   r   r   )r+   r   r   rB   rT   r   rU   rM  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)r   r   rK  rV  rW  r+   r   r@   rA   r   rB   rT   rM  r6   r6   r7   $test_data_with_zeros_and_small_alpha     z2TestDirichlet.test_data_with_zeros_and_small_alphac                 C   rY  )NrU  )r   皙r  r  rZ  rM  r6   r6   r7   test_data_with_negative_entries  r\  z-TestDirichlet.test_data_with_negative_entriesc                 C   rY  )NrU  )r   皙?r  r  rZ  rM  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 )NrI  )r;   r   r   g$I$I?r+   r   r   r@   rA   r   rB   rT   rM  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 )Nr   rJ  rK  rV  )r;   r;   r         ?rb  rM  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 )NrI  r:   r   UUUUUU?)r+   r   r   r   rB   rT   rM  r6   r6   r7   test_alpha_correct_depth  s   z&TestDirichlet.test_alpha_correct_depthc                 C   ra  )NrI  rg  r   rb  rM  r6   r6   r7   test_non_simplex_data  rd  z#TestDirichlet.test_non_simplex_datac                 C   ra  )NrU  )r;   r   r   rb  rM  r6   r6   r7   test_data_vector_too_short  rd  z(TestDirichlet.test_data_vector_too_shortc                 C   ra  )NrU  )rK   r   r   rb  rM  r6   r6   r7   test_data_vector_too_long  rd  z'TestDirichlet.test_data_vector_too_longc                 C   sF   t g d}t|}g d}g d}t| | t| | d S )N)r   皙?r   )gUUUUUU?g{Gz?gQ?r   皙?r   )r+   r   r   r   rE  rP   )rD   r  r   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   r   )	r+   r   r   r   rP   rM   rE  rB   rT   )rD   r  r   r6   r6   r7   rQ     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 rA  )
r+   r,   rL   rD  r   r   rh   r   r   rB   rF  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 ]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	   rB  rC  r   r   rK   )r+   r,   rL   rD  r   r   rh   r   vstackrB   rj   appendr   )rD   r1   r  r   rG  num_multiplexmr   mrO   rmrsxsr   r6   r6   r7   test_multiple_entry_calls8  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   rC  r   r;   r   r	   r   )r+   r,   rL   r   r   r   rh   r   r   rB   rP   rE  )rD   r  r   brG  r   rO   r6   r6   r7   test_2D_dirichlet_is_betaU  s   z'TestDirichlet.test_2D_dirichlet_is_betaN)r  r	  r
  rH  rN  rR  rT  rX  r[  r^  r`  rc  rf  ri  rj  rk  rl  rr  rQ   rs  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 )Nrq   r   zDimension mismatch)r+   r   r@   rA   r   r   strlen)rE   sigmar   r   r6   r6   r7   ,test_multivariate_normal_dimensions_mismatchf  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   r   r@   rA   eye)rD   
true_scalescalesr   wr6   r6   r7   test_scale_dimensionsz  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   r   r   )r+   r   r  r   rB   r   r3  r  )rD   r   r  densityrO   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 	Nre   r	   r;   rp   ru   rK   r   r   )r+   r   r>   tril_indicesri   rj   rh   ru  r   r   r   r   rE  rP   moder   rB   )	rD   dimr   r   r   rO   
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 ]C}t||}t|}t	|
 |
  t	| |  t	| |  t	|||| |j|d	}	|f}
d
}td|
||	 q"d S )N^   r	   r   r;   r   r   numrL  r   r   )r+   r,   rL   r  r>   r   r   r   r   r   rE  rP   r   rB   r   r
   )rD   snr  r   df_ranger   r  r  cr   argsr  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   re   r	   r   rp   r  r   r   r  rL  r   r   r   )r+   r,   rL   r   r>   r  ri   rj   r   squeezer   r   r   rE  rP   r   r   rB   r   r
   )rD   r  r  r  r   lamdasigma_lamdar  r  r   r   r  r  r6   r6   r7   test_is_scaled_chisquared  s(   

z%TestWishart.test_is_scaled_chisquaredN)r  r	  r
  r  r  r   r  r  r6   r6   r6   r7   r  y  s    +1 r  c                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestMultinomialc                 C   sl   t ddd}t|ddd t ddgd	d
dg}t|tjdd t ddgd	ddg}t|tjdd d S )Nr:   re   r   r  r  g&Mty:0yE>r   r:   re   r   r  r  )r   logpmfr   r+   NAN)rD   vals1vals2vals3r6   r6   r7   test_logpmf9  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   )r         r   r   r   r   )r   r  r!   r   pmfrD   val1val2r6   r6   r7   test_reduces_binomialC  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      ?re  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   g+=r   )r   r   r  )rD   r1   pr_valsrO   r6   r6   r7   test_RN  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:   re  r   {   r1  rL  )r   r   r+   r,   RandomStater   )rD   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)rK   rK   r	   r	   r  r   r  r   r  g5
?r:   r   r  rp   	   r  g*7?g<Wƌ?r   r;   r   re   r;   r:   r:   r   r   )gUUUUUU?rh  r   gߦ?)r   r  r   r+   r   float64r   )rD   vals0r  r  rO   r  vals4vals5r6   r6   r7   test_pmff  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   rm  gv?g~jt?r  r   re   r   )r   r  r   )rD   r  r  r  r  r  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 )NrK   )r   r  r   )rm  g333333ӿ      )g433333ӿg?      )r  r  g      ?r  r   r   rF   r   rD   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 )NrK   r   r   r   rm  g?gܿgr  r   re   g
ףp=
?g
ףp=
׿r  r  ro  r   gzG?gzGr   g333333r  rD   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   rm  r  r   r   r   r   r!   )rD   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   r   r  r  ro  r   r  )rD   r  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 )NrK   r   rm  r   rV  r  r   r   rP   r   rD   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 )NrK   r   r   rm  r   rV  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}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 )
NrH      )r   r   r  ro  r   r   r   r  r   r   r	      r   r	   r	   r   r	   r	   r	   r  r	   r	   r;   r  r   )
r+   r,   rL   asarrayr  r   r   r  r  r   )rD   r1   pvalsrO   	mn_frozenr6   r6   r7   r     s   "
zTestMultinomial.test_frozenN)r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r   r6   r6   r6   r7   r  8  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+   r   r>   r  ri   rj   rh   ru  r   r   r   r   rE  rP   r  r   rB   )	rD   r  r   r   r   rO   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 ]B}t||}t|d dd}t	|
 |
  t	| |  t	|||| |j|d}	|d ddf}
d}td|
||	 q"d S )Nr  r  r	   rK      r;   r   r   r   r  r   r  rL  r   r   r   )r+   r,   rL   r  r>   r   r   r   r   r   rE  rP   rB   r   r
   )rD   r  r  r   r  r   r  r  igr   r  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 rL  r	   r;   rp   r  )r+   r  r   r   r,   rL   r   normalr  	chisquarer   r  r/   choleskyri   rj   invr   )rD   r  r  r   r  r  w_rvsfrozen_w_rvsiw_rvsfrozen_iw_rvscovariances	variancesA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;   rp   r   r   )rp   r;   r   r   )r   r   r	   re   re   r   V瞯<r   r	   N)r+   r   copyr   r  r   ri   )rD   a0a1aainvidentr6   r6   r7   test_cho_inv_batchC  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 )r  r  r  r  r  )r  r   r:   r	   )r   r  rK   r	   )r:   rK   r  r;   )r	   r	   r;   r  r   r   r;   r	   r   N)r+   r   r   rT   r   r/   r   solverU   r'   tracer   )rD   r   Psinuprobr  siglogdetX	logdetPsir2   expectedr6   r6   r7   test_logpdf_4x4T  s4   




zTestInvwishart.test_logpdf_4x4N)r  r	  r
  r   r  r  r  r  r6   r6   r6   r7   r    s     ;r  c                   @   r  )TestSpecialOrthoGroupc                 C   sf   t jd td}t g dg dg dg}t|| t jjdd}tjd|d}t|| d S )N  r:   )g(fg^A.g*B?)g:d?g2ugi}?)gR#xlF?g^`D?g?rL   r"  )r+   r,   rL   r   r   r   r   r  )rD   rO   r  r#  r6   r6   r7   test_reproducibilityn  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 Nr   r	   rJ   )r@   rA   r   r   rD   r6   r6   r7   test_invalid_dimz     z&TestSpecialOrthoGroup.test_invalid_dimc                 C   s4   d}t |}|jdd}t j|dd}t|| d S )Nr   rH   r"  )r   r   r   )rD   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:   )rh   r   r   .0r  r   r6   r6   r7   
<listcomp>      z<TestSpecialOrthoGroup.test_det_and_ortho.<locals>.<listcomp>r;   r  c                 S      g | ]}t j|qS r6   r+   r/   r   r&  rO   r6   r6   r7   r'        r      vIh%<=r   r   )rh   r   r   r+   ri   rj   r  r   )rD   r{  detsrO   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 )NrK   r9  皙?r  rL  r   r  )r	   re   )r;   r:   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{  r6  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'    rE  )r+   r,   rL   r   r   dictr   r  rD   r  samplesks_probpairsks_testsr6   rD  rL  r{  r7   	test_haar     
zTestSpecialOrthoGroup.test_haarN)r  r	  r
  r  r   r"  r0  rT  r6   r6   r6   r7   r  m  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   sj   t jd td}tjddd}tt j|d t g dg dg dg}t	|| t	|| d S )Ni  r:   r"  rp   )gmS9?g8e,˿gRVϿ)gob2g	,ʶgC}Ȇ?)gF-YD?g:kO?g-C?)
r+   r,   rL   r   r   r   r/   r   r   r   rD   rO   x2r  r6   r6   r7   r    s   


z#TestOrthoGroup.test_reproducibilityc                 C   r  r  )r@   rA   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   rH   r  r"  r	   rL  )r   r   r   rD   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   )rh   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   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+   nonzeror   r&  r   r6   r6   r7   r'       $ c                 S   rc  rd  re  rg  r6   r6   r7   r'    rh  )rh   r+   r   r   fabsr   r   r   r   ri   rj   r  )rD   r{  r/  ra  rO   r6   r6   r7   r0    s   z!TestOrthoGroup.test_det_and_orthoc                    r1  )NrK   r9  r2  i  rL  r3  c                 3   r4  )c                    r5  r6   r6   r+  r6  r6   r7   r'    r,  z6TestOrthoGroup.test_haar.<locals>.<genexpr>.<listcomp>Nr9  r;  r<  r6  r7   r=    r>  z+TestOrthoGroup.test_haar.<locals>.<genexpr>c                    r?  r6   r6   r@  rC  r6   r7   r'    rE  z,TestOrthoGroup.test_haar.<locals>.<listcomp>c                    rF  r  rG  rH  rK  r6   r7   r'    rE  )r+   r,   rL   r   r   rM  r   r  rN  r6   rS  r7   rT    rU  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 NrL  )r+   r/   r0   r,   r  ri   )r  r3   _sr5   r6   r6   r7   random_ortho  s    z<TestOrthoGroup.test_pairwise_distances.<locals>.random_orthor;   r   r9  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+   r   )r&  _)r  r   r6   r7   r'    s    z\TestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statistics.<locals>.<listcomp>rL  )r+   r   rh   r,   r   r   )r   r   epsstatsr_  )r   r7   generate_test_statistics  s
   zHTestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statisticsr2  )r9  r   )
r+   r,   rL   rh   r.   ro  r   r   r   r   )rD   rl  rp  r  r   _Dr  r6   r_  r7   test_pairwise_distances  s   	z&TestOrthoGroup.test_pairwise_distancesN)r  r	  r
  r  r   r"  r0  rT  r   markslowrr  r6   r6   r6   r7   rV    s    rV  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   rm  r   rI   r"  )r   ʿ3LU?iƖ\)rw  r   ``+ϿO0)?)rx  rz  r   qɨ?)ry  r{  r|  r   )r+   r,   rL   r   r   r   r   )rD   r  rO   rX  r  r6   r6   r7   r    s   


z*TestRandomCorrelation.test_reproducibilityc                 C   s|   t ttjd  t ttjd t ttjd t ttjdg t ttjddgddgg t ttjddg t ttjg d d S )	NtestrJ   r	   r;   r:   re   r  )r	   r;   r   )r@   rA   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 )Nrv  r  r  r"  )r   r   r   )rD   r  r$  r[  r%  r&  r\  r6   r6   r7   r"  1  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   r   r6   r6   r7   r   E  s   z3TestRandomCorrelation.test_definition.<locals>.normr  c                    s    g | ]} |t jj|d qS )rL  )r+   r,   r   r^  r   r6   r7   r'  J  s     z9TestRandomCorrelation.test_definition.<locals>.<listcomp>r;   r   )re   r   r   r   c                 S   s   g | ]	}d gt | qS )r   )r  r&  r   r6   r6   r7   r'  M  rb  c                 S      g | ]}t |qS r6   )r   r   r  r6   r6   r7   r'  N      c                 S   s   g | ]}t t j|qS r6   )r+   ri  r/   r   r+  r6   r6   r7   r'  T  s    c                 S   r  r6   )r+   prodr  r6   r6   r7   r'  U  r  r.  r   c                 S   r  r6   )r+   r   r+  r6   r6   r7   r'  Y  r  r   )r+   r,   rL   rh   ru  r   ziprj   )
rD   r  r   r{  r/  
dets_knowndiagsr  r}  rO   r6   r  r7   test_definition=  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)overrp   gu <7~r   r_  r;   r   gMk   @)r+   r   r   r   _to_corrr   errstate	nextafterr  rj   ri   )rD   rx  gm0r6   r6   r7   test_to_corra  s$   
"z"TestRandomCorrelation.test_to_corrN)r  r	  r
  r  r~  r"  r  r  r6   r6   r6   r7   ru    s    	$ru  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,   rL   r   r   r   r   rW  r6   r6   r7   r    s   


z%TestUnitaryGroup.test_reproducibilityc                 C   r  r  )r@   rA   r   r   r  r6   r6   r7   r     r!  z!TestUnitaryGroup.test_invalid_dimc                 C   rY  )Nr   r  r  r"  r	   rL  )r   r   r   rZ  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$  )rh   r   r   r%  r6   r6   r7   r'    r(  z3TestUnitaryGroup.test_unitarity.<locals>.<listcomp>r;   r  r   r  r   )rh   r   r+   ri   conjrj   r  r   )rD   r{  rO   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 )	NrK   r9  r  rL  c                 S   r)  r6   )r.   r/   eigvalsr+  r6   r6   r7   r'    r,  z.TestUnitaryGroup.test_haar.<locals>.<listcomp>r;   r2  )r+   r,   rL   r   r   rt  arctan2imagrealr    ravelr   r   rC   r   pvalue)rD   r  rO  r{  r  rO   resr6   r6   r7   rT    s    zTestUnitaryGroup.test_haarN)r  r	  r
  r  r   r"  r  rT  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;   re   r:   rK   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?)rp   r	   2   )r   r   re  )r   r   r]  )re  r]  r   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#   rB   r   )rD   rO   r   r   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#   rB   rT   r   r+   rU   )	rD   rO   r   r   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   re   r	   r  r   r  rp   r:   r	   r  )r#   rB   r$   r   )rD   rO   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	   i r  rL   rL  r  r:   r   rp   *   )r#   r   r%   r   )rD   	P_VAL_MINr  rO  rm  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+   rs   
isinstancer   rB   
call_countrT   )rD   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 )Nre         @r   r	   rL  )
r+   rr   r  r#   rB   isscalarrT   r,   r   r   )	rD   r  r   r   r  rO   r  	n_samplesr   r6   r6   r7   test_shape_correctness4  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   r   r  )rD   r  r6   r6   r7   test_default_argumentsT  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   r   r  r  rD   r   r   r  loc_ans	shape_ansdf_ansr  r6   r6   r7   test_default_argse  s   z#TestMultivariateT.test_default_argsrp   c                 C   s4   t |||}t|j| t|j| t|j| d S r*   r  r  r6   r6   r7   &test_scalar_list_and_ndarray_argumentsr  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   r   rp   r  r   )r@   rA   r#   rM  r+   rr   r  )rD   r   r   r  r6   r6   r7   test_argument_error_handlingy  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 )Nre   r:   rL  r;   r  r   )r+   r,   r  r   r  r#   r   r   )rD   rngr   r   dist1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   r   r  rg   )rM  r@   r+   r/   r   r#   )rD   r  r6   r6   r7   test_allow_singular  s    z%TestMultivariateT.test_allow_singularr   )r   r:   )rK   r   re   r:   r  )r;   r:   re   rK   r  r   rJ  c                 C   s<   t t|t||}|j|d}|j||f ksJ d S rj  )r#   r+   rr   r  r   r   )rD   r   r  r  r  r   r6   r6   r7   test_rvs  s   zTestMultivariateT.test_rvs)r  r	  r
  	PDF_TESTSr   rs  parametrizer  r  r  r  r)   r  r  r  DEFAULT_ARGS_TESTSr  r+   r   ARGS_SHAPES_TESTSr  r  r  r  rs   r  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:   re   rK   r   r   gr   r  r	   r;   iir  r  rp   ic                 C       t |||}t||dd d S )Ngư>r   )r   r  r   rD   rO   rx  r1   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   rK   re   )rO   rx  r1      )ru   r2   r1   r   r  r   r      )r   r  r"   r   r  r6   r6   r7   test_reduces_hypergeom  s   z0TestMultivariateHypergeom.test_reduces_hypergeomc                 C   s:   t ddgdd}|jddd}t|d| d	d
 d S )Nr:   rK   re   rx  r1   r9  r  r1  r   r   r   r   r   r   rP   rD   r  r   r6   r6   r7   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:   rK   r   re   r  r  )r9  r;   r  r1  r   r   r   r  r  r6   r6   r7   test_rvs_broadcasting  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+   r  r  r   )rD   rx  r1   r  res_exr6   r6   r7   test_rvs_gh16171  s
   
z*TestMultivariateHypergeom.test_rvs_gh16171g zl?r  r  gQ?gE|?g
y?r  )rK   r   r   r   gzp?c                 C   r  Nr   r   r   r  r   r  r6   r6   r7   r    s   z"TestMultivariateHypergeom.test_pmfr  g ?r   rq   c                 C   r  r  r  r  r6   r6   r7   r    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   r  r  )gf_?&BUп疈Cx@ؿ)r  ggs>d?ZsK)r  r  g35?r  r   r   rF   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  r  r  g?gg(\?g(\r  r   re   rK   rq   g333333?g333333r  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   rK   re   r  r  r2   r1   r   r  r   )r   rE  r"   r   )rD   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   rK   re   r  r  r   r  r   r	   r  g̍3eY?gI{?rq   )r   rE  r   )rD   r  r  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   rK   re   r  r  r  r   r  r   r  r  g      @rV  )r   rP   r"   r   rD   mean0r  r   mean3r6   r6   r7   r  7  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:   rK   r   re   r  r  rI   rJ   gUUUUUU@gUUUUUU@r  r   )r   rP   r   )rD   r  r  r6   r6   r7   r  A  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 )Nr   r   r   r   r  rq   rq   rq   r	   r   r   r;   r	   r   r	   )r   rq   r   FFg<r   rd  )
r   rP   r   r+   r   r   r   int_r   r   r  r6   r6   r7   test_mean_edge_casesF  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   r  r  gؗҜ<r   r  r;   r  r  rd  )
r   rE  r   r   r+   r   r   r  r   r   )rD   r  r  r  r  r6   r6   r7   test_var_edge_casesU  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	   r  r  r  r   r  r   r   r   )r   rF   r   r   r+   r   r  float_r:  r   r   )rD   cov0r  r  r  r  r  r6   r6   r7   test_cov_edge_casesd  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 )
NrH   r  )r   r  r     r  r  r  r  r  r   )r+   r,   rL   r  r  r   r   r  r  rE  rF   )rD   r1   rx  rO   
mhg_frozenr6   r6   r7   r   r  s    


z%TestMultivariateHypergeom.test_frozenc                 C   s   t ttjddd t ttjddgd t ttjddgdgd t ttjddgddgd t ttjddgddgd t ttjddgddgd d S )	NrK   r   re   g      @r  r  g      %@g      /@)r@   rA   r   r  	TypeErrorr  r6   r6   r7   test_invalid_params  s   z-TestMultivariateHypergeom.test_invalid_paramsN)r  r	  r
  r   rs  r  r+   NINFr   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    sx    


"&&
	
r  c                 C   sd   | j }d| _ | j|ddi t| }| j|ddi}t|}|j|ddi}t|| || _ d S )NrH   r   r  )r#  r   pickledumpsloadsr   )distfnr  r  r4   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   r   r   rK   rn  )r;   )r+   r  r   r   r   r   r   r   r   r   r(   r  )r   distsr  r  r6   r6   r7   test_random_state_property  s   


	
r  )G__doc__r  numpy.testingr   r   r   r   r   r   r   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%   scipy.integrater&   scipy.specialr'   common_testsr(   unittest.mockr)   r8   r9   r  r@  r  r  r  r  r  rV  ru  r  r  r  r  r  r6   r6   r6   r7   <module>   sR     d   K 2 B @  %Eig: o e