B
    `                 @   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 ddlmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ ddlmZmZ ddlmZm Z m!Z!m"Z"m#Z# ddlm$Z$m%Z% ddlm&Z&m'Z' ddlm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z. G dd de/Z0G dd de/Z1G dd de/Z2dd Z3G dd de/Z4G dd  d e/Z5G d!d" d"e/Z6G d#d$ d$e/Z7G d%d& d&e/Z8G d'd( d(e/Z9G d)d* d*e/Z:d+d, Z;d-d. Z<d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)matrix_normal)special_ortho_grouportho_group)random_correlation)unitary_group)	dirichletbeta)wishartmultinomial
invwishartchi2invgamma)normuniform)ks_2sampkstest)binom)romb)multigammaln)check_random_state_propertyc               @   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 r0   R/home/dcms/DCMS/lib/python3.7/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 )Ni  )g      ?g333333?g      @r      )
r&   randomseedr   r+   r   ndimrandnabsr,   )r-   xmeanr/   r+   r,   r0   r0   r1   test_scalar_values.   s"    

z)TestMultivariateNormal.test_scalar_valuesc             C   sf   t jd t jd}t jd}t t jd}t|||}t|||}t|t 	| d S )Ni  r3   )
r&   r4   r5   r7   r8   r   logpdfr+   r   log)r-   r9   r:   r/   d1d2r0   r0   r1   test_logpdfI   s    z"TestMultivariateNormal.test_logpdfc             C   sl   t jd t jd}t|}t|}t|d d}t|d d}t|t | t|t | d S )Ni  r3   r	   )	r&   r4   r5   r7   r   r<   r+   r   r=   )r-   r9   r>   r?   d3d4r0   r0   r1   test_logpdf_default_valuesS   s    

z1TestMultivariateNormal.test_logpdf_default_valuesc             C   sf   t jd t jd}t jd}t t jd}t|||}t|||}t|t 	| d S )Ni  r3   )
r&   r4   r5   r7   r8   r   logcdfr,   r   r=   )r-   r9   r:   r/   r>   r?   r0   r0   r1   test_logcdf`   s    z"TestMultivariateNormal.test_logcdfc             C   sl   t jd t jd}t|}t|}t|d d}t|d d}t|t | t|t | d S )Ni  r3   r	   )	r&   r4   r5   r7   r   rD   r,   r   r=   )r-   r9   r>   r?   rA   rB   r0   r0   r1   test_logcdf_default_valuesj   s    

z1TestMultivariateNormal.test_logcdf_default_valuesc             C   sp   t jd d}t j|}xNtd|d D ]<}t j||}t ||j}t||dd}t|j	j
| q,W d S )Ni     r	   T)allow_singular)r&   r4   r5   r7   rangedotTr   r   cov_inforank)r-   nr:   Zexpected_ranksr/   Zdistnr0   r0   r1   	test_rankw   s    z TestMultivariateNormal.test_rankc          	   C   s  dd }x~t ddD ]n}tj|}xZt d|d D ]F}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:W qW d S )Nc             S   s$   t j| | }tj|\}}}|S )N)r&   r4   r7   scipylinalgsvd)rN   MurO   vr0   r0   r1   _sample_orthonormal_matrix   s    zXTestMultivariateNormal.test_degenerate_distributions.<locals>._sample_orthonormal_matrixr	   r3   T)rH   )rI   r&   r4   r7   rJ   rK   zerosr   r   rL   rM   r+   r   r<   )r-   rW   rN   r9   krO   Zcov_kkZcov_nnrU   Zcov_rryZdistn_kkZdistn_nnZdistn_rrZpdf_kkZpdf_nnZpdf_rrZ	logpdf_kkZ	logpdf_nnZ	logpdf_rrr0   r0   r1   test_degenerate_distributions   s<    






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&   exprX   floatZfill_diagonalr   rQ   rR   detinfr   slogdetr   log_pdet)r-   Zlarge_total_logZnposZnzeroZlarge_entryrN   r/   psdr0   r0   r1   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|||}xvt	dD ]j}xdt	dD ]X}	t|||	f ||}
t
|
|||	f  t|||	f ||}
t
|
|||	f dd q|W qnW d S )Ni  rG   r%   r$   gMbP?)rtol)r&   r4   r5   r7   rJ   rK   r   r+   r,   rI   r   )r-   rN   datar/   r:   XZdesired_pdfZdesired_cdfijactualr0   r0   r1   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%   
   )g333333?g?g      ?)r&   linspacer   r+   r   r   r,   )r-   r9   r:   r/   scaler>   r?   r0   r0   r1   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 )Ng      @g      @g      ?g?g333333?i     r	   r   r%   )axis)r   r   )locro   )r	   r	   g{Gz?)rf   atol)
r&   arrayrn   Zmeshgridemptyr   r+   r    r   r   )r-   r:   r/   rN   deltarV   ZxvZyvposr+   Zmargin_xZmargin_yZgauss_xZgauss_yr0   r0   r1   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 )Ni  r3   )r&   r4   r5   r7   r8   r   r   r+   r<   r,   rD   )r-   r9   r:   r/   Znorm_frozenr0   r0   r1   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 )
Ni     g      ?g      ?r   gHz>gh㈵>)cond)r&   r4   r5   r7   rJ   rK   rQ   rR   Zeighfulldiagr   Zpinvr   rc   sumr=   )	r-   rN   r9   r/   rO   rU   r}   rd   Zpsd_pinvr0   r0   r1   test_pseudodet_pinv  s     z*TestMultivariateNormal.test_pseudodet_pinvc             C   s$   dddgdddgg}t tt| d S )Nr	   r%   r$   rG   r3   rq   )r)   r*   r   )r-   r/   r0   r0   r1   test_exception_nonsquare_cov-  s    z3TestMultivariateNormal.test_exception_nonsquare_covc             C   s@   ddgdt jgg}ttt| ddgdt jgg}ttt| d S )Nr	   r   )r&   nanr)   r*   r   ra   )r-   Zcov_nanZcov_infr0   r0   r1   test_exception_nonfinite_cov1  s    z3TestMultivariateNormal.test_exception_nonfinite_covc             C   s    ddgddgg}t tt| d S )Nr	   r   r|   )r)   r*   r   )r-   r/   r0   r0   r1   test_exception_non_psd_cov7  s    z1TestMultivariateNormal.test_exception_non_psd_covc             C   s   t jd t jd}t jd}t d}t jj}t|t|| t|tj	||| t|tj
||| t|tj||| t|tj||| d S )Ni  r3   )r3   r3   )r&   r4   r5   r7   onesrR   LinAlgErrorr)   r   r+   r<   r,   rD   )r-   r9   r:   r/   er0   r0   r1   test_exception_singular_cov;  s    
z2TestMultivariateNormal.test_exception_singular_covc             C   s<  t dddddg}t ddd}d	| d }|t | }t |||gj}t d
d	dgd}t d
ddgdddgddd	ggd}t|||}t||dd t dddddg}	t|||}
t|
|	dd t dddddg}t ||gj}t d
d	gd}t d
dgddggd}t|||}t||dd d S )Ng0Q-?gox'V?g[S, t?gDB?gc_.?r   r%   r3   r$   r	   dg      ?g|=)rt   gwk:E]?g̙Z?g0?gL8?gAG*?gh㈵>gIى?gG?gƏ)?gėh?gEE?)	r&   ru   rn   cosrK   r   r+   r   r,   )r-   Zr_pdfr9   rZ   zrr:   r/   r+   Zr_cdfr,   Zr_cdf2Zr2Zmean2cov2Zcdf2r0   r0   r1   test_R_valuesG  s*    

$



z$TestMultivariateNormal.test_R_valuesc             C   s<   t d}t d}t||dd}| }t|ddg d S )Nr%   )r%   r%   T)rH   r   )r&   rX   r   rvsr   )r-   r:   Z
covariancemodelsampler0   r0   r1   ,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,  rG   r	   )r:   r/   sizer%   g?r   )r:   r/   )r   r   r&   rX   r   shaperu   )r-   Nr   r   rU   r0   r0   r1   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 )Ni  r$   i  g?)rf   r   )r&   r4   r5   r7   rJ   rK   r   r   r   numpyr/   r:   )r-   rN   r:   rT   r/   r   r   r0   r0   r1   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 )Ni  r$   r   g      ?r%   r	   )r&   r4   r5   r7   rJ   rK   r   r   entropyrR   Zeigr=   pir   )r-   rN   r:   rT   r/   rveigsdesiredr0   r0   r1   test_entropy  s    
,z#TestMultivariateNormal.test_entropyc             C   s,   t dddg}d}tt t|| d S )Nr	   g      ?)r&   ru   r   r^   r   )r-   alphar   r0   r0   r1   test_lnB  s    zTestMultivariateNormal.test_lnBN)__name__
__module____qualname__r2   r;   r@   rC   rE   rF   rP   r[   re   rl   rp   ry   rz   r   r   r   r   r   r   r   r   r   r   r   r0   r0   r0   r1   r#   %   s0   

,@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 )NrG   r$   g333333?g      ?gffffff?)r3   rG   r$   rm   )r&   r~   r(   r)   r*   r   rX   rK   rR   r   r   )r-   num_rowsnum_colsrT   UVr   r0   r0   r1   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 )NrG   r$   g333333?g      ?gffffff?r	   )r:   rowcovcolcov)r:   )r   )r   )r:   r   )r:   r   )r   r   )r&   r~   r(   rX   r   r   r   r   r   r   r:   )r-   r   r   rT   r   r   ZZZrZZcIrIcZI1r0   r0   r1   test_default_inputs  sD    









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 )NrG   r$   g333333?g?g?)r:   r   r   )r&   r~   r(   r   r   r   r   )
r-   r   r   rT   ZUvZUsZVvZVsr   r   r0   r0   r1   test_covariance_expansion  s"    




z*TestMatrixNormal.test_covariance_expansionc             C   s  x t ddD ]}xt ddD ]}t||fd}dt| t||fd }dt| t||fd }t|||d}|jdd}tj|||dd	}t|| |jdd}	||	}
tj|	|||d}t|
| ||	}tj|	|||d}t|| qW qW d S )
Nr	   r3   g333333?g      ?gffffff?)r:   r   r   i  )random_state)r:   r   r   r   )	rI   r&   r~   r(   r   r   r   r+   r<   )r-   ri   rj   rT   r   r   frozenrvs1rvs2rh   pdf1pdf2logpdf1logpdf2r0   r0   r1   test_frozen_matrix_normal  s"    




z*TestMatrixNormal.test_frozen_matrix_normalc             C   s  xt ddD ]}xt ddD ]}t||fd}dt| t||fd }dt| t||fd }t|||d}|jdd}||}||}	|j	 }
|j	 }t
||}tj|
||d	}tj|
||d	}t||d
d t|	|d
d qW qW d S )Nr	   r3   g333333?g      ?gffffff?)r:   r   r   i  )r   )r:   r/   g|=)rf   )rI   r&   r~   r(   r   r   r+   r<   rK   flattenZkronr   r   )r-   ri   rj   rT   r   r   r   rh   r   r   ZvecXZvecMr/   r   r   r0   r0   r1   test_matches_multivariate4  s     



z*TestMatrixNormal.test_matches_multivariatec             C   sP  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 xTt
dD ]H}x@t
|D ]4}tj	|
||f |||d}t||||f d qW q W d S )NrG   r$   g333333?g      ?gffffff?rm   )r:   r   r   i  )r   r   i  r   )rr   r%   g|=)r&   r~   r(   r   r   Zconcatenatenewaxisr   r   r<   rI   r   )r-   r   r   rT   r   r   r   r   ZX1ZX2rh   Zarray_logpdfri   rj   Zseparate_logpdfr0   r0   r1   test_array_inputK  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 )NrG   r$   g333333?g      ?gffffff?i  )r:   r   r   i  )r   r   r   )rr   g?)rt   r	   r%   )r&   r~   r(   r   r   r:   r   r/   ZreshaperK   Zswapaxes)r-   r   r   rT   r   r   r   r   rh   Zsample_meanZsample_colcovZsample_rowcovr0   r0   r1   test_momentsb  s    zTestMatrixNormal.test_momentsN)
r   r   r   r   r   r   r   r   r   r   r0   r0   r0   r1   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}x~t
|D ]r}t jdd|}|t | }t||d d t|d d | t||d d t|d d | q|W d S )Ni  r	       g&.>r\   rm   r|   )r&   r4   r5   randintr   r   r   varr:   r   rI   r   r+   r<   )r-   rN   r   r   	num_testsri   r9   r0   r0   r1   test_frozen_dirichletz  s    (z#TestDirichlet.test_frozen_dirichletc             C   s   t jd t dddg}t jj|dd}t|jd tttj	|| tttj
|| t	|j| t	|jd d | t
|j| t
|jd d | d S )	Ni  g      ?g       @g      @r{   )r   )r{   r$   r|   )r&   r4   r5   ru   r   r   r   r)   r*   r+   r<   rK   )r-   r   r9   r0   r0   r1   "test_numpy_rvs_shape_compatibility  s    z0TestDirichlet.test_numpy_rvs_shape_compatibilityc             C   sT   t jd dddg}t jjt d|ddj}tttj|| tttj	|| d S )Ni  g      ?g        g      @g&.>r{   )r   )
r&   r4   r5   r   maximumrK   r)   r*   r+   r<   )r-   r   r9   r0   r0   r1   test_alpha_with_zeros  s
    
z#TestDirichlet.test_alpha_with_zerosc             C   sT   t jd dddg}t jjt d|ddj}tttj|| tttj	|| d S )Ni  g      ?g       g      @g&.>r{   )r   )
r&   r4   r5   r   r   rK   r)   r*   r+   r<   )r-   r   r9   r0   r0   r1    test_alpha_with_negative_entries  s
    
z.TestDirichlet.test_alpha_with_negative_entriesc             C   s|   t ddddg}t ddddg}t|| t|| t ddddg}tt||d	 tt||t d	 d S )
Ng      ?g       @g      @g      @g?g        g?gffffff?rq   )r&   ru   r   r+   r<   r   r=   )r-   r   r9   r0   r0   r1   test_data_with_zeros  s    z"TestDirichlet.test_data_with_zerosc             C   sH   t ddddg}t ddddg}tttj|| tttj|| d S )	Ng      ?g      ?g      @g      @g?g        g?gffffff?)r&   ru   r)   r*   r   r+   r<   )r-   r   r9   r0   r0   r1   $test_data_with_zeros_and_small_alpha  s    z2TestDirichlet.test_data_with_zeros_and_small_alphac             C   sH   t ddddg}t ddddg}tttj|| tttj|| d S )	Ng      ?g       @g      @g      @g?gg333333?gffffff?)r&   ru   r)   r*   r   r+   r<   )r-   r   r9   r0   r0   r1   test_data_with_negative_entries  s    z-TestDirichlet.test_data_with_negative_entriesc             C   sH   t ddddg}t ddddg}tttj|| tttj|| d S )	Ng      ?g       @g      @g      @g?g?g333333?gffffff?)r&   ru   r)   r*   r   r+   r<   )r-   r   r9   r0   r0   r1    test_data_with_too_large_entries  s    z.TestDirichlet.test_data_with_too_large_entriesc             C   s@   t dddg}t dd}tttj|| tttj|| d S )Ng      ?g       @g      @)r%   r{   r{   g$I$I?)r&   ru   r~   r)   r*   r   r+   r<   )r-   r   r9   r0   r0   r1   test_data_too_deep_c  s    z"TestDirichlet.test_data_too_deep_cc             C   sF   t ddgddgg}t dd}tttj|| tttj|| d S )Ng      ?g       @g      @g      @)r%   r%   r{   g      ?)r&   ru   r~   r)   r*   r   r+   r<   )r-   r   r9   r0   r0   r1   test_alpha_too_deep  s    z!TestDirichlet.test_alpha_too_deepc             C   s8   t dddg}t dd}t|| t|| d S )Ng      ?g       @g      @)r$   r{   gUUUUUU?)r&   ru   r~   r   r+   r<   )r-   r   r9   r0   r0   r1   test_alpha_correct_depth  s    z&TestDirichlet.test_alpha_correct_depthc             C   s@   t dddg}t dd}tttj|| tttj|| d S )Ng      ?g       @g      @)r$   r{   g      ?)r&   ru   r~   r)   r*   r   r+   r<   )r-   r   r9   r0   r0   r1   test_non_simplex_data  s    z#TestDirichlet.test_non_simplex_datac             C   sB   t ddddg}t dd}tttj|| tttj|| d S )Ng      ?g       @g      @g      @)r%   r{   g      ?)r&   ru   r~   r)   r*   r   r+   r<   )r-   r   r9   r0   r0   r1   test_data_vector_too_short  s    z(TestDirichlet.test_data_vector_too_shortc             C   sB   t ddddg}t dd}tttj|| tttj|| d S )Ng      ?g       @g      @g      @)r3   r{   g?)r&   ru   r~   r)   r*   r   r+   r<   )r-   r   r9   r0   r0   r1   test_data_vector_too_long  s    z'TestDirichlet.test_data_vector_too_longc             C   sL   t dddg}t|}dddg}ddd	g}t| | t| | d S )
Ng      ?g?g?gUUUUUU?g{Gz?gQ?g      ?g?g?)r&   ru   r   r   r   r:   )r-   r   r   Zexpected_varZexpected_meanr0   r0   r1   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 )Ng?r   g      ?)	r&   ru   r   r   r:   r6   r   r+   r<   )r-   r   r   r0   r0   r1   r;     s    z TestDirichlet.test_scalar_valuesc             C   s   t jd t jdd}t jdd|}t|}d}xLt|D ]@}t jdd|}|t | }t|	|d d |	| q@W d S )Ni  r	   r   g&.>r\   rm   r|   )
r&   r4   r5   r   r   r   rI   r   r   r+   )r-   rN   r   r   r   ri   r9   r0   r0   r1    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 }xt|D ]}xJt|D ]>}t jdd|}	|	t |	 }	|d k	rt ||	f}qV|	}qVW |	|j
}
d }x0|D ](}|	|}|d k	rt ||}q|}qW t|
| qHW d S )Ni  r	   r   g&.>r\   rm   r3   )r&   r4   r5   r   r   r   rI   r   vstackr+   rK   appendr   )r-   rN   r   r   r   Znum_multipleZxmri   mr9   Zrmrsxsr   r0   r0   r1   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}xFt|D ]:}t jddd}|t | }t|	||	|g qDW t|
 |
 d  t| | d  d S )Ni  g&.>r\   r%   r   r	   rm   )r&   r4   r5   r   r   r   rI   r   r   r+   r:   r   )r-   r   r   br   ri   r9   r0   r0   r1   test_2D_dirichlet_is_beta(  s    z'TestDirichlet.test_2D_dirichlet_is_betaN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r;   r   r   r   r0   r0   r0   r1   r   x  s&   	
r   c           
   C   s~   t ddg} t dgg}ttt| | yt| | W n@ tk
rx } z"d}tt|d t| | W d d }~X Y nX d S )Ng        g      ?zDimension mismatch)r&   ru   r)   r*   r   r   strlen)r.   sigmar   msgr0   r0   r1   ,test_multivariate_normal_dimensions_mismatch9  s    r   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestWishartc             C   s  t jddd}ddgt dt jd t jdddg}x2|D ]*}td|}t|j| t|jj|j q:W t ddgddgg}ddgt jd t ddgddggg}x2|D ]*}td|}t|j| t|jj|j qW tttdt 	d t jddd}tttd| d S )Nr	   r%   )ndminr   )r	   r%   r$   )
r&   ru   r_r   r   ro   r   r)   r*   eye)r-   Z
true_scaleZscalesro   wr0   r0   r1   test_scale_dimensionsM  s.    





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}x|D ]}t||| qXW dddgt jd t jdddgddg}tdd}|t jdddgdd}x|D ]}t||| qW dddgt dt jd t ddgddggt ddgddggd d d d t jf g}tdt d}|t ddgddggd d d d t jf }x|D ]}t||| qvW d S )Nr	   r%   )r   r$   )r	   r%   r$   )r%   r%   r   )r&   ru   r   r   r+   r   r   r   )r-   rh   r   Zdensityr9   r0   r0   r1   test_quantile_dimensionst  s<    






""
z$TestWishart.test_quantile_dimensionsc       	      C   sv  d}t t |d }t ||d  d |t j|dd< t |j|}g }xhtdD ]\}t t ||d d  }t ||d  d |t j|dd< t |j|}|| qXW t |j}ddt 	dddfd||fg}x|D ]\}}}t
||}t| t
|| t| t
|| t| t
|| t| t
|| t||t
||| qW d S )	NrG   r	   r%   r|   )rY   r3   rm   g?)r&   r   r'   tril_indicesrJ   rK   rI   r   ru   rn   r   r   r   r:   moder   r+   )	r-   dimro   rh   ri   r9   
parametersdfr   r0   r0   r1   rz     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}x|D ]}t||}t|}t	|
 |
  t	| |  t	| |  t	|||| |j|d	}	|f}
d
}td|
||	 qFW d S )Ni^ i  r	   rm   r%   )r]   g?)num)r   g{Gz?r   )r&   r4   r5   r   r'   r_   rn   r   r   r   r   r:   r   r+   r   r
   )r-   snr   ro   df_rangerh   r   r   cr   argsr   r0   r0   r1   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 )Ni^ i  rm   rG   r	   rq   r|   )rY   )ro   g?)r   )r   r   g{Gz?r   )r&   r4   r5   r   r'   r   rJ   rK   r   Zsqueezer   r   r   r   r:   r   rn   r+   r   r
   )r-   r   r   r   ro   ZlamdaZsigma_lamdar   r   rh   r   r   r   r0   r0   r1   test_is_scaled_chisquared  s(    

z%TestWishart.test_is_scaled_chisquaredN)r   r   r   r   r   rz   r   r   r0   r0   r0   r1   r   L  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$   rG   r{   )g333333?gffffff?g&Mtyg:0yE>)rf   r$   rG   r   g333333?gffffff?)r   logpmfr   r&   ZNAN)r-   vals1vals2vals3r0   r0   r1   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 )N)r$   rG   r{   )g333333?gffffff?r$   g333333?g:0yE>)rf   )rq         )g?g?rq   g?)r   r   r   r   pmf)r-   Zval1Zval2r0   r0   r1   test_reduces_binomial  s    z%TestMultinomial.test_reduces_binomialc             C   sX   ddddg }}ddddd	d
dd
ddd
}x(|D ] }t t||||| dd q0W d S )Nr$   g      ?g      ?g      ?g     @?g     ?g      ?g      `?g     ?g      ?g      ?g      ?g      ?)
)r   r   r$   )r	   r   r%   )r%   r   r	   )r$   r   r   )r   r	   r%   )r	   r	   r	   )r%   r	   r   )r   r%   r	   )r	   r%   r   )r   r$   r   g+=)rt   )r   r   r   )r-   rN   pZr_valsr9   r0   r0   r1   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$   g      ?r{   {   )r   r   )r   )r   r   r&   r4   RandomStater   )r-   Zsc_rvsrndmZnp_rvsr0   r0   r1   test_rvs_np.  s    zTestMultinomial.test_rvs_npc             C   s   t ddd}t|ddd t ddd	}t|d
dd t ddgddggddgddgggdd}t|ddgddggdd tjdtjd}t |dd	}t|tjg tjd t ddgdd	}t|ddd t dddgddddg}t|ddd d S )N)r3   r3   )r	   r	   g:0yE>)rf   )r$   rG   r{   )g333333?gffffff?g5
?r$   r   r   r|   	   )g?g?g*7?g<Wƌ?)r   r%   )r]   rG   r%   rq   gUUUUUU?gUUUUUU?gߦ?)r   r   r   r&   rv   float64r   )r-   vals0r   r   r9   r   vals4Zvals5r0   r0   r1   test_pmf5  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$   g?g?g?g?gv?g~jt?g:0yE>)rf   rG   r   )r   r   r   )r-   r	  r   r   r   r
  r0   r0   r1   test_pmf_broadcastingJ  s      &z%TestMultinomial.test_pmf_broadcastingc             C   s:   t dd}dddgdddgddd	gg}t||d
d d S )Nr3   )g?g333333?g      ?g?g333333ӿg      g433333ӿg?g      g      ?g:0yE>)rf   )r   r/   r   )r-   cov1r   r0   r0   r1   test_covZ  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 )Nr3   g?g?g?g?g?gܿgg:0yE>)rf   rG   g
ףp=
?g
ףp=
׿g333333?gffffff?g?g333333?gzG?gzGg333333?g333333)r   r/   r   )r-   r  r   Zcov3Zcov4Zcov5Zcov6r0   r0   r1   test_cov_broadcastinga  s      z%TestMultinomial.test_cov_broadcastingc             C   s*   t dddg}t|tdddd d S )Nr%   g?g?g:0yE>)rf   )r   r   r   r   )r-   ent0r0   r0   r1   r   o  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$   g?g333333?g:0yE>)rf   r{   r   gffffff?g?g333333?)r   r   r   r   )r-   r  Zent1Zent2r0   r0   r1   test_entropy_broadcastingu  s     z)TestMultinomial.test_entropy_broadcastingc             C   s&   t dddg}t|ddgdd d S )Nr3   g?g?g      ?g      @g:0yE>)rf   )r   r:   r   )r-   mean1r0   r0   r1   	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 )Nr3   rq   g?g?g      ?g      @g433333?g433333@g:0yE>)rf   )r   r:   r   )r-   r  r0   r0   r1   test_mean_broadcasting  s    z&TestMultinomial.test_mean_broadcastingc             C   s   t jd d}d}ddddgddddgddddgddddgddd	d
gg}t j|t jd}t||}t||t||| t||t||| t|	 t	|| d S )Ni     )g?g?g333333?g?r   r	      rm   r  r%   r   )r]   )
r&   r4   r5   Zasarrayr  r   r   r   r   r   )r-   rN   Zpvalsr9   Z	mn_frozenr0   r0   r1   rz     s    6
zTestMultinomial.test_frozenN)r   r   r   r   r   r  r  r  r  r  r  r   r  r  r  rz   r0   r0   r0   r1   r     s   
r   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestInvwishartc       	      C   s`  d}t t |d }t ||d  d |t j|dd< t |j|}g }xhtdD ]\}t t ||d d  }t ||d  d |t j|dd< t |j|}|| qXW t |j}ddt 	dddfd||fg}xx|D ]p\}}}t
||}t| t
|| t| t
|| t| t
|| t||t
||| qW d S )	NrG   r	   r%   r|   )rY   r3   rm   g?)r&   r   r'   r   rJ   rK   rI   r   ru   rn   r   r   r   r:   r   r   r+   )	r-   r   ro   rh   ri   r9   r   r   iwr0   r0   r1   rz     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
}x|D ]}t||}t|d dd}t	|
 |
  t	| |  t	|||| |j|d}	|d ddf}
d}td|
||	 qFW d S )Ni^ i  r	   r3      r%   )r]   g?rm   )r   g      ?)ro   )r   r   g{Gz?r   )r&   r4   r5   r   r'   r_   rn   r   r   r   r   r:   r+   r   r
   )r-   r   r   ro   r   rh   r   r  Zigr   r   r   r0   r0   r1   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$   rm   g      ?)r   r	   )r	   r   i )r   r	   r%   r|   )rY   )r&   r   r   r   r4   r5   r   normalr   Z	chisquarer   r   rR   ZcholeskyrJ   rK   invr   )r-   r   r   ro   r   r  Zw_rvsZfrozen_w_rvsZiw_rvsZfrozen_iw_rvsZcovariancesZ	variancesADZDAZmanual_w_rvsZiDZiDAZmanual_iw_rvsr0   r0   r1   test_wishart_invwishart_2D_rvs  sD    









z-TestInvwishart.test_wishart_invwishart_2D_rvsc          	   C   s   t ddddgddddgddddgddddgg}t ddddgddddgddddgddddgg}t ||g}| }t| t d}t|d |d |dd	 t|d |d |dd	 d
S )zRegression test for gh-8844.r%   r	   r   g      ?r$   r|   rG   gV瞯<)rt   N)r&   ru   copyr   r   r   rJ   )r-   Za0Za1aainvidentr0   r0   r1   test_cho_inv_batch  s    




z!TestInvwishart.test_cho_inv_batchc          	   C   s  t ddddgddddgddddgddddgg}t ddddgddddgddd	dgddddgg}d
}t|||}|jd }t j|\}}t j|\}}t j||}	|d | || d t d  t	|d | || d d |  d|	
   }
t||
 dS )zRegression test for gh-8844.r%   r	   r   g      ?r$   r  r{   r3   r   rq   N)r&   ru   r   r<   r   rR   rb   Zsolver=   r!   tracer   )r-   rh   PsinuZprobr  sigZlogdetXZ	logdetPsirT   expectedr0   r0   r1   test_logpdf_4x4#  s     




PzTestInvwishart.test_logpdf_4x4N)r   r   r   rz   r  r  r$  r*  r0   r0   r0   r1   r    s
    ;r  c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestSpecialOrthoGroupc             C   sl   t jd td}t dddgdddgd	d
dgg}t|| t jjdd}tjd|d}t|| d S )Ni  r$   g(fg^A.g*B?g:d?g2ugi}?gR#xlF?g^`D?g?)r5   )r   )r&   r4   r5   r   r   ru   r   r  )r-   r9   r)  r   r0   r0   r1   test_reproducibility=  s    

z*TestSpecialOrthoGroup.test_reproducibilityc             C   s<   t ttjd  t ttjd t ttjd t ttjd d S )N)r%   r%   r	   g      @)r)   r*   r   r   )r-   r0   r0   r1   test_invalid_dimI  s    z&TestSpecialOrthoGroup.test_invalid_dimc             C   s4   d}t |}|jdd}t j|dd}t|| d S )Nr{   i  )r   )r   r   r   )r-   r   r   r   r   r0   r0   r1   test_frozen_matrixO  s
    z(TestSpecialOrthoGroup.test_frozen_matrixc             C   sh   dd t ddD }dd |D }t|dgd dd	 x,|D ]$}tt||jt|jd
  q<W d S )Nc             S   s$   g | ]}t d D ]}t|qqS )r$   )rI   r   r   ).0r   ri   r0   r0   r1   
<listcomp>Y  s   z<TestSpecialOrthoGroup.test_det_and_ortho.<locals>.<listcomp>r%   r  c             S   s   g | ]}t j|qS r0   )r&   rR   r`   )r/  r9   r0   r0   r1   r0  ^  s    g      ?   gvIh%<=)rf   r   )rI   r   r   r&   rJ   rK   r   r   )r-   r   detsr9   r0   r0   r1   test_det_and_orthoX  s    
z(TestSpecialOrthoGroup.test_det_and_orthoc                s|   d}d}d}t jd tj||dd tfdd D  fd	d
 D }fdd
|D }t|gt| | d S )Nr3   i  g?i  )r   ))r   r   )r   r%   )r	   rG   )r%   r$   c             3   s2   | ]*\  ft  fd dD fV  qdS )c                s   g | ]}|   qS r0   r0   )r/  r9   )ecerr0   r1   r0  |  s    z=TestSpecialOrthoGroup.test_haar.<locals>.<genexpr>.<listcomp>N)sorted)r/  )r   )r4  r5  r1   	<genexpr>|  s    z2TestSpecialOrthoGroup.test_haar.<locals>.<genexpr>c                s&   g | ]} D ]}||kr||fqqS r0   r0   )r/  e0e1)elsr0   r1   r0  }  s    z3TestSpecialOrthoGroup.test_haar.<locals>.<listcomp>c                s&   g | ]\}}t  |  | d  qS )r	   )r   )r/  p0p1)projr0   r1   r0  ~  s    )r&   r4   r5   r   r   dictr   r   )r-   r   samplesks_probpairsks_testsr0   )r:  r=  r   r1   	test_haarf  s    
zTestSpecialOrthoGroup.test_haarN)r   r   r   r,  r-  r.  r3  rC  r0   r0   r0   r1   r+  <  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   sp   t jd td}tjddd}tt j|d t dddgdd	d
gdddgg}t	|| t	|| d S )Ni  r$   )r   r|   gmS9?g8e,˿gRVϿgob2g	,ʶgC}Ȇ?gF-YD?g:kO?g-C?)
r&   r4   r5   r   r   r   rR   r`   ru   r   )r-   r9   x2r)  r0   r0   r1   r,    s    

z#TestOrthoGroup.test_reproducibilityc             C   s<   t ttjd  t ttjd t ttjd t ttjd d S )N)r%   r%   r	   g      @)r)   r*   r   r   )r-   r0   r0   r1   r-    s    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	  x:|D ]2}x,|D ]$}tt	||j
t|jd  qW q~W d S )Nc                s"   g | ]  fd dt dD qS )c                s   g | ]}t  qS r0   )r   r   )r/  ri   )r   r0   r1   r0    s   z@TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>.<listcomp>rm   )rI   )r/  r0   )r   r1   r0    s   z5TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>r%   r  c             S   s   g | ]}d d |D qS )c             S   s   g | ]}t j|qS r0   )r&   rR   r`   )r/  r9   r0   r0   r1   r0    s    z@TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>.<listcomp>r0   )r/  xxr0   r0   r1   r0    s    gvIh%<=)rf   r   rm   c             S   s$   g | ]}t |d k d  jd  qS )r   )r&   nonzeror   )r/  r   r0   r0   r1   r0    s    c             S   s$   g | ]}t |d k d  jd  qS )r   )r&   rG  r   )r/  r   r0   r0   r1   r0    s    )rI   r&   ru   r   fabsr   r   r   r   rJ   rK   r   )r-   r   r2  rF  r9   r0   r0   r1   r3    s    

z!TestOrthoGroup.test_det_and_orthoc                s|   d}d}d}t jd tj||dd tfdd D  fd	d
 D }fdd
|D }t|gt| | d S )Nr3   i  g?i  )r   ))r   r   )r   r%   )r	   rG   )r%   r$   c             3   s2   | ]*\  ft  fd dD fV  qdS )c                s   g | ]}|   qS r0   r0   )r/  r9   )r4  r5  r0   r1   r0    s    z6TestOrthoGroup.test_haar.<locals>.<genexpr>.<listcomp>N)r6  )r/  )r   )r4  r5  r1   r7    s    z+TestOrthoGroup.test_haar.<locals>.<genexpr>c                s&   g | ]} D ]}||kr||fqqS r0   r0   )r/  r8  r9  )r:  r0   r1   r0    s    z,TestOrthoGroup.test_haar.<locals>.<listcomp>c                s&   g | ]\}}t  |  | d  qS )r	   )r   )r/  r;  r<  )r=  r0   r1   r0    s    )r&   r4   r5   r   r   r>  r   r   )r-   r   r?  r@  rA  rB  r0   )r:  r=  r   r1   rC    s    
zTestOrthoGroup.test_haarc                sl   t jd dd }xRtddD ]D d fdd		}||}|tjjj}tj||\}}t	d
| q W d S )Ni  c             S   s,   t jt jj| | fd\}}}t ||S )N)r   )r&   rR   rS   r4   r  rJ   )r   rU   Z_srV   r0   r0   r1   random_ortho  s     z<TestOrthoGroup.test_pairwise_distances.<locals>.random_orthor%   rq     绽|=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   r0   r1   r0    s   z\TestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statistics.<locals>.<listcomp>)r   )r&   ru   rI   r4   r   r   )r   r   Zepsstats)r   )r   r1   generate_test_statistics  s
    zHTestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statisticsg?)rJ  rK  )
r&   r4   r5   rI   rQ   rM  r   r   r   r   )r-   rI  rN  r)  rk   Z_Dr  r0   )r   r1   test_pairwise_distances  s    	z&TestOrthoGroup.test_pairwise_distancesN)r   r   r   r,  r-  r3  rC  pytestmarkZslowrO  r0   r0   r0   r1   rD    s
   rD  c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestRandomCorrelationc          	   C   sr   t jd d}t|}tj|dd}t ddddgdddd	gdddd
gdd	d
dgg}t|| t|| d S )Ni  )g      ?g?g333333?g      ?)r   g      ?gʿg3LU?giƖ\g``+ϿgO0)?gqɨ?)r&   r4   r5   r   r   ru   r   )r-   r   r9   rE  r)  r0   r0   r1   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dddg d S )	Ntestg      @r	   r%   r$   rG   g      g?)r)   r*   r   r   )r-   r0   r0   r1   test_invalid_eigs  s    z'TestRandomCorrelation.test_invalid_eigsc       
         s   dd  t jd  fddtddD }|dd	d	d	g d
d |D }dd |D }dd |D }dd |D }t||ddd dd |D }x$t||D ]\}}t||dd qW x|D ]}	t|	|	jdd qW d S )Nc             S   s   | | t | S )N)r   )ri   r   r0   r0   r1   r     s    z3TestRandomCorrelation.test_definition.<locals>.normr  c                s    g | ]} |t jj|d qS ))r   )r&   r4   r   )r/  ri   )r   r0   r1   r0    s    z9TestRandomCorrelation.test_definition.<locals>.<listcomp>r%   rq   rG   r   c             S   s   g | ]}d gt | qS )g      ?)r   )r/  r   r0   r0   r1   r0    s    c             S   s   g | ]}t |qS r0   )r   r   )r/  r   r0   r0   r1   r0    s    c             S   s   g | ]}t t j|qS r0   )r&   rH  rR   r`   )r/  r9   r0   r0   r1   r0    s    c             S   s   g | ]}t |qS r0   )r&   prod)r/  r   r0   r0   r1   r0    s    gvIh%<=)rf   rt   c             S   s   g | ]}t |qS r0   )r&   r   )r/  r9   r0   r0   r1   r0    s    )rf   )r&   r4   r5   rI   r   r   ziprK   )
r-   r   r   r   r2  Z
dets_knownZdiagsr!  r   r9   r0   )r   r1   test_definition  s    
z%TestRandomCorrelation.test_definitionc          	   C   sf  t jddgddggtd}t|}t|t ddgddgg t jdd t ddgddgg}t jddgdt ddggtd}t| }t||j	
|
| t jd	dgdd
ggtd}t| }t||j	
|
| W d Q R X t jddgddggtd}t| }t|d d t jddgddggtd}t| }t|d d d S )Ng?r   r	   )r]   ignore)Zoverr|   gu <7~g?g?r%   )r   r   gMk   @)r&   ru   r_   r   Z_to_corrr   ZerrstateZ	nextafterr   rK   rJ   )r-   r   gZm0r0   r0   r1   test_to_corr  s"    
""z"TestRandomCorrelation.test_to_corrN)r   r   r   r,  rT  rW  rZ  r0   r0   r0   r1   rR    s   	$rR  c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestUnitaryGroupc             C   s^   t jd td}tjddd}t dddgddd	gd
ddgg}t|| t|| d S )Ni  r$   )r   y~p?yZ?y뉦?ĭ?y8Z?&4?yEHξr?8i?ye??+ݓݿyu=ٿB۽'?yqXQÿ?yN6ҿzܷy! 8l?2W'?)r&   r4   r5   r   r   ru   r   )r-   r9   rE  r)  r0   r0   r1   r,  :  s    

z%TestUnitaryGroup.test_reproducibilityc             C   s<   t ttjd  t ttjd t ttjd t ttjd d S )N)r%   r%   r	   g      @)r)   r*   r   r   )r-   r0   r0   r1   r-  F  s    z!TestUnitaryGroup.test_invalid_dimc             C   sN   dd t ddD }x4|D ],}tt|| jt|jd dd qW d S )Nc             S   s$   g | ]}t d D ]}t|qqS )r$   )rI   r   r   )r/  r   ri   r0   r0   r1   r0  M  s   z3TestUnitaryGroup.test_unitarity.<locals>.<listcomp>r%   r  r   gV瞯<)rt   )rI   r   r&   rJ   ZconjrK   r   r   )r-   r   r9   r0   r0   r1   test_unitarityL  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 )	Nr3   i  i  )r   c             S   s   g | ]}t j|qS r0   )rQ   rR   Zeigvals)r/  r9   r0   r0   r1   r0  a  s    z.TestUnitaryGroup.test_haar.<locals>.<listcomp>r%   g?)r&   r4   r5   r   r   r   Zarctan2imagrealr   Zravelr   r   r,   r   Zpvalue)r-   r   r?  r   r   r9   resr0   r0   r1   rC  U  s     zTestUnitaryGroup.test_haarN)r   r   r   r,  r-  r\  rC  r0   r0   r0   r1   r[  9  s   	r[  c             C   sd   | j }d| _ | j|ddi t| }| j|ddi}t|}|j|ddi}t|| || _ d S )Ni  r   r   )r   r   pickledumpsloadsr   )distfnr   r  rO   Zr0Z	unpickledZr1r0   r0   r1   check_picklingf  s    


rd  c           	   C   s   t d} d| d< d| d< tdgtt dgfgtd| fgtd| fgtddd	d
gfgtdgt	dgg}x$|D ]\}}t
|| t|| qjW d S )Nr$   g      ?)r   r	   )r	   r   r0   g      ?rm   r3   g?g?)r%   )r&   r   r   r   ru   r   r   r   r   r   r"   rd  )ro   distsrc  r   r0   r0   r1   test_random_state_propertyz  s    




rf  )=__doc__r`  Znumpy.testingr   r   r   r   r   r   rP  r   r)   Ztest_continuous_basicr
   r   r&   Zscipy.linalgrQ   Zscipy.stats._multivariater   r   r   Zscipy.statsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zscipy.integrater    Zscipy.specialr!   Zcommon_testsr"   objectr#   r   r   r   r   r   r  r+  rD  rR  r[  rd  rf  r0   r0   r0   r1   <module>   sV       & 1 B <  %E][-