o
    Gen=                    @   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 G dd dZ7G dd dZ8G dd dZ9d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 Z@G d!d" d"ZAG d#d$ d$ZBG d%d& d&ZCd'd( ZDd)d* ZEd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                   @   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d1S )2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,   )nparangeidentityassert_raises
ValueErrorr   pdfcdf)selfmucov r9   m/var/www/html/SPIRAL.web.tool/spiral_venv/lib/python3.10/site-packages/scipy/stats/tests/test_multivariate.py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/   randomseedr   r4   r   ndimrandnabsr5   )r6   xmeanr8   r4   r5   r9   r9   r:   test_scalar_values/   s"   

z)TestMultivariateNormal.test_scalar_valuesc                 C   f   t jd t jd}t jd}t t jd}t|||}t|||}t|t 	| d S Nr<   r?   )
r/   r@   rA   rC   rD   r   logpdfr4   r   logr6   rE   rF   r8   d1d2r9   r9   r:   test_logpdfJ      z"TestMultivariateNormal.test_logpdfc                 C   l   t jd t jd}t|}t|}t|d d}t|d d}t|t | t|t | d S Nr<   r?   r	   )	r/   r@   rA   rC   r   rJ   r4   r   rK   r6   rE   rM   rN   d3d4r9   r9   r:   test_logpdf_default_valuesT      

z1TestMultivariateNormal.test_logpdf_default_valuesc                 C   rH   rI   )
r/   r@   rA   rC   rD   r   logcdfr5   r   rK   rL   r9   r9   r:   test_logcdfa   rP   z"TestMultivariateNormal.test_logcdfc                 C   rQ   rR   )	r/   r@   rA   rC   r   rX   r5   r   rK   rS   r9   r9   r:   test_logcdf_default_valuesk   rW   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<      r	   Tallow_singular)r/   r@   rA   rC   rangedotTr   r   cov_inforank)r6   nrF   expected_ranksr8   distnr9   r9   r:   	test_rankx   s   z TestMultivariateNormal.test_rankc              	   C   s~  dd }t ddD ]}tj|}t d|d D ]}tj||}t||j}t||f}||d |d |f< ||}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|| qq	d S )Nc                 S   s$   t j| | }tj|\}}}|S N)r/   r@   rC   scipylinalgsvd)rc   Mure   vr9   r9   r:   _sample_orthonormal_matrix   s   zXTestMultivariateNormal.test_degenerate_distributions.<locals>._sample_orthonormal_matrixr	   r?   Tr\   )r^   r/   r@   rC   r_   r`   zerosr   r   ra   rb   r4   r   rJ   )r6   ro   rc   rE   kre   cov_kkcov_nnrm   cov_rrydistn_kkdistn_nndistn_rrpdf_kkpdf_nnpdf_rr	logpdf_kk	logpdf_nn	logpdf_rrr9   r9   r:   test_degenerate_distributions   sF   






z4TestMultivariateNormal.test_degenerate_distributionsc                 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/   exprp   floatfill_diagonalr   ri   rj   detinfr   slogdetr   log_pdet)r6   large_total_lognposnzerolarge_entryrc   r8   psdr9   r9   r:   test_large_pseudo_determinant   s   $z4TestMultivariateNormal.test_large_pseudo_determinantc                 C   s   t jd d}t j||}t ||j}t j|}t jdd|}t|||}t|||}t	dD ]3}t	dD ],}	t|||	f ||}
t
|
|||	f  t|||	f ||}
t
|
|||	f dd q<q6d S )Nr<   r[   r,   r+   gMbP?rtol)r/   r@   rA   rC   r_   r`   r   r4   r5   r^   r   )r6   rc   datar8   rF   Xdesired_pdfdesired_cdfijactualr9   r9   r:   test_broadcasting   s    z(TestMultivariateNormal.test_broadcastingc                 C   sn   t ddd}d\}}|d }t|||}t|||}t|| t|||}t|||}t|| d S )Nr   r,   
   )333333??      ?)r/   linspacer   r4   r   r   r5   )r6   rE   rF   r8   scalerM   rN   r9   r9   r:   test_normal_1D   s   
z%TestMultivariateNormal.test_normal_1Dc                 C   s  t ddg}t ddgddgg}d}d|d  }t d	d|}t ||\}}t ||d
f}||d d d d d	f< ||d d d d df< t|||}	t|	|d	d}
t|	|dd}tj||d	 |d d d}tj||d |d d d}t	|
|ddd t	||ddd d S )Nr>   g      @r   皙?333333?i     r	   r   r,   axisr   r   )locr   )r	   r	   {Gz?r   atol)
r/   arrayr   meshgridemptyr   r4   r&   r   r   )r6   rF   r8   rc   deltarn   xvyvposr4   margin_xmargin_ygauss_xgauss_yr9   r9   r:   test_marginalization   s    z+TestMultivariateNormal.test_marginalizationc                 C   s   t jd t jd}t jd}t t jd}t||}t||t||| t||t||| t|	|t	||| t|
|t
||| d S rI   )r/   r@   rA   rC   rD   r   r   r4   rJ   r5   rX   )r6   rE   rF   r8   norm_frozenr9   r9   r:   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   Hz>h㈵>)cond)r/   r@   rA   rC   r_   r`   ri   rj   eighfulldiagr   pinvr   r   sumrK   )	r6   rc   rE   r8   re   rm   r   r   psd_pinvr9   r9   r:   test_pseudodet_pinv  s    z*TestMultivariateNormal.test_pseudodet_pinvc                 C   s    g dg dg}t tt| d S )Nr	   r,   r+   )r[   r?   r   r2   r3   r   r6   r8   r9   r9   r:   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/   nanr2   r3   r   r   )r6   cov_nancov_infr9   r9   r:   test_exception_nonfinite_cov2  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   r9   r9   r:   test_exception_non_psd_cov8  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 S )Nr<   r?   )r?   r?   )r/   r@   rA   rC   onesrj   LinAlgErrorr2   r   r4   rJ   r5   rX   )r6   rE   rF   r8   er9   r9   r:   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,   r?   r+   )r	   r+   r,   dr	   r,   r   )r,   r?   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   cosr`   r   r4   r   r5   )r6   r_pdfrE   ru   zrrF   r8   r4   r_cdfr5   r_cdf2r2mean2cov2cdf2r9   r9   r:   test_R_valuesH  s$   z$TestMultivariateNormal.test_R_valuesc                 C   s<   t d}t d}t||dd}| }t|ddg d S )Nr,   r,   r,   Tr\   r   )r/   rp   r   rvsr   )r6   rF   
covariancemodelsampler9   r9   r:   ,test_multivariate_normal_rvs_zero_covariance  s
   

zCTestMultivariateNormal.test_multivariate_normal_rvs_zero_covariancec                 C   s   d}d}t jt|d|d}t|j||f t jd tddgddgg|d}t|j|df t ddd}||}t|j|f d S )	Ni,  r[   r	   )rF   r8   sizer,   皙?r   rF   r8   )r   r   r/   rp   r   shaper   )r6   Nr   r   rm   r9   r9   r:   test_rvs_shape  s   
z%TestMultivariateNormal.test_rvs_shapec                 C   sx   t jd d}t j|}t j||}t ||j}d}t|||}tt	
|j|dd t|d|dd d S )N  r+   i  r   r   r   )r/   r@   rA   rC   r_   r`   r   r   r   numpyr8   rF   )r6   rc   rF   rl   r8   r   r   r9   r9   r:   test_large_sample  s   z(TestMultivariateNormal.test_large_samplec                 C   s   t jd d}t j|}t j||}t ||j}t||}t| t|| t j	
|d }d|t dt j d  t t |  }t||  d S )Nr   r+   r   r   r,   r	   )r/   r@   rA   rC   r_   r`   r   r   entropyrj   eigrK   pir   )r6   rc   rF   rl   r8   rveigsdesiredr9   r9   r:   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   )r6   alphar   r9   r9   r:   test_lnB  s   zTestMultivariateNormal.test_lnBN)__name__
__module____qualname__r;   rG   rO   rV   rY   rZ   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r9   r9   r9   r:   r*   &   s2    

,@r*   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 )Nr[   r+   333333?r   ffffff?)r?   r[   r+   r   )r/   r   r1   r2   r3   r   rp   r`   rj   r   r   )r6   num_rowsnum_colsrl   UVr   r9   r9   r:   test_bad_input  s   zTestMatrixNormal.test_bad_inputc                 C   s  d}d}t ||fd}dt | t ||fd }dt | t ||fd }t ||f}t |df}t d|f}t |}	t |}
t d}ttj|||dj||f ttj|dj||f ttj|d	j|df ttj|d
jd|f ttj||dj||f ttj||dj||f ttj||dj||f tt|dj|	 tt|dj	|
 tt|d	j
| tt|d	j	| tt|d
j
| tt|d
j| tt||dj	|
 tt||dj|	 tt||dj
| d S )Nr[   r+   r   r   r  r	   rF   rowcovcolcov)rF   )r  )r	  )rF   r	  )rF   r  )r  r	  )r/   r   r1   rp   r   r   r   r   r  r	  rF   )r6   r  r  rl   r  r  ZZrZcIrIcI1r9   r9   r:   test_default_inputs  sR   


z$TestMatrixNormal.test_default_inputsc           
      C   s   d}d}t ||fd}t |d}d}t |d}d}t |}t |}	tt|||djd|  tt|||djd|	  tt|||djd|  tt|||djd|	  d S )Nr[   r+   r   r   r   r  )r/   r   r1   r   r   r  r	  )
r6   r  r  rl   UvUsVvVsr  r  r9   r9   r:   test_covariance_expansion  s*   

z*TestMatrixNormal.test_covariance_expansionc                 C   s   t ddD ]w}t ddD ]o}t||fd}dt| t||fd }dt| t||fd }t|||d}|jdd}tj|||dd	}t|| |jdd}	||	}
tj|	|||d}t|
| ||	}tj|	|||d}t|| qqd S )
Nr	   r?   r   r   r  r  r<   random_state)rF   r  r	  r  )	r^   r/   r   r1   r   r   r   r4   rJ   )r6   r   r   rl   r  r  frozenrvs1rvs2r   pdf1pdf2logpdf1logpdf2r9   r9   r:   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	   r?   r   r   r  r  r<   r  r   r   r   )r^   r/   r   r1   r   r   r4   rJ   r`   flattenkronr   r   )r6   r   r   rl   r  r  r  r   r  r  vecXvecMr8   r  r  r9   r9   r:   test_matches_multivariate5  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 )Nr[   r+   r   r   r  r   r  r<   r   r  i  r   r   r,   r   )r/   r   r1   r   r   concatenatenewaxisr   r   rJ   r^   r   )r6   r  r  rl   r  r  r   r  X1X2r   array_logpdfr   r   separate_logpdfr9   r9   r:   test_array_inputL  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 )Nr[   r+   r   r   r    r  r<   r%  r   r   r   r   r	   r,   )r/   r   r1   r   r   rF   r   r8   reshaper`   swapaxes)r6   r  r  rl   r  r  r   r  r   sample_meansample_colcovsample_rowcovr9   r9   r:   test_momentsc  s$   zTestMatrixNormal.test_momentsN)
r   r   r   r  r  r  r  r$  r,  r3  r9   r9   r9   r:   r     s    'r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'S )(TestDirichletc                 C   s   t jd t jdd}t jdd|}t|}t| t| t| t| t|	 t	| d}t
|D ]9}t jdd|}|t | }t||d d t|d d | t||d d t|d d | q=d S Nr   r	       &.>r   r   r   )r/   r@   rA   randintr   r   r   varrF   r   r^   r   r4   rJ   r6   rc   r   r   	num_testsr   rE   r9   r9   r:   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+   r   )r/   r@   rA   r   r   r   r   r2   r3   r4   rJ   r`   r6   r   rE   r9   r9   r:   "test_numpy_rvs_shape_compatibility  s   z0TestDirichlet.test_numpy_rvs_shape_compatibilityc                 C   R   t jd g d}t jjt d|ddj}tttj|| tttj	|| d S )Nr   )r           r?  r7  r   r@  
r/   r@   rA   r   maximumr`   r2   r3   r4   rJ   rA  r9   r9   r:   test_alpha_with_zeros  
   z#TestDirichlet.test_alpha_with_zerosc                 C   rC  )Nr   )r   g       r?  r7  r   r@  rE  rA  r9   r9   r:    test_alpha_with_negative_entries  rH  z.TestDirichlet.test_alpha_with_negative_entriesc                 C   sp   t g d}t g d}t|| t|| t g d}tt||d tt||t d d S )Nr   r>  r?        @r   rD  r   r  )r   r   r   r   r   )r/   r   r   r4   rJ   r   rK   rA  r9   r9   r:   test_data_with_zeros  s   z"TestDirichlet.test_data_with_zerosc                 C   @   t g d}t g d}tttj|| tttj|| d S )N)r   r   r?  rK  rL  r/   r   r2   r3   r   r4   rJ   rA  r9   r9   r:   $test_data_with_zeros_and_small_alpha     z2TestDirichlet.test_data_with_zeros_and_small_alphac                 C   rN  )NrJ  )r   皙r   r  rO  rA  r9   r9   r:   test_data_with_negative_entries  rQ  z-TestDirichlet.test_data_with_negative_entriesc                 C   rN  )NrJ  )r   皙?r   r  rO  rA  r9   r9   r:    test_data_with_too_large_entries  rQ  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   r   r2   r3   r   r4   rJ   rA  r9   r9   r:   test_data_too_deep_c     z"TestDirichlet.test_data_too_deep_cc                 C   sF   t ddgddgg}t dd}tttj|| tttj|| d S )Nr   r>  r?  rK  )r,   r,   r         ?rW  rA  r9   r9   r:   test_alpha_too_deep  s   z!TestDirichlet.test_alpha_too_deepc                 C   s6   t g d}t dd}t|| t|| d S )Nr=  r+   r   UUUUUU?)r/   r   r   r   r4   rJ   rA  r9   r9   r:   test_alpha_correct_depth  s   z&TestDirichlet.test_alpha_correct_depthc                 C   rV  )Nr=  r\  r   rW  rA  r9   r9   r:   test_non_simplex_data  rY  z#TestDirichlet.test_non_simplex_datac                 C   rV  )NrJ  )r,   r   r   rW  rA  r9   r9   r:   test_data_vector_too_short  rY  z(TestDirichlet.test_data_vector_too_shortc                 C   rV  )NrJ  )r?   r   r   rW  rA  r9   r9   r:   test_data_vector_too_long  rY  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   r9  rF   )r6   r   r   expected_varexpected_meanr9   r9   r:   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   rF   rB   r9  r4   rJ   )r6   r   r   r9   r9   r:   rG     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 r5  )
r/   r@   rA   r8  r   r   r^   r   r   r4   r:  r9   r9   r:    test_K_and_K_minus_1_calls_equal  s    z.TestDirichlet.test_K_and_K_minus_1_calls_equalc                 C   s   t jd t jdd}t jdd|}t|}d}d}d }t|D ]J}t|D ]}t jdd|}	|	t |	 }	|d urFt ||	f}q)|	}q)|	|j
}
d }|D ]}|	|}|d uret ||}qS|}qSt|
| q#d S )Nr   r	   r6  r7  r   r   r?   )r/   r@   rA   r8  r   r   r^   r   vstackr4   r`   appendr   )r6   rc   r   r   r;  num_multiplexmr   mrE   rmrsxsr   r9   r9   r:   test_multiple_entry_calls  s.   
z'TestDirichlet.test_multiple_entry_callsc                 C   s   t jd t jddd}t|}t|d |d }d}t|D ]}t jddd}|t | }t|	||	|g q!t|
 |
 d  t| | d  d S )Nr   r7  r   r,   r   r	   r   )r/   r@   rA   r   r   r   r^   r   r   r4   rF   r9  )r6   r   r   br;  r   rE   r9   r9   r:   test_2D_dirichlet_is_beta)  s   z'TestDirichlet.test_2D_dirichlet_is_betaN)r   r   r   r<  rB  rG  rI  rM  rP  rS  rU  rX  r[  r^  r_  r`  ra  rg  rG   rh  rq  rs  r9   r9   r9   r:   r4  y  s(    	
r4  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 )NrD  r   zDimension mismatch)r/   r   r2   r3   r   r   strlen)r7   sigmar   msgr9   r9   r:   ,test_multivariate_normal_dimensions_mismatch:  s   (rx  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,   rT  r+   )
r/   r   r_r   r   r   r   r2   r3   eye)r6   
true_scalescalesr   wr9   r9   r:   test_scale_dimensionsN  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   r4   r   r'  r~  )r6   r   r  densityrE   r9   r9   r:   test_quantile_dimensionsy  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 	Nr[   r	   r,   r   rq   r?   r   r   )r/   r   r0   tril_indicesr_   r`   r^   rj  r   r   r   r   r9  rF   moder   r4   )	r6   dimr   r   r   rE   
parametersdfr  r9   r9   r:   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   numr@  r   r   )r/   r@   rA   r~  r0   r   r   r   r   r   r9  rF   r   r4   r   r
   )r6   snr  r   df_ranger   r  r  cr   argsr   r9   r9   r:   test_1D_is_chisquared  s$   

z!TestWishart.test_1D_is_chisquaredc                 C   s  t jd d}d}d}t t dd }t d|t jddd< t |j|}t |df}|j||	 }t
||}t||d	}t| |  t| |  t| |  t jd
ddd}	t||	||	 |j|d}
|d|f}d}td|||
 d S )Nr  r  r   r[   r	   r   r   r  r   r   r  r@  r   r   r   )r/   r@   rA   r   r0   r  r_   r`   r   squeezer   r   r   r9  rF   r   r   r4   r   r
   )r6   r  r  r  r   lamdasigma_lamdar  r  r   r   r  r   r9   r9   r:   test_is_scaled_chisquared  s(   

z%TestWishart.test_is_scaled_chisquaredN)r   r   r   r  r  r   r  r  r9   r9   r9   r:   rz  M  s    +1 rz  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+   r[   r   r   r  g&Mty:0yE>r   r+   r[   r   r   r  )r   logpmfr   r/   NAN)r6   vals1vals2vals3r9   r9   r:   test_logpmf  s   zTestMultinomial.test_logpmfc                 C   sX   t ddd}tddd}t||dd t dd	d
}tdd	d}t||dd d S )Nr  r   r  r+   r   r  r   )r         r   r   r   r   )r   r  r!   r   pmfr6   val1val2r9   r9   r:   test_reduces_binomial  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      ?rZ  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  )r6   rc   pr_valsrE   r9   r9   r:   test_R"  s   zTestMultinomial.test_Rc                 C   sH   t jddgd ddd}tjd}|j ddgd dd}t|| d S )Nr+   rZ  r   {   r%  r@  )r   r   r/   r@   RandomStater   )r6   sc_rvsrndmnp_rvsr9   r9   r:   test_rvs_np3  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)r?   r?   r	   r	   r  r   r  r   r  g5
?r+   r   r  r   	   r  g*7?g<Wƌ?r   r,   r   r[   r,   r+   r+   r   r   )gUUUUUU?r]  r   gߦ?)r   r  r   r/   r   float64r   )r6   vals0r  r  rE   r  vals4vals5r9   r9   r:   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   rb  gv?g~jt?r  r   r[   r   )r   r  r   )r6   r  r  r  r  r  r9   r9   r:   test_pmf_broadcastingO  s     &z%TestMultinomial.test_pmf_broadcastingc                 C   s4   t dd}g dg dg dg}t||dd d S )Nr?   )r   r   r   )rb  g333333ӿ      )g433333ӿg?      )r  r  g      ?r  r   r   r8   r   r6   cov1r   r9   r9   r:   test_cov_  s   zTestMultinomial.test_covc                 C   s   t dddgddgg}ddgddggddgddggg}t||d	d
 t ddgddg}ddgddggddgddggg}t||d	d
 t ddgddgddgg}ddgddggddgddggg}t||d	d
 d S )Nr?   r   r   r   rb  g?gܿgr  r   r[   g
ףp=
?g
ףp=
׿r   r  rd  r   gzG?gzGr   g333333r  r6   r  r   cov3cov4cov5cov6r9   r9   r:   test_cov_broadcastingf  s     z%TestMultinomial.test_cov_broadcastingc                 C   s*   t dddg}t|tdddd d S )Nr,   r   rb  r  r   r   r   r   r!   )r6   ent0r9   r9   r:   r   t  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  rd  r   r  )r6   r  ent1ent2r9   r9   r:   test_entropy_broadcastingz  s    
z)TestMultinomial.test_entropy_broadcastingc                 C   s&   t dddg}t|ddgdd d S )Nr?   r   rb  r   rK  r  r   r   rF   r   r6   mean1r9   r9   r:   	test_mean  s   zTestMultinomial.test_meanc                 C   s2   t ddgddg}t|ddgddggd	d
 d S )Nr?   r   r   rb  r   rK  g433333?g433333@r  r   r  r  r9   r9   r:   test_mean_broadcasting  s   z&TestMultinomial.test_mean_broadcastingc                 C   s   t jd d}d}g dg dg dg dg dg}t j|t jd	}t||}t||t||| t||t||| t|	 t	|| d S )
Nr<      )r   r   r   rd  r   r   r   r  r   r   r	      r   r	   r	   r   r	   r	   r	   r  r	   r	   r,   r  r   )
r/   r@   rA   asarrayr  r   r   r  r  r   )r6   rc   pvalsrE   	mn_frozenr9   r9   r:   r     s   "
zTestMultinomial.test_frozenN)r   r   r   r  r  r  r  r  r  r  r  r   r  r  r  r   r9   r9   r9   r:   r    s    
r  c                   @   ry  )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   r0   r  r_   r`   r^   rj  r   r   r   r   r9  rF   r  r   r4   )	r6   r  r   r   r   rE   r  r  iwr9   r9   r:   r     s*   $$
zTestInvwishart.test_frozenc                 C   s   t jd d}d}t |}t jdddtd}t jdd	d	d
}|D ]B}t||}t|d dd}t	|
 |
  t	| |  t	|||| |j|d}	|d ddf}
d}td|
||	 q"d S )Nr  r  r	   r?      r,   r   r   r   r  r   r  r@  r   r   r   )r/   r@   rA   r~  r0   r   r   r   r   r   r9  rF   r4   r   r
   )r6   r  r  r   r  r   r  r  igr   r  r   r9   r9   r:   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 r@  r	   r,   r   r  )r/   r~  r   r   r@   rA   r   normalr}  	chisquarer   r  rj   choleskyr_   r`   invr   )r6   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_rvsr9   r9   r:   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	   r[   r[   r   V瞯<r   r	   N)r/   r   copyr   r~  r   r_   )r6   a0a1aainvidentr9   r9   r:   test_cho_inv_batch  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  r?   r	   )r+   r?   r  r,   )r	   r	   r,   r  r   r   r,   r	   r   N)r/   r   r   rJ   r   rj   r   solverK   r'   tracer   )r6   r   Psinuprobr  siglogdetX	logdetPsirl   expectedr9   r9   r:   test_logpdf_4x4(  s4   




zTestInvwishart.test_logpdf_4x4N)r   r   r   r   r  r  r  r  r9   r9   r9   r:   r    s     ;r  c                   @   ry  )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?rA   r  )r/   r@   rA   r   r   r   r   r  )r6   rE   r  r  r9   r9   r:   test_reproducibilityB  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	   r>   )r2   r3   r   r   r6   r9   r9   r:   test_invalid_dimN     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   )r6   r  r  r  r  r9   r9   r:   test_frozen_matrixT  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   r9   r9   r:   
<listcomp>^      z<TestSpecialOrthoGroup.test_det_and_ortho.<locals>.<listcomp>r,   r  c                 S      g | ]}t j|qS r9   r/   rj   r   r  rE   r9   r9   r:   r  c      r      vIh%<=r   r   )r^   r   r   r/   r_   r`   r~  r   )r6   rp  detsrE   r9   r9   r:   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 )Nr?   r-  皙?r  r@  r   r  )r	   r[   )r,   r+   c                 3   4    | ]\  ft  fd dD fV  qdS )c                       g | ]}|   qS r9   r9   r!  ecerr9   r:   r    r"  z=TestSpecialOrthoGroup.test_haar.<locals>.<genexpr>.<listcomp>Nsortedr  rp  r,  r:   	<genexpr>     2 z2TestSpecialOrthoGroup.test_haar.<locals>.<genexpr>c                    &   g | ]} D ]
}||kr||fqqS r9   r9   r  e0e1elsr9   r:   r       & z3TestSpecialOrthoGroup.test_haar.<locals>.<listcomp>c                    &   g | ]\}}t  |  | d  qS r  r   r  p0p1projr9   r:   r    r;  )r/   r@   rA   r   r   dictr   ru  r6   r  samplesks_probpairsks_testsr9   r:  rB  rp  r:   	test_haark     
zTestSpecialOrthoGroup.test_haarN)r   r   r   r  r  r  r&  rJ  r9   r9   r9   r:   r  A  s    	r  c                   @   s<   e Z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  r   )gmS9?g8e,˿gRVϿ)gob2g	,ʶgC}Ȇ?)gF-YD?g:kO?g-C?)
r/   r@   rA   r   r   r   rj   r   r   r   r6   rE   x2r  r9   r9   r:   r    s   


z#TestOrthoGroup.test_reproducibilityc                 C   r  r  )r2   r3   r   r   r  r9   r9   r:   r    r  zTestOrthoGroup.test_invalid_dimc                 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 r9   )r   r   r  r   r  r9   r:   r    s    @TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>.<listcomp>r   )r^   r1  r9   rP  r:   r    s
    

z5TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>r,   r  c                 S   s   g | ]	}d d |D qS )c                 S   r  r9   r   r!  r9   r9   r:   r    r"  rQ  r9   )r  xxr9   r9   r:   r        r$  r   r   r   c                 S   $   g | ]}t |d k d  jd  qS r   r/   nonzeror   r  r   r9   r9   r:   r       $ c                 S   rT  rU  rV  rX  r9   r9   r:   r    rY  )r^   r/   r   r   fabsr   r   r   r   r_   r`   r~  )r6   rp  r%  rR  rE   r9   r9   r:   r&    s   z!TestOrthoGroup.test_det_and_orthoc                    r'  )Nr?   r-  r(  i  r@  r)  c                 3   r*  )c                    r+  r9   r9   r!  r,  r9   r:   r    r"  z6TestOrthoGroup.test_haar.<locals>.<genexpr>.<listcomp>Nr/  r1  r2  r,  r:   r3    r4  z+TestOrthoGroup.test_haar.<locals>.<genexpr>c                    r5  r9   r9   r6  r9  r9   r:   r    r;  z,TestOrthoGroup.test_haar.<locals>.<listcomp>c                    r<  r  r=  r>  rA  r9   r:   r    r;  )r/   r@   rA   r   r   rC  r   ru  rD  r9   rI  r:   rJ    rK  zTestOrthoGroup.test_haarc                    sh   t jd dd }tddD ]" d fdd		}||}|tjjj}tj||\}}t	d
| qd S )Nr  c                 S   s,   t jt jj| | fd\}}}t ||S )Nr@  )r/   rj   rk   r@   r  r_   )r  rm   _srn   r9   r9   r:   random_ortho  s    z<TestOrthoGroup.test_pairwise_distances.<locals>.random_orthor,   r   r-  r   c                    s<   t  fddt|D }|t jj| ||jd7 }|S )Nc                    s*   g | ]}t  d  d  d qS )rP  r,   )r/   r   )r  _)r  r   r9   r:   r    s    z\TestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statistics.<locals>.<listcomp>r@  )r/   r   r^   r@   r   r   )r   r   epsstatsrP  )r   r:   generate_test_statistics  s
   zHTestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statisticsr(  )r-  r   )
r/   r@   rA   r^   ri   r_  r   r   r   r   )r6   r\  r`  r  r   _Dr  r9   rP  r:   test_pairwise_distances  s   	z&TestOrthoGroup.test_pairwise_distancesN)r   r   r   r  r  r&  rJ  pytestmarkslowrb  r9   r9   r9   r:   rL    s    rL  c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestRandomCorrelationc                 C   sb   t jd d}t|}tj|dd}t g dg dg dg dg}t|| t|| d S )Nr  )r   rb  r   r=   r  )r   ʿ3LU?iƖ\)rh  r   ``+ϿO0)?)ri  rk  r   qɨ?)rj  rl  rm  r   )r/   r@   rA   r   r   r   r   )r6   r   rE   rN  r  r9   r9   r:   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testr>   r	   r,   r+   r[   r  )r	   r,   r   )r2   r3   r   r   r  r9   r9   r:   test_invalid_eigs  s   z'TestRandomCorrelation.test_invalid_eigsc           
         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 rh   )r   )r   r   r9   r9   r:   r     s   z3TestRandomCorrelation.test_definition.<locals>.normr  c                    s    g | ]} |t jj|d qS )r@  )r/   r@   r   rO  r   r9   r:   r    s     z9TestRandomCorrelation.test_definition.<locals>.<listcomp>r,   r   )r[   r   r   r   c                 S   s   g | ]	}d gt | qS )r   )ru  r  r   r9   r9   r:   r  	  rS  c                 S      g | ]}t |qS r9   )r   r   rq  r9   r9   r:   r  
      c                 S   s   g | ]}t t j|qS r9   )r/   rZ  rj   r   r!  r9   r9   r:   r    s    c                 S   rr  r9   )r/   prodrq  r9   r9   r:   r    rs  r$  r   c                 S   rr  r9   )r/   r   r!  r9   r9   r:   r    rs  r   )r/   r@   rA   r^   rj  r   zipr`   )
r6   r   r   rp  r%  
dets_knowndiagsr  rr  rE   r9   rp  r:   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)overr   gu <7~r   rT  r,   r   gMk   @)r/   r   r   r   _to_corrr   errstate	nextafterr  r`   r_   )r6   rm  gm0r9   r9   r:   test_to_corr  s$   
"z"TestRandomCorrelation.test_to_corrN)r   r   r   r  ro  rx  r  r9   r9   r9   r:   rg    s
    	$rg  c                   @   rf  )
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@   rA   r   r   r   r   rM  r9   r9   r:   r  ?  s   


z%TestUnitaryGroup.test_reproducibilityc                 C   r  r  )r2   r3   r   r   r  r9   r9   r:   r  K  r  z!TestUnitaryGroup.test_invalid_dimc                 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  r9   r9   r:   r  R  r  z3TestUnitaryGroup.test_unitarity.<locals>.<listcomp>r,   r  r   r  r   )r^   r   r/   r_   conjr`   r~  r   )r6   rp  rE   r9   r9   r:   test_unitarityQ  s   *zTestUnitaryGroup.test_unitarityc                 C   sx   d}d}t jd tj||d}t dd |D }t |j|j}t	|
 tt j dt j j}t|jdk d S )	Nr?   r-  r  r@  c                 S   r  r9   )ri   rj   eigvalsr!  r9   r9   r:   r  f  r"  z.TestUnitaryGroup.test_haar.<locals>.<listcomp>r,   r(  )r/   r@   rA   r   r   ri  arctan2imagrealr    ravelr   r   r5   r   pvalue)r6   r  rE  rp  r   rE   resr9   r9   r:   rJ  Z  s    zTestUnitaryGroup.test_haarN)r   r   r   r  r  r  rJ  r9   r9   r9   r:   r  >  s
    	r  c                   @   s  e Zd Zddgddgddgddgddgddgddgddgddgddgg
ddgddgddggdg dfg dg d	g d
g dg dgg dg dg dg dgdg dfgZejdedd Zejdedd Zdd Z	dd Z
eddd Zdd  Zd!d" Zd#d$d%d&dgdd&ggd%ddgd&dgdd&ggdfd%d&dgdd&ggd&ddgd&dgdd&ggd&fd&d&gd%d%d&d&gddgddggdfd&d&gd%d&d&d&gddgddggd&fd&d&gd&dgdd&ggd%d&d&gd&dgdd&ggdfd&d&gd&dgdd&ggd&d&d&gd&dgdd&ggd&fgZejd'ed(d) Zd*ddd*gdggdfd*gdgdd*gdggdfed*gedgdd*gdggdfgZejd'ed+d, Zd-d. Zd/d0 Zd1d2 Zd%S )3TestMultivariateTr	   r,   r[   r+   r?   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   )r   r   rZ  )r   r   rR  )rZ  rR  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#   r4   r   )r6   rE   r   r   r  ansdistvalr9   r9   r:   test_pdf_correctness  s   
z&TestMultivariateT.test_pdf_correctnessc           	      C   s8   t |||dd}||}||}tt|| d S r  )r#   r4   rJ   r   r/   rK   )	r6   rE   r   r   r  r  r  r  r  r9   r9   r:   test_logpdf_correct  s   

z%TestMultivariateT.test_logpdf_correctc                 C   s.   g d}t j|dd}t|}t|| d S )N)
r  r   r[   r	   r  r   r  r   r+   r	   r  )r#   r4   r$   r   )r6   rE   r  r  r9   r9   r:   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  rA   r@  r  r+   r   r   *   )r#   r   r%   all)r6   	P_VAL_MINr  rE  r]  r  r9   r9   r:   &test_mvt_with_high_df_is_approx_normal  s   z8TestMultivariateT.test_mvt_with_high_df_is_approx_normalz'scipy.stats.multivariate_normal._logpdfc                 C   s`   t ddtjdd}t|tsJ t jdtjd |jdksJ t jdtjd |jdks.J d S )Nr   r	   r   r  r  r,   )r#   r/   r   
isinstancer   r4   
call_countrJ   )r6   mockr  r9   r9   r:   !test_mvt_with_inf_df_calls_normal  s   z3TestMultivariateT.test_mvt_with_inf_df_calls_normalc           	      C   s   d}t |}t |}d}t |}t||||}t |s#J t||||}t |s3J d}t j||f}t||||}|j|fksNJ t||||}|j|fks_J tt dt dd	 }t |stJ d}tt dt ddj	|d}|j|fksJ d S )Nr[         @r   r	   r@  )
r/   rp   r~  r#   r4   isscalarrJ   r@   r   r   )	r6   r  r   r   r  rE   r  	n_samplesr   r9   r9   r:   test_shape_correctness  s(   


 z(TestMultivariateT.test_shape_correctnessc                 C   s6   t  }t|jdg t|jdgg |jdksJ d S )Nr   r	   r#   r   r   r   r  )r6   r  r9   r9   r:   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   r   r  r  r6   r   r   r  loc_ans	shape_ansdf_ansr  r9   r9   r:   test_default_args  s   z#TestMultivariateT.test_default_argsr   c                 C   s4   t |||}t|j| t|j| t|j| d S rh   r  r  r9   r9   r:   &test_scalar_list_and_ndarray_arguments"  s   z8TestMultivariateT.test_scalar_list_and_ndarray_argumentsc                 C   s   ddgg}t ttfi t|d ddgddgddgg}t ttfi t||d td}td}d}t ttfi t|||d d}t ttfi t|||d d S )	Nr	   )r   r,   r+   )r   r   r   r  r   )r2   r3   r#   rC  r/   rp   r~  )r6   r   r   r  r9   r9   r:   test_argument_error_handling)  s4   




z.TestMultivariateT.test_argument_error_handlingc                 C   sh   t jd}|jdd}t d}t||ddd}t||ddd}|jdd}|jdd}t|| d S )Nr[   r+   r@  r,   r  r   )r/   r@   r  r   r~  r#   r   r   )r6   rngr   r   dist1dist2samples1samples2r9   r9   r:   r  B  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  r]   )rC  r2   r/   rj   r   r#   )r6   r  r9   r9   r:   test_allow_singularL  s    z%TestMultivariateT.test_allow_singular)r   r   r   	PDF_TESTSrc  rd  parametrizer  r  r  r  r)   r  r  r  DEFAULT_ARGS_TESTSr  r/   r   ARGS_SHAPES_TESTSr  r  r  r  r9   r9   r9   r:   r  l  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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*d+gfdgdgggdgdggddgd*d+ggfdgdggdggggddgd*d+gggfgd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Zd@dA ZdBdC ZdDS )ETestMultivariateHypergeomzx, m, n, expectedr+   r[   r?   r   r   gr   r  r	   r,   iir  r  r   ic                 C       t |||}t||dd d S )Ngư>r   )r   r  r   r6   rE   rm  rc   r  valsr9   r9   r:   r  S  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   r?   r[   )rE   rm  rc      )rq   rl   rc   r   r  r   r      )r   r  r"   r   r  r9   r9   r:   test_reduces_hypergeomq  s   z0TestMultivariateHypergeom.test_reduces_hypergeomc                 C   s:   t ddgdd}|jddd}t|d| d	d
 d S )Nr+   r?   r[   rm  rc   r-  r  r%  r   r   r   r   r   r   rF   r6   r   r   r9   r9   r:   test_rvs|  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+   r?   r   r[   r  r  )r-  r,   r  r%  r   r   r   r  r  r9   r9   r:   test_rvs_broadcasting  s   z/TestMultivariateHypergeom.test_rvs_broadcastingg zl?r  r  gQ?gE|?g
y?r  )r?   r   r   r   gzp?c                 C   r  Nr   r   r   r  r   r  r9   r9   r:   r    s   z"TestMultivariateHypergeom.test_pmfr  g ?r   rD  c                 C   r  r  r  r  r9   r9   r:   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   r8   r   r  r9   r9   r:   r    s   z"TestMultivariateHypergeom.test_covc                 C   s   t jddgddggddgd}dd	gd	dggd
dgdd
ggg}t||dd t jdgdggddgd}dggdggg}t||dd t jddgddgd}dd	gd	dggddgddggg}t||dd d S )Nr   r  r   r  r  r  r  g?gg(\?g(\r  r   r[   r?   rD  g333333?g333333r  r  r9   r9   r:   r    s   z/TestMultivariateHypergeom.test_cov_broadcastingc                 C   s4   t jddgdd}tjdddd}t||dd d S )	Nr   r?   r[   r  r  rl   rc   r   r  r   )r   r9  r"   r   )r6   var0var1r9   r9   r:   test_var  s   z"TestMultivariateHypergeom.test_varc                 C   s   t jddgddgd}t jddgdd}t jddgdd}t|d |dd t|d	 |dd t jddgdd
ggddgd}ddgddgg}t||dd t jdgdggddgd}dgdgg}t||dd d S )Nr   r?   r[   r  r  r   r  r   r	   r  g̍3eY?gI{?rD  )r   r9  r   )r6   r  r  var2var3var4var5var6r9   r9   r:   test_var_broadcasting  s   z/TestMultivariateHypergeom.test_var_broadcastingc                 C   s`   t jddgdd}tjdddd}t|d |dd	 t jd
dgdd}ddg}t||dd	 d S )Nr   r?   r[   r  r  r  r   r  r   r  r  g      @rK  )r   rF   r"   r   r6   mean0r  r   mean3r9   r9   r:   r    s   z#TestMultivariateHypergeom.test_meanc                 C   s@   t jddgddggddgd}ddgd	d
gg}t||dd d S )Nr+   r?   r   r[   r  r  r=   r>   gUUUUUU@gUUUUUU@r  r   )r   rF   r   )r6   r  r  r9   r9   r:   r    s   z0TestMultivariateHypergeom.test_mean_broadcastingc                 C   s   t jg ddd}t|g d t jg ddd}t|tjtjtjg t jg dg dgdd}t|tjtjtjgg dgd	d
 t jtg tjdd}t|g  t|j	dk d S )Nr   r   r   r   r  rD  rD  rD  r	   r   r   r,   r	   r   r	   )r   rD  r   FFg<r   rU  )
r   rF   r   r/   r   r   r   int_r   r   r  r9   r9   r:   test_mean_edge_cases  s   
z.TestMultivariateHypergeom.test_mean_edge_casesc                 C   s   t jg ddd}t|g ddd t jg ddd}t|tjtjtjg t jg dg d	gdd}t|tjtjtjgg dgd
d t jtg tjdd}t|g  t|j	dk d S )Nr  r   r  r  gؗҜ<r   r  r,   r  r  rU  )
r   r9  r   r   r/   r   r   r  r   r   )r6   r  r  r  r  r9   r9   r:   test_var_edge_cases  s   
z-TestMultivariateHypergeom.test_var_edge_casesc                 C   s   t jg ddd}g dg dg dg}t||dd t jg ddd}g dg dg dg}t|| t jt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   r8   r   r   r/   r   r  float_r.  r   r   )r6   cov0r  r  r  r  r  r9   r9   r:   test_cov_edge_cases  s   
z-TestMultivariateHypergeom.test_cov_edge_casesc                 C   s   t jd d}g d}g dg dg dg dg dg}t j|t jd	}t||}t||t||| t||t||| t|	 t	|| t|
 t
|| d S )
Nr<   r  )r   r  r     r  r  r  r  r  r   )r/   r@   rA   r  r  r   r   r  r  r9  r8   )r6   rc   rm  rE   
mhg_frozenr9   r9   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 )	Nr?   r   r[   g      @r  r  g      %@g      /@)r2   r3   r   r  	TypeErrorr  r9   r9   r:   test_invalid_params  s   z-TestMultivariateHypergeom.test_invalid_paramsN)r   r   r   rc  rd  r  r/   NINFr   r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r   r  r9   r9   r9   r:   r  R  sn    

"&&
	
r  c                 C   sd   | j }d| _ | j|ddi t| }| j|ddi}t|}|j|ddi}t|| || _ d S )Nr<   r   r  )r  r   pickledumpsloadsr   )distfnr  r  re   r0	unpickledr1r9   r9   r:   check_pickling+  s   



r  c                  C   s   t d} d| d< d| d< tdgtt dgfgtd| fgtd| fgtdg d	fgtd
gt	d
gg}|D ]\}}t
|| t|| q3d S )Nr+   r   r-   r  r9   r   r   r?   rc  )r,   )r/   r~  r   r   r   r   r   r   r   r   r(   r  )r   distsr  r  r9   r9   r:   test_random_state_property?  s   


	
r  )F__doc__r  numpy.testingr   r   r   r   r   r   rc  r   r2   test_continuous_basicr
   r   r/   scipy.linalgri   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)   r*   r   r4  rx  rz  r  r  r  rL  rg  r  r  r  r  r  r9   r9   r9   r:   <module>   sP     d   & 1 B @  %E][. g Z