3
Od                 @   s  d Z ddlZddlmZmZmZmZmZmZ ddl	Z	ddl	m
Z ddlmZ ddlZddlZddlZddlmZmZmZ 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 jd}t jd}tttjd|| tttjd|| tttjd|| tttjd|| d S )	N      r   r	   )r   r	   )r   r	   r%   )r   r	   )r   r	   r%   )nparangeidentityassert_raises
ValueErrorr   pdfcdf)selfmucov r0   W/var/www/html/virt/lib64/python3.6/site-packages/scipy/stats/tests/test_multivariate.pytest_input_shape&   s    

z'TestMultivariateNormal.test_input_shapec             C   s   t jjd d\}}}tj|||}t|jd t jjd}t jjd}t jt jjd}tj|||}t|jd d\}}}tj	|||}t|jd t jjd}t jjd}t jt jjd}tj	|||}t|jd d S )	Ni        ?333333?      @r      )r3   r4   r5   )r3   r4   r5   )
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jd t jjd}t jjd}t jt jjd}tj|||}tj|||}t|t j	| d S )Ni  r6   )
r&   r7   r8   r:   r;   r   logpdfr+   r   log)r-   r<   r=   r/   d1d2r0   r0   r1   test_logpdfI   s    z"TestMultivariateNormal.test_logpdfc             C   sl   t jjd t jjd}tj|}tj|}tj|d d}tj|d d}t|t j| t|t j| d S )Ni  r6   r	   )	r&   r7   r8   r:   r   r?   r+   r   r@   )r-   r<   rA   rB   d3d4r0   r0   r1   test_logpdf_default_valuesS   s    

z1TestMultivariateNormal.test_logpdf_default_valuesc             C   sf   t jjd t jjd}t jjd}t jt jjd}tj|||}tj|||}t|t j	| d S )Ni  r6   )
r&   r7   r8   r:   r;   r   logcdfr,   r   r@   )r-   r<   r=   r/   rA   rB   r0   r0   r1   test_logcdf`   s    z"TestMultivariateNormal.test_logcdfc             C   sl   t jjd t jjd}tj|}tj|}tj|d d}tj|d d}t|t j| t|t j| d S )Ni  r6   r	   )	r&   r7   r8   r:   r   rG   r,   r   r@   )r-   r<   rA   rB   rD   rE   r0   r0   r1   test_logcdf_default_valuesj   s    

z1TestMultivariateNormal.test_logcdf_default_valuesc             C   sp   t jjd d}t jj|}xNtd|d D ]<}t jj||}t j||j}t||dd}t|j	j
| q,W d S )Ni     r	   T)allow_singular)r&   r7   r8   r:   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j|}xZt d|d D ]F}tjj||}tj||j}tj||f}||d |d |f< ||}tj|tj||j}	tj||}
ttj||dd}ttj||dd}ttj||	dd}t|j	j
| t|j	j
| t|j	j
| |j|d | }|j|}|j|
}t|| t|| |j|d | }|j|}|j|
}t|| t|| q:W qW d S )Nc             S   s$   t jj| | }tjj|\}}}|S )N)r&   r7   r:   scipylinalgsvd)rQ   MurR   vr0   r0   r1   _sample_orthonormal_matrix   s    zXTestMultivariateNormal.test_degenerate_distributions.<locals>._sample_orthonormal_matrixr	   r6   T)rK   )rL   r&   r7   r:   rM   rN   zerosr   r   rO   rP   r+   r   r?   )r-   rZ   rQ   r<   krR   Zcov_kkZcov_nnrX   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 j|| }|| }t j||ftd}t j|| d|| d | d f< ttjj|d ttjj|d |d |f t j	 t
t jj|d |d |f d|f t|}t
|j| d S )Ng     @@d   r%   )dtyper   r	   )r&   expr[   floatZfill_diagonalr   rT   rU   detinfr   slogdetr   log_pdet)r-   Zlarge_total_logZnposZnzeroZlarge_entryrQ   r/   psdr0   r0   r1   test_large_pseudo_determinant   s    $
z4TestMultivariateNormal.test_large_pseudo_determinantc             C   s   t jjd d}t jj||}t j||j}t jj|}t jjdd|}tj|||}tj|||}xvt	dD ]j}xdt	dD ]X}	tj|||	f ||}
t
|
|||	f  tj|||	f ||}
t
|
|||	f dd q|W qnW d S )Ni  rJ   r%   r$   gMbP?)rtol)r&   r7   r8   r:   rM   rN   r   r+   r,   rL   r   )r-   rQ   datar/   r=   XZdesired_pdfZdesired_cdfijactualr0   r0   r1   test_broadcasting   s    z(TestMultivariateNormal.test_broadcastingc             C   sn   t jddd}d\}}|d }tj|||}tj|||}t|| tj|||}tj|||}t|| d S )Nr   r%   
   333333??g      ?)rq   rr   )r&   linspacer   r+   r   r   r,   )r-   r<   r=   r/   scalerA   rB   r0   r0   r1   test_normal_1D   s    
z%TestMultivariateNormal.test_normal_1Dc             C   s  t jddg}t jddgddgg}d}d	|d  }t jd
d	|}t j||\}}t j||df}||d d d d d
f< ||d d d d df< tj|||}	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?r%      r	      r   )axis)locrt   g{Gz?)ri   atol   i  )r   r   )r	   r	   )
r&   arrayrs   Zmeshgridemptyr   r+   r    r   r   )r-   r=   r/   rQ   deltarY   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jd t jjd}t jjd}t jt jjd}t||}t|j|tj||| t|j|tj||| t|j	|tj	||| t|j
|tj
||| d S )Ni  r6   )r&   r7   r8   r:   r;   r   r   r+   r?   r,   rG   )r-   r<   r=   r/   Znorm_frozenr0   r0   r1   test_frozen  s    


z"TestMultivariateNormal.test_frozenc       	      C   s   t jjd d}t jj||}t j||j}tjj|\}}t j	|d}d|d< d|d
< t j|t jt j
||j}d}t||d	}t|j|d	}t|jt jt j|d d  t|j |j d S )Ni     g      ?g      ?r   gHz>r	   gh㈵>)condr   )r&   r7   r8   r:   rM   rN   rT   rU   Zeighfulldiagr   Zpinvr   rf   sumr@   )	r-   rQ   r<   r/   rR   rX   r   rg   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$   rJ   r6   rw   )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   rd   )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jd t jjd}t jjd}t jd}t jj}t|t|| t|tj	||| t|tj
||| t|tj||| t|tj||| d S )Ni  r6   )r6   r6   )r&   r7   r8   r:   onesrU   LinAlgErrorr)   r   r+   r?   r,   rG   )r-   r<   r=   r/   er0   r0   r1   test_exception_singular_cov;  s    
z2TestMultivariateNormal.test_exception_singular_covc             C   s<  t jdddddg}t jddd}d	| d }|t j| }t j|||gj}t jd
d	dgd}t jd
ddgdddgddd	ggd}tj|||}t||dd t jdddddg}	tj|||}
t|
|	dd t jdddddg}t j||gj}t jd
d	gd}t jd
dgddggd}tj|||}t||dd d S )Ng0Q-?gox'V?g[S, t?gDB?gc_.?r   r%   r6   r$   r	   dg      ?g|=)rz   gwk:E]?g̙Z?g0?gL8?gAG*?gh㈵>gIى?gG?gƏ)?gėh?gEE?)	r&   r|   rs   cosrN   r   r+   r   r,   )r-   Zr_pdfr<   r]   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 jd}t jd}t||dd}|j }t|ddg d S )Nr%   T)rK   r   )r%   r%   )r&   r[   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j|d|d}t|j||f t jd tjddgddgg|d}t|j|df t ddd}|j|}t|j|f d S )	Ni,  rJ   r	   )r=   r/   sizer%   g?r   )r=   r/   )r   r   r&   r[   r   shaper|   )r-   Nr   r   rX   r0   r0   r1   test_rvs_shape  s    
z%TestMultivariateNormal.test_rvs_shapec             C   sx   t jjd d}t jj|}t jj||}t j||j}d}tj|||}tt	j
|j|dd t|jd|dd d S )Ni  r$   i  g?)ri   r   )r&   r7   r8   r:   rM   rN   r   r   r   numpyr/   r=   )r-   rQ   r=   rW   r/   r   r   r0   r0   r1   test_large_sample  s    z(TestMultivariateNormal.test_large_samplec             C   s   t jjd d}t jj|}t jj||}t j||j}t||}t|j tj|| t j	j
|d }d|t jdt j d  t jt j|  }t||j  d S )Ni  r$   r   r	   r%   g      ?)r&   r7   r8   r:   rM   rN   r   r   entropyrU   Zeigr@   pir   )r-   rQ   r=   rW   r/   rveigsdesiredr0   r0   r1   test_entropy  s    
,z#TestMultivariateNormal.test_entropyc             C   s,   t jdddg}d}tt jt|| d S )Nr	   g      ?)r&   r|   r   ra   r   )r-   alphar   r0   r0   r1   test_lnB  s    zTestMultivariateNormal.test_lnBN)__name__
__module____qualname__r2   r>   rC   rF   rH   rI   rS   r^   rh   ro   ru   r   r   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 j||fd}dt j| t j||fd }dt j| t j||fd }tttt jd ttt|t jd| ttt||t jd ttt||| ttt||| ttt|j|| t jj	}t|t||t j
||f t|t|t j
||f| d S )	NrJ   r$   g333333?g      ?gffffff?r6   rp   )r6   rJ   r$   )r&   r   r(   r)   r*   r   r[   rN   rU   r   r   )r-   num_rowsnum_colsrW   UVr   r0   r0   r1   test_bad_input  s    zTestMatrixNormal.test_bad_inputc             C   s  d}d}t j||fd}dt j| t j||fd }dt j| t j||fd }t j||f}t j|df}t jd|f}t j|}	t j|}
t j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 )NrJ   r$   g333333?g      ?gffffff?r	   )r=   rowcovcolcov)r=   )r   )r   )r=   r   )r=   r   )r   r   )r&   r   r(   r[   r   r   r   r   r   r   r=   )r-   r   r   rW   r   r   ZZZrZZcIrIcZI1r0   r0   r1   test_default_inputs  sD    









z$TestMatrixNormal.test_default_inputsc       
      C   s   d}d}t j||fd}t j|d}d}t j|d}d}t j|}t j|}	tt|||djd|  tt|||djd|	  tt|||djd|  tt|||djd|	  d S )NrJ   r$   g333333?g?g?)r=   r   r   )r&   r   r(   r   r   r   r   )
r-   r   r   rW   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j||fd}dtj| tj||fd }dtj| tj||fd }t|||d}|jdd}tj|||dd	}t|| |jdd}	|j|	}
tj|	|||d}t|
| |j|	}tj|	|||d}t|| qW qW d S )
Nr	   r6   g333333?g      ?gffffff?)r=   r   r   i  )random_state)r=   r   r   r   )	rL   r&   r   r(   r   r   r   r+   r?   )r-   rl   rm   rW   r   r   frozenrvs1rvs2rk   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j||fd}dtj| tj||fd }dtj| tj||fd }t|||d}|jdd}|j|}|j|}	|jj	 }
|jj	 }tj
||}tj|
||d	}tj|
||d	}t||d
d t|	|d
d qW qW d S )Nr	   r6   g333333?g      ?gffffff?)r=   r   r   i  )r   )r=   r/   g|=)ri   )rL   r&   r   r(   r   r   r+   r?   rN   flattenZkronr   r   )r-   rl   rm   rW   r   r   r   rk   r   r   ZvecXZvecMr/   r   r   r0   r0   r1   test_matches_multivariate4  s     



z*TestMatrixNormal.test_matches_multivariatec             C   sP  d}d}t j||fd}dt j| t j||fd }dt j| t j||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 |j	|
}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 )NrJ   r$   g333333?g      ?gffffff?rp   )r=   r   r   i  )r   r   i  r   )rx   r%   g|=)r&   r   r(   r   r   Zconcatenatenewaxisr   r   r?   rL   r   )r-   r   r   rW   r   r   r   r   ZX1ZX2rk   Zarray_logpdfrl   rm   Zseparate_logpdfr0   r0   r1   test_array_inputK  s$    F

z!TestMatrixNormal.test_array_inputc             C   s   d}d}t j||fd}dt j| t j||fd }dt j| t j||fd }d}t|||d}|j|dd	}t j|d
d}	t|	|dd t j|j|| |j	}
t|
|dd t jt j
|ddj|| |j	}t||dd d S )NrJ   r$   g333333?g      ?gffffff?i  )r=   r   r   i  )r   r   r   )rx   g?)rz   r	   r%   )r&   r   r(   r   r   r=   r   r/   ZreshaperN   Zswapaxes)r-   r   r   rW   r   r   r   r   rk   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jd t jjdd}t jjdd|}t|}t|j tj| t|j tj| t|j	 tj	| d}x~t
|D ]r}t jjdd|}|t j| }t|j|d d tj|d d | t|j|d d	 tj|d d
 | q|W d S )Ni  r	       g&.>r_   rp   r   r   r   r   )r&   r7   r8   randintr   r   r   varr=   r   rL   r   r+   r?   )r-   rQ   r   r   	num_testsrl   r<   r0   r0   r1   test_frozen_dirichletz  s    (z#TestDirichlet.test_frozen_dirichletc             C   s   t jjd t jdddg}t jj|dd}t|jd	 tttj	|| tttj
|| tj	|j| tj	|jd d
 | tj
|j| tj
|jd d | d S )Ni  g      ?g       @g      @r   )r   r$   r	   )r   r$   r   r   )r&   r7   r8   r|   r   r   r   r)   r*   r+   r?   rN   )r-   r   r<   r0   r0   r1   "test_numpy_rvs_shape_compatibility  s    z0TestDirichlet.test_numpy_rvs_shape_compatibilityc             C   sT   t jjd dddg}t jjt jd|ddj}tttj|| tttj	|| d S )Ni  g      ?g        g      @g&.>r   )r   )
r&   r7   r8   r   maximumrN   r)   r*   r+   r?   )r-   r   r<   r0   r0   r1   test_alpha_with_zeros  s
    
z#TestDirichlet.test_alpha_with_zerosc             C   sT   t jjd dddg}t jjt jd|ddj}tttj|| tttj	|| d S )	Ni  g      ?g       @g      @g&.>r   )r   g       )
r&   r7   r8   r   r   rN   r)   r*   r+   r?   )r-   r   r<   r0   r0   r1    test_alpha_with_negative_entries  s
    
z.TestDirichlet.test_alpha_with_negative_entriesc             C   s|   t jddddg}t jddddg}tj|| tj|| t jddddg}ttj||d	 ttj||t jd	 d S )
Ng      ?g       @g      @g      @g?g        g?gffffff?rw   )r&   r|   r   r+   r?   r   r@   )r-   r   r<   r0   r0   r1   test_data_with_zeros  s    z"TestDirichlet.test_data_with_zerosc             C   sH   t jddddg}t jddddg}tttj|| tttj|| d S )	Ng      ?g      ?g      @g      @g?g        g?gffffff?)r&   r|   r)   r*   r   r+   r?   )r-   r   r<   r0   r0   r1   $test_data_with_zeros_and_small_alpha  s    z2TestDirichlet.test_data_with_zeros_and_small_alphac             C   sH   t jddddg}t jddddg}tttj|| tttj|| d S )	Ng      ?g       @g      @g      @g?g333333?gffffff?g)r&   r|   r)   r*   r   r+   r?   )r-   r   r<   r0   r0   r1   test_data_with_negative_entries  s    z-TestDirichlet.test_data_with_negative_entriesc             C   sH   t jddddg}t jddddg}tttj|| tttj|| d S )	Ng      ?g       @g      @g      @g?g?g333333?gffffff?)r&   r|   r)   r*   r   r+   r?   )r-   r   r<   r0   r0   r1    test_data_with_too_large_entries  s    z.TestDirichlet.test_data_with_too_large_entriesc             C   s@   t jdddg}t jdd	}tttj|| tttj|| d S )
Ng      ?g       @g      @r%   r   r	      )r%   r   r   g$I$I?)r&   r|   r   r)   r*   r   r+   r?   )r-   r   r<   r0   r0   r1   test_data_too_deep_c  s    z"TestDirichlet.test_data_too_deep_cc             C   sF   t jddgddgg}t jd	d
}tttj|| tttj|| d S )Ng      ?g       @g      @g      @r%   r   r	   rJ   )r%   r%   r   g      ?)r&   r|   r   r)   r*   r   r+   r?   )r-   r   r<   r0   r0   r1   test_alpha_too_deep  s    z!TestDirichlet.test_alpha_too_deepc             C   s8   t jdddg}t jdd}tj|| tj|| d S )	Ng      ?g       @g      @r$   r   r	   )r$   r   gUUUUUU?)r&   r|   r   r   r+   r?   )r-   r   r<   r0   r0   r1   test_alpha_correct_depth  s    z&TestDirichlet.test_alpha_correct_depthc             C   s@   t jdddg}t jdd	}tttj|| tttj|| d S )
Ng      ?g       @g      @r$   r   r	   r%   )r$   r   g      ?)r&   r|   r   r)   r*   r   r+   r?   )r-   r   r<   r0   r0   r1   test_non_simplex_data  s    z#TestDirichlet.test_non_simplex_datac             C   sB   t jddddg}t jdd	}tttj|| tttj|| d S )
Ng      ?g       @g      @g      @r%   r   r	   )r%   r   g      ?)r&   r|   r   r)   r*   r   r+   r?   )r-   r   r<   r0   r0   r1   test_data_vector_too_short  s    z(TestDirichlet.test_data_vector_too_shortc             C   sB   t jddddg}t jdd	}tttj|| tttj|| d S )
Ng      ?g       @g      @g      @r6   r   r	   )r6   r   g?)r&   r|   r   r)   r*   r   r+   r?   )r-   r   r<   r0   r0   r1   test_data_vector_too_long  s    z'TestDirichlet.test_data_vector_too_longc             C   sL   t jdddg}t|}d
ddg}ddd	g}t|j | t|j | d S )Ng      ?g?g?g      (@g{Gz?gQ?g      ?g?g?gUUUUUU?)r&   r|   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 jdg}t|}t|j jd t|j jd t|jdgjd t|jdgjd d S )Ng?r   g      ?)	r&   r|   r   r   r=   r9   r   r+   r?   )r-   r   r   r0   r0   r1   r>     s    z TestDirichlet.test_scalar_valuesc             C   s   t jjd t jjdd}t jjdd|}t|}d}xLt|D ]@}t jjdd|}|t j| }t|j	|d d |j	| q@W d S )Ni  r	   r   g&.>r_   rp   r   )
r&   r7   r8   r   r   r   rL   r   r   r+   )r-   rQ   r   r   r   rl   r<   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jd t jjdd}t jjdd|}t|}d}d}d }xt|D ]}xJt|D ]>}t jjdd|}	|	t j|	 }	|d k	rt j||	f}qV|	}qVW |j	|j
}
d }x0|D ](}|j	|}|d k	rt j||}q|}qW t|
| qHW d S )Ni  r	   r   g&.>r_   rp   r6   )r&   r7   r8   r   r   r   rL   r   vstackr+   rN   appendr   )r-   rQ   r   r   r   Znum_multipleZxmrl   mr<   Zrmrsxsr   r0   r0   r1   test_multiple_entry_calls  s,    

z'TestDirichlet.test_multiple_entry_callsc             C   s   t jjd t jjddd}t|}t|d |d }d}xFt|D ]:}t jjddd}|t j| }t|j	||j	|g qDW t|j
 |j
 d  t|j |j d  d S )Ni  g&.>r_   r%   r   r	   rp   )r&   r7   r8   r   r   r   rL   r   r   r+   r=   r   )r-   r   r   br   rl   r<   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 jddg} t jdgg}ttt| | yt| | W n@ tk
rx } z$d}tt|d t| | W Y d d }~X nX d S )Ng        g      ?zDimension mismatch)r&   r|   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 jdt jd t jdddg}x2|D ]*}td|}t|j| t|jj|j q:W t jddgddgg}ddgt jd t jddgddggg}x2|D ]*}td|}t|j| t|jj|j qW tttdt j	d t jddd}tttd| d S )Nr	   r%   )ndminr   r$   )r	   r%   )
r&   r|   r_r   r   rt   r   r)   r*   eye)r-   Z
true_scaleZscalesrt   wr0   r0   r1   test_scale_dimensionsM  s.    





z!TestWishart.test_scale_dimensionsc          	   C   s  ddgt jdt jd t jdddt jdgddg}tdd}|jt jddd}x|D ]}t|j|| qXW dddgt jd t jdddgddg}tdd}|jt jdddgdd}x|D ]}t|j|| qW dddgt jdt jd t jddgddggt jddgddggd d d d t jf g}tdt jd}|jt jddgddggd d d d t jf }x|D ]}t|j|| qvW d S )Nr	   r%   )r   r$   r   )r	   r%   r$   )r%   r%   )r&   r|   r   r   r+   r   r   r   )r-   rk   r   Zdensityr<   r0   r0   r1   test_quantile_dimensionst  s<    






""
z$TestWishart.test_quantile_dimensionsc       	      C   sv  d}t jt j|d }t j||d  d |t j|dd< t j|j|}g }xhtdD ]\}t jt j||d d  }t j||d  d |t j|d	d< t j|j|}|j| qXW t j|j}ddt j	dddfd||fg}x|D ]\}}}t
||}t|j t
j|| t|j t
j|| t|j t
j|| t|j t
j|| t|j|t
j||| qW d S )
NrJ   r	   r%   )r\   r6   rp   g?r   r   )r&   r   r'   tril_indicesrM   rN   rL   r   r|   rs   r   r   r   r=   moder   r+   )	r-   dimrt   rk   rl   r<   
parametersdfr   r0   r0   r1   r     s(    $$
zTestWishart.test_frozenc             C   s   t jjd d}d}t j|}t jdddtd}t jdddd}x|D ]}t||}t|}t	|j
 |j
  t	|j |j  t	|j |j  t	|j||j| |j|d	}	|f}
d
}td|
||	 qFW d S )Ni^ i  r	   rp   r%   )r`   g?)num)r   g{Gz?r   )r&   r7   r8   r   r'   rb   rs   r   r   r   r   r=   r   r+   r   r
   )r-   snr   rt   df_rangerk   r   r   cr   argsr   r0   r0   r1   test_1D_is_chisquared  s"    


z!TestWishart.test_1D_is_chisquaredc             C   s  t jjd d}d}d}t jt jdd }t jd|t jddd< t j|j|}t j|df}|jj|j|j	 }t
||}t||d}t|j |j  t|j |j  t|j |j  t jd	ddd
}	t|j|	|j|	 |j|d}
|d|f}d}td|||
 d S )Ni^ i  rp   rJ   r	   rw   )r\   )rt   g?)r   )r   r   g{Gz?r   r   )r&   r7   r8   r   r'   r   rM   rN   r   Zsqueezer   r   r   r   r=   r   rs   r+   r   r
   )r-   r   r   r   rt   ZlamdaZsigma_lamdar   r   rk   r   r   r   r0   r0   r1   test_is_scaled_chisquared  s(    

z%TestWishart.test_is_scaled_chisquaredN)r   r   r   r   r   r   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 jddd}t|ddd t jddgd	ddg}t|tjdd t jddgd	ddg}t|tjdd d S )Nr$   rJ   r   333333?ffffff?g&Mty?g:0yE>)ri   r   r%   )r$   rJ   )r   r   g&Mty)r   logpmfr   r&   ZNAN)r-   vals1vals2vals3r0   r0   r1   test_logpmf  s    zTestMultinomial.test_logpmfc             C   sX   t jddd}tjddd}t||dd t jdd
d}tjdd
d}t||dd d S )Nr$   rJ   r   333333?ffffff?g:0yE>)ri   rw   rv   r   皙??)r$   rJ   )r  r  )rw   rv   )r	  r
  )r   r  r   r   pmf)r-   Zval1Zval2r0   r0   r1   test_reduces_binomial  s    z%TestMultinomial.test_reduces_binomialc             C   sj   ddddg }}dddd
ddddddddddddddd di
}x(|D ] }t tj||||| dd qBW d S )!Nr$   g      ?rv   g       @g      @r   g     @?r	   r%   g     ?g      ?g      `?g     ?g      ?g      ?g      ?g      ?g+=)rz   g      ?g      ?g      ?)r   r   r$   )r	   r   r%   )r%   r   r	   )r$   r   r   )r   r	   r%   )r	   r	   r	   )r%   r	   r   )r   r%   r	   )r	   r%   r   )r   r$   r   )r   r   r  )r-   rQ   pZr_valsr<   r0   r0   r1   test_R  s    
zTestMultinomial.test_Rc             C   sH   t jddgd ddd}tjjd}|j dd	gd dd}t|| d S )
Nr$   r	   g      @r   {   )r   r   )r   g      ?g      ?)r   r   r&   r7   RandomStater   )r-   Zsc_rvsrndmZnp_rvsr0   r0   r1   test_rvs_np.  s    zTestMultinomial.test_rvs_npc             C   s   t jddd}t|ddd t jddd}t|d
dd t j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 j|dd}t|tjg tjd t jddgdd}t|ddd t jdddgdd d!dg}t|ddd d S )"Nr6   r	   g:0yE>)ri   r$   rJ   r   333333?ffffff?g5
?r   rv   	   皙??g*7?g<Wƌ?r%   )r`   rw   g      @gߦ?)r6   )r	   )r$   rJ   )r  r  r   )r  r  )r   r%   )r  r  )r  r  gUUUUUU?gUUUUUU?)r   r  r   r&   r}   float64r   )r-   vals0r  r  r<   r  vals4Zvals5r0   r0   r1   test_pmf5  s    $zTestMultinomial.test_pmfc             C   s
  t jddgdddgddgg}t|dd	gd
d t jddgddgddg}t|ddgd
d t jddgddgggdddg}t|ddggd
d t jddgdgdgggddg}t|dgdgggd
d t j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>)ri   rJ   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 jdd	}dddgdddgddd!gg}t||dd d S )"Nr6   皙?333333?      ?g?gffffff?g:0yE>)ri   )r  r  r  g      ?g?g      g333333ӿr   g      g      r   g      g433333ӿg      ?g?r   g      g      r   g      g      r   g      g      g      @g      ?)r   r/   r   )r-   cov1r   r0   r0   r1   test_covZ  s
    zTestMultinomial.test_covc             C   s   t j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 j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 j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 )+Nr6   g?g?g?g?g?g:0yE>)ri   rJ   g
ףp=
?g333333?gffffff?g?g333333?gܿgܿggg
ףp=
׿g
ףp=
׿gܿgܿg333333?gzG?g333333gzGr#  g333333gzGg333333?gzG?g       @g333333?r   g       g333333r   g       g333333g       @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 jdddg}t|tjdddd d S )Nr%   g?g?g:0yE>)ri   )r   r   r   r   )r-   ent0r0   r0   r1   r   o  s    zTestMultinomial.test_entropyc             C   s   t jddgddg}t|tjddtjddgdd t jddgdd	gd
dgg}t|tjddtjdd
gdd t jdgdggdd	gd
dgg}t|tjddtjdd
gtjddtjdd
ggdd d S )Nr%   r$   g?g333333?g:0yE>)ri   r   rv   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 jdddg}t|ddgdd d S )Nr6   g?g?g:0yE>)ri   g      ?g      @)r   r=   r   )r-   mean1r0   r0   r1   	test_mean  s    zTestMultinomial.test_meanc             C   s2   t jddgddg}t|ddgd	d
ggdd d S )Nr6   rw   g?g?g:0yE>)ri   g      ?g      @g433333?g433333@)r   r=   r   )r-   r'  r0   r0   r1   test_mean_broadcasting  s    z&TestMultinomial.test_mean_broadcastingc             C   s   t j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|j|tj||| t|j|tj||| t|j	 tj	|| d S )Ni     皙?皙?333333?皙?r   r	      rp   r  r%   rv   )r`   )r+  r,  r-  r.  )
r&   r7   r8   Zasarrayr  r   r   r  r  r   )r-   rQ   Zpvalsr<   Z	mn_frozenr0   r0   r1   r     s    6
zTestMultinomial.test_frozenN)r   r   r   r  r  r  r  r  r  r"  r$  r   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 )TestInvwishartc       	      C   s`  d}t jt j|d }t j||d  d |t j|dd< t j|j|}g }xhtdD ]\}t jt j||d d  }t j||d  d |t j|d	d< t j|j|}|j| qXW t j|j}ddt j	dddfd||fg}xx|D ]p\}}}t
||}t|j t
j|| t|j t
j|| t|j t
j|| t|j|t
j||| qW d S )
NrJ   r	   r%   )r\   r6   rp   g?r   r   )r&   r   r'   r   rM   rN   rL   r   r|   rs   r   r   r   r=   r   r   r+   )	r-   r   rt   rk   rl   r<   r   r   iwr0   r0   r1   r     s&    $$
zTestInvwishart.test_frozenc             C   s   t jjd d}d}t j|}t jdddtd}t jdd	d	d
}x|D ]}t||}t|d dd}t	|j
 |j
  t	|j |j  t	|j||j| |j|d}	|d ddf}
d}td|
||	 qFW d S )Ni^ i  r	   r6      r%   )r`   g?rp   )r   g      ?)rt   )r   r   g{Gz?r   g      ?g      ?)r&   r7   r8   r   r'   rb   rs   r   r   r   r   r=   r+   r   r
   )r-   r   r   rt   r   rk   r   r1  Zigr   r   r   r0   r0   r1   test_1D_is_invgamma  s     


z"TestInvwishart.test_1D_is_invgammac             C   s|  d}d}t j|}d|d
< d|d< t||}t||}t jjd tj||}t jjd |j }t jjd tj||}t jjd |j }	t jjd t jjdd}
t jt jj	|t jj	|d t jj	|d f d }t j
|}|
|t j|dd	< t jj|}|j|}t j||j}t jjt jj|}|j|}t jjt j||j}t|| t|| t|| t|	| d S )Nr$   rp   g      ?r   r	   i )r   r%   )r\   )r   r	   )r	   r   r   )r&   r   r   r   r7   r8   r   normalr   Z	chisquarer   r   rU   ZcholeskyrM   rN   invr   )r-   r   r   rt   r   r1  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 jddddgddddgddddgddddgg}t jdd
ddgddddgddddgddddgg}t j||g}|j }t| t jd}t|d j|d |dd t|d j|d |dd d	S )zRegression test for gh-8844.r%   r	   r   g      ?r$   rJ   gV瞯<)rz   Nr   r   )r&   r|   copyr   r   r   rM   )r-   Za0Za1aainvidentr0   r0   r1   test_cho_inv_batch  s    




z!TestInvwishart.test_cho_inv_batchc             C   s  t jddddgddddgddddgddddgg}t jddddgddddgddd	dgddddgg}d
}tj|||}|jd }t jj|\}}t jj|\}}t jj||}	|d | || d t jd  t	|d | || d d |  d|	j
   }
t||
 dS )zRegression test for gh-8844.r%   r	   r   g      ?r$   r  r   r6   rv   rw   N)r&   r|   r   r?   r   rU   re   Zsolver@   r!   tracer   )r-   rk   PsinuZprobr  sigZlogdetXZ	logdetPsirW   expectedr0   r0   r1   test_logpdf_4x4#  s     




PzTestInvwishart.test_logpdf_4x4N)r   r   r   r   r3  r8  r=  rC  r0   r0   r0   r1   r0    s
    ;r0  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jd tjd}t j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(f?g^A.?g*B?g:d?g2u?gi}?gR#xlF?g^`D?g?)r8   )r   g(fg^A.g2u)r&   r7   r8   r   r   r|   r   r  )r-   r<   rB  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 )Nr%   r	   g      @)r%   r%   )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||jtj|jd
  q<W d S )Nc             S   s$   g | ]}t d D ]}tj|qqS )r$   )rL   r   r   ).0r   rl   r0   r0   r1   
<listcomp>Y  s   z<TestSpecialOrthoGroup.test_det_and_ortho.<locals>.<listcomp>r%   r*  c             S   s   g | ]}t jj|qS r0   )r&   rU   rc   )rH  r<   r0   r0   r1   rI  ^  s    g      ?   gvIh%<=)ri   r   )rL   r   r   r&   rM   rN   r   r   )r-   r   detsr<   r0   r0   r1   test_det_and_orthoX  s    
z(TestSpecialOrthoGroup.test_det_and_orthoc                s|   d}d}d}t jjd tj||dd tfdd D  fdd D }fdd|D }t|gt| | d S )Nr6   i  g?i  )r   r   r%   r	   rJ   r$   c             3   s2   | ]*\  ft  fd dD fV  qdS )c                s   g | ]}|   qS r0   r0   )rH  r<   )ecerr0   r1   rI  |  s    z=TestSpecialOrthoGroup.test_haar.<locals>.<genexpr>.<listcomp>N)sorted)rH  )r   )rM  rN  r1   	<genexpr>|  s    z2TestSpecialOrthoGroup.test_haar.<locals>.<genexpr>c                s&   g | ]} D ]}||kr||fqqS r0   r0   )rH  e0e1)elsr0   r1   rI  }  s    z3TestSpecialOrthoGroup.test_haar.<locals>.<listcomp>c                s&   g | ]\}}t  |  | d  qS )r	   )r   )rH  p0p1)projr0   r1   rI  ~  s    r   r   r   r%   r	   rJ   r%   r$   )rW  rX  rY  rZ  )r&   r7   r8   r   r   dictr   r   )r-   r   samplesks_probpairsks_testsr0   )rS  rV  r   r1   	test_haarf  s    
zTestSpecialOrthoGroup.test_haarN)r   r   r   rE  rF  rG  rL  r`  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ejj	d	d
 Z
dS )TestOrthoGroupc             C   sp   t jjd tjd}tjddd}tt jj|d t j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2?g	,ʶ?gC}Ȇ?gF-YD?g:kO?g-C?r   g8e,˿gRVϿgob2g	,ʶ)
r&   r7   r8   r   r   r   rU   rc   r|   r   )r-   r<   x2rB  r0   r0   r1   rE    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 )Nr%   r	   g      @)r%   r%   )r)   r*   r   r   )r-   r0   r0   r1   rF    s    zTestOrthoGroup.test_invalid_dimc             C   s   dd t ddD }tjdd |D }ttj|tj|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	||j
tj|jd  qW q~W d S )Nc                s"   g | ]  fd dt dD qS )c                s   g | ]}t j qS r0   )r   r   )rH  rl   )r   r0   r1   rI    s   z@TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>.<listcomp>rp   )rL   )rH  r0   )r   r1   rI    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j|qS r0   )r&   rU   rc   )rH  r<   r0   r0   r1   rI    s    z@TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>.<listcomp>r0   )rH  xxr0   r0   r1   rI    s    gvIh%<=)ri   r   rp   c             S   s$   g | ]}t j|d k d  jd  qS )r   )r&   nonzeror   )rH  r   r0   r0   r1   rI    s    c             S   s$   g | ]}t j|d k d  jd  qS )r   )r&   rd  r   )rH  r   r0   r0   r1   rI    s    )rL   r&   r|   r   fabsr   r   r   r   rM   rN   r   )r-   r   rK  rc  r<   r0   r0   r1   rL    s    

z!TestOrthoGroup.test_det_and_orthoc                s|   d}d}d}t jjd tj||dd tfdd D  fdd D }fdd|D }t|gt| | d S )Nr6   i  g?i  )r   r   r%   r	   rJ   r$   c             3   s2   | ]*\  ft  fd dD fV  qdS )c                s   g | ]}|   qS r0   r0   )rH  r<   )rM  rN  r0   r1   rI    s    z6TestOrthoGroup.test_haar.<locals>.<genexpr>.<listcomp>N)rO  )rH  )r   )rM  rN  r1   rP    s    z+TestOrthoGroup.test_haar.<locals>.<genexpr>c                s&   g | ]} D ]}||kr||fqqS r0   r0   )rH  rQ  rR  )rS  r0   r1   rI    s    z,TestOrthoGroup.test_haar.<locals>.<listcomp>c                s&   g | ]\}}t  |  | d  qS )r	   )r   )rH  rT  rU  )rV  r0   r1   rI    s    r   r   r   r%   r	   rJ   r%   r$   )rf  rg  rh  ri  )r&   r7   r8   r   r   r[  r   r   )r-   r   r\  r]  r^  r_  r0   )rS  rV  r   r1   r`    s    
zTestOrthoGroup.test_haarc                sl   t jjd dd }xRtddD ]D d fdd		}||}|tjjj}tjj||\}}t	d
| q W d S )Ni  c             S   s,   t jjt jj| | fd\}}}t j||S )N)r   )r&   rU   rV   r7   r4  rM   )r   rX   Z_srY   r0   r0   r1   random_ortho  s     z<TestOrthoGroup.test_pairwise_distances.<locals>.random_orthor%   rw     绽|=c                s<   t j fddt|D }|t jj| ||jd7 }|S )Nc                s*   g | ]"}t j d  d  d qS ))r   r%   )r&   r   )rH  _)r   r   r0   r1   rI    s   z\TestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statistics.<locals>.<listcomp>)r   )r&   r|   rL   r7   r   r   )r   r   Zepsstats)r   )r   r1   generate_test_statistics  s
    zHTestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statisticsg?)rk  rl  )
r&   r7   r8   rL   rT   rn  r   r   r   r   )r-   rj  ro  rB  rn   Z_Dr  r0   )r   r1   test_pairwise_distances  s    	z&TestOrthoGroup.test_pairwise_distancesN)r   r   r   rE  rF  rL  r`  pytestmarkZslowrp  r0   r0   r0   r1   ra    s
   ra  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jd d}tj|}tj|dd}t j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        ?皙?333333?      ?)r   g      ?g?g3LU?giƖ\?g``+?gO0)?gqɨ?)rt  ru  rv  rw  gʿgiƖ\gʿg``+Ͽg``+ϿgiƖ\)r&   r7   r8   r   r   r|   r   )r-   r   r<   rb  rB  r0   r0   r1   rE    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$   rJ   g      ?g?g      )r)   r*   r   r   )r-   r0   r0   r1   test_invalid_eigs  s    z'TestRandomCorrelation.test_invalid_eigsc       
         s   dd  t jjd  fddtddD }|j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   )rl   r   r0   r0   r1   r     s    z3TestRandomCorrelation.test_definition.<locals>.normr  c                s    g | ]} |t jj|d qS ))r   )r&   r7   r   )rH  rl   )r   r0   r1   rI    s    z9TestRandomCorrelation.test_definition.<locals>.<listcomp>r%   rw   rJ   r   c             S   s   g | ]}d gt | qS )g      ?)r   )rH  r   r0   r0   r1   rI    s    c             S   s   g | ]}t j|qS r0   )r   r   )rH  r   r0   r0   r1   rI    s    c             S   s   g | ]}t jt jj|qS r0   )r&   re  rU   rc   )rH  r<   r0   r0   r1   rI    s    c             S   s   g | ]}t j|qS r0   )r&   prod)rH  r   r0   r0   r1   rI    s    gvIh%<=)ri   rz   c             S   s   g | ]}t j|qS r0   )r&   r   )rH  r<   r0   r0   r1   rI    s    )ri   )r&   r7   r8   rL   r   r   ziprN   )
r-   r   r   r   rK  Z
dets_knownZdiagsr:  r   r<   r0   )r   r1   test_definition  s    
z%TestRandomCorrelation.test_definitionc             C   sf  t jddgddggtd}tj|}t|t jddgddgg t jdd t jddgddgg}t jddgdt jddggtd}tj|j }t||j	j
|j
| t jddgdd	ggtd}tj|j }t||j	j
|j
| W d Q R X t jd
dgdd
ggtd}tj|j }t|d d t jddgdd
ggtd}tj|j }t|d d d S )Ng?r   r	   )r`   ignore)Zovergu <7~g?g?r%   gHz>r   )r   r   gMk   @)r   r   )r&   r|   rb   r   Z_to_corrr   ZerrstateZ	nextafterr9  rN   rM   )r-   r   gZm0r0   r0   r1   test_to_corr  s"    
""z"TestRandomCorrelation.test_to_corrN)r   r   r   rE  ry  r|  r  r0   r0   r0   r1   rs    s   	$rs  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jd tjd}tjddd}t jdddgdddgdd d!gg}t|| t|| d S )"Ni  r$   )r   g~p?y        yZ?g뉦?y        ĭ?g8Z?y        &4?gEHξr?y        8i?ge??y        +ݓ?gu=?y        B۽'?gqXQ?y        ?gN6?y        zܷ?g! 8l?y        2W'?y~p?yZ?y뉦?ĭ?y8Z?&4?yEHξr?8i?ye??+ݓݿgu=ٿyu=ٿB۽'?gqXQÿyqXQÿ?gN6ҿyN6ҿzܷy! 8l?2W'?)r&   r7   r8   r   r   r|   r   )r-   r<   rb  rB  r0   r0   r1   rE  :  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 )Nr%   r	   g      @)r%   r%   )r)   r*   r   r   )r-   r0   r0   r1   rF  F  s    z!TestUnitaryGroup.test_invalid_dimc             C   sN   dd t ddD }x4|D ],}ttj||j jtj|jd dd qW d S )Nc             S   s$   g | ]}t d D ]}tj|qqS )r$   )rL   r   r   )rH  r   rl   r0   r0   r1   rI  M  s   z3TestUnitaryGroup.test_unitarity.<locals>.<listcomp>r%   r*  r   gV瞯<)rz   )rL   r   r&   rM   ZconjrN   r   r   )r-   r   r<   r0   r0   r1   test_unitarityL  s    
zTestUnitaryGroup.test_unitarityc             C   sx   d}d}t jjd tj||d}t jdd |D }t j|j|j}t	|j
 tt j dt j j}t|jdk d S )	Nr6   i  i  )r   c             S   s   g | ]}t jj|qS r0   )rT   rU   Zeigvals)rH  r<   r0   r0   r1   rI  a  s    z.TestUnitaryGroup.test_haar.<locals>.<listcomp>r%   g?)r&   r7   r8   r   r   r   Zarctan2imagrealr   Zravelr   r   r,   r   Zpvalue)r-   r   r\  r   r   r<   resr0   r0   r1   r`  U  s     zTestUnitaryGroup.test_haarN)r   r   r   rE  rF  r  r`  r0   r0   r0   r1   r  9  s   	r  c             C   sd   | j }d| _ | j|ddi tj| }| j|ddi}tj|}|j|ddi}t|| || _ d S )Ni  r   rv   )r   r   pickledumpsloadsr   )distfnr   r  rR   Zr0Z	unpickledZr1r0   r0   r1   check_picklingf  s    


r  c           	   C   s   t jd} d| d< d| d< tf gtt j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	   g      ?rp   r6   g?g?r%   )r   r	   )r	   r   )r%   )r%   )r&   r   r   r   r|   r   r   r   r   r   r"   r  )rt   distsr  r   r0   r0   r1   test_random_state_propertyz  s    




r  )=__doc__r  Znumpy.testingr   r   r   r   r   r   rq  r   r)   Ztest_continuous_basicr
   r   r&   Zscipy.linalgrT   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   r0  rD  ra  rs  r  r  r  r0   r0   r0   r1   <module>   sV       & 1 B <  %E][-