
    -ii                    X   d Z ddlZddlm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mZmZmZ dd	lmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 dd
lm6Z6m7Z7 ddl8m9Z: ddlm;Z; ddl<m=Z=m>Z>m?Z? ddl<m@Z@mAZAmBZBmCZC ddlDmEZE ddlDmFZF ddlGmHZH ddlImJZJ ddlKmLZL d ZM G d d          ZNdIdZOd ZPd ZQe G d d                      ZRe G d d                      ZS G d d          ZT G d  d!          ZU G d" d#          ZV G d$ d%          ZW G d& d'          ZXd( ZY G d) d*          ZZ G d+ d,          Z[ G d- d.          Z\ G d/ d0          Z] G d1 d2          Z^ G d3 d4          Z_ G d5 d6          Z` G d7 d8          Za G d9 d:          Zb G d; d<          Zc G d= d>          Zdd? Zeejf        g                    d@A          dB             Zh G dC dD          Zi G dE dF          Zj G dG dH          ZkdS )JzH
Test functions for multivariate normal, t, and related distributions.

    N)	dataclass)assert_allcloseassert_almost_equalassert_array_almost_equalassert_equalassert_array_lessassert_)raises   )check_distribution_rvs)_PSD_lnBmultivariate_normal_frozen)multivariate_normalmultivariate_hypergeommatrix_normalspecial_ortho_grouportho_grouprandom_correlationunitary_group	dirichletbetawishartmultinomial
invwishartchi2invgammanormuniformks_2sampkstestbinom	hypergeommultivariate_tcauchy
normaltestrandom_tableuniform_directionvonmises_fisherdirichlet_multinomialvonmisesmatrix_t)_covariance
Covariance)	_norm_pdf)stats)tanhsinhcubaturequad)rombqmc_quaddblquadtplquad)multigammaln)check_random_state_property)_qsimvtv)patchc                     t          j        |           t          j        |          }} t          | |g|R i | t          | j        |j                   d S N)npasarrayr   r   shape)resrefargskwargss       i/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/stats/tests/test_multivariate.pyassert_closerF   /   sU    z#
3CC.t...v...CI&&&&&    c                   (   e Zd Zd Zej        ej        j        ej        j        ej        j	        d dZ
 ej         ee
                    Z ej        g d          g dg dg dg ej        g d          g d	g d
g dgdZeedd         eg d         edd         dZej                            dedd                   d             Zej                            d ee                    ej                            de          d                         Zej                            dd e            ddg          ej                            d ee                    ej                            de          d                                     Zej                            d e            dg          ej                            de          d                         Zd Zej                            d          d             Zd ZdS )TestCovariancec                    d}t          j        t          |          5  t          j        t          j        d                     d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        t          j        d          t          j        d                     d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        d           d d d            n# 1 swxY w Y   d	}t          j        t          |          5  t          j	        t          j        d                     d d d            n# 1 swxY w Y   d
}t          j        t          |          5  t          j
        dt          j        d          f           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j
        t          j        d          df           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j
        g dt          j        d          f           d d d            d S # 1 swxY w Y   d S )Nz:The input `precision` must be a square, two-dimensional...match   z0`precision.shape` must equal `covariance.shape`.   )
covariancez7The input `diagonal` must be a one-dimensional array...alpacaz9The input `cholesky` must be a square, two-dimensional...z4The input `eigenvalues` must be a one-dimensional...z,The input `eigenvectors` must be a square...z9The shapes of `eigenvalues` and `eigenvectors` must be...r   rM   rN   )pytestr
   
ValueErrorr-   CovViaPrecisionr>   oneseyeCovViaDiagonalCovViaCholeskyCovViaEigendecompositionselfmessages     rE   test_input_validationz$TestCovariance.test_input_validation7   s:   N]:W555 	4 	4'

333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 E]:W555 	I 	I'q		bfQiiHHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I L]:W555 	1 	1&x000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 N]:W555 	3 	3&rwqzz222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 I]:W555 	H 	H0(BF1II1FGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H A]:W555 	I 	I0"'!**h1GHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I N]:W555 	I 	I0)))RVAYY1GHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is}   'AAA9;C  CC(D		DD1'E$$E(+E()GGG))HH"%H"+I>>JJc                 $    t          | d          S )NTallow_singular)r   )xs    rE   <lambda>zTestCovariance.<lambda>Y   s    %)!D%A%A%A rG   )Diagonal	PrecisionCholeskyEigendecompositionPSDrQ   )   r   rN   )r         )rN   rj      )r   r   rN   )rh   r   )rl   rh   r   r   r   r   )diagonal full rankzgeneral full rankzdiagonal singularzgeneral singularr   N)r   rl   ro   cov_type_namerl   c                    t          j        g d          }g d}t          t          d|           }| j        |         }t          t
          d|                                           } | ||                    } | ||                    }t          |          t          |          u sJ t          |	                    |          |	                    |                     d S )NrQ   )rM   rh   CovViafrom_)
r>   diaggetattrr-   _covariance_preprocessingr.   lowertyper   whiten)	r[   rp   Ara   cov_typepreprocessingfactoryrA   rB   s	            rE   test_factorieszTestCovariance.test_factoriese   s    GIIIJJ;(@(@(@AA6}E*&Em.A.A.C.C&E&EFFgmmA&&''h}}Q''((CyyDII%%%%

1szz!}}55555rG   matrix_typec                 l   d| d| d}|| j         |         vrt          j        |           | j        |         }t	          t
          d|           }| j        |         }t          |d          } | ||                    }t          |j	        |j	                   t          |j        |j                   t          |j        t          j        |          j                   t          |j        t          j        |                     t          j                            d          }	|	                    d          }
|                    |
          }|
|j        z  }t          ||z  ||z             t)          |d	          r'd
|vr#t          |                    |          |
           |	                    d          }
|                    |
          }|
|j        z  }t          |dz                      d          |dz                      d                     t)          |d	          r'd
|vr#t          |                    |          |
           t)          |d	          rN|                    t          j        t1          |                              }t          |j        |z  |           d S d S )Nrs    does not support 	 matricesTr_      VGiVK rN   size	_colorizesingularrM   rj   rN   rM   rl   axis)
_cov_typesrR   skip	_matricesrv   r-   rw   r   rF   log_pdetr   rankr@   r>   r?   rO   randomdefault_rngrz   UhasattrcolorizesumrV   lenT)r[   r   rp   r\   r{   r|   r}   psd
cov_objectrngra   rA   rB   s                rE   test_covariancezTestCovariance.test_covariances   s   M  [    <<<K   N;';(@(@(@AA6}E1T*** XmmA..//
Z(#,777Z_ch///Z%rz!}}':;;;Z*BJqMM::: i##$788JJAJ""#%iS3Yc	***:{++ 	6
+0M0M,,S111555 JJIJ&&""#%ic1f\\r\**S!VLLbL,A,ABBB:{++ 	6
+0M0M,,S111555 :{++ 	)%%bfSVVnn55Ca(((((	) 	)rG   r   r   c                 z   d| d| d}|| j         |         vrt          j        |           | j        |         }t	          t
          d|           }| j        |         }g d} | ||                    }	t          }
t          ||d          }t          ||	d          }t          j	        
                    d          }|                    |||          }t          j	        
                    d          }|
                    ||	||	          }t          j	        
                    d          } |
||	|
                              |          }t          |	t
          j                  rEt          |t          j        |                     t          |t          j        |                     nDt!          |j        |j                   t!          |j        |j                   t          ||           t          |
                    |||	          |                    |                     t          |                    |          |                    |                     t          |
                    |||	          |                    |                     t          |                    |          |                    |                     t          |
                    ||	          |                                           t          |                                |                                           d S )Nrs   r   r   皙?皙?333333?Tr_   r   r   r   random_stateseed)r   rR   r   r   rv   r-   rw   r   r>   r   r   rvs
isinstance	CovViaPSDrF   squeezer   r@   pdflogpdfentropy)r[   r   r   rp   r\   r{   r|   r}   meanr   mvndist0dist1r   ra   x1x2s                    rE   test_mvn_with_covariancez'TestCovariance.test_mvn_with_covariance   s   M  [    <<<K   N;';(@(@(@AA6}EXmmA..//
!#D!DAAA#D*TJJJi##$788##D!$#77i##$788WWT:DsWCCi##$788Sz,,,00d0;;j+"788 	!RZ]]+++RZ]]++++17+++17+++R   SWWQj11599Q<<@@@UYYq\\599Q<<000SZZ444ell1ooFFFU\\!__ell1oo666S[[z22EMMOODDDU]]__emmoo66666rG   c                    d}| j         |         }t          t          d|           }| j        |         }g d} | ||                    }t          }	t	          ||d          }
t	          ||d          }t
          j                            d          }|                    |||          }t          |		                    |||          |
	                    |                     t          |	                    |          |
	                    |                     t          |	
                    |||          |

                    |                     t          |
                    |          |

                    |                     d S )Nrn   rs   r   Tr_   r   r   )r   rv   r-   rw   r   r>   r   r   rF   cdflogcdf)r[   r   rp   r   r{   r|   r}   r   r   r   r   r   r   ra   s                 rE   test_mvn_with_covariance_cdfz+TestCovariance.test_mvn_with_covariance_cdf   s[    +N;';(@(@(@AA6}EXmmA..//
!#D!DAAA#D*TJJJi##$788##D!$#77SWWQj11599Q<<@@@UYYq\\599Q<<000SZZ444ell1ooFFFU\\!__ell1oo66666rG   c                     d}t          j        t          |          5  t                       d d d            d S # 1 swxY w Y   d S )Nz7The `Covariance` class cannot be instantiated directly.rK   )rR   r
   NotImplementedErrorr.   rZ   s     rE   test_covariance_instantiationz,TestCovariance.test_covariance_instantiation   s    K].g>>> 	 	LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   :>>zignore::RuntimeWarningc                    t          j        g d          }|j        d         }t          j        |          }t	          j        t          d          5  t          ||                                           d d d            n# 1 swxY w Y   d}t           j	        
                    |          }t           j	        
                    |          }t          j        t           j                            |                    }t          ||          }|                    |          }	t          j        |||          }
t          |	|
           d S )N)r   rM   g:0yEr   zThe input matrix must be...rK   l   .ypGw r   )r>   ru   r@   zerosrR   r
   rS   r   r   r   r   r.   from_eigendecompositionlinalgeighr   )r[   r{   nr   r   rng1rng2covrvrA   rB   s              rE   test_gh9942zTestCovariance.test_gh9942   sV   
 GMMM""GAJx{{ ]:-JKKK 	/ 	/a((,,...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ #y$$T**y$$T**01B1BCC s++ff$f''!%dCdCCCS#s   #BB	Bc                    t          j        d          }t          j        t          j        d          t          j        d          f          }t          j                            ||          }|	                    d           }t          ||           t          j        j                            t          j        ddg          t          j        ddgddgg          f          }t          j                            ||          }|	                    d           }|d         |d         k    sJ |d         |d         k    sJ d S )	NrM   r   r   r         ?        g      y@r   r   )r>   rU   r.   r   r   rV   scipyr0   r   r   r   array)r[   r   r   distr   s        rE   test_gh19197zTestCovariance.test_gh19197  s!   
 wqzz0"(1++rvayy1IJJ{..Dc.BBhhDh!!S$k$<<Xr2hB8b$Z*@!A!ABD D{..Dc.BBhhDh!!1va    1va      rG   )__name__
__module____qualname__r]   r>   ru   r   invcholeskyr   rw   r   list_all_covariance_typesr   r   rR   markparametrizer   r   tupler   r   r   filterwarningsr   r    rG   rE   rI   rI   5   s       I I I< .0W.0im-/Y-?79y~)B )B	!C !C %BHTT*C%D%DEE'.rwyyy'9'9'0yy)))YYY&G&-bgiii&8&8&0jj***iii%HJ JI )>'<QRR'@'<[[['I&;BCC&@B BJ
 [_.CCRC.HII6 6 JI6 []DDOO<<[_.CDD-) -) ED =<-)^ [VdEEGGQ	%BCC[]DDOO<<[_.CDD#7 #7 ED =< DC#7J [Veeggy%9::[_.CDD7 7 ED ;:70  
 [ 899  :9,! ! ! ! !rG   rI   Fc                    |                     | | f          }||j        z  }t          j                            |          \  }}|r|                    |           dk    }d||<   |t          j        |          z  |j        z  }|S )Nr   r   )r   r   r>   r   r   normalru   )	dimevalsr   r   r{   _v	zero_eigsr   s	            rE   _random_covariancer     s     	

C:A	ACA9>>!DAq JJCJ((1,	i
bgenn
qs
"CJrG   c                     t           j                            d          }|                    | | f          }t          j                            |          \  }}}|S )Nl   :; )r>   r   r   standard_normalr   r   svd)r   r   Musr   s         rE   _sample_orthonormal_matrixr   #  sN    
)



+
+CQF##Alq!!GAq!HrG   c                 v    t          j        |          }||dk     xx         z  cc<   |                                }dd|f         t          j        t                    d|<    fd}t          j        t          |          z
  t           j                  }t          || |          j	        S )zIntegrate marginalized dimensions of multivariate
    probability distribution to calculate the marginalized
    distribution.
    r   NdtypeFc                     t          j        | j        d         j        d         f          }| d d t           j        d d f         |df<   |d f<                       |          S )Nr   .)r>   emptyr@   newaxisr   )zyXX_ndimi_marginalizera   s     rE   gzmarginal_pdf.<locals>.g7  sj    Hagaj!'!*f566 !!!!RZ"2 3#}
!"#~
uuQxxrG   )
r>   r?   argsortrU   boolfullr   infr2   estimate)r   r   
dimensionsra   dim_sort_idxr   r   r   s   `` `   @rE   marginal_pdfr   )  s     J''JzA~&(%%''L	!!!\/AGF$///M %M*        '&3z??*BF
3
3CAtS!!**rG   c                       e Zd ZU dZeed<   ej        ed<   ej        ed<   ej        ed<   ej        ed<   eed<   eed<   d	Z	ed	z  ed
<    fdZ
edd            Zedd            Zedd            Zd Zd Zd Zd Z xZS )
MVNProblemaP  Instantiate a multivariate normal integration problem with special structure.

    When covariance matrix is a correlation matrix where the off-diagonal entries
    ``covar[i, j] == lambdas[i]*lambdas[j]`` for ``i != j``, then the multidimensional
    integral reduces to a simpler univariate integral that can be numerically integrated
    easily.

    The ``generate_*()`` classmethods provide a few options for creating variations
    of this problem.

    References
    ----------
    .. [1] Tong, Y.L. "The Multivariate Normal Distribution".
           Springer-Verlag. p192. 1990.
    ndimlowhighlambdascovar
target_val
target_errNtrue_valc                 $   t                                                       || _        || _        || _        || _        t          j        | j        | j                  | _        t          j	        | j        d           | 
                                 d S Nr   )super__init__r   r  r  r  r>   outerr  fill_diagonalfind_target)r[   r   r  r  r  	__class__s        rE   r  zMVNProblem.__init__]  sy    		XdlDL99

S)))rG   c                 &   t           j                            |          }t          j        |t           j                   }|                    dt          j        |          |          }|                    dd|          } | ||||          }|S )zDRandom lambdas, random upper bounds, infinite lower bounds.
        r   r         r   r   r  r  r  r>   r   r   r   r   r   sqrtclsr   r   r  r  r  r[   s          rE   generate_semigeneralzMVNProblem.generate_semigeneralh  s     i##C((gdRVG$${{3D{99++dCd+33s	
 
 
 rG   c                 p   t           j                            |          }t          j        |t           j                   }|                    dt          j        |          |          }t          j        |                    dd                    }t          j        ||          } | ||||          }|S )zVConstant off-diagonal covariance, random upper bounds, infinite lower bounds.
        r   r   r   r  r  )r  r   r   r  r  sigmar  r[   s           rE   generate_constantzMVNProblem.generate_constanty  s     i##C((gdRVG$${{3D{99C--..'$&&s	
 
 
 rG   c                     t          j        |t           j                   }t          j        |          }t          j        d          } | ||||          }d|dz   z  |_        |S )zzOff-diagonal covariance of 0.5, negative orthant bounds.

        True analytically-derived answer is 1/(ndim+1).
              ?r  r   )r>   r   r   r   r  r  r  s          rE   generate_halveszMVNProblem.generate_halves  sk     gdRVG$$x~~'#,,s	
 
 
 T!VrG   c                     t          dd          }|                    |           t          | j        fi |\  | _        | _        dS )z?Perform the simplified integral and store the results.
              "      "@abNdictupdater3   univariate_funcr  r  r[   kwdsds      rE   r  zMVNProblem.find_target  sT     
 
 
 	
+/0D+J+J+J+J(rG   c           
      V   t          j        d| j        dz  z
            }t          j        t	          j        | j        | j        |ddt           j        f         z  z   |z            t	          j        | j        | j        |ddt           j        f         z  z   |z            z
  d          S )z`The parameter-specific term of the univariate integrand,
        for separate plotting.
        r   rM   Nr   )	r>   r  r  prodspecialndtrr  r   r  )r[   tdenoms      rE   _univariate_termzMVNProblem._univariate_term  s     DL!O+,,wL$)dl1QQQ
]3C&CCuLMML$(T\!AAArzM2B%BBeKLLM
 
 
 	
rG   c                     t          j        |          }t          j        t          |          |                     |          z            S )zUnivariate integrand.
        )r>   
atleast_1dr   norm_pdfr1  r[   r/  s     rE   r'  zMVNProblem.univariate_func  s<     M!z(1++(=(=a(@(@@AAArG   c                 \   ddl m} t          j        ddd          }|                    |t          |          d           |                    ||                     |          d           |                    ||                     |          d	           |                                 d
S )QPlot the univariate integrand and its component terms for understanding.
        r   pyplotr  r     	$\phi(t)$label$f(t)$$f(t)*phi(t)$N)	
matplotlibr9  r>   linspaceplotr4  r1  r'  legendr[   pltr/  s      rE   plot_integrandzMVNProblem.plot_integrand  s     	-,,,,,Kc4((HQKK|444D))!,,I>>>D((++3CDDD

rG   r=   )r   r   r   __doc__int__annotations__r>   ndarrayfloatr  r  classmethodr  r  r  r  r1  r'  rF  __classcell__)r  s   @rE   r   r   @  sW          JJJ
*:jJ #Hut|"""	 	 	 	 	    [     ["    [$K K K	
 	
 	
B B B	 	 	 	 	 	 	rG   r   c                       e Zd ZU dZeed<   ej        ed<   ej        ed<   ej        ed<   ej        ed<   eed<   eed<   d	 Z	e
dd            Zd Zd Zd Zd Zd
S )SingularMVNProblema;  Instantiate a multivariate normal integration problem with a special singular
    covariance structure.

    When covariance matrix is a correlation matrix where the off-diagonal entries
    ``covar[i, j] == -lambdas[i]*lambdas[j]`` for ``i != j``, and
    ``sum(lambdas**2 / (1+lambdas**2)) == 1``, then the matrix is singular, and
    the multidimensional integral reduces to a simpler univariate integral that
    can be numerically integrated fairly easily.

    The lower bound must be infinite, though the upper bounds can be general.

    References
    ----------
    .. [1] Kwong, K.-S. (1995). "Evaluation of the one-sided percentage points of the
           singular multivariate normal distribution." Journal of Statistical
           Computation and Simulation, 51(2-4), 121-135. doi:10.1080/00949659508811627
    r   r  r  r  r  r  r  c                     || _         || _        || _        t          j        |t          j                   | _        t          j        | j        | j                   | _        t          j	        | j        d           | 
                                 d S r	  )r   r  r  r>   r   r   r  r  r  r  r  )r[   r   r  r  s       rE   r  zSingularMVNProblem.__init__  su    		74"&))ht|T\:::

S)))rG   Nc                 l   t           j                            |          }|                    dt          j        |          |          }|                    t          j        |d                    }t          j        |d|z
  z            |                    ddg|          z  } | |||          }|S )z/Singular lambdas, random upper bounds.
        r   r   r   r   r  )r   r  r  )r>   r   r   r   r  r   r   choice)r  r   r   r  pr  r[   s          rE   generate_semiinfinitez(SingularMVNProblem.generate_semiinfinite  s     i##C(({{3D{99MM"'$,,--'!qs)$$szz4+Dz'I'IIs
 
 

 rG   c                     t          dd          }|                    |           t          | j        fi |\  | _        | _        d S )Nr  r   r!  r$  r(  s      rE   r  zSingularMVNProblem.find_target  sR    
 
 
 	
+/0D+J+J+J+J(rG   c           	         t          j        d| j        dz  z             }t          j        t	          j        | j        d| j        z  |d d t           j        f         z  z
  |z            d          }t          j        t	          j        | j         d| j        z  |d d t           j        f         z  z   |z            d          }|d| j        z  |z  z
  j	        S )Nr   rM   y              ?r   rl   )
r>   r  r  r,  r-  r.  r  r   r   real)r[   r/  r0  i1i2s        rE   r1  z#SingularMVNProblem._univariate_term  s    DL!O+,,WL$)boa2:6F&FF%OPP
 
 
 WL49*r$,qBJ7G'GG5PQQ
 
 
 b49_r))//rG   c                     t          j        |          }t          |          |                     |          z                                  S r=   )r>   r3  r4  r1  r   r5  s     rE   r'  z"SingularMVNProblem.univariate_func  s<    M!d33A666??AAArG   c                    ddl m} t          j        ddd          }|                    |t          |          d           |                    ||                     |          d           |                    ||                     |          d	           |                    d
d           |	                                 dS )r7  r   r8  r  r   r:  r;  r<  r>  r?  皙皙?N)
r@  r9  r>   rA  rB  r4  r1  r'  ylimrC  rD  s      rE   rF  z!SingularMVNProblem.plot_integrand  s     	-,,,,,Kc4((HQKK|444D))!,,I>>>D((++3CDDDs

rG   r=   )r   r   r   rG  rH  rI  r>   rJ  rK  r  rL  rT  r  r1  r'  rF  r   rG   rE   rO  rO    s          " JJJ
*:jJ      [K K K0 0 0B B B
 
 
 
 
rG   rO  c                   ,   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zej                            d ej        d           ej        ddg          g          d             Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d  Z&ej        j'        ej                            d!dd"g          d#                         Z(d$ Z)ej                            d! e*dd%                    ej                            d&d'd(g          d)                         Z+ej                            d! e*dd*                    ej                            d&d'd(g          d+                         Z,ej                            d! e*d,d*                    ej                            d&d'd-g          d.                         Z-d/ Z.d0 Z/ej                            d1d2          d3             Z0d4 Z1ej                            d5 ej2        d6           ej2        d7          g          d8             Z3ej                            d9 ej2        d:           ej2        d;           ej2        d<          g          d=             Z4d> Z5d? Z6d@ Z7dAS )BTestMultivariateNormalc                 f   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 )NrN   rM   r   r   r   r   rM   )r>   arangeidentityassert_raisesrS   r   r   r   )r[   mur   s      rE   test_input_shapez'TestMultivariateNormal.test_input_shape"  s    Yq\\k!nnj"5"962sKKKj"5"99b#NNNj"5"962sKKKj"5"99b#NNNNNrG   c                    t           j                            d          }d\  }}}t          j        |||          }t          |j        d           |                    d          }|                    d          }t          j        |                    d                    }t          j        |||          }t          |j        d           d\  }}}t          j	        |||          }t          |j        d           |                    d          }|                    d          }t          j        |                    d                    }t          j	        |||          }t          |j        d           d S )N  )      ?g333333?      @r   rh   )
r>   r   r   r   r   r   r   r   absr   )r[   r   ra   r   r   r   r   s          rE   test_scalar_valuesz)TestMultivariateNormal.test_scalar_values*  sY   i##D)) %4!%as33SXq!!! """"1%%fS((++,,!%as33SXq!!! %4!%as33SXq!!! """"1%%fS((++,,!%as33SXq!!!!!rG   c                    t           j                            d          }|                    d          }|                    d          }t          j        |                    d                    }t          j        |||          }t          j        |||          }t          |t          j	        |                     d S Nrj  rh   )
r>   r   r   r   rm  r   r   r   r   logr[   r   ra   r   r   d1d2s          rE   test_logpdfz"TestMultivariateNormal.test_logpdfE      i##D))""""1%%fS((++,, '455 $Qc22BF2JJ'''''rG   c                    t           j                            d          }|                    d          }t	          j        |          }t	          j        |          }t	          j        |d d          }t	          j        |d d          }t          |t          j        |                     t          |t          j        |                     d S Nrj  rh   r   )	r>   r   r   r   r   r   r   r   rq  r[   r   ra   rs  rt  d3d4s          rE   test_logpdf_default_valuesz1TestMultivariateNormal.test_logpdf_default_valuesO       i##D))"" '** $Q'' '433 $Qa00BF2JJ'''BF2JJ'''''rG   c                    t           j                            d          }|                    d          }|                    d          }t          j        |                    d                    }t          j        |||          }t          j        |||          }t          |t          j	        |                     d S rp  )
r>   r   r   r   rm  r   r   r   r   rq  rr  s          rE   test_logcdfz"TestMultivariateNormal.test_logcdf\  rv  rG   c                    t           j                            d          }|                    d          }t	          j        |          }t	          j        |          }t	          j        |d d          }t	          j        |d d          }t          |t          j        |                     t          |t          j        |                     d S rx  )	r>   r   r   r   r   r   r   r   rq  ry  s          rE   test_logcdf_default_valuesz1TestMultivariateNormal.test_logcdf_default_valuesf  r}  rG   c                 X   t           j                            d          }d}|                    |          }t	          d|dz             D ]_}|                    ||f          }t          j        ||j                  }t          ||d          }t          |j	        j
        |           `d S )Nrj  rj   r   Tr_   )r>   r   r   r   rangedotr   r   r   r   r   )r[   r   r   r   expected_rankr   r   distns           rE   	test_rankz TestMultivariateNormal.test_ranks  s    i##D))""1%%"1a!e__ 	? 	?M##Q$677A&AC..C'c$GGGE).>>>>		? 	?rG   c           	      &   t           j                            d          }t          dd          D ]}|                    |          }t          d|          D ]}|                    ||f          }t          j        ||j                  }t          j        ||f          }||d |d |f<   t          j        |          }|d |         |d |<   t          |          }	t          j        |	t          j        ||	j                            }
t          j        |	|          }t          t          j        |          |d          }t          t          j        |          |d          }t          t          j        |          |
d          }t          |j        j        |           t          |j        j        |           t          |j        j        |           |                    |d |                   }|                    |          }|                    |          }t          ||           t          ||           |                    |d |                   }|                    |          }|                    |          }t          ||           t          ||           ||	d d df         z   }|                    |          }|                    |          }t          |d           t          |t           j                    d S )Nrj  r   rh   Tr_   rl   r   )r>   r   r   r  r   r  r   r   r   r   r   r   r   r   r   r   r   )r[   r   r   r   kr   cov_kkcov_nnra   r   cov_rrr   distn_kkdistn_nndistn_rrpdf_kkpdf_nnpdf_rr	logpdf_kk	logpdf_nn	logpdf_rry_orthpdf_rr_orthlogpdf_rr_orths                           rE   test_degenerate_distributionsz4TestMultivariateNormal.test_degenerate_distributions~  s   i##D))q! 0	6 0	6A##A&&A1a[[ .6 .6''A//13 1a&))!'rr2A2v HQKK"1""1" /q1126&!##6#677F1aLL /rx{{F>BD D D.rx{{F>BD D D.rx{{F>BD D DX05q999X05q999X05q999!ae,,!a!a//////$OOAbqbE22	$OOA..	$OOA..		9555	9555 Qqqq"uX&ll622!)!8!8 [#...^bfW5555].60	6 0	6rG   c                 L   d}t          dd          D ]}t          d|          D ]}t          j        |          }t          |          d d d |f         }t          j        ||j                  }t          j        |||          }t          j        |||d          }t          |j
        |           t          j        |dk              sJ t          j        |||d          }	t          |	j
        |           t          j        |	t          j         k              sJ d S )	N
   rM   ri   r   r   r   r   T)r   r   r`   r   )r  r>   r   r   r  r   r   r   r   r   r   allr   r   )
r[   r  r   rmnr   vrr   r   r   s
             rE   test_degenerate_arrayz,TestMultivariateNormal.test_degenerate_array  s?    q! 	0 	0A1a[[ 0 0Xa[[.q11!!!RaR%8VAqs^^'+!DDD)-abb=AC C CSXq)))vcCi(((((,3ABBCGI I IV[!,,,vfw.//////0	0 	0rG   c                 f   d}d}d}t          j        ||z            }||z   }t          j        ||ft                    }t          j        ||           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   rM   r   r   r   )r>   expr   rK  r  r   r   r   detr   r   slogdetr   r   )r[   large_total_lognposnzerolarge_entryr   r   r   s           rE   test_large_pseudo_determinantz4TestMultivariateNormal.test_large_pseudo_determinant  s-   
 !f_t3445Lh1vU+++
k*** !UFGGeVWW 	U\%%c**A...U\%%c%4%$,&788"&AAA	))#eteUdUl*;<<O,	. 	. 	. 3iio66666rG   c                 |   t           j                            d          }d}|                    ||          }t          j        ||j                  }|                    |          }|                    dd|          }t          j        |||          }t          j        |||          }t          d          D ]}	t          d          D ]p}
t          j        ||	|
f         ||          }t          |||	|
f                    t          j        ||	|
f         ||          }t          |||	|
f         d           qd S )Nrj  rj   rM   rN   MbP?rtol)r>   r   RandomStaterandnr  r   r   r   r   r  r   )r[   r   r   datar   r   r   desired_pdfdesired_cdfijactuals               rE   test_broadcastingz(TestMultivariateNormal.test_broadcasting  sD   i##D)) yyAfT46""yy|| IIaA *-as;;)-as;;q 	E 	EA1XX E E,01a4$DDAaC(8999,01a4$DDAaC(8tDDDDDE	E 	ErG   c                 6   t          j        ddd          }d\  }}|dz  }t          j        |||          }t	          j        |||          }t          ||           t          j        |||          }t	          j        |||          }t          ||           d S )Nr   rM   r  )333333??r  )r>   rA  r   r   r   r   r   )r[   ra   r   r   scalers  rt  s          rE   test_normal_1Dz%TestMultivariateNormal.test_normal_1D  s     K1b!!	cSXau%% $Qc22BXau%% $Qc22BrG   c                    t          j        ddg          }t          j        ddgddgg          }d}d|dz
  z  }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	          }
t          |	|d          }t          j        ||d	         |d         dz            }t          j        ||d         |d         dz            }t          |
|dd           t          ||dd           d S )Nrl  g      @r  r   333333?i  ri   r   r   rM   r   r   r   locr  )r   r   {Gz?r  atol)
r>   r   rA  meshgridr   r   r   r4   r   r   )r[   r   r   r   deltar   xvyvposr   margin_xmargin_ygauss_xgauss_ys                 rE   test_marginalizationz+TestMultivariateNormal.test_marginalization  sj    xc
##hS	C9-..QUK1a  Q""Bh1ay!!AAAqqq!GAAAqqq!G!%c455 U+++U+++ (1$q'Tc1ABBB(1$q'Tc1ABBB'4@@@@'4@@@@@@rG   c                    t           j                            d          }|                    d          }|                    d          }t          j        |                    d                    }t          ||          }t          |                    |          t          j        |||                     t          |                    |          t          j        |||                     t          |	                    |          t          j	        |||                     t          |
                    |          t          j
        |||                     d S rp  )r>   r   r   r   rm  r   r   r   r   r   r   )r[   r   ra   r   r   norm_frozens         rE   test_frozenz"TestMultivariateNormal.test_frozen  s;   i##D))""""1%%fS((++,,)$44**,?,CAtS,Q,QRRR**1--+21dC@@	B 	B 	B**,?,CAtS,Q,QRRR**1--+21dC@@	B 	B 	B 	B 	BrG   rO   rM   r   c                     t          j        d          }t          j        d          }t          ||          }t          j        |j        |          sJ t          j        |j        |          sJ d S )NrM   rM   )r>   rU   rV   r   allcloser   r   )r[   rO   r   cov_should_ber  s        rE   2test_frozen_multivariate_normal_exposes_attributeszITestMultivariateNormal.test_frozen_multivariate_normal_exposes_attributes-  sh     wt}}q		)$
;;{;+T22222{;?M:::::::rG   c           
         t           j                            d          }d}|                    ||f          }t          j        ||j                  }t          j                            |          \  }}t          j	        |d          }d|d<   d|d<   t          j        |t          j        t          j
        |          |j                            }d}t          ||	          }t          |j        |	          }	t          |j        t          j        t          j        |d d                                        t          |j         |	j                   d S )
Nrj  rk   r  r   r   Hz>rl   h㈵>)cond)r>   r   r   r   r  r   r   r   r   r   ru   r   pinvr   r   r   rq  )
r[   r   r   ra   r   r   r   r  r   psd_pinvs
             rE   test_pseudodet_pinvz*TestMultivariateNormal.test_pseudodet_pinv;  s!    i##D))A''fQnn|  %%1GAsOO!"fQrwqzz13//00 3T"""t,,, 	bfRVAcrcF^^&<&<=== 	x'899999rG   c                 L    g dg dg}t          t          t          |           d S )NrQ   rj   rh   ri   rf  rS   r   r[   r   s     rE   test_exception_nonsquare_covz3TestMultivariateNormal.test_exception_nonsquare_covU  s,    yy)))$j$,,,,,rG   c                     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>   nanrf  rS   r   r   )r[   cov_nancov_infs      rE   test_exception_nonfinite_covz3TestMultivariateNormal.test_exception_nonfinite_covY  sT    q6Arv;'j$000q6Arv;'j$00000rG   c                 L    ddgddgg}t          t          t          |           d S )Nr   r   rl   r  r  s     rE   test_exception_non_psd_covz1TestMultivariateNormal.test_exception_non_psd_cov_  s,    1v2wj$,,,,,rG   c                    t           j                            d          }|                    d          }|                    d          }t          j        d          }t           j        j        }t          |t          ||           t          |t          j	        |||           t          |t          j
        |||           t          |t          j        |||           t          |t          j        |||           ddgddgg}d}t          j        t           j        j        |          5  t          |           d d d            d S # 1 swxY w Y   d S )	Nrj  rh   )rh   rh   r   r   z0When `allow_singular is False`, the input matrixrK   r   )r>   r   r   r   rU   r   LinAlgErrorrf  r   r   r   r   r   rR   r
   )r[   r   ra   r   r   emsgs          rE   test_exception_singular_covz2TestMultivariateNormal.test_exception_singular_covc  sy   i##D))""""1%%gfooI!a,dC888a,0!T3???a,3QcBBBa,0!T3???a,3QcBBB Bx"b"@]290<<< 	) 	)C((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   )EEEc                     t          j        g d          }t          j        ddd          }d|z  dz
  }|t          j        |          z   }t          j        |||g          j        }t          j        g dd          }t          j        g dg d	g d
gd          }t          j        |||          }t          ||d           t          j        g d          }	t          j        |||          }
t          |
|	d           t          j        g d          }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 S )N)g0Q-?gox'V?g[S, t?gDB?gc_.?r   rM   rh   rN   )r   rN   rM   r*  r   rM   r   )rM   rh   r  )r   r  rN   绽|=r  )gwk:E]?g̙Z?g0?gL8?gAG*?gh㈵>)gIى?gG?gƏ)?gėh?gEE?r   r  )	r>   r   rA  cosr   r   r   r   r   )r[   r_pdfra   r   r   r  r   r   r   r_cdfr   r_cdf2r2mean2cov2cdf2s                   rE   test_R_valuesz$TestMultivariateNormal.test_R_valuesv  s     6 6 6 7 7 K1a  EAIq		MHaAY!x			3''h			:::zzz:C@@!%as33U////  6 6 6 7 7 "%as33U....  3 3 3 4 4 Xq!f!Q%%x!Q!Q(#.."&r5$77f4000000rG   c                     t          j        d          }t          j        d          }t          ||d          }|                                }t	          |ddg           d S )NrM   rM   rM   Tr_   r   )r>   r   r   r   r   )r[   r   rO   modelsamples        rE   ,test_multivariate_normal_rvs_zero_covariancezCTestMultivariateNormal.test_multivariate_normal_rvs_zero_covariance  sY    x{{Xf%%
#D*TJJJVaV$$$$$rG   c                    d}d}t          j        t          j        |          d|          }t	          |j        ||f           t          j        d t          j        ddgddgg          |          }t	          |j        |df           t          dd          }|                    |          }t	          |j        |f           d S )	Ni,  rj   r   r  rM   r   r   r   )r   r   r>   r   r   r@   r   )r[   Nr*  r  r   s        rE   test_rvs_shapez%TestMultivariateNormal.test_rvs_shape  s     $(bhqkkqqIIIV\Aq6***$(d-/X2wQ6H-I-I./1 1 1 	V\Aq6***QA...qV\A5)))))rG   c                    t           j                            d          }d}|                    |          }|                    ||          }t          j        ||j                  }d}t          j        ||||          }t          t          j	        |j                  |d           t          |
                    d          |d           d S )N  rN     r   r   r  r   )r>   r   r  r  r  r   r   r   r   r   r   )r[   r   r   r   r   r   r   r  s           rE   test_large_samplez(TestMultivariateNormal.test_large_sample  s     i##D))yy||IIaOOfQnn$(sDsKKKvx((#D9999A4888888rG   c                    t           j                            d          }d}|                    |          }|                    ||          }t          j        ||j                  }t          ||          }t          |                                t          j        ||                     t           j	        
                    |          d         }d|t          j        dt           j        z            dz   z  t          j        t          j        |                    z   z  }t          ||                                           d S )Nr  rN   r   r  rM   r   )r>   r   r  r  r  r   r   r   r   r   eigrq  pir   )	r[   r   r   r   r   r   r   eigsdesireds	            rE   test_entropyz#TestMultivariateNormal.test_entropy  s    i##D))yy||IIaOOfQnn s++ 	BJJLL*=*EdC*P*PQQQ y}}S!!!$1q25y 1 1A 56t9M9MMNGRZZ\\22222rG   c                     t          j        g d          }d}t          t          j        t	          |                    |           d S )Nr   r   r   r  )r>   r   r   r  r   )r[   alphar  s      rE   test_lnBzTestMultivariateNormal.test_lnB  s@    ##BF4;;//99999rG   c                    t           j                            d          }ddg}t          j        d          }|                    d          dz  dz
  }|                    d          dz  dz
  }t	          j        ||||          }t	          j        |||          }t	          j        |||          }t          j        |ddd	f         |dd	df         fd
          }	t          j        |dd	df         |ddd	f         fd
          }
t	          j        |	||          }t	          j        |
||          }||z   |z
  |z
  }t          ||           d S )N   FYc@Y r   rM   )rj   rN   rM   ri   rN   lower_limit.r   rl   r   )r>   r   r   rV   r   r   concatenater   )r[   r   r   r   r"  r#  cdf1cdf2acdf2bab1ab2cdf2ab1cdf2ab2r  s                 rE    test_cdf_with_lower_limit_arraysz7TestMultivariateNormal.test_cdf_with_lower_limit_arrays  sX   i##$7881vfQiiJJy!!!#a'JJy!!!#a'"&q$CCC#'455#'455naQqSk1S!A#X;7bAAAnaQqSk1S!A#X;7bAAA%)#tS99%)#tS99u}w&0d#####rG   c                    t           j                            d          }|                    d          }|                    d          }||j        z  }|                    d          dz  dz
  }|                    d          dz  dz
  }t	          j        ||||          }t	          ||                              ||          }t          j        t	          j        ||||                    }t          j        t	          ||                              ||                    }	t          ||d           t          ||d           t          |	|d           d S )	Nr  rN   rN   rN   rM   rN   ri   r  -C6?r  )	r>   r   r   r   r   r   r  r   r   )
r[   r   r   r   r"  r#  r  r  cdf3cdf4s
             rE   %test_cdf_with_lower_limit_consistencyz<TestMultivariateNormal.test_cdf_with_lower_limit_consistency  sJ   i##$788zz!}}jj  CEkJJvq 1$JJvq 1$"&q$CCC"4--11!1CCv)0D#1MMMNNv)$44;;A1;MMNNd....d....d......rG   c                    t          j        d          }t          j        d          }g dg dg dg dg}g dg dg dg dg}t          j        g d          }t	          j        ||||          }t          ||d         |z             d S )	NrN   r  rm   r   r   r   r   r   r   r   rl   rl   r   r  r   r>   r   rV   r   r   r   r   )r[   r   r   r#  r"  expected_signsr   s          rE   test_cdf_signsz%TestMultivariateNormal.test_cdf_signs  s    x{{fQiiYY			999iii8YY			999iii8...11!%asBBBSVN233333rG   r   rN   c                    t           j                            d          }|                    ||f          }|j        |z  }|                    |          }t          ||          }|                    dd|f          }|                    |          }t          dg|z  |          }	t          |	j        t           j	         g|z  ||z
            j
        }
t          ||
d	           d S )
N{   r   r   rN   )r  r  r   r   gh㈵>r  )r>   r   r   r   r   r   r   r2   r   r   r   r   )r[   r   r   r"  r   mr   ra   r   dist_icdf_is              rE   test_cdf_vs_cubaturez+TestMultivariateNormal.test_cdf_vs_cubature(  s     i##C((KKdD\K**cAgKKTK"""s333KKBQdWK55hhqkk$1#d(<<<rvgYt^QU;;DU......rG   c                    t          dd          D ]r}t          j        ||fd          }t          j        |d           t	          dg|z  |          }t          |                    dg|z            dd|z   z  d           sd S )	NrM      r  r   r   r  -C6
?r  )r  r>   r   r  r   r   r   )r[   r   r   r   s       rE   test_cdf_knownz%TestMultivariateNormal.test_cdf_known6  s    !RLL 	 	D'4,,,CS"%%%&s4xS999D!T""b4i     		 	rG   r  r   l   >[= l	   HVqKWs.!) c                 j   t           j                            |          }t                              ||          }|j        t           j         k                                    sJ t          dg|z  |j	                  }|
                    |j        |          }t          ||j        d           d S Nr   r   r   r   r   r8  r  )r>   r   r   r   r  r  r   r  r   r  r   r  r   r  r[   r   r   r   caser   cdf_vals          rE   test_cdf_vs_univariatez-TestMultivariateNormal.test_cdf_vs_univariateB  s     i##D))..Dc.BBRVG#((*****"DdjAAA((49#(..t<<<<<<rG      c                 j   t           j                            |          }t                              ||          }|j        t           j         k                                    sJ t          dg|z  |j	                  }|
                    |j        |          }t          ||j        d           d S r;  )r>   r   r   r   r  r  r   r  r   r  r   r  r   r  r>  s          rE   test_cdf_vs_univariate_2z/TestMultivariateNormal.test_cdf_vs_univariate_2M  s     i##D))++3+??RVG#((*****"DdjAAA((49#(..t<<<<<<rG   rj   l	   HVqKWs.!) c                    t           j                            |          }t                              ||          }|j        t           j         k                                    sJ t          dg|z  |j	        dd|j	        j
        d         z            }|                    |j        |          }t          ||j        d           d S )	Nr<  r   T'  )r   r   r`   maxptsr=  r  r  )r>   r   r   rO  rT  r  r   r  r   r  r@   r   r  r   r  r>  s          rE   test_cdf_vs_univariate_singularz6TestMultivariateNormal.test_cdf_vs_univariate_singularX  s    
 i##D))!77Ts7KKRVG#((*****"DdjQU*01A!1D*D
 
 
 ((49#(..t<<<<<<rG   c                    t          j        dt          j        g d          z            }t          j        |          }d}t          j        t          |          5  t          j	        ddg|           d d d            n# 1 swxY w Y   t          j        t          |          5  t          ddg|           d d d            n# 1 swxY w Y   g d}t          j
        |g d|          }t          t          j
        ||          |           t          j
        |g d	|          }t          t          j
        |d|          |           d S )
Nr   rQ   z7`cov` represents a covariance matrix in 3 dimensions...rK   r   )r  r  r  rm   r  r  )r>   ru   r   r-   rT   rR   r
   rS   r   r   r   r   )r[   Pr   r\   ra   rB   s         rE   test_mean_covz$TestMultivariateNormal.test_mean_covh  s   GA+++,, 033
K]:W555 	< 	<'A
;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< ]:W555 	4 	4A
333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 OO!%aJ??(,QJ???EEE!%aJ??(,QzBBBCHHHHHs$   BBB'CC
C
c                     ddg}d}t          j        t          |          5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr   rN   z`x` must be two-dimensional.rK   )rR   r
   rS   r   fit)r[   r  	error_msgs      rE   test_fit_wrong_fit_data_shapez4TestMultivariateNormal.test_fit_wrong_fit_data_shape{  s    1v2	]:Y777 	* 	*#D)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   AAAr   )rN   rh   c                 J   t           j                            d          }|                    d|f          }t          j        |          \  }}t          j        |d          t          j        |j        d          }}t          ||d           t          ||d           d S )	N   @,Q| r  r   r   )ddofV瞯<r  r  )	r>   r   r   r   rM  r   r   r   r   )r[   r   r   ra   mean_estcov_estmean_refcov_refs           rE   test_fit_correctnessz+TestMultivariateNormal.test_fit_correctness  s    i##$455JJSz""/3A66'GAA...qs0C0C0C'(7777u555555rG   c                     t          j        dd          }d}t          j        d          }t          j        |||          \  }}t          ||           t          ||           d S )N)rM   r   rN   r   )fix_meanfix_cov)r>   r   
atleast_2dr   rM  r   )r[   r  
mean_fixed	cov_fixedr   r   s         rE   test_fit_both_parameters_fixedz5TestMultivariateNormal.test_fit_both_parameters_fixed  so    wvq!!
M"%%	'+D:4=? ? ?	cT:&&&S)$$$$$rG   rZ  r  rN   c                     d}t          j        t          |          5  t          j        t          j        d          |           d d d            d S # 1 swxY w Y   d S )Nzd`fix_mean` must be a one-dimensional array the same length as the dimensionality of the vectors `x`.rK   rM   rZ  rR   r
   rS   r   rM  r>   rV   )r[   rZ  r  s      rE   "test_fit_fix_mean_input_validationz9TestMultivariateNormal.test_fit_fix_mean_input_validation  s    C]:S111 	B 	B#BF1IIAAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B   )AAAr[  r  )rN   rM   )rj   rj   c                     d}t          j        t          |          5  t          j        t          j        d          |           d d d            d S # 1 swxY w Y   d S )Nzn`fix_cov` must be a two-dimensional square array of same side length as the dimensionality of the vectors `x`.rK   rN   r[  rc  )r[   r[  r  s      rE   +test_fit_fix_cov_input_validation_dimensionzBTestMultivariateNormal.test_fit_fix_cov_input_validation_dimension  s     ]:S111 	@ 	@#BF1IIw????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@re  c                     d}t          j        t          |          5  t          j        ddgddgg          }t          j        t          j        d          |           d d d            d S # 1 swxY w Y   d S )Nz2`fix_cov` must be symmetric positive semidefinite.rK   r   r   r  rM   rg  )rR   r
   rS   r>   r   r   rM  rV   )r[   rN  r[  s      rE   *test_fit_fix_cov_not_positive_semidefinitezATestMultivariateNormal.test_fit_fix_cov_not_positive_semidefinite  s    H	]:Y777 	@ 	@hR2s)455G#BF1IIw????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   AA..A25A2c                     t           j                            d          }|                    d          }|                    d          }t          j        ||j                  }t          j        ||d|          }t          j        |          \  }}t          j        |||          	                                }t          j        ||          \  }	}
t          |	|           t          j        ||	|
          	                                }||k     sJ |                    d          }dt          j        ||j                  z  }|
|z   }t          j        ||	|          	                                }||k     sJ d S )	NrQ  rN   r"  r  r   r   r   r   r   rb  :0yE>)r>   r   r   r  r   r   r   rM  r   r   r   )r[   r   r  r{   r   samples	mean_freecov_free	logp_freemean_fixcov_fixlogp_fixr2  cov_perturbedlogp_perturbeds                  rE   test_fit_fix_meanz(TestMultivariateNormal.test_fit_fix_mean  s   i##$455jjmmJJvfQnn%)s#7:< < <15g>>	8'.wY3;= = ==@SUU 	/3GcJJJ'Xs###&-gH29; ; ;;>355 	 )#### JJv26!QS>>!!-4W:B9FH H H 8;suu 	 ((((((rG   c                    t           j                            d          }|                    d          }|                    d          }t          j        ||j                  }t          j        ||d|          }t          j        |          \  }}t          j        |||          	                                }t          j        ||          \  }	}
t          |	t          j        |d	                     t          |
|           t          j        ||	|
          	                                }||k     sJ |	d
|                    d          z  z   }t          j        |||
          	                                }||k     sJ d S )NrQ  rN   r"  r  rl  r   rg  r   r   rm  )r>   r   r   r  r   r   r   rM  r   r   r   r   )r[   r   r  r{   r   rn  ro  rp  rq  rr  rs  rt  mean_perturbedrv  s                 rE   test_fit_fix_covz'TestMultivariateNormal.test_fit_fix_cov  s   i##$455jjmmJJvfQnn%)s/2F F F15g>>	8'.wY3;= = ==@SUU 	/3GSIII'XrwwQ777888Wc"""&-gH29; ; ;;>355 	 )#### "D3::a==$88-4W:H9@B B B 8;suu 	 ((((((rG   N)8r   r   r   rh  rn  ru  r|  r  r  r  r  r  r  r  r  r  r  rR   r   r   r>   rV   r.   from_diagonalr  r  r  r  r  r  r  r  r  r	  r  r  r   r'  r.  slowr5  r9  r  rA  rD  rH  rK  rO  rX  r_  r   rd  rh  rj  rw  rz  r   rG   rE   r`  r`  !  s       O O O" " "6( ( (( ( (( ( (( ( (	? 	? 	?26 26 26h0 0 0,7 7 70E E E0     A A A2B B B [BF1II$J$aV,,	
 ; ; ;: : :4- - -1 1 1- - -) ) )&>1 >1 >1@% % %* * *"9 9 9"3 3 3$: : :$ $ $(/ / /$	4 	4 	4 [[VaV,,
/ 
/ -, 
/
 
 
 [VUU1b\\22[Vj2T%UVV= = WV 32= [VUU1b\\22[Vj2T%UVV= = WV 32= [VUU1b\\22[Vj2T%UVV= = WV 32=I I I&* * * [UF++6 6 ,+6% % % [Z("(6*:*:*2"(5//*; < <B B< <B [Y%)1&)9)9)1&)9)9); < <@ @< <@@ @ @) ) )8) ) ) ) )rG   r`  c            	          e Zd Zej                            dei feddifg          ej                            ddg          ej                            ddgddgg          ej                            d	d
dg          ej                            dd
dg          d                                                             Zej                            deeg          d             Z	ej                            deeg          d             Z
dS )TestMarginalzdist,kwargsdfrj   r   rN   r   r   rl   frozenTFr   c                 x   t           j                            d          }|                    |          }|                    ||f          }	|	|	j        z  }
|r |t
          k    rt          j        d           n|rt          j	        |
          }
t           j                            dt          |          f          } |||
fi |}|r+|                    |          }|                    |          }n% |j        |||
fi |}|                    |          }t          ||||          }t          ||           d S )Nɫz6`multivariate_t` does not accept a `Covariance` objectrj   )r>   r   r   r   r   r$   rR   r   r-   rT   r   marginalr   r   r   )r[   r   r   r   r  r   rD   r   r  r{   r  ra   r   YrA   rB   s                   rE   test_marginal_distributionz'TestMarginal.test_marginal_distribution  sG    i##I..!!&)) 011AC 	7$.00KPQQQQ 	7/66E I%%q#j//&:;;De&&v&& 	

:&&A%%((CCj#u????A%%((C1fj!44S!!!!!rG   r   c                    t           j                            d          }|                    d          }|                    d          }||j        z  } |||          }d}t          j        t          |          5  |                    d           d d d            n# 1 swxY w Y   t          j        t          |          5  |                    g d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  |                    dd	g           d d d            n# 1 swxY w Y   t          j        t          |          5  |                    d
dgg           d d d            n# 1 swxY w Y   d}t          j        t          |          5  |                    ddg           d d d            d S # 1 swxY w Y   d S )Nr  rN   r"  zDimensions \[3\] are invalid .*rK   )r   r   rM   rN   z,All elements of `dimensions` must be unique.rM   rl   r   r   z*Elements of `dimensions` must be integers.r]         @	r>   r   r   r   r   rR   r
   rS   r  )r[   r   r   r   r{   r   r   r  s           rE   test_marginal_input_validationz+TestMarginal.test_marginal_input_validation  s   i##I..""1%%''!#gDsOO0]:S111 	 	JJqMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]:S111 	% 	%JJ|||$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% >]:S111 	  	 JJ2w	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  ]:S111 	! 	!JJAx   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! <]:S111 	# 	#JJSz"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#sZ   =BB#&B#C))C-0C-D55D9<D9F  FF(GGGc                 Z   t           j                            d          }|                    d          }|                    d          }||j        z  } |||          }d}t          j        t          |          5  |                    g            d d d            d S # 1 swxY w Y   d S )Nr  rN   r"  z"Cannot marginalize all dimensions.rK   r  )r[   r   r   r  r{   r  r   r  s           rE   test_marginal_special_casesz(TestMarginal.test_marginal_special_cases  s    i##I..!!!$$''ACDe3]:S111 	 	JJrNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   =B  B$'B$N)r   r   r   rR   r   r   r   r$   r  r  r  r   rG   rE   r~  r~    sT       [].A2-F.<tQi-H-J K K[Xs++[\QC"a>::[Xe}55[\D%=99" " :9 65 ;: ,+K K"4 [V&9>%JKK# # LK#4 [V&9>%JKK
 
 LK
 
 
rG   r~  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestMatrixNormalc           
      \   d}d}t          j        ||fd          }dt          j        |          z  t          j        ||fd          z   }dt          j        |          z  t          j        ||fd          z   }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
          j
        ||t          j        ||f                     t          |t
          j
        |t          j        ||f          |           t          |t
          ||t          j        ||f                     t          |t
          |t          j        ||f          |           d S )Nrj   rN   r   r  ffffff?rh   rj   rN   r  )r>   r   re  rf  rS   r   r   r   r   r  r   rU   )r[   num_rowsnum_colsr   r   Vr  s          rE   test_bad_inputzTestMatrixNormal.test_bad_input/  s   GXh'--"+h'''"'8X2F*L*LL"+h'''"'8X2F*L*LL 	j-'1B1BCCCj-BHRLL!DDDj-Arx||DDDj-Aq999j-Aq999j-a;;;I!a*BGXx$899	; 	; 	;a*(H!566	; 	; 	; 	a1bgx6J.K.KLLLa27Hh3G+H+H!LLLLLrG   c                    d}d}t          j        ||fd          }dt          j        |          z  t          j        ||fd          z   }dt          j        |          z  t          j        ||fd          z   }t          j        ||f          }t          j        |df          }t          j        d|f          }t          j        |          }	t          j        |          }
t          j        d          }t	          t          j        |||          j        ||f           t	          t          j        |          j        ||f           t	          t          j        |	          j        |df           t	          t          j        |
          j        d|f           t	          t          j        ||          j        ||f           t	          t          j        ||          j        ||f           t	          t          j        ||          j        ||f           t	          t          |          j        |	           t	          t          |          j	        |
           t	          t          |	          j
        |           t	          t          |	          j	        |           t	          t          |
          j
        |           t	          t          |
          j        |           t	          t          ||          j	        |
           t	          t          ||          j        |	           t	          t          ||          j
        |           d S )Nrj   rN   r   r  r  r   r   rowcovcolcovr   )r  )r  )r   r  )r   r  )r  r  )r>   r   re  r   r   r   r   r@   r  r  r   )r[   r  r  r   r   r  ZZrZcIrIcI1s               rE   test_default_inputsz$TestMatrixNormal.test_default_inputsI  s:   GXh'--"+h'''"'8X2F*L*LL"+h'''"'8X2F*L*LLHh)**Xxm$$Xq(m$$[""[""[^^]&AaBBBH)	+ 	+ 	+]&A...4)	+ 	+ 	+]&a0006]	$ 	$ 	$]&a0006]	$ 	$ 	$]&Aa888>)	+ 	+ 	+]&Aa888>)	+ 	+ 	+]&a:::@)	+ 	+ 	+ 	]***12666]***12666]!,,,12666]!,,,3R888]!,,,12666]!,,,3R888]!444;R@@@]!444;R@@@]!A666;Q?????rG   c                 (   d}d}t          j        ||fd          }t          j        |d          }d}t          j        |d          }d}t          j        |          }t          j        |          }	t          t	          |||          j        d|z             t          t	          |||          j        d|	z             t          t	          |||          j        d|z             t          t	          |||          j        d|	z             d S )Nrj   rN   r   r   r   r  )r>   r   re  r   r   r  r  )
r[   r  r  r   UvUsVvVsr  r  s
             rE   test_covariance_expansionz*TestMatrixNormal.test_covariance_expansionp  s*   GXx(#..WXs##WXs##[""[""]"R@@@GV	 	 	]"R@@@GV	 	 	]"R@@@GV	 	 	]"R@@@GV	 	 	 	 	rG   c                    t          dd          D ]m}t          dd          D ]X}t          j        ||fd          }dt          j        |          z  t          j        ||fd          z   }dt          j        |          z  t          j        ||fd          z   }t	          |||          }|                    d          }t	          j        |||d	          }t          ||           |                    d          }	|                    |	          }
t	          j        |	|||          }t          |
|           |                    |	          }t	          j        |	|||          }t          ||           Zod S )
Nr   rh   r   r  r  r  rj  r   )r   r  r  r   )	r  r>   r   re  r   r   r   r   r   )r[   r  r  r   r   r  r  rvs1rvs2r   pdf1pdf2logpdf1logpdf2s                 rE   test_frozen_matrix_normalz*TestMatrixNormal.test_frozen_matrix_normal  s   q 	/ 	/A1QZZ / /GQqE3''"+a..(27Aa5#+>+>>"+a..(27Aa5#+>+>>&AaBBBzztz44$(a!6:< < <T4(((JJDJ11zz!}}$(1QGGGT4((( --**'.qq1MMMWg....)/	/ 	/rG   c                    t          dd          D ]}t          dd          D ]}t          j        ||fd          }dt          j        |          z  t          j        ||fd          z   }dt          j        |          z  t          j        ||fd          z   }t	          |||          }|                    d          }|                    |          }|                    |          }	|                                }
|j	        
                                }|j	        
                                }t          j        ||          }t          j        |||	          }t          j        |||	          }t          j        ||	          }t          ||d
           t          |	|d
           t          |
|           d S )Nr   rh   r   r  r  r  rj  r   r   r  r  )r  r>   r   re  r   r   r   r   r   r   flattenkronr   r   )r[   r  r  r   r   r  r  r   r  r  entropy1vecXvecMr   r  r  entropy2s                    rE   test_matches_multivariatez*TestMatrixNormal.test_matches_multivariate  s    q 	4 	4A1QZZ 4 4GQqE3''"+a..(27Aa5#+>+>>"+a..(27Aa5#+>+>>&AaBBBJJDJ11zz!}} --**!>>++s{{}}s{{}}gall*.t$CHHH-4T#NNN.6DcJJJd7777u====(3333)4	4 	4rG   c           	      X   d}d}t          j        ||fd          }dt          j        |          z  t          j        ||fd          z   }dt          j        |          z  t          j        ||fd          z   }d}t          |||          }|                    |d	          }|                    |d
	          }	t          j        |t           j        d d d d d d f         |	t           j        d d d d d d f         fd          }
t          |
j        d|||f           |	                    |
          }t          |j        d|f           t          d          D ]M}t          |          D ];}t          j	        |
||f         |||          }t          ||||f         d           <Nd S )Nrj   rN   r   r  r  r  r  rj  r     r   r   rM   r  )r>   r   re  r   r   r  r   r   r@   r   r  r   )r[   r  r  r   r   r  r  r  X1X2r   array_logpdfr  r  separate_logpdfs                  rE   test_array_inputz!TestMatrixNormal.test_array_input  s   GXh'--"+h'''"'8X2F*L*LL"+h'''"'8X2F*L*LLAa:::ZZQTZ22ZZQTZ22NBrz!!!AAAaaa/0BJqqq1114D1EFQOOOQWq!Xx8999}}Q''\'!Q000q 	K 	KA1XX K K"/"6q1vA>?#K #K #Kac1BEJJJJK	K 	KrG   c                    d}d}t          j        ||fd          }dt          j        |          z  t          j        ||fd          z   }dt          j        |          z  t          j        ||fd          z   }d}t          |||          }|                    |d	          }t          j        |d
          }	t          |	|d           t          j        |                    ||z  |          j	                  }
t          |
|d           t          j        t          j
        |dd                              ||z  |          j	                  }t          ||d           d S )Nrj   rN   r   r  r    r  rj  r   r   r   r   r  r   rM   )r>   r   re  r   r   r   r   r   reshaper   swapaxes)r[   r  r  r   r   r  r  r  r   sample_meansample_colcovsample_rowcovs               rE   test_momentszTestMatrixNormal.test_moments  sb   GXh'--"+h'''"'8X2F*L*LL"+h'''"'8X2F*L*LLAa:::JJADJ11gaQ'''QS1111qyy8H==?@@qs3333r{1Qq119989(
8 M  MMNP Pqs333333rG   c           	      f   t          j        t          j        ddgddgg          t          j        ddgddgg          t          j        ddgddgg          t          j                            d          d	          }t          j        d
dgddggddgddggg          }t          ||           d S )Nr   rM   rN   rj   rl   rh   r  r   )r   r  r  r   r   g6?gǀgcϿ@g"'@gI2͖@g^jy%@gDn3@g|\3@)r   r   r>   r   r   r   r   )r[   r  expecteds      rE   test_sampleszTestMatrixNormal.test_samples  s     "Aq6Aq6*++8aWr1g.//8aVaW-....q11
 
 
 8!23!124!23!1245
 
 	)))))rG   N)r   r   r   r  r  r  r  r  r  r  r  r   rG   rE   r  r  -  s        M M M4%@ %@ %@N  ,/ / /04 4 44K K K.4 4 4,* * * * *rG   r  c                      e Zd Zd Zd Zd Zej                            d e	dd                    ej                            d e	dd                    d                         Z
d	 Zed
ej        dej        fd            Zedej        dej        defd            Zedej        dej        fd            Zd Zd Zd Zd Zej                            dddg          d             ZdS )TestMatrixTc           	         d}d}d}t          j        ||fd          }dt          j        |          z  t          j        ||fd          z   }dt          j        |          z  t          j        ||fd          z   }t          j        t
          d          5  t          d	
           d d d            n# 1 swxY w Y   t          j        t
          d          5  t          t          j        d                     d d d            n# 1 swxY w Y   t          j        t
          d          5  t          t          j        d                     d d d            n# 1 swxY w Y   t          j        t
          d          5  t          t          j        d                     d d d            n# 1 swxY w Y   t          j        t
          d          5  t          t          j        d                     d d d            n# 1 swxY w Y   t          j        t
          d          5  t          t          j        d                     d d d            n# 1 swxY w Y   t          j        t
          d          5  t          t          j        d                     d d d            n# 1 swxY w Y   t          j        t
          d          5  t          t          j        d                     d d d            n# 1 swxY w Y   t          j        t
          d          5  t          t          j        d                     d d d            n# 1 swxY w Y   t          j        t
          d          5  t          ||           d d d            n# 1 swxY w Y   t          j        t
          d          5  t          ||           d d d            n# 1 swxY w Y   t          j        t
          d          5  t          j	        t          j        ||f          |            d d d            n# 1 swxY w Y   t          j        t           j
        j        d!          5  t          j        ||t          j        ||f          |           d d d            n# 1 swxY w Y   t          j        t           j
        j        d!          5  t          j        |t          j        ||f          ||           d d d            n# 1 swxY w Y   t          j        t           j
        j        d"          5  t          ||t          j        ||f          |           d d d            n# 1 swxY w Y   t          j        t           j
        j        d"          5  t          |t          j        ||f          ||           d d d            d S # 1 swxY w Y   d S )#Nrj   rN   rh   r   r  r  z$Degrees of freedom must be positive.rK   r   r  zArray `mean` must be 2D.r  r  zArray `mean` has invalid shape.)rj   rN   r   z%Array `row_spread` has invalid shape.r   r   
row_spreadz2Array `row_spread` must be a scalar or a 2D array.rQ   z"Array `row_spread` must be square.r   rM   z%Array `col_spread` has invalid shape.
col_spreadz2Array `col_spread` must be a scalar or a 2D array.z"Array `col_spread` must be square.zAArrays `mean` and `row_spread` must have the same number of rows.r   r  zDArrays `mean` and `col_spread` must have the same number of columns.r   r  zIThe shape of array `X` is not conformal with the distribution parameters.)r   r   z82-th leading minor of the array is not positive definitezUWhen `allow_singular is False`, the input matrix must be symmetric positive definite.)r>   r   re  rR   r
   rS   r,   r   rU   r   r   r  r   )r[   r  r  r  r   r   r  s          rE   r  zTestMatrixT.test_bad_input  s	   GXx(#.."+h'''"'8X2F*L*LL"+h'''"'8X2F*L*LL ]:-STTT 	 	NNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]:-GHHH 	/ 	/"(9--....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ ]:-NOOO 	/ 	/"(9--....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ ]:-TUUU 	1 	10000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 ]R
 
 
 	4 	4 	 2 23333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4
 ]:-QRRR 	1 	10000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 ]:-TUUU 	1 	10000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 ]R
 
 
 	4 	4 	 2 23333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4
 ]:-QRRR 	1 	10000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 ]
 
 
 	+ 	+
 !****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ ]
 
 
 	+ 	+
 !****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ ]+
 
 
 	C 	C
 L28Xx$899BBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C ]I!L
 
 
 	B 	B LArw(';<<bAAA		B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B ]I!L
 
 
 	B 	B LBGXx$8991bAAA		B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B ]I!+
 
 
 	> 	>
 Q27Hh#788"===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> ]I!+
 
 
 	> 	>
 Q8 455q"===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   B44B8;B8#D		DD/#EE"%E"#F33F7:F7#HHH.#II!$I!#J22J69J6#LLL-#MM #M N  N$'N$O$$O(+O(
+QQQ1,R))R-0R-,TTT'U44U8;U8$'WWWc                    d}d}d}t          j        ||fd          }dt          j        |          z  t          j        ||fd          z   }dt          j        |          z  t          j        ||fd          z   }t          j        ||f          }t          j        |df          }t          j        d|f          }	t          j        |          }
t          j        |          }t          j        d          }d}t	          t          j        ||||          j        ||f           t	          t          j        |	          j        ||f           t	          t          j        |
          j        |df           t	          t          j        |          j        d|f           t	          t          j        ||          j        ||f           t	          t          j        ||          j        ||f           t	          t          j        ||          j        ||f           t	          t                      j        |           t	          t          |	          j	        |
           t	          t          |	          j
        |           t	          t          |
          j        |           t	          t          |
          j
        |           t	          t          |          j        |	           t	          t          |          j	        |           t	          t          ||          j
        |           t	          t          ||          j	        |
           t	          t          |||          j        |           d S )Nrj   rN   rh   r   r  r  r   r   r  r  r  r  r  r  r  r  )r  r  )r  r  r  )r>   r   re  r   r   r,   r   r@   r  r  r  r   )r[   r  r  r  r   r   r  r  r  r  r  r  r  	dfdefaults                 rE   r  zTestMatrixT.test_default_inputsX  s7   GXx(#.."+h'''"'8X2F*L*LL"+h'''"'8X2F*L*LLHh)**Xxm$$Xq(m$$[""[""[^^	LaA!CCCIx 	
 	
 	
 	X\q)))/(H1EFFFX\Q///5!}EEEX\Q///58}EEEX\qQ777=(?STTTX\qQ777=(?STTTLA!444:Xx<P	
 	
 	
 	XZZ]I...X1%%%0"555X1%%%0"555X+++0"555X+++6;;;X+++0"555X+++6;;;X1333>CCCX1333>CCCXqR@@@EqIIIIIrG   c                 4   d}d}d}t          j        ||fd          }t          j        |d          }d}t          j        |d          }d}t          j        |          }	t          j        |          }
t          t	          ||||          j        d|	z             t          t	          ||||          j        d|
z             t          t	          ||||          j        d|	z             t          t	          ||||          j        d|
z             d S )Nrj   rN   r   r   r   r   r  )r>   r   re  r   r,   r  r  )r[   r  r  r  r   r  r  r  r  r  r  s              rE   r  z%TestMatrixT.test_covariance_expansion  sA   GXx(#..WXs##WXs##[""[""!rbAAALcTVh	
 	
 	
 	!rbAAALcTVh	
 	
 	
 	!rbAAALcTVh	
 	
 	
 	!rbAAALcTVh	
 	
 	
 	
 	
rG   r  r   rj   r  c                    t          j        ||fd          }dt          j        |          z  t          j        ||fd          z   }dt          j        |          z  t          j        ||fd          z   }||z   }t          ||||          }|                    d          }t          j        ||||d          }	t          ||	           |                    d          }
|                    |
          }t          j        |
||||          }t          ||           |                    |
          }t          j        |
||||          }t          ||           d S )Nr   r  r  r  rj  r   )r   r  r  r  r   )r>   r   re  r,   r   r   r   r   )r[   r  r  r   r   r  r  r  r  r  r   r  r  r  r  s                  rE   test_frozen_matrix_tz TestMatrixT.test_frozen_matrix_t  sY    GQFC  "+a.. 27Aq63#7#77"+a.. 27Aq63#7#77UqQ1DDDzztz,,|qQ2D
 
 
 	T4   JJDJ))zz!}}|AA!bIIIT4   --""/!!aBOOOWg&&&&&rG   c           	      d   d}d}t          j        ||fd          }dt          j        |          z  t          j        ||fd          z   }dt          j        |          z  t          j        ||fd          z   }d}d}t          ||||          }|                    |d	
          }	|                    |d
          }
t          j        |	t           j        d d d d d d f         |
t           j        d d d d d d f         fd          }t          |j        d|||f           |	                    |          }|j        }t          |d|f           t          d          D ]N}t          |          D ]<}t          j	        |||f         ||||          }t          ||||f         d           =Od S )Nrj   rN   r   r  r  r   r  r  rj  r   r  r   r   rM   r  )r>   r   re  r,   r   r  r   r   r@   r   r  r   )r[   r  r  r   r   r  r  r  r  r  r  r   r  logpdf_shaper  r  r  s                    rE   r  zTestMatrixT.test_array_input  s   GXx(#.."+h'''"'8X2F*L*LL"+h'''"'8X2F*L*LLqQ1DDDZZQTZ22ZZQTZ22NBrz111aaa23R
AAAqqq!!!8K5LMTUVVVQWq!Xx8999}}Q''#)\Aq6***q 	L 	LA1XX L L"*/adG!aB# # #  ad1CUKKKK	L	L 	LrG   vec1vec2c                     t           j                            | |z
            dz  }t           j                            |           dz  t           j                            |          dz  z   }||z  S )NrM   )r>   r   r   )r  r  	numeratordenominators       rE   relative_errorzTestMatrixT.relative_error  sY    INN4$;//14	innT**a/")..2F2F!2KK;&&rG   mat_truemat_estreturnc                 X   t          | d          }t          |d          }t          j        |j                  dk    st          j        |j                  dk    rt          j        S t          j        |j        | z            }|j        |j        z
  }||z   t          |           z
  dz  S )NFr_   r   rM   )r   r>   r  r   r   tracer  r   )r  r  mat_true_psdmat_est_psd
trace_termlog_detratios         rE   matrix_divergencezTestMatrixT.matrix_divergence  s    HU;;;75999F;'((A--26,:O3P3PTU3U3U6MXk.9::
"+l.CC\)CMM9Q>>rG   a_matc                 \    | j         dk    sJ | j                            | j        f          S )z
        For an (m,n) array `a_mat` the output `vec(a_mat)` is an (m*n, 1)
        array formed by stacking the columns of `a_mat` in the order in
        which they occur in `a_mat`.
        rM   )r   r   r  r   )r  s    rE   veczTestMatrixT.vec  s+     zQw
}---rG   c                     d}d}d}t          j        ||fd          }dt          j        |          z  t          j        ||fd          z   }dt          j        |          z  t          j        ||fd          z   }d}d}t          ||||	          }	|	                    |d
          }
                     ||
                    d                    }t          |d|           t          j        ||          |dz
  z  }t          j	        t          j
         fd|
D                       d          }                     ||          }t          |d|           dS )a*  
        Gupta and Nagar (2000) Theorem 4.3.1 (p.135)
        --------------------------------------------
        The covariance of the vectorized matrix variate t-distribution equals
        $ (V \otimes U) / (\text{df} - 2)$, where $\otimes$
        denotes the usual Kronecker product.
        rh   rj   rN   r   r  r  rF  r   r  *   r   r   r   r  rM   c                 :    g | ]}                     |          S r   )r  ).0ra   r[   s     rE   
<listcomp>z,TestMatrixT.test_moments.<locals>.<listcomp>  s#    &>&>&>qtxx{{&>&>&>rG   F)rowvarN)r>   r   re  r,   r   r  r   rF   r  r   r   r  )r[   r  r  r  r   r   r  r  r  r  r   relerrcov_vec_truecov_vec_rvskls   `              rE   r  zTestMatrixT.test_moments  sd    GXx(#.."+h'''"'8X2F*L*LL"+h'''"'8X2F*L*LLqQ1DDDJJABJ//$$QA77VQT****wq!}}Q/fRX&>&>&>&>A&>&>&>??NNN##L+>>R&&&&&&rG   c                    d}t          j        g dg dg          }t          j        ddgddgg          }t          j        g dg dg dg          }d	}t          j        g d
g dgg dg dgg dg dgg dg dgg dg dgg dg dgg dg dgg dg dgg dg dgg dg dgg
          }t          j        g d          }t          j        |||||          }t	          |||            d!S )"u  
        Test values generated from Julia.

        Dockerfile
        ----------
        FROM julia:1.11.5
        RUN julia -e 'using Pkg; Pkg.add("Distributions"); Pkg.add("PDMats")'
        WORKDIR /usr/src

        Commands
        --------
        using DelimitedFiles
        using Distributions
        using PDMats
        using Random
        Random.seed!(42)
        ν = 5
        M = [1 2 3; 4 5 6]
        Σ = PDMats.PDMat([1 0.5; 0.5 1])
        Ω = PDMats.PDMat([1 0.3 0.2; 0.3 1 0.4; 0.2 0.4 1])
        dist = MatrixTDist(ν, M, Σ, Ω)
        samples = rand(dist, 10)
        pdfs = [pdf(dist, s) for s in samples]
        rh   rQ   r  r   r  r   r   r   r   r   皙?r   r  r   r  )gF=X/?g24@goT}@)gqZH@@gbϵ@gԀ+@)g}?g
3)@g{
@)gdb,@gal@g7pќ@)g2!'?g-Z,?gR`:@)gU53@gްM@gNu:N@)gκ?g/h@gN7@)gQd@gNH@gV׷@)g+]?g]j @g~d\@)gn_@g;r<oU@g@)gt?g?gQ@)g@gF:j.@gs
@)g<2?gg?g0t@)gL:@gBC@g#AH:@)go>?g^V|?g&*Ss@)g\3g@gMn?W@g@)g-f
?gp>;F0?g=El @)g"e}@gRW;@gb@)gA۽?gj @gl<@)gs 8@g-X@gǶ@)
gO2?g귾?gs?gf^m?gf呲?gًD?gS1?g_?gC ]?gC' ӡ?r  r  Nr>   r   r,   r   r   )	r[   r  r   r   r  r  	samples_jpdfs_jpdfs_pys	            rE   test_pdf_against_juliaz"TestMatrixT.test_pdf_against_julia  s   4 Hiii+,,Hq#ha)**Hmmm]]]MMMBCCH NMMMMM
 NMMMMM
 NMMMMM
 NMMMMM
 NMMMMM
 NMMMMM
 NMMMMM
 NMMMMM
 NMMMMM
 NMMMMMK)+
 +
	Z   
 
 ,yqQ1QSTTTd333333rG   c                    d}t          j        g dg dg          }t          j        ddgddgg          }t          j        g dg dg dg          }d	}t          j        g d
g dgg dg dgg dg dgg dg dgg dg dgg dg dgg dg dgg dg dgg dg dgg dg dgg
          }t          j        g d          }t          j        |||||          }t	          |||            d!S )"a  
        Test values generated from Mathematica 13.0.0 for Linux x86 (64-bit)
        Release ID 13.0.0.0 (7522564, 2021120311723), Patch Level 0

        mu={{1,2,3},{4,5,6}};
        sigma={{1,0.5},{0.5,1}};
        omega={{1,0.3,0.2},{0.3,1,0.4},{0.2,0.4,1}};
        df=5;
        sampleSize=10;
        SeedRandom[42];
        dist=MatrixTDistribution[mu,sigma,omega,df];
        samples=SetPrecision[RandomVariate[dist,sampleSize],15];
        pdfs=SetPrecision[PDF[dist,#]&/@samples,15];
        rh   rQ   r  r   r  r  r  r  r  )gz?gr	_@gJ@)g]r@gyE3@g@)g(NJ2?g!A5@gNfA@@)go]M@gn}@gP@)gm?gT, @gG6}@@)gs>U@g๭@gO@)gK1?gR]i;@gr=u@)g^~@g:Y@g#b4@)g @?g{/	@g3Oң@)gCʶ@gR'A@gX^]@)g`Zj?gn-@g @)g`De@g̷@g^|s9@)gM_n* @gq5)D?g0@)g}[K@g^Nfi@g1X@)g6h&?g!,,@gMWx@)gBeuy@g5q@g<@)gx,(.?gԯؠGn @g	<@)gPud@g\@g"m@)gsV?g%egS?gOąqF
@)gkW0@g)HP@gT4@)
g*?gVwxs?g@^`!?gxM?g|Cد?gK(jϛ?g=zh?g,Nv?gU=	Dh?gioq!ƾ?r  r  Nr  )	r[   r  r   r   r  r  	samples_mpdfs_mr  s	            rE   test_pdf_against_mathematicaz(TestMatrixT.test_pdf_against_mathematicah  s     Hiii+,,Hq#ha)**Hmmm]]]MMMBCCH NMMMMM
 NMMMMM
 MLLMMM
 MLLLLL
 NMMMMM
 NMMMMM
 NMMLLL
 NMMLLL
 NMMLLL
 NMMMMMK)+
 +
	Z   
 
 ,yqQ1QSTTTd333333rG   c                    d}d}d}t          j        ||fd          }dt          j        |          z  t          j        ||fd          z   }dt          j        |          z  t          j        ||fd          z   }d}d}t          ||||	          }	|	                    |d
          }
|
                    d          }t          |j        |||	          }|                    |d
          }|                    d          }t          |||           t          |j        ||           t          ||j        |           t          |j        ||           d S )Nrh   rj   rN   r   r  r  rF  皙?r  r  r   r   r  )r>   r   re  r,   r   r   r   r   )r[   r  r  r  r   r   r  r  r  r  r   r2  frozenTXTmTs                  rE   r  zTestMatrixT.test_samples  s_   GXx(#.."+h'''"'8X2F*L*LL"+h'''"'8X2F*L*LL
 qQ1DDDJJABJ//FF1IIaBGGG[[ab[11WWQZZ 	14((((Rd++++24d++++Rd++++++rG   
shape_caserowcolc                 "   d}d}|dk    r)d}d}d}t          j        g dg dg dg          }||z  }n(d}d}t          j        g dg dg dg          }d}||z  }t          j        ||fd	          }	t          |	|||
          }
t	          |	                                ||          }|
                    dd          }|
                    |          }|                    |                                          }t          |||           dS )a8  
        Gupta and Nagar (2000) p.133f
        When the number of rows or the number of columns equals 1 the
        matrix t reduces to the multivariate t. But, the matrix t
        is parameterized by raw 2nd moments whereas the multivariate t is
        parameterized by a covariance (raw 2nd central moment normalized by df).
        We can see the difference by comparing the author's notation
            $t_p(n, \omega, \mathbf{\mu}, \Sigma)$
        for a matrix t with a single column
        to the formula (4.1.2) for the PDF of the multivariate t.
        ư>rh   r  r   rN   r  r  r  r   r  r  r@   r  r  r   r  N)	r>   r   r   r,   r$   r   r   r   r   )r[   r  r  r  r  r  r  r  r@   r   t_matt_mvtr   t_mat_logpdft_mvt_logpdfs                  rE   test_against_multivariate_tz'TestMatrixT.test_against_multivariate_t  s8    HHJ===---"OPPJOEEHH===---"OPPJJOEGXx(#..zjR
 
 
 199;;eCCCII12I..||A||AIIKK00l>>>>>>rG   N)r   r   r   r  r  r  rR   r   r   r  r  r  staticmethodr>   rJ  r  rK  r  r  r  r  r  r  r  r   rG   rE   r  r    s       \> \> \>|&J &J &JP
 
 
6 [S%%1++..[S%%1++..' ' /. /.'2L L L4 'RZ 'rz ' ' ' \'
 ?BJ ? ? ? ? ? \? .2: ."* . . . \.' ' ':_4 _4 _4BU4 U4 U4n, , ,B [\E5>::&? &? ;:&? &? &?rG   r  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestDirichletc           	         t           j                            d          }|                    dd          }|                    dd|          }t          |          }t          |                                t          j        |                     t          |                                t          j        |                     t          |	                                t          j	        |                     d}t          |          D ]}|                    dd|          }|t          j        |          z  }t          |                    |d d                   t          j        |d d         |                     t          |                    |d d                   t          j        |d d         |                     d S Nr  r       &.>r  r  rl   )r>   r   r   integersr   r   r   varr   r   r  r   r   r   r[   r   r   r  r*  	num_testsr  ra   s           rE   test_frozen_dirichletz#TestDirichlet.test_frozen_dirichlet  su   i##D))LLBFC++eQUUWWimE22333QVVXXy~e44555QYY[[)"3E":":;;;	y!! 	L 	LAFC++ANAq"v	afe(D(DEEE!CRC&))9+;AcrcFE+J+JKKKK		L 	LrG   c                 <   t           j                            d          }t          j        g 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 )Nr  r   r        @rk   r   )rk   rN   rl   )r>   r   r   r   r   r   r@   rf  rS   r   r   r   r[   r   r  ra   s       rE   "test_numpy_rvs_shape_compatibilityz0TestDirichlet.test_numpy_rvs_shape_compatibility  s    i##D))))MM%aM((QWf%%%j)-E:::j)"2Au===ac5!!!ac#2#h&&&e$$$SbS5)))))rG   c                 .   t           j                            d          }g d}|                    t          j        d|          d          j        }t          t          t          j        ||           t          t          t          j	        ||           d S )Nr  )r   r   r&  r  rk   r   
r>   r   r   r   maximumr   rf  rS   r   r   r'  s       rE   test_alpha_with_zerosz#TestDirichlet.test_alpha_with_zeros*  sw    i##D))MM"*T511M::<j)-E:::j)"2Au=====rG   c                 .   t           j                            d          }g d}|                    t          j        d|          d          j        }t          t          t          j        ||           t          t          t          j	        ||           d S )Nr  )r   g       r&  r  rk   r   r*  r'  s       rE    test_alpha_with_negative_entriesz.TestDirichlet.test_alpha_with_negative_entries2  sy    i##D))   MM"*T511M::<j)-E:::j)"2Au=====rG   c                    t          j        g d          }t          j        g d          }t          j        ||           t          j        ||           t          j        g d          }t          t          j        ||          d           t          t          j        ||          t          j        d                     d S )Nr   r  r&        @r   r   r   r  )r   r   r   r   ri   )r>   r   r   r   r   r   rq  r[   r  ra   s      rE   test_data_with_zerosz"TestDirichlet.test_data_with_zeros:  s    ---..H)))**aE"""---..IM!U33Q777I,Q66q		BBBBBrG   c                     t          j        g d          }t          j        g d          }t          t          t          j        ||           t          t          t          j        ||           d S )N)r   r  r&  r1  r2  r>   r   rf  rS   r   r   r   r3  s      rE   $test_data_with_zeros_and_small_alphaz2TestDirichlet.test_data_with_zeros_and_small_alphaC  a    ---..H)))**j)-E:::j)"2Au=====rG   c                     t          j        g d          }t          j        g d          }t          t          t          j        ||           t          t          t          j        ||           d S )Nr0  )r   r\  r   r  r6  r3  s      rE   test_data_with_negative_entriesz-TestDirichlet.test_data_with_negative_entriesI  sa    ---..H***++j)-E:::j)"2Au=====rG   c                     t          j        g d          }t          j        g d          }t          t          t          j        ||           t          t          t          j        ||           d S )Nr0  )r   r]  r   r  r6  r3  s      rE    test_data_with_too_large_entriesz.TestDirichlet.test_data_with_too_large_entriesO  r8  rG   c                     t          j        g d          }t          j        dd          }t          t          t
          j        ||           t          t          t
          j        ||           d S )Nr%  )rM   rk   rk   g$I$I?r>   r   r   rf  rS   r   r   r   r3  s      rE   test_data_too_deep_cz"TestDirichlet.test_data_too_deep_cU  sY    ))GIv&&j)-E:::j)"2Au=====rG   c                     t          j        ddgddgg          }t          j        dd          }t          t          t
          j        ||           t          t          t
          j        ||           d S )Nr   r  r&  r1  )rM   rM   rk         ?r>  r3  s      rE   test_alpha_too_deepz!TestDirichlet.test_alpha_too_deep[  sb    3*sCj122GIu%%j)-E:::j)"2Au=====rG   c                     t          j        g d          }t          j        dd          }t          j        ||           t          j        ||           d S )Nr%  rN   rk   UUUUUU?)r>   r   r   r   r   r   r3  s      rE   test_alpha_correct_depthz&TestDirichlet.test_alpha_correct_deptha  sQ    ))GFE""aE"""""rG   c                     t          j        g d          }t          j        dd          }t          t          t
          j        ||           t          t          t
          j        ||           d S )Nr%  rD  r  r>  r3  s      rE   test_non_simplex_dataz#TestDirichlet.test_non_simplex_datag  sY    ))GFE""j)-E:::j)"2Au=====rG   c                     t          j        g d          }t          j        dd          }t          t          t
          j        ||           t          t          t
          j        ||           d S )Nr0  )rM   rk   r  r>  r3  s      rE   test_data_vector_too_shortz(TestDirichlet.test_data_vector_too_shortm  \    ---..GFE""j)-E:::j)"2Au=====rG   c                     t          j        g d          }t          j        dd          }t          t          t
          j        ||           t          t          t
          j        ||           d S )Nr0  )rh   rk   r   r>  r3  s      rE   test_data_vector_too_longz'TestDirichlet.test_data_vector_too_longs  rK  rG   c                 B   t          j        g d          }t          |          }g d}g d}g dg dg dg}t          |                                |           t          |                                |           t          |                                |           d S )N)r   皙?r   r  r  r   )UUUUUU?{Gz?Q?)rQ  )rT  rR  O贁N)rU  rV  rS  )r>   r   r   r   r   r   r   )r[   r  r*  expected_meanexpected_varexpected_covs         rE   test_mean_var_covzTestDirichlet.test_mean_var_covy  s     ((e'---......///
 	"!&&((M:::!!%%''<888!!%%''<88888rG   c                    t          j        dg          }t          |          }t          |                                j        d           t          |                                j        d           t          |                    dg          j        d           t          |                    dg          j        d           d S )Nr   r   r   )	r>   r   r   r   r   r   r   r   r   )r[   r  r*  s      rE   rn  z TestDirichlet.test_scalar_values  s    #e 	QVVXX]A&&&QUUWW\1%%%QUUB4[[%q)))QXXrd^^(!,,,,,rG   c                    t           j                            d          }|                    dd          }|                    dd|          }t          |          }d}t          |          D ]n}|                    dd|          }|t          j        |          z  }t          |	                    |d d                   |	                    |                     od S r  )
r>   r   r   r  r   r   r  r   r   r   r!  s           rE    test_K_and_K_minus_1_calls_equalz.TestDirichlet.test_K_and_K_minus_1_calls_equal  s    i##D))LLBFC++e	y!! 	9 	9AFC++ANAafquuQxx8888	9 	9rG   c                 b   t           j                            d          }|                    dd          }|                    dd|          }t          |          }d}d}d }t          |          D ]}t          |          D ]K}	|                    dd|          }
|
t          j        |
          z  }
|t          j        ||
f          }I|
}L|	                    |j
                  }d }|D ]1}|	                    |          }|t          j        ||          }/|}2t          ||           d S )Nr  r   r  r  r  r  rh   )r>   r   r   r  r   r   r  r   vstackr   r   appendr   )r[   r   r   r  r*  r"  num_multiplexmr  r2  ra   rmrsxsr  s                  rE   test_multiple_entry_callsz'TestDirichlet.test_multiple_entry_calls  s@   i##D))LLBFC++e	y!! 	. 	.A<((  KKQ//RVAYY>B7++BBBBrtBB  EE"II>2q))BBBB%b"----!	. 	.rG   c                    t           j                            d          }|                    ddd          }t	          |          }t          |d         |d                   }d}t          |          D ]g}|                    ddd          }|t          j        |          z  }t          |	                    |          |	                    |g                     ht          |
                                |
                                d                    t          |                                |                                d                    d S )Nr  r  r  rM   r   r   r  )r>   r   r   r   r   r   r  r   r   r   r   r   )r[   r   r  r*  r#  r"  r  ra   s           rE   test_2D_dirichlet_is_betaz'TestDirichlet.test_2D_dirichlet_is_beta  s	   i##D))FC++eq58$$	y!! 	6 	6AFC++ANAa!%%**5555AFFHHaffhhqk222AEEGGQUUWWQZ00000rG   N)r   r   r   r#  r(  r,  r.  r4  r7  r:  r<  r?  rB  rF  rH  rJ  rM  rZ  rn  r]  rf  rh  r   rG   rE   r  r  
  s7       L L L$
* 
* 
*> > >> > >C C C> > >> > >> > >> > >> > ># # #> > >> > >> > >9 9 9$	- 	- 	-9 9 9. . .:1 1 1 1 1rG   r  c                  P   t          j        ddg          } t          j        dgg          }t          t          t          | |           	 t	          | |           d S # t          $ r?}d}t          t          |          d t          |                   |           Y d }~d S d }~ww xY w)Nr   r   zDimension mismatch)r>   r   rf  rS   r   r   strr   )rg  r  r  r  s       rE   ,test_multivariate_normal_dimensions_mismatchrk    s     
3*		BHseWE*12u===
-B&&&&& - - -"SVVISXXI&,,,,,,,,,-s   
A 
B%&4B  B%c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestWishartc                 h   t          j        dd          }ddgt          j        d          t           j        d         t          j        dd          g}|D ]F}t          d|          }t	          |j        |           t	          |j        j        |j                   Gt          j        ddgddgg          }ddgt           j        d         t          j        ddgddgg          g}|D ]F}t          d|          }t	          |j        |           t	          |j        j        |j                   Gt          t          t          dt          j	        d                     t          dt          j	        d                     t          j        dd          }t          t          t          d|           d S )Nr   rM   ndminr   r  r]  rN   )
r>   r   r_r   r   r  r@   rf  rS   rV   )r[   
true_scalescalesr  ws        rE   test_scale_dimensionsz!TestWishart.test_scale_dimensions  s    Xaq)))
CHQKKE!HHQa   
  	: 	:E5!!A*---
(89999 X!u !!u& ' '
 qEE#JHqee  
  	: 	:E5!!A*---
(89999 	j'1bfQii888 	RVAYY !$$$j'1e44444rG   c           
         ddgt          j        d          t           j        d         t          j        dd          t          j        dgd          g}t          dd          }|                    t          j        dd                    }|D ]%}t          |                    |          |           &g dt           j        d         t          j        g dd          g}t          dd          }|                    t          j        g dd                    }|D ]%}t          |                    |          |           &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                    }|                    t          j        ddgddgg          d d d d t           j        f                   }|D ]%}t          |                    |          |           &d S )Nr   rM   ro  rN   rQ   r  r   )r>   r   rq  r   r   r   r   rV   )r[   r   rt  densityra   s        rE   test_quantile_dimensionsz$TestWishart.test_quantile_dimensions	  sQ   
 CHQKKE!HHQa   HaS"""
 AaLL%%!,,,-- 	, 	,Aq7++++ GGE%LHWWWA&&&
 AaLL%%22233 	, 	,Aq7++++
 qEHQKKE#JHqee  Hqee  aa"*n.	
 AbfQii  %%1Q%#$Q%") * **+!!AAAbj.: ; ; 	, 	,Aq7++++	, 	,rG   c           	         d}t          j        t          j        |          dz             }t          j        ||dz
  z  dz            |t          j        |d          <   t          j        |j        |          }g }t          d          D ]}t          j        t          j        |          |dz   dz  z             }t          j        ||dz
  z  dz            |t          j        |d          <   t          j        |j        |          }|                    |           t          j        |          j        }ddt          j	        ddd          fd||fg}|D ]"\  }}}t          ||          }t          |                                t          j        ||                     t          |                                t          j        ||                     t          |                                t          j        ||                     t          |                                t          j        ||                     t          |                    |          t          j        |||                     $d S 	Nrj   r   rM   rl   r  rh   r  r   )r>   ru   rd  tril_indicesr  r   r  r`  r   rA  r   r   r   r   moder   r   )	r[   r   r  r   r  ra   
parametersr  rt  s	            rE   r  zTestWishart.test_frozenB	  s    	#q()),.IcSUmq6H,I,IbocR((()uw&& q 	 	A	#!ax/00A,.IcSUmq6H,I,IAbocR((()qsAAHHQKKKKHQKKM BKR++,N


 ) 	> 	>NRE""A'+b%"8"89997<E#:#:;;;7<E#:#:;;;gob%&@&@AAAq7;q"e#<#<====	> 	>rG   c                    d}d}t          j        |          }d|d<   d|d<   t          ||          }t           j                            d          }t          j        |||          }t           j                            d          }|                    |          }t           j                            d          }|                    d          }t           j        |                    |          |                    |d	z
            |                    |d
z
            f         dz  }	t          j	        |	          }
||
t          j
        |d          <   t           j                            |          }|                    |
          }t          j        ||j                  }t          ||           t          ||           d S )NrN   r  r  rb  r  i r   r   r   rM   rl   r{  )r>   rV   r   r   r  r   r   rq  	chisquareru   r|  r   r   r  r   r   )r[   r   r  r  rt  r   w_rvsfrozen_w_rvscovariances	variancesr{   DDAmanual_w_rvss                 rE   test_wishart_2D_rvszTestWishart.test_wishart_2D_rvsb	  s    sc
c
 B i##F++BC888i##F++uu#u.. i##F++jjaj((EMM"MM"Q$MM"Q$!
 		 GI(3"/#
$
$
$% Iu%%UU1XXvb"$'' 	|,,,l33333rG   c                 (   t           j                            d          }d}d}t          j        |          }t          j        dddt
                    }t          j        ddd          }|D ]"}t          ||          }t          |          }	t          |
                                |	
                                           t          |                                |	                                           t          |                                |	                                           t          |                    |          |	                    |                     |                    ||	          }
|f}d
}t          d|||
           $d S )N^   r   r  rM   r   r   numr   r  r   )r>   r   r   rV   rd  rK  rA  r   r   r   r   r   r   r   r   r   )r[   r   snr   r  df_ranger   r  rt  cr   rC   r  s                rE   test_1D_is_chisquaredz!TestWishart.test_1D_is_chisquared	  sS   
 i##F++s9QAU333KB2&&& 	= 	=BE""ARA AEEGGQUUWW---AFFHHaffhh///AIIKK555 AEE!HHaeeAhh/// %%Rc%22C5DE"64<<<<!	= 	=rG   c                 J   t           j                            d          }d}d}d}t          j        t          j        d          dz             }t          j        d          |t          j        dd          <   t          j        |j        |          }t          j        |df          }|j                            |                              |          	                                }t          ||          }t          ||	          }	t          |                                |	                                           t          |                                |	                                           t          |                                |	                                           t          j        d
dd          }
t          |                    |
          |	                    |
                     |                    ||          }|d|f}d}t'          d|||           d S )Nr  r  r  rj   r   ri   rl   r{  r  r   r  r   r   r  r   )r>   r   r   ru   rd  r|  r  r   rU   r   r   r   r   r   r   r   rA  r   r   r   )r[   r   r  r  r   r  lamdasigma_lamdart  r  r   r   rC   r  s                 rE   test_is_scaled_chisquaredz%TestWishart.test_is_scaled_chisquared	  s   
 i##F++	!Q''*,)A,,boa2&&&'uw&&Q  gkk%((,,U33;;==B$$;''' 	)))!&&((+++		QYY[[111 KB2&&&a!%%((+++ ee#e..1[!vtUC88888rG   N)	r   r   r   ru  rx  r  r  r  r  r   rG   rE   rm  rm    sr        )5 )5 )5V/, /, /,b> > >@*4 *4 *4X= = =>!9 !9 !9 !9 !9rG   rm  c                      e Zd Zd Zd Zd Zej                            dddg          d             Z	d Z
d	 Zej                            ddd
g          d             Zd Zej                            dddg          d             Zd Zej                            ddd
g          d             Zd Zd Zd Zej                            dej        ej        g          d             ZdS )TestMultinomialc                 `   t          j        ddd          }t          |dd           t          j        ddgd	d
dg          }|t          j         k    sJ t          j        d	d	gd	d
dg          }|d	k    sJ t          j        ddgd	ddg          }t          |t          j        d           d S )NrN   rj   rk   r   r  g&Mtyrm  r  rN   rj   r   r   r  ro   )r   logpmfr   r>   r   r  )r[   vals1vals2vals3vals4s        rE   test_logpmfzTestMultinomial.test_logpmf	  s    "5!Z881===="Aq61r2h77"Aq61r2h77zzzz"Aq61r1g66rvD111111rG   c                     t          j        ddd          }t          j        ddd          }t          ||d           t          j        dd	d
          }t          j        dd	d          }t          ||d           d S )Nr  rk   r  rN   r   rm  r  )ri         r   r  ri   r   )r   r  r"   r   pmfr[   val1val2s      rE   test_reduces_binomialz%TestMultinomial.test_reduces_binomial	  s     !&!Z88|Aq#&&d....vr:66yB$$d......rG   c                     dg d}}ddddddd	dd
dd
}|D ].}t          t          j        |||          ||         d           /d S )NrN   )g      ?rA  g      ?g     @?g     ?g      ?g      `?g     ?g      ?g      ?g      ?g      ?)
)r   r   rN   )r   r   rM   )rM   r   r   )rN   r   r   rc  r  rM   r   r   )r   rM   r   r  )r   rN   r   +=r  )r   r   r  )r[   r   rS  r_valsra   s        rE   test_RzTestMultinomial.test_R	  s     $$$1([([([([([	B B
  	M 	MAKOAq!44fQieLLLLL	M 	MrG   r   r   rN   c                 t   d}t          j        t          |          5  t          j                            d          }t          j        |dgdz  dd          }|                    |dgdz  d          }t          ||           d d d            n# 1 swxY w Y   t          j        t          |          5  t          j                            d          }t          j        |dgd	z  dd          }|                    |dgd	z  d          }t          ||           d d d            d S # 1 swxY w Y   d S )
Nz,Some rows of `p` do not sum to 1.0 within...rK   r0  rA  rN   rk   r   r   rh   )	rR   warnsFutureWarningr>   r   r  r   r   r   )r[   r   r\   rndmsc_rvsnp_rvss         rE   test_rvs_npzTestMultinomial.test_rvs_np	  s    A\-w777 	) 	)9((--D _QqqsKKKF%%a$%::F(((		) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)
 \-w777 	) 	)9((--D _QqqsKKKF%%a$%::F(((		) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s%   A(BBB8A(D--D14D1c                    t          j        ddd          }t          |dd           t          j        ddd	          }t          |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           t          j        dt          j                  }t          j        |dd	          }t          |t          j        g t          j                             t          j        ddgdd	          }t          |dd           t          j        g ddg d          }t          |dd           t          j        g ddg d          }|dk    sJ t          j        g ddg d          }|dk    sJ d S )N)rh   rh   r   r   rm  r  r  rk   r  g5
?rN   r   r  rl   	   r  g*7?g<Wƌ?r   rM   r   rj   rM   rN   rN   r   ri   )gUUUUUU?rE  r   gߦ?rm   r  )r   r  r   r>   r   float64r   )	r[   vals0r  r  ra   r  r  vals5vals6s	            rE   test_pmfzTestMultinomial.test_pmf	
  s   a..qt,,,,q(331====1Q%1"a1a&0A BA (* *I 6A?dKKKKHU"*---1h//UBHRrz:::;;;1q(33qt,,,,			1.?.?.?@@~D9999			1.?.?.?@@zzzz			1.?.?.?@@zzzzzzrG   c                    t          j        ddgdddgddgg          }t          |dd	gd
           t          j        ddgddgddg          }t          |ddgd
           t          j        ddgddgggdddg          }t          |ddggd
           t          j        ddgdgdgggddg          }t          |dgdggg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 S )Nr   rM   rN   r   r  r   rO  gv?g~jt?rm  r  rj   r   )r   r  r   )r[   r  r  r  r  r  s         rE   test_pmf_broadcastingz%TestMultinomial.test_pmf_broadcasting$
  sM   ARHr2h+?@@d|$7777AAR99ayt44441a&1a&!1 2ABx@@q	{6666A1#sr2h??$!T::::!Q!AQC5'RHEE4)T::::::rG   rh   c                     t          j        |d          }|dz  dz  | dz  dz  | dz  dz  g| dz  dz  |dz  dz  | dz  dz  g| dz  dz  | dz  dz  |dz  dz  gg}t          ||d           d S )	N)r   r   r  r   rO  r   r  r  rm  r  r   r   r   )r[   r   cov1r  s       rE   test_covzTestMultinomial.test_cov4
  s    q,//2b1"R%(QBrE"H-Br1R47QBrE"H-BrA2b58QrT"W-/ 	d......rG   c                 t   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	
           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	
           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 S )Nrh   r   r  r   rO  g?gܿgrm  r  rj   g
ףp=
?g
ףp=
׿r   r  r  r  gzG?gzGr  g333333r  r[   r  r  cov3cov4cov5cov6s          rE   test_cov_broadcastingz%TestMultinomial.test_cov_broadcasting<
  s   qB8b"X"677tdC[)RIRy+ABd....1vBx00ttSk*c4[4+,FGd....1vR2r(';<<8$x&9:8$x&9:<d......rG   rM   c                 ~    t          j        |ddg          }t          |t          j        |d          d           d S Nr   rO  rm  r  r   r   r   r"   )r[   r   ent0s      rE   r  zTestMultinomial.test_entropyJ
  sA     "1r2h//emAr22>>>>>>rG   c           	      `   t          j        ddgddg          }t          |t          j        dd          t          j        dd          gd           t          j        ddgd	d
gddgg          }t          |t          j        dd	          t          j        dd          g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 S )NrM   rN   r   rO  rm  r  rk   r  r   r  r  r  r  )r[   r  ent1ent2s       rE   test_entropy_broadcastingz)TestMultinomial.test_entropy_broadcastingQ
  sL   "Aq6B844u}Q33U]1b5I5IJ!	# 	# 	# 	# "Aq6RHr2h+?@@u}Q33U]1b5I5IJ!	# 	# 	# 	# "QC!:R2r(/CDD-2..a0D0DE-2..a0D0DEG!	# 	# 	# 	# 	# 	#rG   c                 h    t          j        |ddg          }t          ||dz  |dz  gd           d S r  r   r   r   )r[   r   mean1s      rE   	test_meanzTestMultinomial.test_mean`
  s?     RH--"ad|$777777rG   c                 h    t          j        ddgddg          }t          |ddgddggd	
           d S )Nrh   ri   r   rO  r   r1  g433333?g433333@rm  r  r  )r[   r  s     rE   test_mean_broadcastingz&TestMultinomial.test_mean_broadcastinge
  sD     !Q"b22ttTl;$GGGGGGrG   c                    d}d}g dg dg dg dg dg}t          j        |t           j                  }t          ||          }t	          |                    |          t          j        |||                     t	          |                    |          t          j        |||                     t	          |                                t          j        ||                     d S )	Nr7  )r   r   r   r  r   r   r   r7  r   r   r   rB  r   r   r   r  r   r   r   r  r   r   rM   r  r   )r>   r?   r  r   r   r  r  r   )r[   r   pvalsra   	mn_frozens        rE   r  zTestMultinomial.test_frozeni
  s     ZZ


:::iii			BJq
+++5))		a((+/!Q*F*FGGG	((++[-?1e-L-LMMM	))++[-@E-J-JKKKKKrG   c                 *   d}t           j                            d          }|                    |          }d|d<   |t          j        |          z  }t          j        |          }t          j        |||          }t          j        |          sJ d S )NX   l   iRZY gKH9rl   )r>   r   r   r   rU   r   r  isfinite)r[   r   r   rS  ra   r  s         rE   test_gh_11860zTestMultinomial.test_gh_11860t
  s    
 i##$788JJqMM"	RVAYYGAJJ#Aq!,,{6"""""""rG   r   c                     d}t          j        g d|          }t          j        g d||          }t          j        g d||          }t           j                            ||d           d S )	N   )r   r   r   r   r   r   )r   rM   rh   rk   rj   )ra   r   rS  )r   rM   rj   rh   rk   rS  r  )r>   r?   r   r  testingr   )r[   r   r   rS  res1res2s         rE   test_gh_22565zTestMultinomial.test_gh_22565
  s{     J000>>>A;;;A;;;

""4E":::::rG   N)r   r   r   r  r  r  rR   r   r   r  r  r  r  r  r  r  r  r  r  r  r>   float32r  r  r   rG   rE   r  r  	  s       2 2 2	/ 	/ 	/M M M" [S1a&))) ) *))  6; ; ;  [S1a&))/ / *)// / / [S1a&))? ? *)?# # # [S1a&))8 8 *)8H H H	L 	L 	L# # # [Wrz2:&>??; ; @?; ; ;rG   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestInvwishartc           	         d}t          j        t          j        |          dz             }t          j        ||dz
  z  dz            |t          j        |d          <   t          j        |j        |          }g }t          d          D ]}t          j        t          j        |          |dz   dz  z             }t          j        ||dz
  z  dz            |t          j        |d          <   t          j        |j        |          }|                    |           t          j        |          j        }ddt          j	        ddd          fd||fg}|D ]\  }}}t          ||          }t          |                                t          j        ||                     t          |                                t          j        ||                     t          |                                t          j        ||                     t          |                    |          t          j        |||                     d S rz  )r>   ru   rd  r|  r  r   r  r`  r   rA  r   r   r   r   r}  r   r   )	r[   r   r  r   r  ra   r~  r  iws	            rE   r  zTestInvwishart.test_frozen
  s   
 	#q()),.Ic3q5k!m,D,DbocR((()uw&& q 	 	A	#!ax/00A,.Ic3q5k!m,D,DAbocR((()qsAAHHQKKKKHQKKM BKR++,N


 ) 	E 	ENRB&&B:>"e#<#<===JOB$>$>???JOB$>$>???BFF1IIz~aU'C'CDDDD	E 	ErG   c                 <   t           j                            d          }d}d}t          j        |          }t          j        dddt
                    }t          j        dd	d	
          }|D ],}t          ||          }t          |dz  d          }	t          |
                                |	
                                           t          |                                |	                                           t          |                    |          |	                    |                     |                    ||          }
|dz  ddf}d}t          d|||
           t          |                                |	                                           .d S )Nr  r  r   rh      rM   r   r   r  r  r  r  r   r   r  r   )r>   r   r  rV   rd  rK  rA  r   r   r   r   r   r   r   r   r   )r[   r   r  r   r  r  r   r  r  igr   rC   r  s                rE   test_1D_is_invgammaz"TestInvwishart.test_1D_is_invgamma
  sh   
 i##F++s9QAU333KB2&&& 	8 	8BB&&B"Q$d+++B BFFHHbffhh///BGGIIrwwyy111 BFF1IIrvvayy111 &&bs&33CqD!T?DE":tUC@@@ BJJLL"**,,7777%	8 	8rG   c                    d}d}t          j        |          }d|d<   d|d<   t          ||          }t           j                            d          }t          j        |||          }t           j                            d          }|                    |          }t           j                            d          }|                    d          }t           j        |                    |d	z
            |                    |d
z
            |                    |          f         dz  }	t          j	        |	          }
||
t          j
        |d          <   t           j                            |          }t           j                            |
j        |j                  j        }t          j        ||j                  }t!          ||           t!          ||           d S )NrN   r  r  rb  r  iHG	 r   r   rM   r   rl   r{  )r>   rV   r   r   r  r   r   rq  r  ru   r|  r   r   solver   r  r   )r[   r   r  r  r  r   iw_rvsfrozen_iw_rvsr  r  r{   r  Lmanual_iw_rvss                 rE   test_invwishart_2D_rvsz%TestInvwishart.test_invwishart_2D_rvs
  s    sc
c
 E"" i##F++E<<<i##F++C00 i##F++jjaj((EMM"Q$MM"Q$MM"
 		 GI(3"/#
$
$
$% Iu%%IOOAC%%'q!# 	...}55555rG   c                 v   d}d}dD ]0}t          j        t          j        |          dz             }t          j        ||dz
  z  dz            |t          j        |d          <   t          j        |j        |          }t          ||          }|                                }|                                }||z  dz  }|	                    |d	
          }	|	                    d          }
||dz   z  dz  }d|z  }t          j        d|dz  z
            }t          j        |
|z
  |z  d|          sJ 2dS )z1Test that sample mean consistent with known mean.r   N  r   rh   r   rM   rl   r{  r  rj  r   r   r   r  r  N)r>   ru   rd  r|  r  r   r   r   r   r   r   ppfr  )r[   r  sample_sizer   r  r   	Xmean_expXvar_exp	Xmean_stdr   	Xmean_estntests	fail_ratemax_diffs                 rE   test_sample_meanzTestInvwishart.test_sample_mean
  sR     	 	CGBIcNNQ.//E02	#q/A:M0N0NE"/#,,,-F57E**Eb%((D		IxxzzH!K/#5Ik==AAI#']A%FvIxIM 122H;Y&)3      !	 	rG   c                 z   t          j        g dg dg dg dg          }t          j        g dg dg dg dg          }d	}t          j        |||          }|j        d
         }t           j                            |          \  }}t           j                            |          \  }}t           j                            ||          }	|dz  |z  ||z  dz  t          j        d          z  z
  t          |dz  |          z
  ||z   dz   dz  |z  z
  d|	
                                z  z
  }
t          ||
           dS )zRegression test for gh-8844.)rM   r   r   r  )r   rM   r  r  )r   r  rN   r   )r  r  r   rM   )r  rk   rN   r   )rk   r  rh   r   )rN   rh   r  rM   )r   r   rM   r  ri   r   rM   r   r  N)r>   r   r   r   r@   r   r  r  rq  r8   r  r   )r[   r   PsinuprobrS  siglogdetX	logdetPsir   r  s              rE   test_logpdf_4x4zTestInvwishart.test_logpdf_4x4  sa   Hnnn&&&$nn&&&( ) ) h$$$& ' '  B,,GAJy((++W**3//YIOOAs##T9$!tAvrvayy()"2a4++, Avz1nW,- !''))m	$
 	h'''''rG   N)r   r   r   r  r  r  r
  r  r   rG   rE   r  r  
  se        E E E@8 8 8B,6 ,6 ,6\  6( ( ( ( (rG   r  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestSpecialOrthoGroupc                     t          j        dt          j                            d                    }t          j        g dg dg dg          }t          ||           d S )NrN     r   )gDbgMPFh?g,׿)g7?g++?guC))g?gg]Qg^ɿ)r   r   r>   r   r   r   r   )r[   ra   r  s      rE   test_reproducibilityz*TestSpecialOrthoGroup.test_reproducibility2  ss    #ABI4I4I#4N4NOOO8CCCBBBCCCE F F 	"!X.....rG   c                    t          t          t          j        d            t          t          t          j        d           t          t          t          j        d           t          t          t          j        d           d S Nr  rl   rl  )rf  rS   r   r   r[   s    rE   test_invalid_dimz&TestSpecialOrthoGroup.test_invalid_dim9  s`    j"5"94@@@j"5"96BBBj"5"92>>>j"5"93?????rG   c                     d}t          |          }|                    d          }t          j        |d          }t          ||           d S )Nrk   rj  r   )r   r   r   )r[   r   r  r  r  s        rE   test_frozen_matrixz(TestSpecialOrthoGroup.test_frozen_matrix?  sR    $S))zztz,,"&s>>>T4     rG   c                    d t          dd          D             }d |D             }t          |dgdz  d           |D ]G}t          t          j        ||j                  t          j        |j        d	                              Hd S )
Nc                 Z    g | ](}t          d           D ]}t          j        |          )S r`  )r  r   r   r  r   r  s      rE   r  z<TestSpecialOrthoGroup.test_det_and_ortho.<locals>.<listcomp>I  sN     ! ! !Qxx! ! "%c** ! ! ! !rG   rM   r7  c                 L    g | ]!}t           j                            |          "S r   r>   r   r  r  ra   s     rE   r  z<TestSpecialOrthoGroup.test_det_and_ortho.<locals>.<listcomp>N  s&    ---Q	a  ---rG   r      vIh%<=r  r   )r  r   r   r>   r  r   rV   r@   )r[   re  detsra   s       rE   test_det_and_orthoz(TestSpecialOrthoGroup.test_det_and_orthoH  s    ! !q! ! !
 .-"---rd2gE2222  	: 	:A%bfQnn&(fQWQZ&8&8: : : :	: 	:rG   c                    d}d}d}t          j        ||t          j                            d                    dfdD             fdD             }fd	|D             }t          |gt          |          z  |           d S )
Nrh   r  r	  i  r   r  r  )r   rj   r#  c                 X    i | ]$\  ft          fd D                       %S )c                 ,    g | ]}|                  S r   r   r  ra   ecers     rE   r  z>TestSpecialOrthoGroup.test_haar.<locals>.<dictcomp>.<listcomp>m  !    !8!8!8!B%)!8!8!8rG   sortedr  r-  r.  re  s    @@rE   
<dictcomp>z3TestSpecialOrthoGroup.test_haar.<locals>.<dictcomp>m  E    LLLfb"R&!8!8!8!8!8R!8!8!899LLLrG   c                 .    g | ]}D ]}||k    ||fS r   r   r  e0e1elss      rE   r  z3TestSpecialOrthoGroup.test_haar.<locals>.<listcomp>n  .    AAAb#AABb"brG   c                 Z    g | ]'\  }}t          |         |                   d          (S r  r    r  p0p1projs      rE   r  z3TestSpecialOrthoGroup.test_haar.<locals>.<listcomp>o  4    JJJRHT"XtBx003JJJrG   )r   r   r>   r   r   r   r   )	r[   r   rn  ks_probpairsks_testsr9  r@  re  s	         @@@rE   	test_haarzTestSpecialOrthoGroup.test_haarV  s      $gBI,A,A#,F,F
 
 
 +LLLLLLLAAAACAAAJJJJEJJJ7)CJJ.99999rG   c                 R    t          t          j        dd          dd           d S )Nr   r  r   r%  r  )r   r   r   r  s    rE   test_one_by_onez%TestSpecialOrthoGroup.test_one_by_oner  s0     	+/===quMMMMMMrG   c                 X    t          t          j        dd          j        d           d S Nr   rj   r   )rj   r   r   r   r   r   r@   r  s    rE   test_zero_by_zeroz'TestSpecialOrthoGroup.test_zero_by_zerow  ,    (,QQ777=yIIIIIrG   N)
r   r   r   r  r  r  r'  rE  rG  rK  r   rG   rE   r  r  1  s        / / /@ @ @! ! !: : :: : :8N N N
J J J J JrG   r  c                       e Zd Zd Zd Zd Zd Zej        	                    dg d          d             Z
d Zd	 Zd
 Zej        j        d             ZdS )TestOrthoGroupc                 t   d}t           j                            |          }t          j        d|          }t          j        d|          }t          t           j                            |          d           t          j        g dg dg dg          }t          ||           t          ||           d S )Nr  rN   r   rl   )gm?gӠh"gEo?)g~7ݲC?g>Ŀg0J_ٿ)gݱ&ǿg 6qrg`X|[)
r>   r   r  r   r   r   r   r  r   r   )r[   r   r   ra   r   r  s         rE   r  z#TestOrthoGroup.test_reproducibility|  s    i##D))OAC000_QT222BIMM!,,b1118<<<======? @ @ 	"!X...!"h/////rG   c                    t          t          t          j        d            t          t          t          j        d           t          t          t          j        d           t          t          t          j        d           d S r  )rf  rS   r   r   r  s    rE   r  zTestOrthoGroup.test_invalid_dim  sX    j+/4888j+/6:::j+/2666j+/377777rG   c                    d}t          |          }t          |d          }|                    d          }t          j        |d          }|                    d          }t          ||           t          ||           d S )Nrk   rj  r   r   r   r   )r   r   r   r[   r   r  frozen_seedr  r  rvs3s          rE   r  z!TestOrthoGroup.test_frozen_matrix  s    S!!!#D111zztz,,s666A&&T4   T4     rG   c           	         d t          dd          D             }t          j        d |D                       }t          t          j        |          t          j        |j                  d           |D ]L}|D ]G}t          t          j        ||j	                  t          j
        |j        d                              HMd S )Nc                 F    g | ]fd t          d          D             S )c                 8    g | ]}t          j                  S r   )r   r   )r  r  r   s     rE   r  z@TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>.<listcomp>  s3     # # # s## # # #rG   r  )r  )r  r   s    @rE   r  z5TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>  sP     & & &# # # #b		# # # & & &rG   rM   r7  c                 &    g | ]}d  |D             S )c                 L    g | ]!}t           j                            |          "S r   r"  r#  s     rE   r  z@TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>.<listcomp>  s&    777q")--**777rG   r   )r  xxs     rE   r  z5TestOrthoGroup.test_det_and_ortho.<locals>.<listcomp>  s'    EEEB77B777EEErG   r%  r  r   )r  r>   r   r   fabsrU   r@   r   r  r   rV   )r[   re  r&  rZ  ra   s        rE   r'  z!TestOrthoGroup.test_det_and_ortho  s    & &q& & &
 xEE"EEEFFrwtz':':GGGG  	> 	>B > >)"&AC..*,&*<*<> > > >>	> 	>rG   r   )rM   rh   r  r  c                    t           j                            d          }t          |          }|                    d|          }t
          j                            |          }t          j        |dk              }t          |          }t          j        ||          }|                    d          \  }	}
|	dcxk     r|
k     sn J d S )	Nl   <`Lr )r   r  r   r   ffffff?confidence_levelr  )r>   r   r   r   r   r   r   r  r   r   r0   	binomtestproportion_ci)r[   r   r   r   r   r&  r  r   rA   r  r  s              rE   test_det_distribution_gh18272z,TestOrthoGroup.test_det_distribution_gh18272  s     i##$788s###hhDsh33|$$F4!8IIoa##%%t%<<	TS4rG   c                   	 d}d}d}t           j                            d          }t          j        |||          	d	fdD             fdD             }fd	|D             }t          |gt          |          z  |           d S )
Nrh   r  r	  i  r   r)  c                 X    i | ]$\  ft          fd D                       %S )c                 ,    g | ]}|                  S r   r   r,  s     rE   r  z7TestOrthoGroup.test_haar.<locals>.<dictcomp>.<listcomp>  r/  rG   r0  r2  s    @@rE   r3  z,TestOrthoGroup.test_haar.<locals>.<dictcomp>  r4  rG   c                 .    g | ]}D ]}||k    ||fS r   r   r6  s      rE   r  z,TestOrthoGroup.test_haar.<locals>.<listcomp>  r:  rG   c                 Z    g | ]'\  }}t          |         |                   d          (S r  r<  r=  s      rE   r  z,TestOrthoGroup.test_haar.<locals>.<listcomp>  rA  rG   )r>   r   r  r   r   r   r   )
r[   r   rn  rB  r   rC  rD  r9  r@  re  s
          @@@rE   rE  zTestOrthoGroup.test_haar  s     i##C((_SwSAAA +LLLLLLLAAAACAAAJJJJEJJJ7)CJJ.99999rG   c                    d}t          j        |dt          j                            d                    }t          t          j        |          dd           t          j        |dk              }t          |          }t          j
        ||          }|                    d	          \  }}|d
cxk     r|k     sn J d S )Nr   r  r  r   r%  r  r   r]  r^  r  )r   r   r>   r   r   r   rm  r   r   r0   r`  ra  )r[   r   re  r  r   rA   r  r  s           rE   rG  zTestOrthoGroup.test_one_by_one  s    _St"):O:OPS:T:TUUUr

AE2222F26NNGGoa##%%t%<<	TS4rG   c                 X    t          t          j        dd          j        d           d S rI  rJ  r  s    rE   rK  z TestOrthoGroup.test_zero_by_zero  rL  rG   c                 B   t           j                            d          d	fd	}t          dd          D ]fd
fd	} ||          } |t          j        j        j                  }t          j                            ||          \  }}t          d|           gd S )Nr  c                     t           j                                                | | f                    \  }}}t          j        ||          S Nr   )r>   r   r   r   r  )r   r   r   _sr   r   s        rE   random_orthoz<TestOrthoGroup.test_pairwise_distances.<locals>.random_ortho  s>    y}}SZZc3ZZ%@%@AAHAr16!Q<<rG   rM   ri   r  r  c                      t          j         fdt          |          D                       }|t           j                            | ||j                  z  }|S )Nc           	      p    g | ]2}t          j                                z
  dz            3S ))r   r   rM   )r>   r   )r  r   r   r   r   s     rE   r  z\TestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statistics.<locals>.<listcomp>  si     " " "  FCCCc:::CCc:::;=>? @ @" " "rG   r   )r>   r   r  r   r   r@   )r   r  epsr0   r   r   s   `   rE   generate_test_statisticszHTestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statistics  sy     " " " " " " #1XX" " "   **C45;*GGGrG   r	  r=   )r  r  )
r>   r   r  r  r   r0   r   r   r    r   )	r[   rn  rr  r  r  _DrS  r   r   s	          @@rE   test_pairwise_distancesz&TestOrthoGroup.test_pairwise_distances  s     i##C((	  	  	  	  	  	  A;; 	& 	&C       0/==H--ek.E.IJJFK((6::EBc1%%%%!	& 	&rG   N)r   r   r   r  r  r  r'  rR   r   r   rb  rE  rG  rK  r|  rt  r   rG   rE   rN  rN  {  s        0 0 08 8 8
! 
! 
!> > > [UNNN33
  
  43
 : : :6	  	  	 J J J [& & & & &rG   rN  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestRandomCorrelationc                     t           j                            d          }d}t          j        ||          }t          j        |d          }t          j        g dg dg dg dg          }t          ||           t          ||           d S )Nr  r  rO  r  rk  r   )r   ѓ2ǿA?Ϳ)ry  r   4($?R}%?)rz  r|  r   qTnƿ)r{  r}  r~  r   )r>   r   r  r   r   r   r   )r[   r   r  ra   r   r  s         rE   r  z*TestRandomCorrelation.test_reproducibility  s    i##C((!"4c:::#Ds;;;8AAA@@@@@@AAAC D D 	"!X...!"h/////rG   c                    t          t          t          j        d            t          t          t          j        d           t          t          t          j        d           t          t          t          j        dg           t          t          t          j        ddgddgg           t          t          t          j        ddg           t          t          t          j        g d           d S )	Ntestrl  r   rM   rN   rj   g      )r   rM   r   )rf  rS   r   r   r  s    rE   test_invalid_eigsz'TestRandomCorrelation.test_invalid_eigs	  s    j"4"8$???j"4"8&AAAj"4"8#>>>j"4"83%@@@j"4"8Aa5!A-HHHj"4"83*EEEj"4"8***EEEEErG   c                 
   d}t          |          }t          |d          }t          j        |d          }|                    d          }|                                }t          ||           t          ||           d S )Nrx  r  r   r   )r   r   r   )r[   r  r  rS  r  r  rT  s          rE   r  z(TestRandomCorrelation.test_frozen_matrix  s    !#D))(C888!%d===zzsz++  T4   T4     rG   c                   
 d 
t           j                            d          
fdt          dd          D             }|                    g d           d |D             }fd|D             }d	 |D             }d
 |D             }t          ||dd           d |D             }t          ||          D ]\  }}t          ||d           |D ]}	t          |	|	j        d           d S )Nc                 ,    | |z  t          |          z  S r=   )r   )r  r  s     rE   r   z3TestRandomCorrelation.test_definition.<locals>.norm&  s    Q3s1vv:rG   r0  c                 P    g | ]"} |                     |                     #S )r   )r   )r  r  r   r   s     rE   r  z9TestRandomCorrelation.test_definition.<locals>.<listcomp>+  s3    BBBQ++,,BBBrG   rM   ri   )rj   r   r   r   c                 4    g | ]}d gt          |          z  S )r   )r   r  r  s     rE   r  z9TestRandomCorrelation.test_definition.<locals>.<listcomp>.  s$    ***SVV***rG   c                 <    g | ]}t          j        |           S )r   )r   r   )r  r  r   s     rE   r  z9TestRandomCorrelation.test_definition.<locals>.<listcomp>/  s*    HHHa $QS999HHHrG   c                 p    g | ]3}t          j        t           j                            |                    4S r   )r>   r[  r   r  r#  s     rE   r  z9TestRandomCorrelation.test_definition.<locals>.<listcomp>5  s0    666a	a(())666rG   c                 6    g | ]}t          j        |          S r   )r>   r,  r  s     rE   r  z9TestRandomCorrelation.test_definition.<locals>.<listcomp>6  s     ///Qbgajj///rG   r%  r  c                 6    g | ]}t          j        |          S r   )r>   ru   r#  s     rE   r  z9TestRandomCorrelation.test_definition.<locals>.<listcomp>:  s     ((((((rG   r  )r>   r   r  r  r`  r   zipr   )r[   r  rU   re  r&  
dets_knowndiagsr"  r#  ra   r   r   s             @@rE   test_definitionz%TestRandomCorrelation.test_definition  sN   	 	 	 i##C((BBBBBeAqkkBBBIII**T***HHHH4HHH 762666//$///
ju5AAAA )(R(((t$$ 	. 	.DAqAqu-----  	0 	0AAqs/////	0 	0rG   c           	         t          j        ddgddggt                    }t          j        |          }t          |t          j        ddgddgg                     t          j        d          5  t          j        ddgddgg          }t          j        ddgdt          j        dd          ggt                    }t          j        |                                          }t          ||j	        
                    |          
                    |                     t          j        d	dgdd
ggt                    }t          j        |                                          }t          ||j	        
                    |          
                    |                     d d d            n# 1 swxY w Y   t          j        ddgddggt                    }t          j        |                                          }t          |d         d           t          j        ddgddggt                    }t          j        |                                          }t          |d         d           d S )Nr   r   r   r   ignore)overrl   gu <7~r  r]  rM   r  gMk   @)r>   r   rK  r   _to_corrr   errstate	nextaftercopyr   r  )r[   r2  r   m0s       rE   test_to_corrz"TestRandomCorrelation.test_to_corrB  sU    HsAhA'u555'**28aVaX$677888
 [h''' 		3 		31a&2q'*++AE1:2<1+=+='>?uMMMB"+BGGII66AAqswwr{{q11222C<%6eDDDB"+BGGII66AAqswwr{{q11222		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 X1v1v&e444'		22#""" X!}q!f-U;;;'		22#"""""s   3D2F11F58F5N)r   r   r   r  r  r  r  r  r   rG   rE   rv  rv    sc        
0 
0 
0F F F
! 
! 
!"0 "0 "0H# # # # #rG   rv  c                   >   e Zd Zej                            dddg          ej                            dg d          d                         Zej                            dg d          d             Zd	 Zej                            dg d
          d             Z	dS )TestUniformDirectionr   r   rN   r   Nr   rh   )rh   rj   c                    t           j                            d          }t          ||          }|                    |          }t          j        |          t          j        |          }}|                    |||          j        }|j        |k    sJ t           j	        
                    |d          }	t          |	d           d S )N   Sid)_i4 r   r   rl   r   r   )r>   r   r   r(   r   r   rV   r   r@   r   r   r   )
r[   r   r   r   uniform_direction_distrn  r   r   expected_shapenormss
             rE   r  z!TestUniformDirection.test_samplesd  s     i##$788!23S!A!A!A(,,T22HSMM26#;;c00s0FFL}....	wR00r"""""rG   )Nr   r  rl  c                     d}t          j        t          |          5  t          j        |           d d d            d S # 1 swxY w Y   d S )NzMDimension of vector must be specified, and must be an integer greater than 0.rK   )rR   r
   rS   r(   r   )r[   r   r\   s      rE   r  z%TestUniformDirection.test_invalid_dimq  s    <]:W555 	' 	'!#&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   A  AAc                 
   d}t          |          }t          |d          }|                    d          }t          j        |d          }|                                }t          ||           t          ||           d S )Nrh   r  r   r   )r(   r   r   rR  s          rE   test_frozen_distributionz-TestUniformDirection.test_frozen_distributionx  s    "3'''#666zzsz++ $Ss;;;  T4   T4     rG   )rM   rh   r  c                 (   t           j                            d          }t          ||          }|                    d          \  }}|||z  |z  z  }|t           j                            |          z  }t          ||z  dd           |                    d          }||z  }||z  }t          j        ||          }	|	t           j	        z  }	|	dt           j	        z  z  }	t                      }
t          |	|
j                  }|j        d	k    sJ d S )
Nl   @9Y sr   rM   r   r   r  r  rF  r	  )r>   r   r   r(   r   r   r   r   arctan2r  r   r!   r   pvalue)r[   r   r   spherical_distv1v2rn  s1s2anglesuniform_distkstest_results               rE   test_uniformz!TestUniformDirection.test_uniform  s   i##$788*3S999###++B
b2gl
binnR   R//// $$%$00r\r\B## 	"%!BE'yyv|'788#d******rG   N)
r   r   r   rR   r   r   r  r  r  r  r   rG   rE   r  r  c  s        [UQF++[V%9%9%9::	# 	# ;: ,+	# [U$:$:$:;;' ' <;'
! 
! 
! [UIII..+ + /.+ + +rG   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestUnitaryGroupc                    t           j                            d          }t          j        d|          }t          j        dd          }t          j        g dg dg dg          }t          ||           t          ||           d S )Nr  rN   r   )y~p?yZ?y뉦?ĭ?y8Z?&4?)yEHξr?8i?ye??+ݓݿyu=ٿB۽'?)yqXQÿ?yN6ҿzܷy! 8l?2W'?)r>   r   r  r   r   r   r   )r[   r   ra   r   r  s        rE   r  z%TestUnitaryGroup.test_reproducibility  s    i##C((ac222qs3338IIIHHHKKKM
 
 	"!X...!"h/////rG   c                    t          t          t          j        d            t          t          t          j        d           t          t          t          j        d           t          t          t          j        d           d S r  )rf  rS   r   r   r  s    rE   r  z!TestUnitaryGroup.test_invalid_dim  s\    j-"3T:::j-"3V<<<j-"3R888j-"3S99999rG   c                    d}t          |          }t          |d          }|                    d          }t          j        |d          }|                    d          }t          ||           t          ||           d S )Nrk   r  r   r   r   r   )r   r   r   rR  s          rE   r  z#TestUnitaryGroup.test_frozen_matrix  s    s###Cc222zzsz++ 3777A&&T4   T4     rG   c                     d t          dd          D             }|D ][}t          t          j        ||                                j                  t          j        |j        d                   d           \d S )Nc                 Z    g | ](}t          d           D ]}t          j        |          )S r`  )r  r   r   r   s      rE   r  z3TestUnitaryGroup.test_unitarity.<locals>.<listcomp>  sN     ! ! !Qxx! ! $$ ! ! ! !rG   rM   r7  r   rS  r  )r  r   r>   r  conjr   rV   r@   )r[   re  ra   s      rE   test_unitarityzTestUnitaryGroup.test_unitarity  s    ! !q! ! !
  	S 	SABF1affhhj1126!'!*3E3EERRRRR	S 	SrG   c           	         dD ]}d}t          j        ||t          j                            d                    }t          j        d |D                       }t          j        |j        |j                  }t          |
                                t          t          j         dt          j        z            j                  }t          |j        dk               d S )Nr   r  r  r   c                 L    g | ]!}t           j                            |          "S r   )r   r   eigvalsr#  s     rE   r  z.TestUnitaryGroup.test_haar.<locals>.<listcomp>  s(    BBB!el22155BBBrG   rM   r	  )r   r   r>   r   r   r_  r  imagrW  r!   ravelr   r  r   r	   r  )r[   r   rn  re  r  ra   rA   s          rE   rE  zTestUnitaryGroup.test_haar  s    
  	' 	'CG"'	0E0Ec0J0J  B 9BBrBBBCCD
49di00AGRUFAbeG$<$<$@AACCJ%&&&&	' 	'rG   c                 X    t          t          j        dd          j        d           d S rI  )r   r   r   r@   r  s    rE   rK  z"TestUnitaryGroup.test_zero_by_zero  s+    ]&qq1117CCCCCrG   N)	r   r   r   r  r  r  r  rE  rK  r   rG   rE   r  r    sv        0 0 0: : :
! 
! 
!S S S' ' '&D D D D DrG   r  c                      e Zd Zddgddgddgddgddgddgddgddgddgddgg
ddgddgddggdg dfg dg d	g d
g dg dgg dg dg dg dgdg dfgZej                            de          d             Zej                            de          d             Zd Z	d Z
ej                            d           ed          d                         Zd Zd Zddd d!dgdd!ggd ddgd!dgdd!ggdfd d!dgdd!ggd!ddgd!dgdd!ggd!fd!d!gd d d!d!gddgddggdfd!d!gd d!d!d!gddgddggd!fd!d!gd!dgdd!ggd d!d!gd!dgdd!ggdfd!d!gd!dgdd!ggd!d!d!gd!dgdd!ggd!fgZej                            d"e          d#             Zd$ddd$gdggdfd$gdgdd$gdggdf ej        d$g           ej        dg          dd$gdggdfgZej                            d"e          d%             Zd& Zd' Zd( Zej                            d)d*d+g          ej                            d,g d-          ej                            d.d/d0ej        g          d1                                     Zd2 Zej                            d,g d3          d4             Zej                            d,g d5          d6             ZdWd8Zd9 Zej                            d,g d:          ej                            d;g d<          ej                            d=d7d>g          d?                                     Z ej        j!        d@             Z"dA Z#dB Z$dC Z%ej                            d,dD          dE             Z&dF Z'ej                            d.g dG          dH             Z(ej                            dIdJ ej)        dd          dKdLfdM ej        dNdgddJgg          dOdPfg          dQ             Z*ej                            dRg dS          dT             Z+dU Z,dV Z-d S )XTestMultivariateTr   rM   rj   rN   rh   r   )
|	ߌ?v
2R?r  g0$H?r  r  gO`?gՒXO?g	ߌ,?g8N8?)gHP?gQI?go_?)g9m4?g=U?gˡE?)g$C?ghs?gǺ?)g!uq?g%C?gS㥛?)gOec?gz,C?g	h"l?)rl   r   2   )r   r  rA  )r  r   r\  )rA  r\  r   r  )gJ#R<g^<gL[<gN=<g`$<zx, loc, shape, df, ansc                 v    t          |||d          }|                    |          }t          ||           d S Nr   r   )r$   r   r   )r[   ra   r  r@   r  ansr   vals           rE   test_pdf_correctnessz&TestMultivariateT.test_pdf_correctness&  s=    c5"1555hhqkk!#s+++++rG   c                     t          |||d          }|                    |          }|                    |          }t          t	          j        |          |           d S r  )r$   r   r   r   r>   rq  )	r[   ra   r  r@   r  r  r   r  r  s	            rE   test_logpdf_correctz%TestMultivariateT.test_logpdf_correct,  sT    c5"1555xx{{{{1~~!"&,,55555rG   c                     g d}t          j        |d          }t          j        |          }t          ||           d S )N)
r  rk   rj   r   r1  r  r   r1  rl   rN   r   r  )r$   r   r%   r   )r[   ra   r  r  s       rE   test_mvt_with_df_one_is_cauchyz0TestMultivariateT.test_mvt_with_df_one_is_cauchy4  sE    --- q)))jmm!#s+++++rG   c                 J   d}t          dddd          }|                    d          }t          |          \  }}||k    sJ t          ddgd	d
gd
d	ggdd          }|                    d          }t          |          \  }}||k                                    sJ d S )Nr   r   r   順 r  r   r   ro   rN   r  rl   r  )r$   r   r&   r  )r[   	P_VAL_MINr   rn  r   rS  s         rE   &test_mvt_with_high_df_is_approx_normalz8TestMultivariateT.test_mvt_with_high_df_is_approx_normal:  s    
 	avA666((('''""1Ir1gR2r(';#%' ' '((('''""1Y##%%&&&&&rG   zuses mockingreasonz'scipy.stats.multivariate_normal._logpdfc                 "   t          ddt          j        d          }t          |t                    sJ t          j        dt          j                   |j        dk    sJ t          j        dt          j                   |j        dk    sJ d S )Nr   r   rk   r  r  rM   )r$   r>   r   r   r   r   
call_countr   )r[   mockr   s      rE   !test_mvt_with_inf_df_calls_normalz3TestMultivariateT.test_mvt_with_inf_df_calls_normalL  s     arvA666$ :;;;;;1((((!####aBF++++!######rG   c                    d}t          j        |          }t          j        |          }d}t          j        |          }t          |||                              |          }t          j        |          sJ t          |||                              |          }t          j        |          sJ d}t           j                            d          }|                    ||f          }t          |||                              |          }|j	        |fk    sJ t          |||                              |          }|j	        |fk    sJ t          t          j        d          t          j        d          d          
                                }t          j        |          sJ d}	t          t          j        d          t          j        d          d          
                    |	          }|j	        |	fk    sJ d S )Nrj         @rk   l   I r   r   )r>   r   rV   r$   r   isscalarr   r   r   r@   r   )
r[   r   r  r@   r  ra   rA   	n_samplesr   r   s
             rE   test_shape_correctnessz(TestMultivariateT.test_shape_correctnessV  s    hsmmsHSMMS%,,0033{3S%,,33A66{3 	i##J//JJ	3'((S%,,0033	i\))))S%,,33A66	i\)))) RXa[["&))Q77;;=={3 RXa[["&))Q77;;;FF	dW$$$$$$rG   c                     t                      }t          |j        dg           t          |j        dgg           |j        dk    sJ d S )Nr   r   r$   r   r  r@   r  )r[   r   s     rE   test_default_argumentsz(TestMultivariateT.test_default_argumentsw  sJ    TXs###TZ1#'''1rG   )NNNr   r   r   )NNrk   r   r   rk   Nrk   z*loc, shape, df, loc_ans, shape_ans, df_ansc                     t          |||          }t          |j        |           t          |j        |           |j        |k    sJ d S )Nr  r  r[   r  r@   r  loc_ans	shape_ansdf_ansr   s           rE   test_default_argsz#TestMultivariateT.test_default_args  sU     #Ur:::TXw'''TZ+++6!!!!!!rG   rl   c                     t          |||          }t          |j        |           t          |j        |           t          |j        |           d S r=   r  r  s           rE   &test_scalar_list_and_ndarray_argumentsz8TestMultivariateT.test_scalar_list_and_ndarray_arguments  sQ     c5"--TXw'''TZ+++TWf%%%%%rG   c           	         ddgg}t          t          t          fi t          |           ddgddgddgg}t          t          t          fi t          ||           t	          j        d          }t	          j        d          }d}t          t          t          fi t          |||           d}t          t          t          fi t          |||           d S )	Nr   )r  rM   rN   )r  r@   rl   r  r   )rf  rS   r$   r%  r>   r   rV   )r[   r  r@   r  s       rE   test_argument_error_handlingz.TestMultivariateT.test_argument_error_handling  s   1vhj$	' 	'	' 	' 	'
 Q!Q!Q(j$	4 	4E222	4 	4 	4
 hqkkq		j$	; 	;Eb999	; 	; 	; j$	; 	;Eb999	; 	; 	; 	; 	;rG   c                 \   t           j                            d          }|                    d          }t          j        d          }t          ||dd          }t          ||dd          }|                    d          }|                    d          }t          ||           d S )Nrj   rN   r   rM   r  r  )r>   r   r  r   rV   r$   r   r   )r[   r   r  r@   r   dist2samples1samples2s           rE   r  z&TestMultivariateT.test_reproducibility  s    i##A&&kkqk!!q		sEaa888sEaa88899"9%%99"9%%Xx(((((rG   c                     t          ddgddgddggdd          }t          t          j        j        t
          fi | d S )Nr   r   F)r  r@   r  r`   )r%  rf  r>   r   r  r$   )r[   rC   s     rE   test_allow_singularz%TestMultivariateT.test_allow_singular  sK    1qeQqE]qOOObi+^DDtDDDDDrG   r   )r  rN   )rh   ri   rj   rN   r   )rM   rN   rj   rh   r  r   r  c                     t          t          j        |          t          j        |          |          }|                    |          }|j        ||fz   k    sJ d S rl  )r$   r>   r   rV   r   r@   )r[   r   r   r  r   r   s         rE   test_rvszTestMultivariateT.test_rvs  sW     bhsmmRVC[["==hhDh!!yDC7N******rG   c                 "   t          j        d          }t          j        d          }d}g dg dg dg dg}g dg dg dg dg}t          j        g d          }t	          j        |||||          }t          ||d	         |z             d S )
NrN   r  r  rm   r)  r*  r+  r  r   r,  )r[   r   r   r  r#  r"  r-  r   s           rE   r.  z TestMultivariateT.test_cdf_signs  s    x{{fQiiYY			999iii8YY			999iii8...11!%asBAFFFSVN233333rG   )r   rM   rh   c                 0    |                      |           d S r=   cdf_against_mvn_testr[   r   s     rE   $test_cdf_against_multivariate_normalz6TestMultivariateT.test_cdf_against_multivariate_normal  s     	!!#&&&&&rG   )rN   ri   r  c                 2    |                      dd           d S )NrN   Tr  r  s     rE   -test_cdf_against_multivariate_normal_singularz?TestMultivariateT.test_cdf_against_multivariate_normal_singular  s      	!!!T*****rG   Fc           	      d   t           j                            d          }d}d|                    dd|          z  }t	          ||||          }d|                    dd|          z  t          j        |                    |                    z  }d|                    dd||f          z   |z   }d|                    dd||f          z  |z   }	t          j        	                    |	||d	|d
|          }
t          j
        	                    |	||d
|          }t          |
|d           d S )N   ]J>?a rN   r  ro   r   r   rl   rM   rF  T)r  r  r`   r   )r`   r  Mb@?r  )r>   r   r   r   r   signr   r0   r$   r   r   r   )r[   r   r   r   r   rt  r   r   r"  r#  rA   rB   s               rE   r  z&TestMultivariateT.cdf_against_mvn_test  sB   i##O44B,,, ah773;;r13;///"'#**#*:N:N2O2OOR!S2222T9BC111D8"&&q$16: ' N N'++AtS89 , ; ;St,,,,,,rG   c                 R   t           j                            d          }d}d}|                    dt          j        |                    }d}t
          j                            ||||t           j         |          }t
          j	                            |||t          j        |                    }t
          j
                            ||t          j        |                    }t          ||d	           t          j        t          j        ||z
            d
k              sJ d S )Nr  rM   r   r  )r   r  rN   )r  r   r  r  r  )r>   r   r   r   r  r0   r$   r   r   r/  r   r   r  rm  )	r[   r   r   r   ra   r  rA   rB   	incorrects	            rE   test_cdf_against_univariate_tz/TestMultivariateT.test_cdf_against_univariate_t  s    i##O44JJBbgcllJ33"&&q$RbfW47 ' 9 9gkk!Rrws||44JNN1dBGCLL99	St,,,,vbfS9_--45555555rG   )rM   rN   rh   r  r   )   no l   m, l   sO l   U iOfYl   O_ r   Tc           	         |r|dk    rt          j        d           t          j                            |          }d|                    dd|          z  }t          ||||          }|                    |          }|                    |           }|                    |          }	|                                dz  }
t          j        	                    |	|||
|d	          }t          j
        d
          5  t          d|
|t          j        |z  |	|z
  |          d         }d d d            n# 1 swxY w Y   t          ||dd           t          j        	                    |	|||
||d          }t          j
        d
          5  t          d|
|||z
  |	|z
  |          d         }d d d            n# 1 swxY w Y   t          ||dd           d S )Nr  z4Agreement with qsimvtv is not great in singular caser  ro   rM   r   rh   T)r   r`   r  )invalidr  r   g-C6*?r  r  r  )r  r   r`   r$  )rR   r   r>   r   r   r   r   r0   r$   r   r  r:   r   r   )r[   r   r   r   r   rt  r   r   r"  r#  r  rA   rB   s                rE   test_cdf_against_qsimvtvz*TestMultivariateT.test_cdf_against_qsimvtv  sz   
  	P
**KNOOOi##D))B,,, ah77zz#ZZ__JJsOOZZ\\A "&&q$Rc6: ' < <[*** 	G 	G5"c26!8QXsCCAFC	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	GSt$7777 "&&q$RQ47 ' N N[*** 	G 	G5"c1t8QXsCCAFC	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	GSt$777777s$   :+D11D58D5
!F77F;>F;c           
        	
 d}t           j                            d          }d|                    dd|          z  }t	          |||d          	|                    |          |                    |           }|                    |          }|                                d	z  
t
          j                            |	
||
          }	
fd}t          |||t
          j	        
                    ||                    }t          ||j        d           	
fd}t          ||d         |d         |d         |d         |d         |d                   }t          ||d         d           d S )NrN   l   	!y r  rl   r   r   T)r   rh   )r   r  c                 R    t           j                            | j                  S r=   )r0   r$   r   r   )ra   r   r  r   s    rE   	integrandzITestMultivariateT.test_cdf_against_generic_integrators.<locals>.integrand2  s"    '++ACsB???rG   )r*  r   )qrngr  r  c                  Z    t           j                            | d d d                   S )Nrl   )r0   r$   r   )zyxr   r  r   s    rE   r  zITestMultivariateT.test_cdf_against_generic_integrators.<locals>.integrand8  s*    '++C"ItS"EEErG   r   rM   )r>   r   r   r   r   r0   r$   r   r5   qmcHaltonr   integralr7   )r[   r   r   rt  r"  r#  rA   r  rB   r   r  r   s            @@@rE   $test_cdf_against_generic_integratorsz6TestMultivariateT.test_cdf_against_generic_integrators#  s    i##N33#++b!#+... at<<<zz#ZZ__JJsOOZZ\\A"&&q$Rc34 ' 6 6	@ 	@ 	@ 	@ 	@ 	@ 	@ y!QUY-=-=#-=-N-NOOOS\5555	F 	F 	F 	F 	F 	F 	F i1qtQqT1Q41qtDDSV$//////rG   c                    t           j                            d          }t          j        g dg dg dg          }d}t	          j        ||          }|                    g d|          }d	}t          ||d
           d S )Nl   Ja )go!@S<?^Ss@)r  gRP=@jT0@)r  r  gk`-3@gWK?r@   r  rm   r   g1%?r  r  )r>   r   r   r   r0   r$   r   r   )r[   r   r   r  r   rA   rB   s          rE   test_against_matlabz%TestMultivariateT.test_against_matlab>  s     i##J//h?????????A B B  ##"555hhyyysh33St,,,,,,rG   c                 
   d}t           j                            |          }|                    d          }|                    d          |z   }t          j        d          }|                                }|||f}t           j                            |          }t           j                            |          }	t          j        |d|i}
t          |
                    |          t          j        |g|R d|	i           d S )Nl   2m rN   r   r   r   )	r>   r   r   r   rV   r0   r$   r   r   )r[   r   r   r  ra   r@   r  rC   
rng_frozenrng_unfrozenr   s              rE   r  zTestMultivariateT.test_frozenO  s    i##D))kkqk!!KKQK#%q		ZZ\\UBY**400
y,,T22#T;
;;TXXa[[#'LDLLL|LL	N 	N 	N 	N 	NrG   c                   	
 d}d}t           j                            d                              ||f          }||j        z                      |          
                    ||fz             }                                dz  	t          j                            |
	          }	
fd}t          j        |d|          }t          ||d	d
           d S )Nrj   r#  r  r   rh   r   c                 Z    t          dt          j         | z  | z
            d         S )NrF  r   )r:   r>   r   )ra   r   r  r   r   s    rE   _cdf_1dz2TestMultivariateT.test_vectorized.<locals>._cdf_1dj  s,    E2sRVGAIqvsCCAFFrG   rl   r$  r  r  )	r>   r   r   r   r0   r$   r   apply_along_axisr   )r[   r   r   r{   ra   rA   r  rB   r   r  r   r   s           @@@@rE   test_vectorizedz!TestMultivariateT.test_vectorized^  s   i##O44JJS#JJ''!#gzz#JJqC6z""ZZ\\A"&&q$Rc&JJ	G 	G 	G 	G 	G 	G 	G 	G !'2q11St$777777rG   rD  c                 *   t           j                            d          }t          j                            dgdg|dz
  z  z             }t          j        |                              dg|z  |          }d|dz   z  }t          ||d	           d S )
Nr  r   r  )r  )r@   r   r   r8  r  )
r>   r   r   r   r   toeplitzr0   r$   r   r   )r[   r   r   r{   rA   rB   s         rE   test_against_analyticalz)TestMultivariateT.test_against_analyticalp  s    i##O44L!!QC3%37*;$;!<<"+++//c	/LL37mSt,,,,,,rG   c                     t          j        dd          }t           j        }t          j                            ||          }t          j                            d |          }||k    sJ d S )NrN   r  )r>   rV   r   r0   r$   r   r   )r[   r   r  mvt_entropymvn_entropys        rE   test_entropy_inf_dfz%TestMultivariateT.test_entropy_inf_dfx  sb    fQllV*222DD/77cBBk))))))rG   )r   r  r  c                     t           j                            d|          }t           j                            |          }t	          ||d           d S )Nr   r  r  r%  r  )r0   r$   r   r/  r   )r[   r  r"  	t_entropys       rE   test_entropy_1dz!TestMultivariateT.test_entropy_1d  sM    *222CCGOOrO**	YU;;;;;;rG   zdf, cov, ref, tolr  g}M@r  r  r  gNfh@rm  c                     t          j        d          }t          j        |||          }t	          |                                ||           d S )Nr  r  )r>   r   r0   r$   r   r   )r[   r  r   rB   tolr  mvts          rE   %test_entropy_vs_numerical_integrationz7TestMultivariateT.test_entropy_vs_numerical_integration  sH    
 huoo"3R00s555555rG   zdf, dim, ref, tol))r  r   gDdVW?rS  )r  r   gU?r%  )r  r   g/+?r  )@xDr   Z_2?rS  )}Ô%ITr   r-  rS  )r  r  gzg#.@rS  )r  r  gD:f,@r%  )r,  r  1>`,@rS  )r.  r  r/  rS  )r  r  g8d?b@rS  )r  r  g-YҺa@r  )r,  r  ZGra@rS  )r.  r  r0  rS  c                     t          j        t          j        |          |          }t	          |                                ||           d S )Nr  r  )r0   r$   r>   rV   r   r   )r[   r  r   rB   r)  r*  s         rE   test_extreme_entropyz&TestMultivariateT.test_extreme_entropy  sE    F "<<<s555555rG   c                    t          j        g dg dg dg dg dg          }||j        z  }d}t          j                            ||          }t          d |                                          }t          ||d	
           d}d}t          j                            ||          }t          j                            ||          }	t          ||	d
           d S )N)gQ?g
ףp=
?g\(\߿(\?gGz?)gGzg{GzgQ?r  gQ)gQ?g)\(?gQѿg)\(ܿg(\?)g      gGzgq=
ףpg\(\?g)r4  g{Gzg\(\?g{GzԿg(\?r,  r  r  rS  r  i  i   r  )r>   r   r   r0   r$   r   r   r   )
r[   _Ar   r  mul_t_entropymul_norm_entropydf1df2	_entropy1	_entropy2s
             rE   test_entropy_with_covariancez.TestMultivariateT.test_entropy_with_covariance  s    X+++---,,,,,,,,,
   24i ,44324FF.t===EEGG'7eDDDD (00ss0CC	(00ss0CC		94888888rG   c                    t          j        dddt          j                  }t	          j        ddd          }t          ||           t          j                            d          }|                    d          }|                    d          t          j        d          dz  z   }|j	        |z   }t	          ||          }t          ||t          j                  }|
                    d          }t          |                    |          |                    |                     t          |                    |          |                    |                     d S )	Nr   r  l   18KJ.rN   r"  r   r  r  )r$   r   r>   r   r   r   r   r   rV   r   r   r   )	r[   rA   rB   r   r   r   r   r  ra   s	            rE   test_logpdf_df_inf_gh19930z,TestMultivariateT.test_logpdf_df_inf_gh19930  s   
 #Aq!777!(Aq11S!!! i##L11zz!}}jj  26!99Q;.eckTs333t326::: EE"IIQXXa[[111a!%%((+++++rG   F).r   r   r   	PDF_TESTSrR   r   r   r  r  r  r  thread_unsafer;   r  r  r  DEFAULT_ARGS_TESTSr  r>   r   ARGS_SHAPES_TESTSr  r  r  r  r   r  r.  r  r  r  r   r  r|  r  r  r  r  r   r$  r'  rV   r+  r2  r<  r>  r   rG   rE   r  r    sN        FFFFFFFFFF	
 
A FF	

 	
	
 	
 	
1%P %$$$$$$$$$$$$$$	
 	 %$$%%%%%%	
 	
	
 	
 	
)K@ID [5yAA, , BA,
 [5yAA6 6 BA6, , ,' ' '$ [n55
U455$ $ 65 65$& & &B   	$ 	AA1vAA/?C	AAQFaVaV,<a@
QtaVq!fq!f%5q9
Qq1a&Aq6Aq6"2A6
Q1a&1a&!4!Q1a&1a&1A1E
Q1a&1a&!1q!f1v1v.>B	 [I/1 1# #1 1# 
QB41#"
sAtqcUA&	2$1#B41#: [I.0 0& &0 0&; ; ;2) ) )E E E
 [Vg|%<==[ULLL11[TBBF#344+ + 54 21 >=+

4 
4 
4 [UIII..' ' /.' [UIII..+ + /.+- - - -$6 6 6 [UMMM22[V &J &J &J K K[Z%778 8 87K K 3282 [0 0 04- - -"N N N8 8 8$ [UF++- - ,+-* * * [T<<<00< < 10<& [0!626!Q<<1CUK"HBHsAhB-@$A$A/789 96 6	9 96
 [	
 	
 	
 $6 6% $6(9 9 9<, , , , ,rG   r  c                   :   e Zd Zej                            dddgddgddfddgddgdej         fd	dgddgdej         fddgd
dgdej        fddgddggddgd
dggddgej        ej        gfd	dgd
dgdej        fddgddgdej        fddgddgdej        fddgddgdej        fddgddgdej         fg
          d             Z	d Z
d Zd Zej                            dg ddfg ddfddgdfdgdff          d             Zej                            ddgdgddfddgddgddfddgddggddgddgggddgddgddggdd gdd!ggf ej        g e"           ej        g e"          dg fddgddgddfg d#g d$d%d&fg          d'             Zej                            dddgddgdd(ggddd)gfdgdggdgdggddgd*d+gfdgdgggdgdggddgd*d+ggfdgdggdggggddgd*d+gggfg          d,             Zd- Zd. Zd/ Zd0 Zd1 Zd2 Zd3 Zd4 Zd5 Zd6 Zd7 Zd8S )9TestMultivariateHypergeomzx, m, n, expectedrN   rj   rh   r  rk   gr   r1  r   rM   rr   iirB  r7  rl   ic                 V    t          j        |||          }t          ||d           d S )Nr  r  )r   r  r   r[   ra   r2  r   r  valss         rE   r  z%TestMultivariateHypergeom.test_logpmf  s3    6 &,Q155hT222222rG   c                    t          j        ddgddgd          }t          j        dddd          }t          ||d	
           t          j        ddgddgd          }t          j        dddd          }t          ||d	
           d S )NrN   r   r  rh   rj   )ra   r2  r      )r  r   r   r  rm  r  rk      )r   r  r#   r   r  s      rE   test_reduces_hypergeomz0TestMultivariateHypergeom.test_reduces_hypergeom  s     &)QFr1gCCC}qB!r222d....%)QFr2h"EEE}qB"333d......rG   c                     t          ddgd          }|                    dd          }t          |                    d          |                                d	
           d S )NrN   rh   rj   r2  r   r  r0  r   r   r  r  r   r   r   r   r[   r   r   s      rE   r  z"TestMultivariateHypergeom.test_rvs"  s\     $q!f222ff$Sf11RWWYYT::::::rG   c                     t          ddgddggddg          }|                    dd	          }t          |                    d
          |                                d           d S )NrN   rh   r  rj   r  rO  r  rM   r0  r   r   r  r  rP  rQ  s      rE   test_rvs_broadcastingz/TestMultivariateHypergeom.test_rvs_broadcasting)  sg    #1v2w&7Aq6BBBff)#f66RWWYYT::::::rG   zm, n)r   r   r  r   r   )r   r   r   r   r   c                     t          j        ||          }t          j        |          }|                                }|||dk    <   t          ||           d S )Nr   )r   r   r>   r?   r  r   )r[   r2  r   rA   res_exs        rE   test_rvs_gh16171z*TestMultivariateHypergeom.test_rvs_gh16171.  sS    
 %(A..JqMMqAvS&!!!!!rG   g zl?r  r  gQ?gE|?g
y?r   r  )rh   ri   rk   ri   gzp?c                 V    t          j        |||          }t          ||d           d S Nr  r  r   r  r   rH  s         rE   r  z"TestMultivariateHypergeom.test_pmf9  s3    " &)!Q22hT222222rG   rK  g ?r   r   c                 V    t          j        |||          }t          ||d           d S rY  rZ  rH  s         rE   r  z/TestMultivariateHypergeom.test_pmf_broadcastingM  s3     &)!Q22hT222222rG   c                 p    t          j        g dd          }g dg dg dg}t          ||d           d S )	N)rN   rk   r  r7  rO  )gf_?&BUп疈Cx@ؿ)r]  ggs>d?ZsK)r^  r_  g35?rm  r  r   r   r   )r[   r  r  s      rE   r  z"TestMultivariateHypergeom.test_covZ  sZ    %)JJJ"===6666666668 	d......rG   c                 j   t          j        ddgddggddg          }dd	gd	dggd
dgdd
ggg}t          ||d           t          j        dgdggddg          }dggdggg}t          ||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 S )Nrk   r  r  rK  r  r7  rO  g?gg(\?g(\rm  r  rj   rh   r   g333333?g333333r`  r  s          rE   r  z/TestMultivariateHypergeom.test_cov_broadcastinga  s   %)aVb"X,>1b'JJJ..0d....%)aS1#J1a&AAA"d....%)QFq"g>>>.'"Wf$568d......rG   c                     t          j        ddgd          }t          j        ddd          }t          ||d           d S )	Nr  rh   rj   rO  rK  r   r   r  rm  r  )r   r   r#   r   )r[   var0var1s      rE   test_varz"TestMultivariateHypergeom.test_varp  sL    %)RGq999}rQ"---d......rG   c                    t          j        ddgddg          }t          j        ddgd          }t          j        ddgd          }t          |d         |d           t          |d	         |d           t          j        ddgdd
ggddg          }ddgddgg}t          ||d           t          j        dgdggddg          }dgdgg}t          ||d           d S )Nr  rh   rj   r  rO  r   rm  r  r   r  g̍3eY?gI{?r   )r   r   r   )r[   rd  re  var2var3var4var5var6s           rE   test_var_broadcastingz/TestMultivariateHypergeom.test_var_broadcastingv  s   %)RG1v>>>%)RGq999%)RGq999QD1111QD1111%)b!Wr2h,?Aq6JJJI&8(<=d....%)aS2$KAr7CCCrd|d......rG   c                     t          j        ddgd          }t          j        ddd          }t          |d         |d	           t          j        d
dgd          }ddg}t          ||d	           d S )Nr  rh   rj   rO  rK  rc  r   rm  r  r7  r  g      @r1  )r   r   r#   r   r[   mean0r  r  mean3s        rE   r  z#TestMultivariateHypergeom.test_mean  s    &+r1g;;;qB///a%d3333&+r1g<<<j)u4000000rG   c                 v    t          j        ddgddggddg          }ddgd	d
gg}t          ||d           d S )NrN   rh   r  rj   r  rO  rk  rl  gUUUUUU@gUUUUUU@rm  r  )r   r   r   )r[   rp  r  s      rE   r  z0TestMultivariateHypergeom.test_mean_broadcasting  sW    &+1vAw.?Aq6JJJH%
I'>?u4000000rG   c                 @   t          j        g dd          }t          |g d           t          j        g dd          }t          |t          j        t          j        t          j        g           t          j        g dg dgd          }t          |t          j        t          j        t          j        gg dgd	
           t          j        t          j        g t                    d          }t          |g            t          |j	        dk               d S )Nrm   r   rO  r   r   r   r   r   r   rM   r)  )r   r   r   FFg<r  r   r   )
r   r   r   r>   r  r   r   rH  r	   r@   ro  s        rE   test_mean_edge_casesz.TestMultivariateHypergeom.test_mean_edge_cases  s   &+iii1===ULLL)))&+iii1===URVRVRV4555&+yyy))).DJJJ 8,,,G"	$ 	$ 	$ 	$ '+bhr.E.E.EKKKUBu$%%%%%rG   c                 D   t          j        g dd          }t          |g dd           t          j        g dd          }t          |t          j        t          j        t          j        g           t          j        g dg d	gd          }t          |t          j        t          j        t          j        gg dgd
           t          j        t	          j        g t                    d          }t          |g            t          |j	        dk               d S )Nrm   r   rO  rt  gؗҜ<r  ru  rM   r)  rv  r   rw  )
r   r   r   r   r>   r  r   rH  r	   r@   )r[   rd  re  rh  ri  s        rE   test_var_edge_casesz-TestMultivariateHypergeom.test_var_edge_cases  s   %)III;;;lll7777%)III;;;TBFBFBF3444%)YYY			,BaHHH7F"	$ 	$ 	$ 	$ &)BHRs,C,C,CqIIIT2
e#$$$$$rG   c                    t          j        g dd          }g dg dg dg}t          ||d           t          j        g dd          }g dg dg dg}t          ||           t          j        t	          j        g t          	          d          }t	          j        g t          j        	                              dd          }t          ||d           t          |j
        d
k               d S )Nru  r   rO  rt  rv  r  rm   r   r   r  )r   r   r   r   r>   r   rH  r  r  r	   r@   )r[   cov0r  r  r  r  r  s          rE   test_cov_edge_casesz-TestMultivariateHypergeom.test_cov_edge_cases  s   %)III;;;lllLLL9d////%)III;;;lllLLL9T4   %)BHRs,C,C,CqIIIx"*---55a;;d////
f$%%%%%rG   c                 :   d}g d}g dg dg dg dg dg}t          j        |t                    }t          ||          }t	          |                    |          t          j        |||                     t	          |                    |          t          j        |||                     t	          |                                t          j        ||                     t	          |                                t          j        ||                     d S )	Nr7  )rk   r  rB     r  r  r  r  r  r   )	r>   r?   rH  r   r   r  r  r   r   )r[   r   r2  ra   
mhg_frozens        rE   r  z%TestMultivariateHypergeom.test_frozen  s   NN]]MMM===\\<<<)Jq$$$+Aq11

q)).21a;;	= 	= 	=
))!,,.5aA>>	@ 	@ 	@
((*@*DQ*J*JKKK
((*@*DQ*J*JKKKKKrG   c                    t          t          t          j        ddd           t          t          t          j        ddgd           t          t          t          j        ddgdgd           t          t          t          j        ddgddgd           t          t          t          j        ddgddgd           t          t          t          j        ddgddgd           d S )	Nrh   r  rj   g      @r  rK  g      %@g      /@)rf  rS   r   r  	TypeErrorr  s    rE   test_invalid_paramsz-TestMultivariateHypergeom.test_invalid_params  s    j"8"<aQGGGj"8"<a"qIIIj"8"<q!frdANNNi!7!;c3Z2h	# 	# 	#i!7!;aVTlA	' 	' 	'i!7!;aV2h	% 	% 	% 	% 	%rG   N)r   r   r   rR   r   r   r>   r   r  r  rM  r  rT  rW  r   rH  r  r  r  r  rf  rm  r  r  rx  rz  r}  r  r  r   rG   rE   rE  rE    sV       [ VaWa+VaWa"&)!Wq"gq26'*Vb"Xq"&)!fq!fR2s)4Vbfbf%' !Wr2h26*Wr1gr26*Wr2hBF+VaWb"&)VaWa"&)+	
 43 35 43	/ 	/ 	/; ; ;; ; ;
 [V			13
Qqc1X&  " "	 " [S1#q!VaWa+1v1v"a1a& 12W1v1v&+&I79 RXb$$$hbhr&=&=&=q"EVaVQ"YY			1j1	
  3 3!  3 [Vq"gBx(!i-CDcA3Z1#saVb"X6sQCj\QC!:1vRz:cA3ZQC5'QFr2hZL9		
 3 3 3/ / // / // / // / /1 1 11 1 1
& & &% % %& & &L L L	% 	% 	% 	% 	%rG   rE  c                      e Zd Zd Zd Zej                            dd          d             Zd Z	ej                            dd          ej                            d	d          d
                         Z
ej                            dd          d             Zd Zej                            dd          d             Zej                            dd          d             Zej                            dd          d             Zej                            dd          ej                            dg dgf          ej                            dg dgf          d                                     Zej                            dd          d             Zd Zej                            dd          d             ZdS )TestRandomTablec                 @    t           j                            d          S )Nl   OfE)r>   r   r   r  s    rE   get_rngzTestRandomTable.get_rng  s    y$$%7888rG   c                    d}t          j        t          |          5  t          ddggddg           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          ddgddgg           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          ddgddg           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          ddgdd	g           d d d            n# 1 swxY w Y   d
}t          j        t          |          5  t          ddgddg           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          ddgg d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          ddgg d           d d d            n# 1 swxY w Y   ddg}g d}t          j        ddgg d          \  }}}t          ||           t          ||           |t          j        |          k    sJ d S )Nz`row` must be one-dimensionalrK   r   rM   z`col` must be one-dimensionalz*each element of `row` must be non-negativerl   z*each element of `col` must be non-negativero   z'sums over `row` and `col` must be equalr   z(each element of `row` must be an integer @)r   r   rM   z(each element of `col` must be an integer)r]  r]  r   rN   rM   r   r   )rR   r
   rS   r'   _process_parametersr   r>   r   )r[   r\   r  r  r  r  r   s          rE   test_process_parametersz'TestRandomTable.test_process_parameters  s6   1]:W555 	+ 	+1a&Aq6***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 2]:W555 	+ 	+!Q1a&***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ ?]:W555 	* 	*!R1a&)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* ?]:W555 	* 	*!Q!R)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* <]:W555 	) 	)!Q!Q(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) =]:W555 	0 	0#sYYY///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 =]:W555 	0 	0!Q///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 !fii2Aq6999EE1aS!S!BF3KKs}   A  AA(B

BB2CCC;DD #D E%%E),E)F..F25F2G77G;>G;zscale,method))r   boyett)r  	patefieldc                     t          j        ddg          |z  }t          j        g d          |z  }t          }|                    |||d          }|                    ||d d          }t	          ||           d S )Nr   rN   r  methodr   )r>   r   r'   r   r   )r[   r  r  r  r  ctr  gots           rE   test_process_rvs_method_on_Nonez/TestRandomTable.test_process_rvs_method_on_None  s     h1v&hyyy!!E)66#s66BBffS#df;;Xs#####rG   c                     ddg}g d}d}t          j        t          |          5  t          j        ||d           d d d            d S # 1 swxY w Y   d S )Nr   rN   r  z$'foo' not recognized, must be one ofrK   foo)r  )rR   r
   rS   r'   r   )r[   r  r  r\   s       rE   $test_process_rvs_method_bad_argumentz4TestRandomTable.test_process_rvs_method_bad_argument  s    !fii 9]:W555 	5 	5S#e4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   AAAr  )TFrq  c                 n   |                                  }ddgg dt          j        dd|          }|rt                    nt          }t          ||rdnd          |s	fd	|rfd
n}t	          j        |dd          \  }} ||          }	t          |	t          |          z  |d            |t          |d                             }
t          |
|	d                    |
                    d|j        dd          z             } ||          }	|	j        dk    sJ t          |	j        d                   D ]N}t          |	j        d                   D ]1}|	||f         }|||f         } ||          }t          ||           2Og dg dg}t          t	          j        |d                      ||          }	|	dk    sJ g dg dg}t          t	          j        |d                      ||          }	|	dk    sJ d}t          j        t           |          5   |dg           d d d            n# 1 swxY w Y   d}t          j        t           |          5   |dgg           d d d            n# 1 swxY w Y   d}t          j        t           |          5   |t          j        gg           d d d            n# 1 swxY w Y   d}t          j        t           |          5   |dgg           d d d            n# 1 swxY w Y   d}t          j        t           |          5   |g dg           d d d            n# 1 swxY w Y   d }t          j        t           |          5   |ddgd!d"gg           d d d            d S # 1 swxY w Y   d S )#NrM   ri   r   rN   rj   r  r  r   r  r   r  r  c                      |           S r=   r   )ra   r  original_methodr  s    rE   r  z/TestRandomTable.test_pmf_logpmf.<locals>.method)  s    &q#s333rG   c                 >    t          j         |                     S r=   )r>   r  )ra   r  s    rE   rb   z1TestRandomTable.test_pmf_logpmf.<locals>.<lambda>+  s    q		** rG   r   Tr   return_countsr   r  )r  r  r   )r   r   r   )rM   r   rN   rl   r   rc  )r   rM   rM   ro   z$`x` must be at least two-dimensionalrK   z%`x` must contain only integral valuesr]  z)`x` must contain only non-negative valuesz"shape of `x` must agree with `row`rQ   z"shape of `x` must agree with `col`rN   rj   )r  r'   r   rv   r>   uniquer   r   r   r   r  r@   r  r   rR   r
   rS   r  )r[   r  rq  r   r   objr  
unique_rvscountsrS  p2rvs_ndr  r  pijrvijqijra   r\   r  r  r  r  s                      @@@@rE   test_pmf_logpmfzTestRandomTable.test_pmf_logpmf  s    llnn!fiisCd&.SB B B )/@l3$$$L#8hh599 	4$O4 4 4 4 4 4 4/2>*****Ys$GGG
F C
OOCHHf37777 Sjm$$%%R1 Y122677CKKw)####qwqz"" 	' 	'A171:&& ' '1gad|c$iiS#&&&&	' YY			"RVAB'''---CFFAvvvv YY			"RVAB'''---CFFAvvvv 9]:W555 	 	CHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :]:W555 	 	C#LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :]:W555 	 	C"&
OOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 >]:W555 	 	C"KKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 7]:W555 	 	C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 7]:W555 	 	C!QQ   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sl   7III8JJJ:KK"%K"L  L$'L$M##M'*M'N**N.1N.r  )r  r  c                 (   |                                  }ddg}g d}t          j        ||d||          }t          j        ||          }t	          t          j        |          t          j        |                     t          |                    d          |d           t	          |                    d	
          t          j        |d                     t	          |                    d
          t          j        |d                     d S )NrM   ri   r  r  r  r   r	  r  rl   r   rS  ro   )r  rN   )	r  r'   r   r   r   r>   r   r   broadcast_to)r[   r  r   r  r  r   r   s          rE   test_rvs_meanzTestRandomTable.test_rvs_meanh  s     llnn!fiisCd6,/1 1 1 c**RVD\\26#;;///T5555SWW"W%%rsI'F'FGGGSWW"W%%rsI'F'FGGGGGrG   c                    |                                  }ddg}g d}t          j        ||dd|          }t          j        ||dd|          }t          j        |d	          }t          j        |d	          }t          ||d
           d S )NrM   ri   r  rF  r  r  r  r   r   {Gz?r  )r  r'   r   r>   r   r   )r[   r   r  r  r  r  r  r  s           rE   test_rvs_covzTestRandomTable.test_rvs_covw  s     llnn!fiiSuX-02 2 2Su[-02 2 2vd###vd###d......rG   c           	      P   ddg}g d}t          j        ||||                                           }|j        dk    sJ t          j        ||d||                                           }|j        dk    sJ t	          ||d	                    t          j        ||d	||                                           }|j        d
k    sJ t          j        ||d||                                           }|j        dk    sJ t          j        ||d||                                           }|j        dk    sJ t          |                    ddd          |d           d}	t          j        t          |	          5  t          j        ||d||                                            d d d            n# 1 swxY w Y   t          j        t          |	          5  t          j        ||t          j        ||                                            d d d            d S # 1 swxY w Y   d S )NrM   ri   r  r  r#  r   r  rQ   r   )r   rM   rN   r  )r  rM   rN   )rj   rh   )rj   rh   rM   rN   rN   rS  r  z/`size` must be a non-negative integer or `None`rK   rl   )r'   r   r  r@   r   r   r  rR   r
   rS   r>   r  )
r[   r  r  r  r   rv2rv3rv4rv5r\   s
             rE   test_rvs_sizezTestRandomTable.test_rvs_size  s   !fii c3v+/<<>>; ; ;x6!!!! sCa,0LLNN< < <yI%%%%RQ    sCa,0LLNN< < <yI%%%% sCb,0LLNN< < <yJ&&&&sCfV,0LLNN< < <yL((((B1--s???? D]:W555 	: 	:S#Bv*.,,..: : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: ]:W555 	: 	:S#BF6*.,,..: : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s$   :,F22F69F66HH"Hc                 "   ddg}g d}t           }|                    ||d||                                           }t          j        |dd          \  }}|                    |||          }t          |t          |          z  |d	
           d S )NrM   ri   r  r  r  r   Tr  r  r  )r'   r   r  r>   r  r  r   r   )	r[   r  r  r  r  r   r  r  rS  s	            rE   test_rvs_methodzTestRandomTable.test_rvs_method  s     !fiiffS#F6"&,,..  2 2  Ys$GGG
F FF:sC((CHHf4888888rG   c                 (   g d}g d}t          ||          }|                    d||                                           }t          j        dt          |          t          |          f          }g dg dg dg|d<   t          ||           d S )Nr*  )r   r   r   r   r  r  )r   r   r   r   .r'   r   r  r>   r   r   r   r[   r  r  r  r*  r   r  s          rE   test_rvs_with_zeros_in_col_rowz.TestRandomTable.test_rvs_with_zeros_in_col_row  s    iillc""UU4T\\^^UDD8T3s88SXX677%%%' 	R"""""rG   )Nr  r  r  r   r  c                     t          ||          }|                    d||                                           }t          j        dt          |          t          |          f          }t          ||           d S )Nr  r  r  r  s          rE   test_rvs_with_edge_casesz(TestRandomTable.test_rvs_with_edge_cases  sj     c""UU2f4<<>>UBB8RS3s88455R"""""rG   r   r  c                    dd l mc m} t          j        ddgt          j                  }t          j        g dt          j                  }t          |d|           }t          j        |          } ||||d|                                           }|j	        dt          |          t          |          fk    sJ t          j        |          |k    sJ d S )Nr   r   rN   r   r  	rvs_rcont)scipy.stats._rcontr0   _rcontr>   r   int64rv   r   r  r@   r   )r[   r   r  r  r  r   ntotresults           rE   test_rvs_rcontzTestRandomTable.test_rvs_rcont  s     	,++++++++h1vRX...hyyy111fo!oo..vc{{S#tQ77|3s88SXX66666vf~~%%%%%%rG   c                    ddg}g d}t          |||                                           }|                                }t          j        ||          }t	          ||                                           t          j        |||          }t	          ||                    |                     t          j        |||          }t	          ||                    |                     d S )NrM   ri   r  r   )r'   r  r   r   r   r  r  )r[   r  r  r*  r  r  s         rE   r  zTestRandomTable.test_frozen  s    !fiic777$S#..Xqvvxx(((#FC55XquuV}}---&vsC88Xqxx//00000rG   c                    ddg}g d}t          |||                                           }t          j        ||d||                                           }|                    d|          }t          ||           d S )NrM   ri   r  r   r  r  )r   r  )r'   r  r   r   )r[   r  r  r  r*  r  r  s          rE   test_rvs_frozenzTestRandomTable.test_rvs_frozen  s    !fiic777#C2f15A A AeeFe++Xs#####rG   N)r   r   r   r  r  rR   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r   rG   rE   r  r    s       9 9 9"  "  " H [^@B B$ $B B$5 5 5 [X}55[UM22L L 32 65L\ [X'>??H H @?H/ / / [X'>??': ': @?':R [X'>??9 9 @?9( [X'>??	# 	# @?	# [X'DEE[UR!I..[UR!I..# # /. /. FE# [S&))& & *)& 1 1 1  [X'>??$ $ @?$ $ $rG   r  c                     | j         }d| _          | j        |ddi t          j        |           } | j        |ddi}t          j        |          } |j        |ddi}t          ||           || _         d S )Nrj  r   r  )r   r   pickledumpsloadsr   )distfnrC   r  r   r0	unpickledr1s          rE   check_picklingr    s    
 DFFJ1VA	T	"	"	"BQI		%1	%	%BR FrG   z2uses numpy global random state and monkey-patchingr  c                  >   t          j        d          } d| d<   d| d<   t          dgt          t          j        dg          fgt
          d| fgt          d| fgt          dg d	fgt          d
gt          d
gg}|D ]%\  }}t          ||           t          ||           &d S )NrN   r  rb  r  r   r   r  rh   rP  r  )r>   rV   r   r   r   r   r   r   r   r   r9   r  )r  distsr  rC   s       rE   test_random_state_propertyr    s    F1IIEE$KE$K	b!	RXrd^^&'	2u+	b%[!	q///*+	d	d#E  % %#FD111vt$$$$% %rG   c                   "   e Zd Zej                            dg d          ej                            dg d          d                         Zej                            dddg          ej                            dg d	          d
                         Zd Zd Z	d Z
ej                            dddg          d             Zej                            dddg          d             Zej                            dej        ej        g          d             Zej                            dej        ej        g          d             Zej                            d ej        g d           ej        g d          ddf ej        g d           ej        g d          ddf ej        g d           ej        g d          ddf ej        g d           ej        g d          dd f ej        g d           ej         ej        d!           ej        d"          dg          d#d$f ej        g d           ej        g d          d#d%f ej        g d&           ej        g d&          d#d'f ej        g d&           ej         ej        d!           ej        d"          dddg          d#d(f ej        g d&           ej         ej        d)           ej        d*          dddg          d#d+fg	          d,             Zej                            d ej        g d           ej        g d          dd-f ej        g d           ej        g d          dd.f ej        g d           ej        g d          dd/f ej        g d           ej        g d          dd0f ej        g d           ej         ej        d!           ej        d"          dg          d#d1f ej        g d           ej        g d          d#d2f ej        g d&           ej        g d&          d#d3f ej        g d&           ej         ej        d!           ej        d"          dddg          d#d4f ej        g d&           ej         ej        d)           ej        d*          dddg          d#d5fg	          d6             Zej                            d7g d8          d9             Zej                            dej        ej        g          d:             Zd; Zej                            dg d<          ej                            d=g d>          d?                         Zd@ ZdA ZdB ZdCS )DTestVonMises_Fisherr   )rM   rN   rj   ri   r   r  c                    t           j                            d          }t          j        |fdt          j        |          z            }t          |d|          }|                    |          }t          j        |          t          j        |          }}|	                    |||          j
        }	|j
        |	k    sJ t           j                            |d          }
t          |
d           d S )Nr  r   r   r   rl   r   r   )r>   r   r   r   r  r)   r   r   rV   r   r@   r   r   r   )r[   r   r   r   rg  vmf_distrn  r   r   r  r  s              rE   r  z TestVonMises_Fisher.test_samples.  s     i##$788WcWan--"2qs333,,t$$HSMM26#;;c00s0FFL}....	wR00r"""""rG   rh   r  kappa)g  4&kCr,  gꌠ9Y>)Fc                     t           j                            d          }t          j        |fdt          j        |          z            }t          |||          }|                    d           d S )Nr  r   r   r  )r>   r   r   r   r  r)   r   )r[   r   r  r   rg  r  s         rE    test_sampling_high_concentrationz4TestVonMises_Fisher.test_sampling_high_concentration<  se     i##$788WcWan--"2u3777RrG   c                     t          j        d          }d}t          j        t          |          5  t          |d           d d d            d S # 1 swxY w Y   d S )Nr  z%'mu' must have one-dimensional shape.rK   r   r>   rU   rR   r
   rS   r)   r[   rg  r  s      rE   test_two_dimensional_muz+TestVonMises_Fisher.test_two_dimensional_muE  s    WV__5]:S111 	# 	#B"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#   AAAc                     t          j        d          }d}t          j        t          |          5  t          |d           d d d            d S # 1 swxY w Y   d S )Nr  z%'mu' must be a unit vector of norm 1.rK   r   r  r  s      rE   test_wrong_norm_muz&TestVonMises_Fisher.test_wrong_norm_muK  s    WU^^5]:S111 	# 	#B"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#r  c                     t          j        d          }d}t          j        t          |          5  t          |d           d d d            d S # 1 swxY w Y   d S )Nr  z$'mu' must have at least two entries.rK   r   r  r  s      rE   test_one_entry_muz%TestVonMises_Fisher.test_one_entry_muQ  s    WU^^4]:S111 	# 	#B"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#r  rl   )rh   rN   c                     d}t          j        t          |          5  t          ddg|           d d d            d S # 1 swxY w Y   d S )Nz"'kappa' must be a positive scalar.rK   r   r   rR   r
   rS   r)   r[   r  r  s      rE   test_kappa_validationz)TestVonMises_Fisher.test_kappa_validationW  s    2]:S111 	+ 	+QFE***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+   >AAr   r   c                     d}t          j        t          |          5  t          ddg|           d d d            d S # 1 swxY w Y   d S )NzFor 'kappa=0' the von Mises-Fisher distribution becomes the uniform distribution on the sphere surface. Consider using 'scipy.stats.uniform_direction' instead.rK   r   r   r  r  s      rE   test_kappa_zeroz#TestVonMises_Fisher.test_kappa_zero]  s     ]:S111 	+ 	+QFE***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+r  r  c                     t          j        g d          }d}t          j        t          |          5   ||ddgd           d d d            d S # 1 swxY w Y   d S )Nr   r   r   znThe dimensionality of the last axis of 'x' must match the dimensionality of the von Mises Fisher distribution.rK   r   r   r>   r   rR   r
   rS   r[   r  ra   r  s       rE   test_invalid_shapes_pdf_logpdfz2TestVonMises_Fisher.test_invalid_shapes_pdf_logpdfg  s     H[[[!! ]:S111 	! 	!F1q!fa   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!   AAAc                     t          j        ddg          }d}t          j        t          |          5   ||ddgd           d d d            d S # 1 swxY w Y   d S )Nr  r   8'x' must be unit vectors of norm 1 along last dimension.rK   r   r   r  r  s       rE   test_unnormalized_inputz+TestVonMises_Fisher.test_unnormalized_inputq  s     Hc2YH]:S111 	! 	!F1q!fa   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!r  zx, mu, kappa, reference)r   r   r   r$  g0_?r  )r   r   r   g7m0_?r  gLI/@gFK:h*7g\(\?r  i  g3pB>g7Ks@)r   r   r   r   r   go齿@gW+x\(?rO  r   gS-c                 p    t          ||                              |          }t          ||d           d S )Nr%  r  )r)   r   r   )r[   ra   rg  r  	referencer   s         rE   test_pdf_accuracyz%TestVonMises_Fisher.test_pdf_accuracy  s<    4 b%((,,Q//YU333333rG   g[d6U?g1*?gJ8j#@g=fNXg][,g1VV@g|'@gmF&!gehc                 p    t          ||                              |          }t          ||d           d S )Nr  r  )r)   r   r   )r[   ra   rg  r  r  r   s         rE   test_logpdf_accuracyz(TestVonMises_Fisher.test_logpdf_accuracy  s<    4 !U++22155	666666rG   zdim, kappa, reference))rN   r$  g?@)rN   r  gp&F)rh   r  gT;ӷ&)r  r   goZ@c                     t          j        |fdt          j        |          z            }t          ||                                          }t          ||d           d S )Nr   g+=r  )r>   r   r  r)   r   r   )r[   r   r  r  rg  r   s         rE   test_entropy_accuracyz)TestVonMises_Fisher.test_entropy_accuracy  sY     WcWan--!"e,,4466777777rG   c           	         d}t           j                            d          }t          d                              ||          }t          j        ddt          j        d          z            }d} ||||          }|j        |k    sJ t          |d                   D ]L}t          |d                   D ]4}	 ||||	d d f         ||          }
t          |
|||	f         d	
           5Md S )Nr  r  rN   r   r`  r   rh   r   rS  r  )
r>   r   r   r(   r   r   r  r@   r  r   )r[   r  	testshaper   ra   rg  r  
result_allr  r  current_vals              rE   r  z%TestVonMises_Fisher.test_broadcasting  s    	i##$788a  $$YS$AAWUAbgajjL))VAr5))
9,,,,y|$$ 	K 	KA9Q<(( K K$fQq!QQQwZU;;Z1-=EJJJJJK	K 	KrG   c                    t           j                            d          }t          j        ddg          }t          j        |d         |d                   }d}t          ||          }t          ||          }t          d                              d|          }t          j        |d d df         |d d df                   }t          |
                                |
                                           t          |                    |          |                    |                     t          |                    |          |                    |                     d S )	Nr  r   r   r  )r  r  rM   r  r   )r>   r   r   r   r  r)   r+   r(   r   r   r   r   r   )	r[   r   rg  mu_angler  vmfvonmises_distvectorsr  s	            rE   test_vs_vonmises_2dz'TestVonMises_Fisher.test_vs_vonmises_2d  s3    i##$788Xq!f:beRU++b%(( XU;;;#A&&**2C*@@GAAAqDM7111a4=99--//???))&1137773C3CDDD,,V44cjj6I6IJJJJJrG   )rM   rN   ri   zkappa, mu_tol, kappa_tol))r   r	  r	  )r  r  r  )r  {Gzt?r  )r  r  r  c                    t          j        |fdt          j        |          z            }t          ||          }t           j                            d          }d}|                    ||          }	t          j        |	          \  }
}t          j        |	                    |
                    }t          |d|d           t          |||           d S )	Nr   r  rF  r   r   r   r  r  )r>   r   r  r)   r   r   r   rM  arccosr  r   )r[   r   r  mu_tol	kappa_tolrg  r  r   r  rn  mu_fit	kappa_fitangular_errors                rE   test_fit_accuracyz%TestVonMises_Fisher.test_fit_accuracy  s     WcWan--"2u--i##$788	,,ys,;;+/88		"&&..11rQ????yy999999rG   c                     t          j        d          }d}t          j        t          |          5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr`  z'x' must be two dimensional.rK   )r>   r   rR   r
   rS   r)   rM  r[   ra   r  s      rE   #test_fit_error_one_dimensional_dataz7TestVonMises_Fisher.test_fit_error_one_dimensional_data  s    HUOO,]:S111 	# 	#"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#   AAAc                     t          j        d          }d}t          j        t          |          5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr"  r  rK   )r>   rU   rR   r
   rS   r)   rM  r  s      rE    test_fit_error_unnormalized_dataz4TestVonMises_Fisher.test_fit_error_unnormalized_data  s    GFOOH]:S111 	# 	#"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#r  c                 <   t          j        g d          }d}t          ||          }t          ||d          }|                    d          }t          j        ||d          }|                                }t	          ||           t	          ||           d S )N)r   r   r   rh   r  r   r   )r>   r   r)   r   r   )r[   rg  r  r  rS  r  r  rT  s           rE   r  z,TestVonMises_Fisher.test_frozen_distribution   s    Xiii   U++%b%c:::zzsz++"2u3???  T4   T4     rG   N)r   r   r   rR   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   rG   rE   r  r  -  s       [ULLL11[V%9%9%9::
# 
# ;: 21
# [UQF++[W&8&8&899  :9 ,+# # ## # ## # # [Wr6l33+ + 43+
 [Wq"g..+ + /.+ [X(;(7(>(@ A A! !A A! [X(;(7(>(@ A A! !A A!$ [6'rx55xrx7M7M#%79'rx44hbh|||6L6L#%8:'rx55xrx7M7M"$68'rx44hbh|||6L6L"$9;'rx55'rxr(JKK#%:<  (rx44hbh|||6L6L#%68'rx(<(<(<=='rx(<(<(<==#%79  (rx(<(<(<=='rxr)*B)0  1  1#%;=  (rx(<(<(<=='rxwrws||R)*B)0  1  1#%;=)>? ?24 43? ?24" [6'rx55xrx7M7M#%8:'rx44hbh|||6L6L#%8:'rx55xrx7M7M"$57'rx44hbh|||6L6L"$68'rx55'rxr(JKK#%8:  (rx44hbh|||6L6L#%68'rx(<(<(<=='rx(<(<(<==#%79  (rx(<(<(<=='rxr)*B)0  1  1#%79  (rx(<(<(<=='rxwrws||R)*B)0  1  1#%8:);< <27 73< <27$ [4: : :; ;
8 8; ;
8
 [X(;(7(>(@ A AK KA AKK K K [UIII..[72 2 23 3
	: 	:3 3 /.	:# # ## # #! ! ! ! !rG   r  c                   ~   e Zd Zed             Zd Zd Zd Zd Zd Z	e
j                            ddd	g          d
             Ze
j                            dddg          d             Zd Zd Ze
j                            ddd	g          d             Ze
j                            dg d          d             ZdS )TestDirichletMultinomialc                     t           j                            d          }|                    ddd          }|                    dd|df          }|                    d	          }|||||fS )
N   t7)r   r  rM   r   r   r  rl   r   )r>   r   r   r   r  r   )r[   r2  r   r  ra   r   s         rE   
get_paramsz#TestDirichletMultinomial.get_params/  sl    i##$566As++LLBaVL,,EErENNAua""rG   c                    t           j                            d          }|                    ddd          }|                    ddd          }t          j        |d          }t          ||          }t          |                    |          t          j        |||                     t          |	                    |          t          j	        |||                     t          |
                                t          j
        ||                     t          |                                t          j        ||                     t          |                                t          j        ||                     d S )Nr  r   r  r  rl   r   )r>   r   r   r   r  r   r*   r   r  r  r   r   r   )r[   r   r  ra   r   r*  s         rE   r  z$TestDirichletMultinomial.test_frozen7  s1   i##$566AsB''LLB##F12!%++QXXa[["7">q%"K"KLLLQUU1XX48E1EEFFFQVVXX49%CCDDDQUUWW37qAABBBQUUWW37qAABBBBBrG   c                    t          j        g d          }t          j        |          }t          j        g d          }t          j        |||          }t          j        |||          }d}t          ||           t          |t          j        |                     |j        |j        cxk    rdk    sn J t           j	        
                    d          }|                    ddd          }|                    ddd          }t          j        |d	
          }t          ||                              |          }t          j        |||          }d}t          ||           t          |t          j        |                     d S )NrQ   rN   rj   rh   gp.U.?r   r  r   r  r  rl   r   g+T<)r>   r   r   r*   r  r  r   rq  r@   r   r   r   r  )r[   ra   r   r  rA   logresrB   r   s           rE   test_pmf_logpmf_against_Rz2TestDirichletMultinomial.test_pmf_logpmf_against_RE  so   
 HYYYF1II###'5!44&-a::!S!!!s,,,yFL....B...... i##$566AsB''LLB##F12#E1--11!44&-a::"S!!!s,,,,,rG   c                    |                      d          \  }}}}}|dz  }t          t          ||                              |          d           t          t          ||                              |          t
          j                    |                      d          \  }}}}}|                    d          dk    }t          j        ||         dz            ||<   t          t          ||                              |          |         d           t          t          ||                              |          |         t
          j                    t          j	        t          ||                              |          |          dk              sJ t          j	        t          ||                              |          |          t
          j         k              sJ d S )Nr   r   r  r   r  rM   )
r  r   r*   r  r  r>   r   r   roundr  )r[   r   r2  r  r   ra   r  s          rE   test_pmf_logpmf_supportz0TestDirichletMultinomial.test_pmf_logpmf_supportd  s    #ooa00Qq!	Q*5!4488;;Q???*5!44;;A>>HHH"oob11Qq!JJBJ#%x!q!!!*5!4488;;A>BBB*5!44;;A>>qABF7KKKv+E15599!<<aR@1DEEEEEv+E155<<Q??CrvgMNNNNNNNrG   c                 `   d}dg}t          j        |g          }t          ||          }t          |                    |          d           t          |                    |dz             d           t          |                    |          d           t          |                    |dz             t           j                    t          |                                |           t          |                                d           t          |	                                d           d S )Nri   r  r   r   
r>   r?   r*   r   r  r  r   r   r   r   r[   r   r  ra   r   s        rE   test_dimensionality_onez0TestDirichletMultinomial.test_dimensionality_onet  s    JsOO$UA..TXXa[[!$$$TXXac]]A&&&T[[^^Q'''T[[1%%w///TYY[[!$$$TXXZZ###TXXZZ#####rG   c                    d}t          j        ddg          }t          j        ddg          }t          ||          }t          |                    |          d           t          |                    |dz             d           t          |                    |          d           t          |                    |dz             t           j                    t          |                                ddg           t          |                                ddg           t          |	                                ddgddgg           d S )Nr   r   r   r$  r%  s        rE   test_n_is_zeroz'TestDirichletMultinomial.test_n_is_zero  s   
B8$$J1v$UA..TXXa[[!$$$TXXac]]A&&&T[[^^Q'''T[[1%%w///TYY[[1a&)))TXXZZ!Q(((TXXZZ1a&1a&!122222rG   method_namer  r  c                 $   |                      d          \  }}}}}t          t          ||          |          }t          t          j        |g|j        R  |          } ||          }	 ||j        d                   }
t          |	|
           d S Nr  r   r  rv   r*   r0   	betabinomr   r   r[   r)  r   r2  r  r   ra   r  
ref_methodrA   rB   s              rE   test_against_betabinom_pmfz3TestDirichletMultinomial.test_against_betabinom_pmf  s    "ooc22Qq!.ua88+FFU_Q9999;GG
fQiijQ  S!!!!!rG   r   r   c                    |                      d          \  }}}}}t          t          ||          |          }t          t          j        |g|j        R  |          } |            d d df         }	 |            }
t          |	|
           d S r+  r,  r.  s              rE   test_against_betabinom_momentsz7TestDirichletMultinomial.test_against_betabinom_moments  s    "ooc22Qq!.ua88+FFU_Q9999;GG
fhhqqq!tnjllS!!!!!rG   c                    t           j                            d          }d}|                    dd          }|                    |          dz  }t	          ||          }d}|                    ||          }|                    |||          }t          |                                t          j        |d	          d
           t          |	                                t          j	        |d	          d           |                                j
        |	                                j
        cxk    r|fk    sn J |                                }	|	j
        ||fk    sJ t          |	t          j        |j                  d           t          t          j        |	          |	                                           t          j        t           j                            |	          d         dk              sJ d S )Nr  rh   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   ru   r  r   r   r   )
r[   r   r   r   r  r   r2  rS  ra   r   s
             rE   r  z%TestDirichletMultinomial.test_moments  s   i##$566LLC  


$$r)$UA.. MM%aM((OOAqqO))		RWQQ%7%7%7dCCCC

BF11$5$5$5DAAAAyy{{ DHHJJ$4>>>>>>>>>>hhjjyS#J&&&&RVAC[[t4444RWS\\488::...vel'',,Q/!34444444rG   c                    t          j        g d          }t          j        |          }t          j        g d          }d}t          t          |          5  t          j        g d||           d d d            n# 1 swxY w Y   t          t          |          5  t          j        g d||           d d d            n# 1 swxY w Y   d}t          t          |          5  t          j        |g d|           d d d            n# 1 swxY w Y   t          t          |          5  t          j        |g d	|           d d d            n# 1 swxY w Y   d
}t          t          |          5  t          j        ||d           d d d            n# 1 swxY w Y   t          t          |          5  t          j        ||d           d d d            n# 1 swxY w Y   t          j        g d          }t          j        g d          }d}t          t          |          5  t          j        |||                                           d d d            d S # 1 swxY w Y   d S )NrQ   r  z,`x` must contain only non-negative integers.rK   )r   rl   rN   )r   r  rN   z*`alpha` must contain only positive values.)rN   r   rj   )rN   rl   rj   z#`n` must be a non-negative integer.ǧH@rl   )r   rM   rN   rj   z&`x` and `alpha` must be broadcastable.)r>   r   r   rf  rS   r*   r  )r[   x0n0alpha0textra   r  s          rE   r]   z.TestDirichletMultinomial.test_input_validation  s)   Xiii  VBZZ)))$$=:T222 	A 	A!(VR@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A:T222 	B 	B!(fbAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B <:T222 	< 	<!(YYY;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<:T222 	= 	=!(ZZZ<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 5:T222 	; 	;!(VT:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;:T222 	9 	9!(VR888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 H\\\""##7:T222 	< 	<!(E15577;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s~   A>>BBCCC'DDD-EEE5FFF9GG #G +)I!!I%(I%r  c           	         t          j        g dg dg dg dg          }t          j        dgdgdgg          }t          j        g dg d	g                              d
          }t          t          |          } ||||          }|j        dk    sJ t          t          |                    D ]}t          t          |                    D ]}t          t          |                    D ]r}||||f         }	 |||                                         ||                                         ||                                                   }
t          |	|
           sd S )Nr  r  rh   rh   rk   r  r  r  ri   rk   r  rQ   )rM   rM   rN   )rM   r   r   rN   )rM   rN   rj   )
r>   r   r  rv   r*   r@   r  r   r   r   )r[   r  r  r   ra   rA   r  r  r  res_ijkrB   s              rE   test_broadcasting_pmfz.TestDirichletMultinomial.test_broadcasting_pmf  si   )))YYY			:::FGGHqcA3_%%Hiii+,,44\BB.77fQq!!yI%%%%s1vv 	2 	2A3q66]] 2 2s5zz** 2 2A!!Q'lG &1q1A1A1C1CQqT\\^^TTC#GS111122	2 	2rG   )r   r   r   c                    t          j        g dg dg dg dg          }t          j        dgdgdgg          }t          t          |          } |||          }|dk    r|j        d	k    snnJ t          t          |                    D ]w}t          t          |                    D ]X}|||f         } |||                                         ||                                                   }	t          ||	           Yxd S )
Nr  r  r:  r;  ri   rk   r  r   )rN   rj   rN   )	r>   r   rv   r*   r@   r  r   r   r   )
r[   r)  r  r   r  rA   r  r  r<  rB   s
             rE   test_broadcasting_momentsz2TestDirichletMultinomial.test_broadcasting_moments  s   )))YYY			:::FGGHqcA3_%%.<<fUA)4)=)=syI%%%%%%s1vv 	. 	.A3u::&& . .ad)fU1X--//1@@----.	. 	.rG   N)r   r   r   rL  r  r  r  r"  r&  r(  rR   r   r   r0  r2  r  r]   r=  r?  r   rG   rE   r  r  .  sj       # # [#C C C- - ->O O O $ $ $3 3 3 []UH,=>>" " ?>" []VUO<<" " =<"5 5 5,< < << [Xx'8992 2 :92 [],B,B,BCC
. 
. DC
. 
. 
.rG   r  c                      e Zd Zd Zd Zd Zd Zd Zej	        j
        ej	                            d          d                         Zej	                            dej        ej        ej        ej        g          d	             Zd
S )TestNormalInverseGammac           	      X   t           j                            d          }|                    d          \  }}}}t          j        ||||          t          j        d|z  |dt          j        ||z  |z            z            }t          j        ddd          }t          fd	d
t           j	        |f          }|
                    |          }	t          |j        |	                               d|          }t          j        |d
         |j                  \  }
}|dk    sJ d S )N   &( rj   rM   r   r  rF  rh   rB  c                 0                         ||           S r=   r   )r  ra   norm_inv_gammas     rE   rb   z8TestNormalInverseGamma.test_marginal_x.<locals>.<lambda>      ^%7%72%>%> rG   r   rC   rF  r   r   )r>   r   r   r0   normal_inverse_gammar/  r  rA  r1   r   r   r   r  r   ks_1sampr   )r[   r   rg  lmbdar"  r#  r/  ra   rA   rB   r   r  rF  s               @rE   test_marginal_xz&TestNormalInverseGamma.test_marginal_x  s    i##J//**Q--E1a3Bq!DDGAaCRqUQ)?)?'?@@@ KAr"">>>>26QRPTUUUeeAhhc***   e# >>N3q61511	6||||||rG   c                 0   t           j                            d          }|                    d          \  }}}}t          j        ||||          t          j        ||          }t          j        ddd          }t          fdt           j         t           j        |f          }|	                    |          }	t          |j        |	                               d|	          }t          j        |d
         |j                  \  }
}|dk    sJ d S )NrC  rj   r  r   r  c                 0                         | |          S r=   rE  )ra   r  rF  s     rE   rb   z9TestNormalInverseGamma.test_marginal_s2.<locals>.<lambda>  rG  rG   rH  rF  r   r   )r>   r   r   r0   rI  r   rA  r1   r   r   r   r  r   rJ  r   )r[   r   rg  rK  r"  r#  	inv_gammar  rA   rB   r   r  rF  s               @rE   test_marginal_s2z'TestNormalInverseGamma.test_marginal_s2  s    i##J//**Q--E1a3Bq!DDN1A...	 [b"%%>>>>wbU4 4 4mmBc***   e# >>N3q69=99	6||||||rG   c                    t           j                            d          }|                    d          dz
  \  }}}}|                    d          dz
  \  }}t          j        ||||                              ||          }t          j                            ||||||          }	t          |t          j        |	                     d S )NrC  )rj   r  rA  )rM   r  r   )	r>   r   r   r0   rI  r   r   r   r  )
r[   r   rg  rK  r"  r#  ra   r  rA   rB   s
             rE   test_pdf_logpdfz&TestNormalInverseGamma.test_pdf_logpdf&  s    i##J//**W--4E1a


((4/2(UAq99==aDD(//2r5!QGGRVC[[)))))rG   c                    t           j                            d          }|                    d          \  }}}}|                    d          \  }}t          j        t           j        |||                              ||          }t          |t           j                   t          j        |d||                              ||          }t          |t           j                   t          j        ||d|                              ||          }t          |t           j                   t          j        |||d                              ||          }t          |t           j                   t          j        ||||                              |d          }t          |d           t          j        |dt           j        g||                              |d          }t          |t           j                   t          j        |d||                                          }t          |t           j        t           j        f           t          j        ||d|          	                                }t          |t           j        t           j        f           t          j        t          d          5  t          j        |||d                                           d d d            d S # 1 swxY w Y   d S )NrC  rj   rM   rl   r   zDomain error in arguments...rK   )r>   r   r   r0   rI  r  r   r   r   r   rR   r
   rS   r   )	r[   r   rg  rK  r"  r#  ra   r  rA   s	            rE   test_invalid_and_special_casesz5TestNormalInverseGamma.test_invalid_and_special_cases/  s   i##J//**Q--E1a

12(1==AA!RHHS"&!!!(RA66::1bAAS"&!!!(UAq99==aDDS"&!!!(UAr::>>q"EES"&!!!(UAq99==aDDS! (b"&\1a@@DDQKKS"&!!!(RA66;;==S2626*+++(UB::>>@@S2626*+++]:-KLLL 	? 	?&r5!R88<<>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   5*K,,K03K0c                    t           j                            d          }|                    d          }|                    d          dz   }|                    d          }|                    d          }|                    d          }|                    d          }t          j        ||||          }t          j        ||||||          }	d |	D             }
|                    ||          }|j        |	d	         j        k    sJ t          |	                                t          j        j        |
            |
                    ||          }|j        |	d	         j        k    sJ t          |	                                t          j        j
        |
            t          j        ||||          }	d
 |	D             }
|                                }|d	         j        |	d	         j        k    sJ t          |d	         	                                |d         	                                ft          j        j        |
            |                                }|d	         j        |	d	         j        k    sJ t          |d	         	                                |d         	                                ft          j        j        |
            d}t           j                            d          }|                    ||          }t           j                            d          }d}t          j        j        |
||d}t          |d	                             |          |d                             |          f|           d S )NrC  rM   )rN   r   )rj   r   r   )rh   r   r   r   )ri   r   r   r   r   )rk   r   r   r   r   r   c                 6    g | ]}t          j        |          S r   r>   r  r  arrs     rE   r  z<TestNormalInverseGamma.test_broadcasting.<locals>.<listcomp>`       DDDrx}}DDDrG   r   c                 6    g | ]}t          j        |          S r   rW  rX  s     rE   r  z<TestNormalInverseGamma.test_broadcasting.<locals>.<listcomp>n  rZ  rG   r   )ri   rh   rj   rN   rM   l   Mr   )ri   x   )r>   r   r   r0   rI  broadcast_arraysr   r@   r   r  r   r   r   r   r  )r[   r   r#  r"  rK  rg  r  ra   r   broadcastedbroadcasted_raveledrA   r   r@   rB   s                  rE   r  z(TestNormalInverseGamma.test_broadcastingQ  s1    i##J//JJqMMJJv"

9%%ZZ%%ZZ((JJ)**)"eQ:: )!RUAqAADDDDDhhq"ooyKN00000		268KL	N 	N 	N kk!R  yKN00000		29;NO	Q 	Q 	Q )"eQ::DDDDDiikk1v|{1~33333QQ8279LM	O 	O 	O hhjj1v|{1~33333QQ8268KL	N 	N 	N i##M22hhDsh33i##M22(,.A:=? ? ?Q..Au0E0EFLLLLLrG   r  c                 &   t           j                            d          }|                    d          \  }}}}|dz  }t          j        ||||                                          }t          fdt           j         t           j        dt           j                  }t          |d         |d         d           t          fdt           j         t           j        dt           j                  }t          |d	         |d         d           d S )
NrC  rj   rM   c                 6                         ||           |z  S r=   rE  r  ra   r   s     rE   rb   z5TestNormalInverseGamma.test_moments.<locals>.<lambda>  s    DHHQOOa$7 rG   r   r  r  c                 6                         ||           | z  S r=   rE  rb  s     rE   rb   z5TestNormalInverseGamma.test_moments.<locals>.<lambda>  s    DHHQOOb$8 rG   r   )	r>   r   r   r0   rI  r   r6   r   r   )	r[   r   rg  rK  r"  r#  rA   rB   r   s	           @rE   r  z#TestNormalInverseGamma.test_moments  s     i##J//**Q--E1a	Q)"eQ::iikk7777"&"&!RVTTAAT2222888826'261bfUUAAT222222rG   r   c                    t           j        dk     rt          j        d           t           j                            d          }|                    ddd                              |          \  }}}}}}t          j        d|          }	t          j
        ||||          }
|
                                d	         j        |	k    sJ |
                                d
         j        |	k    sJ |
                                d	         j        |	k    sJ |
                                d
         j        |	k    sJ |
                                d	         j        |	k    sJ |
                                d
         j        |	k    sJ |
                    ||          j        |	k    sJ |
                    ||          j        |	k    sJ d S )N2z*Scalar dtypes only respected after NEP 50.rC  rN   r  ri   r   r   r   r   )r>   __version__rR   r   r   r   r   astyperesult_typer0   rI  r   r   r   r   r   r   )r[   r   r   ra   r  rg  rK  r"  r#  	dtype_outr   s              rE   
test_dtypez!TestNormalInverseGamma.test_dtype  s   >CKDEEEi##J//!$Q!;!;!B!B5!I!I2r5!QN3..	)"eQ::xxzz!}"i////xxzz!}"i////yy{{1~#y0000yy{{1~#y0000xxzz!}"i////xxzz!}"i////{{1b!!'94444xx2$	111111rG   N)r   r   r   rL  rP  rR  rT  r  rR   r   r|  	fail_slowr  r   r>   int32float16r  r  rj  r   rG   rE   rA  rA    s          *  ,* * * ?  ?  ?D1M 1M 1Mf [[23 3  3 [WrxRZ&TUU2 2 VU2 2 2rG   rA  r?  )lrG  r  dataclassesr   numpy.testingr   r   r   r   r   r	   rR   r
   rf  test_continuous_basicr   numpyr>   scipy.linalgr   scipy.stats._multivariater   r   r   scipy.statsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   scipy.stats._continuous_distnsr/   r4  r0   scipy.integrater1   r2   r3   r4   r5   r6   r7   scipy.specialr8   r-  common_testsr9   	data._mvtr:   unittest.mockr;   rF   rI   r   r   r   r   rO  r`  r~  r  r  r  rk  rm  r  r  r  rN  rv  r  r  r  rE  r  r  r   rA  r  r  r  rA  r   rG   rE   <module>r{     s6     ! ! ! ! ! !7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7  * * * * * * 9 9 9 9 9 9        C C C C C C C C C CD D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D 0 / / / / / / / @ @ @ @ @ @       4 4 4 4 4 4 4 4 4 4 < < < < < < < < < < < < & & & & & &       5 5 5 5 5 5            ' ' ']! ]! ]! ]! ]! ]! ]! ]!@     + + +. A A A A A A A AH X X X X X X X Xv
) 
) 
) 
) 
) 
) 
) 
)DG G G G G G G GTH* H* H* H* H* H* H* H*VO? O? O? O? O? O? O? O?dE1 E1 E1 E1 E1 E1 E1 E1P- - -&i9 i9 i9 i9 i9 i9 i9 i9Vz; z; z; z; z; z; z; z;za( a( a( a( a( a( a( a(HGJ GJ GJ GJ GJ GJ GJ GJT~& ~& ~& ~& ~& ~& ~& ~&Bd# d# d# d# d# d# d# d#N6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+r>D >D >D >D >D >D >D >DBX, X, X, X, X, X, X, X,v`% `% `% `% `% `% `% `%Fh$ h$ h$ h$ h$ h$ h$ h$V	  ( "VWW% % XW%$~! ~! ~! ~! ~! ~! ~! ~!BH. H. H. H. H. H. H. H.Vk2 k2 k2 k2 k2 k2 k2 k2 k2 k2rG   