
    doi                       S r SSKrSSKJr  SSKJrJrJrJrJ	r	J
r
  SSKrSSKJr  SSKJr  SSKrSSKrSSKJrJrJr  SS	KJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5  SS
KJ6r6J7r7  SSK8J9r:  SSKJ;r;  SSK<J=r=J>r>J?r?  SSK<J@r@JArAJBrBJCrC  SSKDJErE  SSKDJFrF  SSKGJHrH  SSKIJJrJ  SSKKJLrL  S rM " S S5      rNSHS jrOS rPS rQ\ " S S5      5       rR\ " S S5      5       rS " S S5      rT " S S 5      rU " S! S"5      rV " S# S$5      rW " S% S&5      rXS' rY " S( S)5      rZ " S* S+5      r[ " S, S-5      r\ " S. S/5      r] " S0 S15      r^ " S2 S35      r_ " S4 S55      r` " S6 S75      ra " S8 S95      rb " S: S;5      rc " S< S=5      rdS> re\R                  R                  S?S@9SA 5       rh " SB SC5      ri " SD SE5      rj " SF SG5      rkg)IzH
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                     [         R                  " U 5      [         R                  " U5      p[        X/UQ70 UD6  [        U R                  UR                  5        g N)npasarrayr   r   shape)resrefargskwargss       _/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/stats/tests/test_multivariate.pyassert_closerF   /   s=    zz#

3C.t.v.CII&    c                      \ rS rSrS r\R                  \R                  R                  \R                  R                  \R                  R                  S S.r\R                  " \" \5      5      r\R                  " / SQ5      / SQ/ SQ/ SQ/\R                  " / S	Q5      / S
Q/ SQ/ SQ/S.r\\SS \/ SQ   \SS S.r\R$                  R'                  S\SS 5      S 5       r\R$                  R'                  S\" \5      5      \R$                  R'                  S\5      S 5       5       r\R$                  R'                  SS\" 5       SS/5      \R$                  R'                  S\" \5      5      \R$                  R'                  S\5      S 5       5       5       r\R$                  R'                  S\" 5       S/5      \R$                  R'                  S\5      S 5       5       rS r\R$                  R5                  S5      S 5       rS rSrg) TestCovariance5   c                 L   Sn[         R                  " [        US9   [        R                  " [
        R                  " S5      5        S S S 5        Sn[         R                  " [        US9   [        R                  " [
        R                  " S5      [
        R                  " S5      S9  S S S 5        Sn[         R                  " [        US9   [        R                  " S5        S S S 5        S	n[         R                  " [        US9   [        R                  " [
        R                  " S5      5        S S S 5        S
n[         R                  " [        US9   [        R                  " S[
        R                  " S5      45        S S S 5        Sn[         R                  " [        US9   [        R                  " [
        R                  " S5      S45        S S S 5        Sn[         R                  " [        US9   [        R                  " / SQ[
        R                  " S5      45        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNt= f! , (       d  f       GN8= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)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   rN   rO   )pytestr
   
ValueErrorr-   CovViaPrecisionr>   oneseyeCovViaDiagonalCovViaCholeskyCovViaEigendecompositionselfmessages     rE   test_input_validation$TestCovariance.test_input_validation7   s   N]]:W5''
3 6 E]]:W5''q	bffQiH 6 L]]:W5&&x0 6 N]]:W5&&rwwqz2 6 I]]:W500(BFF1I1FG 6 A]]:W500"''!*h1GH 6 N]]:W500)RVVAY1GH 651 65 65 65 65 65 65 65sS   +H+*>H=I+I!-I3#-J3/J+
H:=
I
I!
I03
J
J
J#c                     [        U SS9$ )NTallow_singular)r   )xs    rE   <lambda>TestCovariance.<lambda>Y   s    %)!D%ArG   )Diagonal	PrecisionCholeskyEigendecompositionPSDrR   )   r   rO   )r         )rO   rm      )r   r   rO   )rk   r   )ro   rk   r   r   r   r   )diagonal full rankzgeneral full rankzdiagonal singularzgeneral singularr   N)r   ro   rr   cov_type_namero   c                    [         R                  " / SQ5      n/ SQn[        [        SU 35      nU R                  U   n[        [
        SUR                  5        35      nU" U" U5      5      nU" U" U5      5      n[        U5      [        U5      L d   e[        UR                  U5      UR                  U5      5        g )NrR   )rN   rk   CovViafrom_)
r>   diaggetattrr-   _covariance_preprocessingr.   lowertyper   whiten)	r\   rs   Arc   cov_typepreprocessingfactoryrA   rB   s	            rE   test_factoriesTestCovariance.test_factoriese   s    GGI;&(@A66}E*m.A.A.C-D&EFmA&'}Q'(CyDI%%%

1szz!}5rG   matrix_typec                    SU SU S3nX R                   U   ;  a  [        R                  " U5        U R                  U   n[	        [
        SU 35      nU R                  U   n[        USS9nU" U" U5      5      n[        UR                  UR                  5        [        UR                  UR                  5        [        UR                  [        R                  " U5      R                  5        [        UR                  [        R                  " U5      5        [        R                   R#                  S5      n	U	R!                  SS9n
UR%                  U
5      nXR&                  -  n[        X-  X-  5        [)        US	5      (       a!  S
U;  a  [        UR+                  U5      U
5        U	R!                  SS9n
UR%                  U
5      nXR&                  -  n[        US-  R-                  SS9US-  R-                  SS95        [)        US	5      (       a!  S
U;  a  [        UR+                  U5      U
5        [)        US	5      (       aH  UR+                  [        R.                  " [1        U5      5      5      n[        UR2                  U-  U5        g g )Nrv    does not support 	 matricesTra      VGiVK rO   size	_colorizesingularrN   rm   rO   rN   ro   axis)
_cov_typesrS   skip	_matricesry   r-   rz   r   rF   log_pdetr   rankr@   r>   r?   rP   randomdefault_rngr}   UhasattrcolorizesumrW   lenT)r\   r   rs   r]   r~   r   r   psd
cov_objectrngrc   rA   rB   s                rE   test_covarianceTestCovariance.test_covariances   s    M?*<[M J  <<KK NN;';&(@A66}E1T* mA./
Z((#,,7Z__chh/Z%%rzz!}':':;Z**BJJqM: ii##$78JJAJ"%%iSY	*:{++
+0M,,S115 JJIJ&"%%ic1f\\r\*S!VLLbL,AB:{++
+0M,,S115 :{++%%bffSVn5Ca( ,rG   r   r   c                    SU SU S3nX0R                   U   ;  a  [        R                  " U5        U R                  U   n[	        [
        SU 35      nU R                  U   n/ SQnU" U" U5      5      n	[        n
[        XSS9n[        XSS9n[        R                  R                  S5      nUR                  XUS9n[        R                  R                  S5      nU
R                  XXS	9n[        R                  R                  S5      nU
" XUS
9R                  US9n[        U	[
        R                  5      (       aA  [        U[        R                  " U5      5        [        U[        R                  " U5      5        OL[!        UR"                  UR"                  5        [!        UR"                  UR"                  5        [        UU5        [        U
R%                  XU	5      UR%                  U5      5        [        UR%                  U5      UR%                  U5      5        [        U
R'                  XU	5      UR'                  U5      5        [        UR'                  U5      UR'                  U5      5        [        U
R)                  X5      UR)                  5       5        [        UR)                  5       UR)                  5       5        g )Nrv   r   r   皙?皙?333333?Tra   r   r   r   random_stateseed)r   rS   r   r   ry   r-   rz   r   r>   r   r   rvs
isinstance	CovViaPSDrF   squeezer   r@   pdflogpdfentropy)r\   r   r   rs   r]   r~   r   r   meanr   mvndist0dist1r   rc   x1x2s                    rE   test_mvn_with_covariance'TestCovariance.test_mvn_with_covariance   s    M?*<[M J  <<KK NN;';&(@A66}EmA./
!#DDA#DTJii##$78##D$#7ii##$78WWTDWCii##$78,00d0;j+"7"788RZZ]+RZZ]+177+177+R SWWQj1599Q<@UYYq\599Q<0SZZ4ell1oFU\\!_ell1o6S[[2EMMODU]]_emmo6rG   c                 t   SnU R                   U   n[        [        SU 35      nU R                  U   n/ SQnU" U" U5      5      n[        n	[	        XtSS9n
[	        XxSS9n[
        R                  R                  S5      nUR	                  XtUS9n[        U	R                  XU5      U
R                  U5      5        [        UR                  U5      U
R                  U5      5        [        U	R                  XU5      U
R                  U5      5        [        UR                  U5      U
R                  U5      5        g )Nrq   rv   r   Tra   r   r   )r   ry   r-   rz   r   r>   r   r   rF   cdflogcdf)r\   r   rs   r   r~   r   r   r   r   r   r   r   r   rc   s                 rE   test_mvn_with_covariance_cdf+TestCovariance.test_mvn_with_covariance_cdf   s    +NN;';&(@A66}EmA./
!#DDA#DTJii##$78##D$#7SWWQj1599Q<@UYYq\599Q<0SZZ4ell1oFU\\!_ell1o6rG   c                     Sn[         R                  " [        US9   [        5         S S S 5        g ! , (       d  f       g = f)Nz7The `Covariance` class cannot be instantiated directly.rL   )rS   r
   NotImplementedErrorr.   r[   s     rE   test_covariance_instantiation,TestCovariance.test_covariance_instantiation   s'    K]].g>L ?>>s   0
>zignore::RuntimeWarningc                 p   [         R                  " / SQ5      nUR                  S   n[         R                  " U5      n[        R
                  " [        SS9   [        X15      R                  5         S S S 5        Sn[         R                  R                  U5      n[         R                  R                  U5      n[        R                  " [         R                  R                  U5      5      n[        X75      nUR                  US9n	[        R                  " X7US9n
[        X5        g ! , (       d  f       N= f)N)r   rN   g:0yEr   zThe input matrix must be...rL   l   .ypGw r   )r>   rx   r@   zerosrS   r
   rT   r   r   r   r   r.   from_eigendecompositionlinalgeighr   )r\   r~   nr   r   rng1rng2covrvrA   rB   s              rE   test_gh9942TestCovariance.test_gh9942   s    
 GGM"GGAJxx{ ]]:-JK(,,. L #yy$$T*yy$$T*001BC +ff$f'!%%ddCS LKs   D''
D5c                 d   [         R                  " S5      n[        R                  " [         R                  " S5      [         R
                  " S5      45      n[        R                  R                  XS9nUR                  S S9n[        XA5        [        R                  R                  R                  [         R                  " SS/5      [         R                  " SS/SS//5      45      n[        R                  R                  XS9nUR                  S S9nUS   US   :w  d   eUS   US   :X  d   eg )	NrN   r   r   r         ?        g      y@r   r   )r>   rV   r.   r   r   rW   scipyr0   r   r   r   array)r\   r   r   distr   s        rE   test_gh19197TestCovariance.test_gh19197  s    
 wwqz00"((1+rvvay1IJ{{..D.BhhDh!Skk$$<<XXr2hB8b$Z*@!ABD{{..D.BhhDh!1va   1va   rG    )__name__
__module____qualname____firstlineno__r^   r>   rx   r   invcholeskyr   rz   r   list_all_covariance_typesr   r   rS   markparametrizer   r   tupler   r   r   filterwarningsr   r   __static_attributes__r   rG   rE   rI   rI   5   s	   I< .0WW.0iimm-/YY-?-?79yy~~)B	!C HHT*C%DE')wwy'9'0)Y&G&(ggi&8&0*i%HJI )>'<QR'@'<['I&;BC&@BJ
 [[_.CCR.HI6 J6 [[]DO<[[_.CD-) E =-)^ [[VdEGQ	%BC[[]DO<[[_.CD#7 E = D#7J [[Vegy%9:[[_.CD7 E ;70
 [[ 89 :,!rG   rI   c                    UR                  X 45      nXDR                  -  n[        R                  R	                  U5      u  pVU(       a  UR                  U S9S:  nSX'   U[        R                  " U5      -  UR                  -  nU$ )Nr   r   )r   r   r>   r   r   normalrx   )	dimevalsr   r   r~   _v	zero_eigsr   s	            rE   _random_covariancer     ss     	

C:A	CCA99>>!DAJJCJ(1,	
bggen
qss
"CJrG   c                     [         R                  R                  S5      nUR                  X 45      n[        R
                  R                  U5      u  p4nU$ )Nl   :; )r>   r   r   standard_normalr   r   svd)r   r   Musr   s         rE   _sample_orthonormal_matrixr   #  sE    
))



+CQF#Allq!GA!HrG   c                 d  ^ ^^^ [         R                  " U5      nX"S:  ==   T-  ss'   UR                  5       nTSS2U4   m[         R                  " T[        S9mSTU'   U UUU4S jn[         R
                  " T[        U5      -
  [         R                  5      n[        XV* U5      R                  $ )zwIntegrate marginalized dimensions of multivariate
probability distribution to calculate the marginalized
distribution.
r   NdtypeFc                    > [         R                  " U R                  S   TR                  S   T45      nU S S 2[         R                  S S 24   UST4'   TUST) 4'   TR	                  U5      $ )Nr   .)r>   emptyr@   newaxisr   )zyXX_ndimi_marginalizerc   s     rE   gmarginal_pdf.<locals>.g7  se    HHaggaj!''!*f56 !!RZZ"2 3#}
!"#~
uuQxrG   )
r>   r?   argsortrV   boolfullr   infr2   estimate)r   r   
dimensionsrc   dim_sort_idxr  r  r   s   `` `   @rE   marginal_pdfr
  )  s     J'JA~&(%%'L	!\/AGGF$/M %M*  ''&3z?*BFF
3CAtS!***rG   c                   ,  ^  \ rS rSr% Sr\\S'   \R                  \S'   \R                  \S'   \R                  \S'   \R                  \S'   \	\S'   \	\S	'   S
r
\	S
-  \S'   U 4S jr\SS j5       r\SS j5       r\SS j5       rS rS rS rS rSrU =r$ )
MVNProblemi@  a$  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U ]  5         Xl        X l        X0l        X@l        [        R                  " U R
                  U R
                  5      U l        [        R                  " U R                  S5        U R                  5         g Nr   )super__init__r  r  r  r  r>   outerr  fill_diagonalfind_target)r\   r  r  r  r  	__class__s        rE   r  MVNProblem.__init__]  s\    		XXdllDLL9

S)rG   c                    [         R                  R                  U5      n[         R                  " U[         R                  * 5      nUR                  S[         R                  " U5      US9nUR                  SSUS9nU " UUUUS9nU$ )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_semigeneralMVNProblem.generate_semigeneralh  s{     ii##C(ggdRVVG${{3D{9++dCd+3	
 rG   c                 d   [         R                  R                  U5      n[         R                  " U[         R                  * 5      nUR                  S[         R                  " U5      US9n[         R                  " UR                  SS5      5      n[         R                  " X5      nU " UUUUS9nU$ )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_constantMVNProblem.generate_constanty  s     ii##C(ggdRVVG${{3D{9C-.''$&	
 rG   c                     [         R                  " U[         R                  * 5      n[         R                  " U5      n[         R                  " S5      nU " UUUUS9nSUS-   -  Ul        U$ )zjOff-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_halvesMVNProblem.generate_halves  s`     ggdRVVG$xx~''#,	
 T!VrG   c                     [        SSS9nUR                  U5        [        U R                  40 UD6u  U l        U l        g)z?Perform the simplified integral and store the results.
              "      "@abNdictupdater3   univariate_funcr  r  r\   kwdsds      rE   r  MVNProblem.find_target  s?     
 	
+/0D0D+J+J(rG   c           
         [         R                  " SU R                  S-  -
  5      n[         R                  " [        R
                  " U R                  U R                  USS2[         R                  4   -  -   U-  5      [        R
                  " U R                  U R                  USS2[         R                  4   -  -   U-  5      -
  SS9$ )zPThe parameter-specific term of the univariate integrand,
for separate plotting.
r   rN   Nr   )	r>   r"  r  prodspecialndtrr  r   r  )r\   tdenoms      rE   _univariate_termMVNProblem._univariate_term  s     DLL!O+,wwLL$))dll1Q

]3C&CCuLMLL$((T\\!ArzzM2B%BBeKLM
 	
rG   c                     [         R                  " U5      n[         R                  " [        U5      U R	                  U5      -  5      $ )zUnivariate integrand.
        )r>   
atleast_1dr   norm_pdfrC  r\   rA  s     rE   r8  MVNProblem.univariate_func  s5     MM!zz(1+(=(=a(@@AArG   c                    SSK Jn  [        R                  " SSS5      nUR	                  U[        U5      SS9  UR	                  X R                  U5      SS9  UR	                  X R                  U5      S	S9  UR                  5         g
)QPlot the univariate integrand and its component terms for understanding.
        r   pyplotr0  r1    	$\phi(t)$label$f(t)$$f(t)*phi(t)$N)	
matplotlibrM  r>   linspaceplotrG  rC  r8  legendr\   pltrA  s      rE   plot_integrandMVNProblem.plot_integrand  so     	-KKc4(HQK|4))!,I>((+3CD

rG   )r  r  r  r  r  r  r  r  r=   )r   r   r   r   __doc__int__annotations__r>   ndarrayfloatr  r  classmethodr%  r)  r-  r  rC  r8  rZ  r   __classcell__)r  s   @rE   r  r  @  s     J
**::jjJJ #Hut|"	     "  $K	
B	 	rG   r  c                       \ rS rSr% Sr\\S'   \R                  \S'   \R                  \S'   \R                  \S'   \R                  \S'   \	\S'   \	\S	'   S
 r
\SS j5       rS rS rS rS rSrg)SingularMVNProblemi  a  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                 B   Xl         X l        X0l        [        R                  " U[        R
                  * 5      U l        [        R                  " U R                  U R                  5      * U l        [        R                  " U R                  S5        U R                  5         g r  )r  r  r  r>   r  r  r  r  r  r  r  )r\   r  r  r  s       rE   r  SingularMVNProblem.__init__  sf    		774"&&)hht||T\\::

S)rG   Nc                 H   [         R                  R                  U5      nUR                  S[         R                  " U5      US9nUR                  [         R                  " US5      5      n[         R                  " USU-
  -  5      UR                  SS/US9-  nU " UUUS9nU$ )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_semiinfinite(SingularMVNProblem.generate_semiinfinite  s     ii##C({{3D{9MM"''$,-''!qs)$szz4+Dz'II

 rG   c                     [        SSS9nUR                  U5        [        U R                  40 UD6u  U l        U l        g )Nr0  r1  r2  r5  r9  s      rE   r  SingularMVNProblem.find_target  s=    
 	
+/0D0D+J+J(rG   c           	         [         R                  " SU R                  S-  -   5      n[         R                  " [        R
                  " U R                  SU R                  -  US S 2[         R                  4   -  -
  U-  5      SS9n[         R                  " [        R
                  " U R                  * SU R                  -  US S 2[         R                  4   -  -   U-  5      SS9nUSU R                  -  U-  -
  R                  $ )Nr   rN   y              ?r   ro   )
r>   r"  r  r>  r?  r@  r  r   r  real)r\   rA  rB  i1i2s        rE   rC  #SingularMVNProblem._univariate_term  s    DLL!O+,WWLL$))boa2::6F&FF%OP
 WWLL499*r$,,qBJJ7G'GG5PQ
 b499_r))///rG   c                     [         R                  " U5      n[        U5      U R                  U5      -  R	                  5       $ r=   )r>   rF  rG  rC  r   rH  s     rE   r8  "SingularMVNProblem.univariate_func  s3    MM!d33A66??AArG   c                 4   SSK Jn  [        R                  " SSS5      nUR	                  U[        U5      SS9  UR	                  X R                  U5      SS9  UR	                  X R                  U5      S	S9  UR                  S
S5        UR                  5         g)rK  r   rL  r0  r1  rN  rO  rP  rR  rS  皙皙?N)
rT  rM  r>   rU  rV  rG  rC  r8  ylimrW  rX  s      rE   rZ  !SingularMVNProblem.plot_integrand  s}     	-KKc4(HQK|4))!,I>((+3CDs

rG   )r  r  r  r  r  r  r  r=   )r   r   r   r   r\  r]  r^  r>   r_  r`  r  ra  rj  r  rC  r8  rZ  r   r   rG   rE   rd  rd    sq    " J
**::jjJJ  K0B
rG   rd  c                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS r\R&                  R)                  S\R,                  " S5      \R0                  " SS/5      /5      S 5       rS rS rS rS rS rS rS r S r!S r"S r#S r$S r%S  r&S! r'\R&                  RP                  \R&                  R)                  S"SS#/5      S$ 5       5       r)S% r*\R&                  R)                  S"\+" SS&5      5      \R&                  R)                  S'S(S)/5      S* 5       5       r,\R&                  R)                  S"\+" SS+5      5      \R&                  R)                  S'S(S)/5      S, 5       5       r-\R&                  R)                  S"\+" S-S+5      5      \R&                  R)                  S'S(S./5      S/ 5       5       r.S0 r/S1 r0\R&                  R)                  S2S35      S4 5       r1S5 r2\R&                  R)                  S6\Rf                  " S75      \Rf                  " S85      /5      S9 5       r4\R&                  R)                  S:\Rf                  " S;5      \Rf                  " S<5      \Rf                  " S=5      /5      S> 5       r5S? r6S@ r7SA r8SBr9gC)DTestMultivariateNormali!  c                 \   [         R                  " S5      n[         R                  " S5      n[        [        [
        R                  SX5        [        [        [
        R                  SX5        [        [        [
        R                  SX5        [        [        [
        R                  SX5        g )NrO   rN   r   r   r   r   rN   )r>   arangeidentityassert_raisesrT   r   r   r   )r\   mur   s      rE   test_input_shape'TestMultivariateNormal.test_input_shape"  sp    YYq\kk!nj"5"9"962Kj"5"9"99bNj"5"9"962Kj"5"9"99bNrG   c                    [         R                  R                  S5      nSu  p#n[        R                  " X#U5      n[        UR                  S5        UR                  S5      nUR                  S5      n[         R                  " UR                  S5      5      n[        R                  " X#U5      n[        UR                  S5        Su  p#n[        R                  " X#U5      n[        UR                  S5        UR                  S5      nUR                  S5      n[         R                  " UR                  S5      5      n[        R                  " X#U5      n[        UR                  S5        g )N  )      ?g333333?      @r   rk   )
r>   r   r   r   r   r   r  r   absr   )r\   r   rc   r   r   r   r   s          rE   test_scalar_values)TestMultivariateNormal.test_scalar_values*  s"   ii##D) %!%%as3SXXq! """1%ffS((+,!%%as3SXXq! %!%%as3SXXq! """1%ffS((+,!%%as3SXXq!rG   c                 l   [         R                  R                  S5      nUR                  S5      nUR                  S5      n[         R                  " UR                  S5      5      n[
        R                  " X#U5      n[
        R                  " X#U5      n[        U[         R                  " U5      5        g Nr  rk   )
r>   r   r   r   r  r   r   r   r   logr\   r   rc   r   r   d1d2s          rE   test_logpdf"TestMultivariateNormal.test_logpdfE      ii##D)"""1%ffS((+, ''5 $$Qc2BFF2J'rG   c                    [         R                  R                  S5      nUR                  S5      n[        R
                  " U5      n[        R                  " U5      n[        R
                  " US S5      n[        R                  " US S5      n[        U[         R                  " U5      5        [        U[         R                  " U5      5        g Nr  rk   r   )	r>   r   r   r   r   r   r   r   r  r\   r   rc   r  r  d3d4s          rE   test_logpdf_default_values1TestMultivariateNormal.test_logpdf_default_valuesO       ii##D)" ''* $$Q' ''43 $$Qa0BFF2J'BFF2J'rG   c                 l   [         R                  R                  S5      nUR                  S5      nUR                  S5      n[         R                  " UR                  S5      5      n[
        R                  " X#U5      n[
        R                  " X#U5      n[        U[         R                  " U5      5        g r  )
r>   r   r   r   r  r   r   r   r   r  r  s          rE   test_logcdf"TestMultivariateNormal.test_logcdf\  r  rG   c                    [         R                  R                  S5      nUR                  S5      n[        R
                  " U5      n[        R                  " U5      n[        R
                  " US S5      n[        R                  " US S5      n[        U[         R                  " U5      5        [        U[         R                  " U5      5        g r  )	r>   r   r   r   r   r   r   r   r  r  s          rE   test_logcdf_default_values1TestMultivariateNormal.test_logcdf_default_valuesf  r  rG   c                 L   [         R                  R                  S5      nSnUR                  U5      n[	        SUS-   5       H_  nUR                  X$45      n[         R
                  " XUR                  5      n[        X6SS9n[        UR                  R                  U5        Ma     g )Nr  rm   r   Tra   )r>   r   r   r   rangedotr   r   r   r   r   )r\   r   r   r   expected_rankr   r   distns           rE   	test_rank TestMultivariateNormal.test_ranks  s    ii##D)""1%"1a!e_M##Q$67A&&CC.C'$GE))..>	 -rG   c           	         [         R                  R                  S5      n[        SS5       GH  nUR	                  U5      n[        SU5       GHx  nUR	                  XD45      n[         R
                  " XUR                  5      n[         R                  " X"45      nXgS U2S U24'   [         R                  " U5      nUS U US U& [        U5      n	[         R
                  " U	[         R
                  " XyR                  5      5      n
[         R
                  " X5      n[        [         R                  " U5      USS9n[        [         R                  " U5      USS9n[        [         R                  " U5      U
SS9n[        UR                  R                  U5        [        UR                  R                  U5        [        UR                  R                  U5        UR                  US U 5      nUR                  U5      nUR                  U5      n[        UU5        [        UU5        UR                  US U 5      nUR                  U5      nUR                  U5      n[        UU5        [        UU5        XS S 2S4   -   nUR                  U5      nUR                  U5      n[        US5        [        U[         R                   * 5        GM{     GM     g )Nr  r   rk   Tra   ro   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_nnrc   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_distributions4TestMultivariateNormal.test_degenerate_distributions~  sF   ii##D)q!A##A&A1a[''/33 1&)!'rr2A2v HHQK"1"1 /q1266&###67FF1L /rxx{F>BD.rxx{F>BD.rxx{F>BDX0055q9X0055q9X0055q9!ae,!a!a//$OOAbqE2	$OOA.	$OOA.		95	95 q"uX&ll62!)!8 [#.^bffW5] ! rG   c           	      h   Sn[        SS5       GH  n[        SU5       GH
  n[        R                  " U5      n[        U5      S S 2S U24   n[        R                  " XUR
                  5      n[        R                  " XFUS9n[        R                  " XtUSS9n[        UR                  U5        [        R                  " US:  5      (       d   e[        R                  " XtUSS9n	[        U	R                  U5        [        R                  " U	[        R                  * :  5      (       a  GM   e   GM"     g )	N
   rN   rl   r   r   r   r   T)r   r   rb   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_array,TestMultivariateNormal.test_degenerate_array  s     q!A1a[XXa[.q1!RaR%8VVAss^'++!D)--ab=ACSXXq)vvcCi((((,33ABCGIV[[!,vvfw.//// ! rG   c                 <   SnSnSn[         R                  " X-  5      nX#-   n[         R                  " XU4[        S9n[         R                  " Xd5        SXc* S 2U* S 24'   [        [        R                  R                  U5      S5        [        [        R                  R                  US U2S U24   5      [         R                  5        [        [         R                  R                  US U2S U24   5      SU45        [        U5      n[        UR                  U5        g )Ng     @@d   rN   r   r   r   )r>   expr   r`  r  r   r   r   detr  r   slogdetr   r   )r\   large_total_lognposnzerolarge_entryr   r   r   s           rE   test_large_pseudo_determinant4TestMultivariateNormal.test_large_pseudo_determinant  s    
 !ff_34LhhvU+
* !FGeVW 	U\\%%c*A.U\\%%c%4%$,&78"&&A		))#eteUdUl*;<O,	. 3io6rG   c                 :   [         R                  R                  S5      nSnUR                  X"5      n[         R                  " X3R
                  5      nUR                  U5      nUR                  SSU5      n[        R                  " XeU5      n[        R                  " XeU5      n[        S5       Hh  n	[        S5       HV  n
[        R                  " XiU
4   XT5      n[        XX4   5        [        R                  " XiU
4   XT5      n[        XX4   SS9  MX     Mj     g )Nr  rm   rN   rO   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_broadcasting(TestMultivariateNormal.test_broadcasting  s    ii##D) yyffT66"yy| IIaA *--as;)--as;qA1X,00a4$DAC(89,00a4$DAC(8tD  rG   c                 *   [         R                  " SSS5      nSu  p#US-  n[        R                  " XU5      n[        R                  " XU5      n[        XV5        [        R                  " XU5      n[        R                  " XU5      n[        XV5        g )Nr   rN   r  )333333??r,  )r>   rU  r   r   r   r   r   )r\   rc   r   r   scaler  r  s          rE   test_normal_1D%TestMultivariateNormal.test_normal_1D  sz     KK1b!	SXXau% $$Qc2XXau% $$Qc2rG   c                 6   [         R                  " SS/5      n[         R                  " SS/SS//5      nSnSUS-
  -  n[         R                  " S	SU5      n[         R                  " XU5      u  pg[         R                  " X3S
45      nXhS S 2S S 2S	4'   XxS S 2S S 2S4'   [
        R                  " XU5      n	[        XS	S9n
[        XSS9n[        R                  " XQS	   US   S-  S9n[        R                  " XQS   US   S-  S9n[        XSSS9  [        XSSS9  g )Nr  g      @r,  r   333333?i  rl   r   r   rN   r   r   r   locr  )r   r   {Gz?r  atol)
r>   r   rU  meshgridr   r   r   r4   r   r   )r\   r   r   r   deltar   xvyvposr   margin_xmargin_ygauss_xgauss_ys                 rE   test_marginalization+TestMultivariateNormal.test_marginalization  s    xxc
#hhS	C9-.QUKK1a Q"hhay!Aq!GAq!G!%%c5 ++ ((1q'Tc1AB((1q'Tc1AB4@4@rG   c                 f   [         R                  R                  S5      nUR                  S5      nUR                  S5      n[         R                  " UR                  S5      5      n[        X45      n[        UR                  U5      [
        R                  " X#U5      5        [        UR                  U5      [
        R                  " X#U5      5        [        UR                  U5      [
        R                  " X#U5      5        [        UR                  U5      [
        R                  " X#U5      5        g r  )r>   r   r   r   r  r   r   r   r   r   r   )r\   r   rc   r   r   norm_frozens         rE   test_frozen"TestMultivariateNormal.test_frozen  s    ii##D)"""1%ffS((+,)$4*,?,C,CAS,QR**1-+221C@	B*,?,C,CAS,QR**1-+221C@	BrG   rP   rN   r   c                    [         R                  " S5      n[         R                  " S5      n[        X!5      n[         R                  " UR
                  U5      (       d   e[         R                  " UR                  U5      (       d   eg )NrN   rN   )r>   rV   rW   r   allcloser   r   )r\   rP   r   cov_should_ber  s        rE   2test_frozen_multivariate_normal_exposes_attributesITestMultivariateNormal.test_frozen_multivariate_normal_exposes_attributes-  s`     wwt}q	)$;{{;++T2222{{;??M::::rG   c           
         [         R                  R                  S5      nSnUR                  X"45      n[         R                  " X3R
                  5      n[        R                  R                  U5      u  pV[         R                  " US5      nSUS'   SUS'   [         R                  " U[         R                  " [         R                  " U5      UR
                  5      5      nSn[        XGS	9n[        UR                  US	9n	[        UR                  [         R                  " [         R                   " US S 5      5      5        [        UR                  * U	R                  5        g )
Nr  rn   r,  r   r   Hz>ro   h㈵>)cond)r>   r   r   r   r  r   r   r   r   r  rx   r   pinvr   r   r   r  )
r\   r   r   rc   r   r   r   r  r   psd_pinvs
             rE   test_pseudodet_pinv*TestMultivariateNormal.test_pseudodet_pinv;  s     ii##D)'ffQn||  %GGAsO!"ffQrwwqz133/0 3"t, 	bffRVVAcrF^&<= 	x'8'89rG   c                 >    / SQ/ SQ/n[        [        [        U5        g )NrR   rm   rk   rl   r  rT   r   r\   r   s     rE   test_exception_nonsquare_cov3TestMultivariateNormal.test_exception_nonsquare_covU  s    )$j$,rG   c                     SS/S[         R                  //n[        [        [        U5        SS/S[         R
                  //n[        [        [        U5        g )Nr   r   )r>   nanr  rT   r   r  )r\   cov_nancov_infs      rE   test_exception_nonfinite_cov3TestMultivariateNormal.test_exception_nonfinite_covY  sF    q6Arvv;'j$0q6Arvv;'j$0rG   c                 >    SS/SS//n[        [        [        U5        g )Nr   r   ro   r  r  s     rE   test_exception_non_psd_cov1TestMultivariateNormal.test_exception_non_psd_cov_  s     1v2wj$,rG   c                    [         R                  R                  S5      nUR                  S5      nUR                  S5      n[         R                  " S5      n[         R
                  R                  n[        U[        X45        [        U[        R                  X#U5        [        U[        R                  X#U5        [        U[        R                  X#U5        [        U[        R                  X#U5        SS/SS//nSn[        R                  " [         R
                  R                  US9   [        US9  S S S 5        g ! , (       d  f       g = f)	Nr  rk   )rk   rk   r   r   z0When `allow_singular is False`, the input matrixrL   r   )r>   r   r   r   rV   r   LinAlgErrorr  r   r   r   r   r   rS   r
   )r\   r   rc   r   r   emsgs          rE   test_exception_singular_cov2TestMultivariateNormal.test_exception_singular_covc  s    ii##D)"""1%ggfoII!!a,d8a,00!3?a,33QcBa,00!3?a,33QcB Bx"b"@]]29900<C( =<<s   *
D==
Ec                 0   [         R                  " / SQ5      n[         R                  " SSS5      nSU-  S-
  nU[         R                  " U5      -   n[         R                  " X#U/5      R                  n[         R                  " / SQS5      n[         R                  " / SQ/ S	Q/ S
Q/S5      n[
        R                  " XVU5      n[        XSS9  [         R                  " / SQ5      n	[
        R                  " XVU5      n
[        XSS9  [         R                  " / SQ5      n[         R                  " X#/5      R                  n[         R                  " SS/S5      n[         R                  " SS/SS//S5      n[
        R                  " XU5      n[        XSS9  g )N)g0Q-?gox'V?g[S, t?gDB?gc_.?r   rN   rk   rO   )r   rO   rN   r;  r   rN   r   )rN   rk   r,  )r   r,  rO   绽|=r  )gwk:E]?g̙Z?g0?gL8?gAG*?gh㈵>)gIى?gG?gƏ)?gėh?gEE?r   r  )	r>   r   rU  cosr   r   r   r   r   )r\   r_pdfrc   r   r   r  r   r   r   r_cdfr   r_cdf2r2mean2cov2cdf2s                   rE   test_R_values$TestMultivariateNormal.test_R_valuesv  sQ     6 7 KK1a EAIq	MHHaAY!!xx	3'hh	:z:C@!%%as3/  6 7 "%%as3.  3 4 XXqf!Q%xx!Q!Q(#."&&r$740rG   c                     [         R                  " S5      n[         R                  " S5      n[        XSS9nUR                  5       n[	        USS/5        g )NrN   rN   rN   Tra   r   )r>   r   r   r   r   )r\   r   rP   modelsamples        rE   ,test_multivariate_normal_rvs_zero_covarianceCTestMultivariateNormal.test_multivariate_normal_rvs_zero_covariance  sB    xx{XXf%
#DTJVaV$rG   c                    SnSn[         R                  " [        R                  " U5      SUS9n[	        UR
                  X45        [         R                  " S [        R                  " SS/SS//5      US9n[	        UR
                  US45        [        SSS9nUR                  U5      n[	        UR
                  U45        g )	Ni,  rm   r   r  rN   r   r   r   )r   r   r>   r   r   r@   r   )r\   Nr;  r1  r   s        rE   test_rvs_shape%TestMultivariateNormal.test_rvs_shape  s     $((bhhqkqqIV\\A6*$((d-/XX2wQ6H-I./1 	V\\Aq6*QA.qV\\A5)rG   c                 ~   [         R                  R                  S5      nSnUR                  U5      nUR                  X"5      n[         R                  " XDR
                  5      nSn[        R                  " X5XaS9n[        [         R                  " UR
                  5      USS9  [        UR                  S5      USS9  g )N  rO     r   r   r  r   )r>   r   r  r  r  r   r   r   r   r   r   )r\   r   r   r   r   r   r   r1  s           rE   test_large_sample(TestMultivariateNormal.test_large_sample  s     ii##D)yy|IIaOffQn$((DKvxx(#D9A48rG   c                 h   [         R                  R                  S5      nSnUR                  U5      nUR                  X"5      n[         R                  " XDR
                  5      n[        X55      n[        UR                  5       [        R                  " X55      5        [         R                  R                  U5      S   nSU[         R                  " S[         R                  -  5      S-   -  [         R                  " [         R                  " U5      5      -   -  n[        XR                  5       5        g )Nr9  rO   r   r,  rN   r   )r>   r   r  r  r  r   r   r   r   r   eigr  pir   )	r\   r   r   r   r   r   r   eigsdesireds	            rE   test_entropy#TestMultivariateNormal.test_entropy  s    ii##D)yy|IIaOffQn + 	BJJL*=*E*Ed*PQ yy}}S!!$1q255y 1A 56t9MMNGZZ\2rG   c                     [         R                  " / SQ5      nSn[        [         R                  " [	        U5      5      U5        g )Nr   r   r   r,  )r>   r   r   r  r   )r\   alpharA  s      rE   test_lnBTestMultivariateNormal.test_lnB  s,    #BFF4;/9rG   c                 r   [         R                  R                  S5      nSS/n[         R                  " S5      nUR                  S5      S-  S-
  nUR                  S5      S-  S-
  n[        R
                  " XRX4S9n[        R
                  " XRU5      n[        R
                  " XBU5      n[         R                  " USSS	24   USS	S24   4S
S9n	[         R                  " USS	S24   USSS	24   4S
S9n
[        R
                  " XU5      n[        R
                  " XU5      nXx-   U-
  U-
  n[        Xm5        g )N   FYc@Y r   rN   )rm   rO   rN   rl   rO   lower_limit.r   ro   r   )r>   r   r   rW   r   r   concatenater   )r\   r   r   r   r3  r4  cdf1cdf2acdf2bab1ab2cdf2ab1cdf2ab2r+  s                 rE    test_cdf_with_lower_limit_arrays7TestMultivariateNormal.test_cdf_with_lower_limit_arrays  s*   ii##$781vffQiJJy!!#a'JJy!!#a'"&&qC#''5#''5nnaQqSk1S!A#X;7bAnnaQqSk1S!A#X;7bA%))#S9%))#S9}w&0#rG   c           	      >   [         R                  R                  S5      nUR                  S5      nUR                  S5      nX3R                  -  nUR                  S5      S-  S-
  nUR                  S5      S-  S-
  n[        R
                  " XRX4S9n[	        X#5      R                  XTS9n[         R                  " [        R                  " XRX4S95      n[         R                  " [	        X#5      R                  XTS95      n	[        XvSS9  [        XSS9  [        XSS9  g )	NrJ  rO   rO   rO   rN   rO   rl   rK  -C6?r  )	r>   r   r   r   r   r   r  r   r   )
r\   r   r   r   r3  r4  rN  r+  cdf3cdf4s
             rE   %test_cdf_with_lower_limit_consistency<TestMultivariateNormal.test_cdf_with_lower_limit_consistency  s    ii##$78zz!}jj EEkJJvq 1$JJvq 1$"&&qC"4-11!1Cvv)00#MNvv)$4;;A;MN...rG   c                    [         R                  " S5      n[         R                  " S5      n/ SQ/ SQ/ SQ/ SQ/n/ SQ/ SQ/ SQ/ SQ/n[         R                  " / SQ5      n[        R
                  " X1X$S9n[        XfS   U-  5        g )	NrO   rE  rp   r   r   r   r   r   r   r   ro   ro   r   rK  r   r>   r   rW   r   r   r   r   )r\   r   r   r4  r3  expected_signsr   s          rE   test_cdf_signs%TestMultivariateNormal.test_cdf_signs  si    xx{ffQi	9i8	9i8.1!%%asBVN23rG   r  rO   c                    [         R                  R                  S5      nUR                  X4S9nUR                  U-  nUR                  US9n[        XTS9nUR                  SSU4S9nUR                  U5      n[        S/U-  US9n	[        U	R                  [         R                  * /U-  Xu-
  5      R                  n
[        XSS	9  g )
N{   r   r   rO   )r  r  r   r   gh㈵>r#  )r>   r   r   r   r   r   r   r2   r   r  r  r   )r\   r  r   r3  r   mr   rc   r   dist_icdf_is              rE   test_cdf_vs_cubature+TestMultivariateNormal.test_cdf_vs_cubature(  s     ii##C(KKd\K*ccAgKKTK""3KKBQdWK5hhqk$1#d(<rvvgYt^QU;DD.rG   c                     [        SS5       Hd  n[        R                  " X4S5      n[        R                  " US5        [	        S/U-  US9n[        UR                  S/U-  5      SSU-   -  SS9  Mf     g )	NrN      r,  r   r   r  -C6
?r#  )r  r>   r  r  r   r   r   )r\   r  r   r   s       rE   test_cdf_known%TestMultivariateNormal.test_cdf_known6  so    !RLD''4,,CS"%&s4xS9D!T"b4i 	 !rG   r  r   l   >[= l	   HVqKWs.!) c                 Z   [         R                  R                  U5      n[        R	                  X#S9nUR
                  [         R                  * :H  R                  5       (       d   e[        S/U-  UR                  S9nUR                  UR                  US9n[        XdR                  SS9  g Nr  r   r   r   r   rq  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_univariate-TestMultivariateNormal.test_cdf_vs_univariateB  s     ii##D)..D.BRVVG#((****"DdjjA((499#(.t<rG      c                 Z   [         R                  R                  U5      n[        R	                  X#S9nUR
                  [         R                  * :H  R                  5       (       d   e[        S/U-  UR                  S9nUR                  UR                  US9n[        XdR                  SS9  g ru  )r>   r   r   r  r)  r  r  r  r   r  r   r  r   r  rx  s          rE   test_cdf_vs_univariate_2/TestMultivariateNormal.test_cdf_vs_univariate_2M  s     ii##D)+++?RVVG#((****"DdjjA((499#(.t<rG   rm   l	   HVqKWs.!) c                    [         R                  R                  U5      n[        R	                  X#S9nUR
                  [         R                  * :H  R                  5       (       d   e[        S/U-  UR                  SSUR                  R                  S   -  S9nUR                  UR                  US9n[        XdR                  SS9  g )	Nrv  r   T'  )r   r   rb   maxptsrw  r  r#  )r>   r   r   rd  rj  r  r  r  r   r  r@   r   r  r   r  rx  s          rE   test_cdf_vs_univariate_singular6TestMultivariateNormal.test_cdf_vs_univariate_singularX  s    
 ii##D)!77T7KRVVG#((****"DdjjQU*01A1A!1D*D
 ((499#(.t<rG   c                    [         R                  " S[         R                  " / SQ5      -  5      n[        R                  " U5      nSn[
        R                  " [        US9   [        R                  " SS/U5        S S S 5        [
        R                  " [        US9   [        SS/U5        S S S 5        / SQn[        R                  " U/ SQU5      n[        [        R                  " XBS9U5        [        R                  " U/ S	QU5      n[        [        R                  " USUS9U5        g ! , (       d  f       N= f! , (       d  f       N= f)
Nr   rR   z7`cov` represents a covariance matrix in 3 dimensions...rL   r   )r,  r,  r,  rp   r  rE  )r>   rx   r   r-   rU   rS   r
   rT   r   r   r   r   )r\   Pr   r]   rc   rB   s         rE   test_mean_cov$TestMultivariateNormal.test_mean_covh  s    GGA++, 003
K]]:W5''A
; 6 ]]:W5A
3 6 !%%aJ?(,,Q?E!%%aJ?(,,QzBCH 65 65s   !D*D;*
D8;
E	c                     SS/nSn[         R                  " [        US9   [        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nr   rO   z`x` must be two-dimensional.rL   )rS   r
   rT   r   fit)r\   r  	error_msgs      rE   test_fit_wrong_fit_data_shape4TestMultivariateNormal.test_fit_wrong_fit_data_shape{  s8    1v2	]]:Y7##D) 877s   A  
Ar   )rO   rk   c                 &   [         R                  R                  S5      nUR                  SU45      n[        R                  " U5      u  pE[         R
                  " USS9[         R                  " UR                  SS9pv[        XFSS9  [        XWSS9  g )	N   @,Q| r  r   r   )ddofV瞯<r#  r  )	r>   r   r   r   r  r   r   r   r   )r\   r   r   rc   mean_estcov_estmean_refcov_refs           rE   test_fit_correctness+TestMultivariateNormal.test_fit_correctness  sq    ii##$45JJSz"/33A6GGAA.qss0C'7u5rG   c                     [         R                  " SS5      nSn[         R                  " S5      n[        R                  " XUS9u  pE[        XB5        [        XS5        g )N)rN   r   rO   r   )fix_meanfix_cov)r>   r  
atleast_2dr   r  r   )r\   r  
mean_fixed	cov_fixedr   r   s         rE   test_fit_both_parameters_fixed5TestMultivariateNormal.test_fit_both_parameters_fixed  sL    wwvq!
MM"%	'++D4=?	T&S$rG   r  r/  rO   c                     Sn[         R                  " [        US9   [        R                  " [
        R                  " S5      US9  S S S 5        g ! , (       d  f       g = f)Nzd`fix_mean` must be a one-dimensional array the same length as the dimensionality of the vectors `x`.rL   rN   r  rS   r
   rT   r   r  r>   rW   )r\   r  r  s      rE   "test_fit_fix_mean_input_validation9TestMultivariateNormal.test_fit_fix_mean_input_validation  s<    C]]:S1##BFF1IA 211   *A
Ar  r  )rO   rN   )rm   rm   c                     Sn[         R                  " [        US9   [        R                  " [
        R                  " S5      US9  S S S 5        g ! , (       d  f       g = f)Nzn`fix_cov` must be a two-dimensional square array of same side length as the dimensionality of the vectors `x`.rL   rO   r  r  )r\   r  r  s      rE   +test_fit_fix_cov_input_validation_dimensionBTestMultivariateNormal.test_fit_fix_cov_input_validation_dimension  s=     ]]:S1##BFF1Iw? 211r  c                     Sn[         R                  " [        US9   [        R                  " SS/SS//5      n[
        R                  " [        R                  " S5      US9  S S S 5        g ! , (       d  f       g = f)Nz2`fix_cov` must be symmetric positive semidefinite.rL   r   r   r  rN   r  )rS   r
   rT   r>   r   r   r  rW   )r\   r  r  s      rE   *test_fit_fix_cov_not_positive_semidefiniteATestMultivariateNormal.test_fit_fix_cov_not_positive_semidefinite  sT    H	]]:Y7hhR2s)45G##BFF1Iw? 877s   AA++
A9c                    [         R                  R                  S5      nUR                  S5      nUR                  S5      n[         R                  " X3R                  5      n[
        R                  " X$SUS9n[
        R                  " U5      u  pg[
        R                  " XVUS9R                  5       n[
        R                  " XRS9u  p[        X5        [
        R                  " XYU
S9R                  5       nX:  d   eUR                  S5      nS[         R                  " X3R                  5      -  nX-   n[
        R                  " UU	US9R                  5       nX:  d   eg )	Nr  rO   rX  r  r   r   r   r   r   r  :0yE>)r>   r   r   r  r   r   r   r  r   r   r   )r\   r   r  r~   r   samples	mean_freecov_free	logp_freemean_fixcov_fixlogp_fixrj  cov_perturbedlogp_perturbeds                  rE   test_fit_fix_mean(TestMultivariateNormal.test_fit_fix_mean  s4   ii##$45jjmJJvffQn%))s#7:<155g>	'..w3;==@SU 	/33GJX#&--g29;;>35 	 ### JJv266!SS>!-44W:B9FH 8;su 	 (((rG   c                    [         R                  R                  S5      nUR                  S5      nUR                  S5      n[         R                  " X3R                  5      n[
        R                  " X$SUS9n[
        R                  " U5      u  pg[
        R                  " XVUS9R                  5       n[
        R                  " XTS9u  p[        U	[         R                  " USS	95        [        X5        [
        R                  " XYU
S9R                  5       nX:  d   eU	S
UR                  S5      -  -   n[
        R                  " UUU
S9R                  5       nX:  d   eg )Nr  rO   rX  r  r  r   r  r   r   r  )r>   r   r   r  r   r   r   r  r   r   r   r   )r\   r   r  r~   r   r  r  r  r  r  r  r  mean_perturbedr  s                 rE   test_fit_fix_cov'TestMultivariateNormal.test_fit_fix_cov  s6   ii##$45jjmJJvffQn%))s/2F155g>	'..w3;==@SU 	/33GIXrwwwQ78W"&--g29;;>35 	 ### "D3::a=$88-44W:H9@B 8;su 	 (((rG   r   N):r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  rS   r   r   r>   rW   r.   from_diagonalr   r  r  r  r  r  r,  r2  r6  r;  rB  rG  rU  r]  re  slowrm  rr  r  r{  r  r  r  r  r  r  r   r  r  r  r  r  r   r   rG   rE   r{  r{  !  s   O"6((((	?26h0,70E0 A2B [[FF1I$$aV,	
;;:4-1-)&>1@%*"9"3$:$(/$	4 [[[[VaV,
/ - 
/
 [[VU1b\2[[Vj2T%UV= W 3= [[VU1b\2[[Vj2T%UV= W 3= [[VU1b\2[[Vj2T%UV= W 3=I&* [[UF+6 ,6% [[Z"((6*:*,((5/*; <B<B [[Y%)+&)9)+&)9); <@<@@)8)rG   r{  c            	          \ rS rSr\R
                  R                  S\0 4\SS04/5      \R
                  R                  SS/5      \R
                  R                  SS/S	S//5      \R
                  R                  S
SS/5      \R
                  R                  SSS/5      S 5       5       5       5       5       r	\R
                  R                  S\\/5      S 5       r
\R
                  R                  S\\/5      S 5       rSrg)TestMarginali  zdist,kwargsdfrm   r   rO   r  r   ro   frozenTFr   c                 `   [         R                  R                  S5      nUR                  U5      nUR                  X"45      n	XR                  -  n
U(       a!  U[
        :X  a  [        R                  " S5        OU(       a  [        R                  " U
5      n
[         R                  R                  S[        U5      45      nU" X40 UD6nU(       a#  UR                  U5      nUR                  U5      nO%UR                  " X8U
40 UD6nUR                  U5      n[        XX;5      n[        X5        g )Nɫz6`multivariate_t` does not accept a `Covariance` objectrm   )r>   r   r   r   r   r$   rS   r   r-   rU   r   marginalr   r
  r   )r\   r   r   r  r  r   rD   r   r  r~   r  rc   r   YrA   rB   s                   rE   test_marginal_distribution'TestMarginal.test_marginal_distribution  s     ii##I.!!&) 01CC$.0KKPQ//6E II%%q#j/&:;&v&

:&A%%(Cju??A%%(C1j4!rG   r   c                 x   [         R                  R                  S5      nUR                  S5      nUR                  S5      nXDR                  -  nU" X55      nSn[
        R                  " [        US9   UR                  S5        S S S 5        [
        R                  " [        US9   UR                  / SQ5        S S S 5        Sn[
        R                  " [        US9   UR                  SS	/5        S S S 5        [
        R                  " [        US9   UR                  S
S//5        S S S 5        Sn[
        R                  " [        US9   UR                  SS/5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Ny= f! , (       d  f       g = f)Nr  rO   rX  zDimensions \[3\] are invalid .*rL   )r   r   rN   rO   z,All elements of `dimensions` must be unique.rN   ro   r   r   z*Elements of `dimensions` must be integers.rw         @	r>   r   r   r   r   rS   r
   rT   r  )r\   r   r   r   r~   r   r   r  s           rE   test_marginal_input_validation+TestMarginal.test_marginal_input_validation  s9   ii##I.""1%'##gO0]]:S1JJqM 2 ]]:S1JJ|$ 2 >]]:S1JJ2w 2 ]]:S1JJAx  2 <]]:S1JJSz" 21 21 21 21 21 21s<   3E'&E8F	F
F+'
E58
F	
F
F(+
F9c                 >   [         R                  R                  S5      nUR                  S5      nUR                  S5      nXDR                  -  nU" X55      nSn[
        R                  " [        US9   UR                  / 5        S S S 5        g ! , (       d  f       g = f)Nr  rO   rX  z"Cannot marginalize all dimensions.rL   r  )r\   r   r   r  r~   r  r   r  s           rE   test_marginal_special_cases(TestMarginal.test_marginal_special_cases  su    ii##I.!!!$'CC3]]:S1JJrN 211s   3B
Br   N)r   r   r   r   rS   r   r   r   r$   r  r  r  r   r   rG   rE   r  r    s   [[].A2-F.<tQi-H-J K[[Xs+[[\QC"a>:[[Xe}5[[\D%=9" : 6 ; ,K"4 [[V&9>%JK# L#4 [[V&9>%JK
 L
rG   r  c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)TestMatrixNormali-  c           
      0   SnSn[         R                  " X4S5      nS[         R                  " U5      -  [         R                  " X4S5      -   nS[         R                  " U5      -  [         R                  " X"4S5      -   n[        [        [
        [         R                  " S5      5        [        [        [
        U[         R                  " S5      U5        [        [        [
        X4[         R                  " S5      5        [        [        [
        X4U5        [        [        [
        X5U5        [        [        [
        UR                  XE5        [         R                  R                  n[        U[
        R                  X4[         R                  " X"45      5        [        U[
        R                  U[         R                  " X45      U5        [        U[
        X4[         R                  " X"45      5        [        U[
        U[         R                  " X45      U5        g )Nrm   rO   r   r,  ffffff?rk   rm   rO   r  )r>   r  r  r  rT   r   r   r   r   r  r   rV   )r\   num_rowsnum_colsr   r   Vr  s          rE   test_bad_inputTestMatrixNormal.test_bad_input/  sm   GGX'-"++h''"''82F*LL"++h''"''82F*LL 	j-'1BCj-BHHRL!Dj-rxx|Dj-q9j-q9j-a;II!!a**BGGX$89	;a**(!56	; 	abggx6J.KLa277H3G+H!LrG   c                 d   SnSn[         R                  " X4S5      nS[         R                  " U5      -  [         R                  " X4S5      -   nS[         R                  " U5      -  [         R                  " X"4S5      -   n[         R                  " X45      n[         R                  " US45      n[         R                  " SU45      n[         R                  " U5      n	[         R                  " U5      n
[         R                  " S5      n[	        [
        R                  " X4US9R                  X45        [	        [
        R                  " US9R                  X45        [	        [
        R                  " US	9R                  US45        [	        [
        R                  " US
9R                  SU45        [	        [
        R                  " X5S9R                  X45        [	        [
        R                  " X4S9R                  X45        [	        [
        R                  " XES9R                  X45        [	        [        US9R                  U	5        [	        [        US9R                  U
5        [	        [        US	9R                  U5        [	        [        US	9R                  U5        [	        [        US
9R                  U5        [	        [        US
9R                  U5        [	        [        X4S9R                  U
5        [	        [        X5S9R                  U	5        [	        [        XES9R                  U5        g )Nrm   rO   r   r,  r  r   r   rowcovcolcovr   )r  )r  )r   r  )r   r  )r  r  )r>   r  r  r   r   r   r   r@   r  r  r   )r\   r  r  r   r   r  ZZrZcIrIcI1s               rE   test_default_inputs$TestMatrixNormal.test_default_inputsI  ss   GGX'-"++h''"''82F*LL"++h''"''82F*LLHHh)*XXxm$XXq(m$[["[["[[^]&&ABHH)	+]&&A.44)	+]&&a066]	$]&&a066]	$]&&A8>>)	+]&&A8>>)	+]&&a:@@)	+ 	]*1126]*1126]!,1126]!,33R8]!,1126]!,33R8]4;;R@]4;;R@]!6;;Q?rG   c                     SnSn[         R                  " X4S5      n[         R                  " US5      nSn[         R                  " US5      nSn[         R                  " U5      n[         R                  " U5      n	[        [	        X4US9R
                  SU-  5        [        [	        X4US9R                  SU	-  5        [        [	        X5US9R
                  SU-  5        [        [	        X5US9R                  SU	-  5        g )Nrm   rO   r   r   r   r  )r>   r  r  r   r   r  r  )
r\   r  r  r   UvUsVvVsr  r  s
             rE   test_covariance_expansion*TestMatrixNormal.test_covariance_expansionp  s    GGX(#.WWXs#WWXs#[["[["]R@GGV	]R@GGV	]R@GGV	]R@GGV	rG   c           	         [        SS5       GH@  n[        SS5       GH+  n[        R                  " X4S5      nS[        R                  " U5      -  [        R                  " X4S5      -   nS[        R                  " U5      -  [        R                  " X"4S5      -   n[	        X4US9nUR                  SS9n[        R
                  " X4USS	9n[        Xx5        UR                  SS9n	UR                  U	5      n
[        R                  " XXES9n[        X5        UR                  U	5      n[        R                  " XXES9n[        X5        GM.     GMC     g )
Nr   rk   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  rvs1rvs2r   pdf1pdf2logpdf1logpdf2s                 rE   test_frozen_matrix_normal*TestMatrixNormal.test_frozen_matrix_normal  s   qA1QZGGQE3'"++a.(277A5#+>>"++a.(277A5#+>>&ABzztz4$((a!6:<T(JJDJ1zz!}$((1GT( --*'..qMW.)   rG   c                 6   [        SS5       GH  n[        SS5       GHs  n[        R                  " X4S5      nS[        R                  " U5      -  [        R                  " X4S5      -   nS[        R                  " U5      -  [        R                  " X"4S5      -   n[	        X4US9nUR                  SS9nUR                  U5      nUR                  U5      n	UR                  5       n
UR                  R                  5       nUR                  R                  5       n[        R                  " XT5      n[        R                  " XUS	9n[        R                  " XUS	9n[        R                  " XS	9n[        XS
S9  [        XS
S9  [        U
U5        GMv     GM     g )Nr   rk   r   r,  r  r  r  r   r   r"  r  )r  r>   r  r  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_multivariate*TestMatrixNormal.test_matches_multivariate  s>    qA1QZGGQE3'"++a.(277A5#+>>"++a.(277A5#+>>&ABJJDJ1zz!} --*!>>+ss{{}ss{{}ggal*..tCH-44T#N.66DJ7u=(3)   rG   c           	         SnSn[         R                  " X4S5      nS[         R                  " U5      -  [         R                  " X4S5      -   nS[         R                  " U5      -  [         R                  " X"4S5      -   nSn[        X4US9nUR	                  USS	9nUR	                  US
S	9n	[         R
                  " U[         R                  S S 2S S 2S S 24   U	[         R                  S S 2S S 2S S 24   4SS9n
[        U
R                  SXaU45        UR                  U
5      n[        UR                  SU45        [        S5       H?  n[        U5       H-  n[        R                  " XU4   UXES9n[        XX4   S5        M/     MA     g )Nrm   rO   r   r,  r  r  r  r  r     r   r   rN   r"  )r>   r  r  r   r   rM  r   r   r@   r   r  r   )r\   r  r  r   r   r  r5  r  X1X2r   array_logpdfr  r  separate_logpdfs                  rE   test_array_input!TestMatrixNormal.test_array_input  s[   GGX'-"++h''"''82F*LL"++h''"''82F*LLA:ZZQTZ2ZZQTZ2NNBrzz!Aa/0BJJq14D1EFQOQWWq!x89}}Q'\''!Q0qA1X"/"6"6q1vA>?#Kac1BEJ  rG   c                    SnSn[         R                  " X4S5      nS[         R                  " U5      -  [         R                  " X4S5      -   nS[         R                  " U5      -  [         R                  " X"4S5      -   nSn[        X4US9nUR	                  USS	9n[         R
                  " US
S9n	[        XSS9  [         R                  " UR                  Xa-  U5      R                  5      n
[        XSS9  [         R                  " [         R                  " USS5      R                  Xb-  U5      R                  5      n[        XSS9  g )Nrm   rO   r   r,  r    r  r  r   r   r   r   r#  r   rN   )r>   r  r  r   r   r   r   r   reshaper   swapaxes)r\   r  r  r   r   r  r5  r  r   sample_meansample_colcovsample_rowcovs               rE   test_momentsTestMatrixNormal.test_moments  s   GGX'-"++h''"''82F*LL"++h''"''82F*LLA:JJADJ1ggaQ'S1qyyH=??@s3r{{1Qq19989
8 MMNQPs3rG   c           	      h   [         R                  " [        R                  " SS/SS//5      [        R                  " SS/SS//5      [        R                  " SS/SS//5      [        R                  R                  S5      SS	9n[        R                  " S
S/SS//SS/SS///5      n[        X5        g )Nr   rN   rO   rm   ro   rk   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_samplesTestMatrixNormal.test_samples  s     ""Aq6Aq6*+88aWr1g./88aVaW-...q1
 88!23!124!23!1245
 	)rG   r   N)r   r   r   r   r  r  r  r  r  r  r  r  r   r   rG   rE   r  r  -  s.    M4%@N,/044K.4,*rG   r  c                      \ rS rSrS rS rS r\R                  R                  S\
" SS5      5      \R                  R                  S\
" SS5      5      S	 5       5       rS
 r\S\R                  S\R                  4S j5       r\S\R                  S\R                  S\4S j5       r\S\R                  S\R                  4S j5       rS rS rS rS r\R                  R                  SSS/5      S 5       rSrg)TestMatrixTi  c           	         SnSnSn[         R                  " X4S5      nS[         R                  " U5      -  [         R                  " X4S5      -   nS[         R                  " U5      -  [         R                  " X"4S5      -   n[        R                  " [
        SS9   [        S	S
9  S S S 5        [        R                  " [
        SS9   [        [         R                  " S5      S9  S S S 5        [        R                  " [
        SS9   [        [         R                  " S5      S9  S S S 5        [        R                  " [
        SS9   [        [         R                  " S5      S9  S S S 5        [        R                  " [
        SS9   [        [         R                  " S5      S9  S S S 5        [        R                  " [
        SS9   [        [         R                  " S5      S9  S S S 5        [        R                  " [
        SS9   [        [         R                  " S5      S9  S S S 5        [        R                  " [
        SS9   [        [         R                  " S5      S9  S S S 5        [        R                  " [
        SS9   [        [         R                  " S5      S9  S S S 5        [        R                  " [
        SS9   [        XFS9  S S S 5        [        R                  " [
        SS9   [        XES9  S S S 5        [        R                  " [
        SS9   [        R                  " [         R                  " X45      US 9  S S S 5        [        R                  " [         R                  R                  S!S9   [        R                  " XE[         R                  " X"45      U5        S S S 5        [        R                  " [         R                  R                  S!S9   [        R                  " U[         R                  " X45      Xc5        S S S 5        [        R                  " [         R                  R                  S"S9   [        XE[         R                  " X"45      U5        S S S 5        [        R                  " [         R                  R                  S"S9   [        U[         R                  " X45      Xc5        S S S 5        g ! , (       d  f       GN = f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNl= f! , (       d  f       GN?= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNL= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNd= f! , (       d  f       g = f)#Nrm   rO   rk   r   r,  r  z$Degrees of freedom must be positive.rL   r   r  zArray `mean` must be 2D.r  r  zArray `mean` has invalid shape.)rm   rO   r   z%Array `row_spread` has invalid shape.r   r   
row_spreadz2Array `row_spread` must be a scalar or a 2D array.rR   z"Array `row_spread` must be square.r   rN   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  r  rS   r
   rT   r,   r   rV   r   r   r  r   )r\   r  r  r  r   r   r  s          rE   r  TestMatrixT.test_bad_input  s   GGX(#."++h''"''82F*LL"++h''"''82F*LL ]]:-STN U ]]:-GH"((9-. I ]]:-NO"((9-. P ]]:-TU0 V ]]R
 	 23

 ]]:-QR0 S ]]:-TU0 V ]]R
 	 23

 ]]:-QR0 S ]]

 !*
 ]]

 !*
 ]]+

 LL288X$89B
 ]]II!!L
 LLrww';<bA	
 ]]II!!L
 LLBGGX$891A	
 ]]II!!+

 Q277H#78"=
 ]]II!!+

 Q 45q=
 
[ UT IH PO VU
 

 SR VU
 

 SR
 

 

 

 

 

 

 
s   
R?SS#S5TTT+T= U?
U!*
U3+V5.V.V);#V;#W?
S
S #
S25
T
T
T(+
T:=
U
U!
U03
V
V
V&)
V8;
W

Wc           	         SnSnSn[         R                  " X4S5      nS[         R                  " U5      -  [         R                  " X4S5      -   nS[         R                  " U5      -  [         R                  " X"4S5      -   n[         R                  " X45      n[         R                  " US45      n[         R                  " SU45      n	[         R                  " U5      n
[         R                  " U5      n[         R                  " S5      nSn[	        [
        R                  " XEXcS9R                  X45        [	        [
        R                  " US	9R                  X45        [	        [
        R                  " US
9R                  US45        [	        [
        R                  " US9R                  SU45        [	        [
        R                  " XFS9R                  X45        [	        [
        R                  " XES9R                  X45        [	        [
        R                  " XVS9R                  X45        [	        [        5       R                  U5        [	        [        US	9R                  U
5        [	        [        US	9R                  U5        [	        [        US
9R                  U5        [	        [        US
9R                  U5        [	        [        US9R                  U	5        [	        [        US9R                  U5        [	        [        XES9R                  U5        [	        [        XFS9R                  U
5        [	        [        XVUS9R                  U5        g )Nrm   rO   rk   r   r,  r  r   r   r   r#  r  r  r  r"  r%  r$  )r   r#  )r   r#  r  )r>   r  r  r   r   r,   r   r@   r  r   r#  r   )r\   r  r  r  r   r   r  r  r  r  r  r  r  	dfdefaults                 rE   r  TestMatrixT.test_default_inputsX  su   GGX(#."++h''"''82F*LL"++h''"''82F*LLHHh)*XXxm$XXq(m$[["[["[[^	LLa!CII 	
 	X\\q)//(1EFX\\Q/55!}EX\\Q/558}EX\\q7==?STX\\q7==?STLLA4::X<P	
 	XZ]]I.X1%00"5X1%00"5X+00"5X+66;X+00"5X+66;X13>>CX13>>CXR@EEqIrG   c           	         SnSnSn[         R                  " X4S5      n[         R                  " US5      nSn[         R                  " US5      nSn[         R                  " U5      n	[         R                  " U5      n
[        [	        XEXsS9R
                  SU	-  5        [        [	        XEXsS9R                  SU
-  5        [        [	        XFXS9R
                  SU	-  5        [        [	        XFXS9R                  SU
-  5        g )Nrm   rO   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   r  %TestMatrixT.test_covariance_expansion  s    GGX(#.WWXs#WWXs#[["[["!rALLcTVh	
 	!rALLcTVh	
 	!rALLcTVh	
 	!rALLcTVh	
rG   r  r   rm   r  c                 ^   [         R                  " X4S5      nS[         R                  " U5      -  [         R                  " X4S5      -   nS[         R                  " U5      -  [         R                  " X"4S5      -   nX-   n[        X4XVS9nUR	                  SS9n[        R                  " X4XVSS9n	[        X5        UR	                  SS9n
UR                  U
5      n[        R                  " XXEUS9n[        X5        UR                  U
5      n[        R                  " XXEUS9n[        X5        g )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  r  r  r  r  r   r  r  r  r  s                  rE   test_frozen_matrix_t TestMatrixT.test_frozen_matrix_t  s     GGQFC "++a. 277A63#77"++a. 277A63#77Uq1Dzztz,||QD
 	T JJDJ)zz!}||A!bIT --"//!BOW&rG   c           
          SnSn[         R                  " X4S5      nS[         R                  " U5      -  [         R                  " X4S5      -   nS[         R                  " U5      -  [         R                  " X"4S5      -   nSnSn[        X4XVS9nUR	                  US	S
9n	UR	                  USS
9n
[         R
                  " U	[         R                  S S 2S S 2S S 24   U
[         R                  S S 2S S 2S S 24   4SS9n[        UR                  SXqU45        UR                  U5      nUR                  n[        USU45        [        S5       H@  n[        U5       H.  n[        R                  " XU4   X4XVS9n[        UXU4   S5        M0     MB     g )Nrm   rO   r   r,  r  r   r  r(  r  r   r  r   r   rN   r"  )r>   r  r  r,   r   rM  r   r   r@   r   r  r   )r\   r  r  r   r   r  r  r5  r  r  r  r   r	  logpdf_shaper  r  r
  s                    rE   r  TestMatrixT.test_array_input  sg   GGX(#."++h''"''82F*LL"++h''"''82F*LLq1DZZQTZ2ZZQTZ2NNBrzz1a23R

Aq!8K5LMTUVQWWq!x89}}Q'#))\Aq6*qA1X"*//dG!a#  d1CUK	  rG   vec1vec2c                     [         R                  R                  X-
  5      S-  n[         R                  R                  U 5      S-  [         R                  R                  U5      S-  -   nX#-  $ )NrN   )r>   r   r   )r3  r4  	numeratordenominators       rE   relative_errorTestMatrixT.relative_error  sR    IINN4;/14	iinnT*a/"))..2F!2KK&&rG   mat_truemat_estreturnc                 x   [        U SS9n[        USS9n[        R                  " UR                  5      S::  d$  [        R                  " UR                  5      S::  a  [        R                  $ [        R
                  " UR                  U -  5      nUR                  UR                  -
  nXE-   [        U 5      -
  S-  $ )NFra   r   rN   )r   r>   r  r   r  tracer  r   )r:  r;  mat_true_psdmat_est_psd
trace_termlog_detratios         rE   matrix_divergenceTestMatrixT.matrix_divergence  s    HU;759FF;''(A-266,:O:O3PTU3U66MXXk..9:
"++l.C.CC)CM9Q>>rG   a_matc                 r    U R                   S:X  d   eU R                  R                  U R                  45      $ )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`.
rN   )r  r   r  r   )rE  s    rE   vecTestMatrixT.vec  s-     zzQww

}--rG   c           
         SnSnSn[         R                  " X#4S5      nS[         R                  " U5      -  [         R                  " X"4S5      -   nS[         R                  " U5      -  [         R                  " X34S5      -   nSnSn[        XEXaS	9n	U	R	                  US
S9n
U R                  XJR                  SS95      n[        USUS9  [         R                  " Xe5      US-
  -  n[         R                  " [         R                  " U
 Vs/ s H  oR                  U5      PM     sn5      SS9nU R                  X5      n[        USUS9  gs  snf )z
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.
rk   rm   rO   r   r,  r  r  r   r(  *   r   r   r   r#  rN   F)rowvarN)r>   r  r  r,   r   r8  r   rF   r  r   r   rG  rC  )r\   r  r  r  r   r   r  r5  r  r  r   relerrcov_vec_truerc   cov_vec_rvskls                   rE   r  TestMatrixT.test_moments  s%    GGX(#."++h''"''82F*LL"++h''"''82F*LLq1DJJABJ/$$QA7VQT*wwq}Q/ffRXXA&>Aqxx{A&>?N##L>R& '?s   
Ec                    Sn[         R                  " / SQ/ SQ/5      n[         R                  " SS/SS//5      n[         R                  " / SQ/ SQ/ SQ/5      nS	n[         R                  " / S
Q/ SQ// SQ/ SQ// SQ/ SQ// SQ/ SQ// SQ/ SQ// SQ/ SQ// SQ/ SQ// SQ/ SQ// SQ/ SQ// SQ/ SQ//
5      n[         R                  " / SQ5      n[        R                  " XbX4US9n[	        XxUS 9  g!)"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]
rk   rR   r  r   r,  r   r   r   r   r   皙?r   rT  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_julia"TestMatrixT.test_pdf_against_julia  s&   4 HHi+,HHq#ha)*HHm]MBCHH NM
 NM
 NM
 NM
 NM
 NM
 NM
 NM
 NM
 NMK)+
	Z 
 ,,yQQSTd3rG   c                    Sn[         R                  " / SQ/ SQ/5      n[         R                  " SS/SS//5      n[         R                  " / SQ/ SQ/ SQ/5      nS	n[         R                  " / S
Q/ SQ// SQ/ SQ// SQ/ SQ// SQ/ SQ// SQ/ SQ// SQ/ SQ// SQ/ SQ// SQ/ SQ// SQ/ SQ// SQ/ SQ//
5      n[         R                  " / SQ5      n[        R                  " XbX4US9n[	        XxUS 9  g!)"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];
rk   rR   r  r   r,  rR  rS  rU  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  NrV  )	r\   r  r   r   r  r  	samples_mpdfs_mrY  s	            rE   test_pdf_against_mathematica(TestMatrixT.test_pdf_against_mathematicah  s&     HHi+,HHq#ha)*HHm]MBCHH NM
 NM
 MM
 ML
 NM
 NM
 NL
 NL
 NL
 NMK)+
	Z 
 ,,yQQSTd3rG   c                 ^   SnSnSn[         R                  " X#4S5      nS[         R                  " U5      -  [         R                  " X"4S5      -   nS[         R                  " U5      -  [         R                  " X34S5      -   nSnSn[        XEXaS	9n	U	R	                  US
S9n
U
R                  S5      n[        UR                  XeUS	9nUR	                  US
S9nUR                  S5      n[        XKUS9  [        UR                  XS9  [        XR                  US9  [        UR                  XS9  g )Nrk   rm   rO   r   r,  r  r  皙?r(  rJ  r   r   r  )r>   r  r  r,   r   r   r   r   )r\   r  r  r  r   r   r  r5  r  r  r   rj  frozenTXTmTs                  rE   r  TestMatrixT.test_samples  s   GGX(#."++h''"''82F*LL"++h''"''82F*LL
 q1DJJABJ/FF1IBG[[ab[1WWQZ 	4(R+44d+R+rG   
shape_caserowcolc                    SnSnUS:X  a*  SnSnSn[         R                  " / SQ/ SQ/ SQ/5      nXs-  nO)SnSn[         R                  " / SQ/ SQ/ SQ/5      nSnXc-  n[         R                  " XE4S	5      n	[        XXsS
9n
[	        U	R                  5       XS9nU
R                  SSS9nU
R                  U5      nUR                  UR                  5       5      n[        XUS9  g)a  
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.
ư>rk   rh  r   rO   rR  rS  rU  r   r(  r  r@   r  rJ  r   r  N)	r>   r   r  r,   r$   r   r   r   r   )r\   rg  r  r  r  r  r   r#  r@   r   t_matt_mvtr   t_mat_logpdft_mvt_logpdfs                  rE   test_against_multivariate_t'TestMatrixT.test_against_multivariate_t  s     HHJ=-"OPJOEHH=-"OPJJOEGGX(#.j
 199;eCII12I.||A||AIIK0>rG   r   N)r   r   r   r   r  r  r  rS   r   r   r  r.  r  staticmethodr>   r_  r8  r`  rC  rG  r  rZ  r_  r  rq  r   r   rG   rE   r  r    s,   \>|&JP
6 [[S%1+.[[S%1+.' / /'2L4 'RZZ 'rzz ' '
 ?BJJ ? ? ? ? .2:: ."** . .':_4BU4n,B [[\E5>:&? ;&?rG   r  c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rSrg)TestDirichleti
  c           	         [         R                  R                  S5      nUR                  SS5      nUR	                  SSU5      n[        U5      n[        UR                  5       [
        R                  " U5      5        [        UR                  5       [
        R                  " U5      5        [        UR                  5       [
        R                  " U5      5        Sn[        U5       H  nUR	                  SSU5      nU[         R                  " U5      -  n[        UR                  US S 5      [
        R                  " US S U5      5        [        UR                  US S 5      [
        R                  " US S U5      5        M     g Nr9  r       &.>r  r  ro   )r>   r   r   integersr   r   r   varr   r   r  r   r   r   r\   r   r   rF  r;  	num_testsr  rc   s           rE   test_frozen_dirichlet#TestDirichlet.test_frozen_dirichlet  s   ii##D)LLBFC+eQUUWimmE23QVVXy~~e45QYY[)"3"3E":;	y!AFC+ANAq"v	afe(DE!CR&)9+;+;AcrFE+JK	 "rG   c                 N   [         R                  R                  S5      n[         R                  " / SQ5      nUR	                  USS9n[        UR                  S5        [        [        [        R                  X25        [        [        [        R                  X25        [        R                  " UR                  U5        [        R                  " UR                  S S U5        [        R                  " UR                  U5        [        R                  " UR                  S S U5        g )Nr9  r   r        @rn   r   )rn   rO   ro   )r>   r   r   r   r   r   r@   r  rT   r   r   r   r\   r   rF  rc   s       rE   "test_numpy_rvs_shape_compatibility0TestDirichlet.test_numpy_rvs_shape_compatibility  s    ii##D))MM%aM(QWWf%j)--:j)"2"2A=acc5!acc#2h&e$Sb5)rG   c                 $   [         R                  R                  S5      n/ SQnUR                  [         R                  " SU5      SS9R
                  n[        [        [        R                  X25        [        [        [        R                  X25        g )Nr9  )r   r   r  ry  rn   r   
r>   r   r   r   maximumr   r  rT   r   r   r  s       rE   test_alpha_with_zeros#TestDirichlet.test_alpha_with_zeros*  s`    ii##D)MM"**T51M:<<j)--:j)"2"2A=rG   c                 $   [         R                  R                  S5      n/ SQnUR                  [         R                  " SU5      SS9R
                  n[        [        [        R                  X25        [        [        [        R                  X25        g )Nr9  )r   g       r  ry  rn   r   r  r  s       rE    test_alpha_with_negative_entries.TestDirichlet.test_alpha_with_negative_entries2  s`    ii##D) MM"**T51M:<<j)--:j)"2"2A=rG   c                    [         R                  " / SQ5      n[         R                  " / SQ5      n[        R                  " X!5        [        R                  " X!5        [         R                  " / SQ5      n[        [        R                  " X!5      S5        [        [        R                  " X!5      [         R                  " S5      5        g )Nr   r  r        @r   r   r   r  )r   r   r   r   rl   )r>   r   r   r   r   r   r  r\   rF  rc   s      rE   test_data_with_zeros"TestDirichlet.test_data_with_zeros:  sy    -.HH)*a"-.IMM!3Q7I,,Q6q	BrG   c                     [         R                  " / SQ5      n[         R                  " / SQ5      n[        [        [        R
                  X!5        [        [        [        R                  X!5        g )N)r   r,  r  r  r  r>   r   r  rT   r   r   r   r  s      rE   $test_data_with_zeros_and_small_alpha2TestDirichlet.test_data_with_zeros_and_small_alphaC  B    -.HH)*j)--:j)"2"2A=rG   c                     [         R                  " / SQ5      n[         R                  " / SQ5      n[        [        [        R
                  X!5        [        [        [        R                  X!5        g )Nr  )r   rv  r   r  r  r  s      rE   test_data_with_negative_entries-TestDirichlet.test_data_with_negative_entriesI  sB    -.HH*+j)--:j)"2"2A=rG   c                     [         R                  " / SQ5      n[         R                  " / SQ5      n[        [        [        R
                  X!5        [        [        [        R                  X!5        g )Nr  )r   rw  r   r  r  r  s      rE    test_data_with_too_large_entries.TestDirichlet.test_data_with_too_large_entriesO  r  rG   c                     [         R                  " / SQ5      n[         R                  " SS5      n[        [        [
        R                  X!5        [        [        [
        R                  X!5        g )Nr  )rN   rn   rn   g$I$I?r>   r   r  r  rT   r   r   r   r  s      rE   test_data_too_deep_c"TestDirichlet.test_data_too_deep_cU  sB    )GGIv&j)--:j)"2"2A=rG   c                     [         R                  " SS/SS//5      n[         R                  " SS5      n[        [        [
        R                  X!5        [        [        [
        R                  X!5        g )Nr   r  r  r  )rN   rN   rn         ?r  r  s      rE   test_alpha_too_deep!TestDirichlet.test_alpha_too_deep[  sO    3*sCj12GGIu%j)--:j)"2"2A=rG   c                     [         R                  " / SQ5      n[         R                  " SS5      n[        R                  " X!5        [        R
                  " X!5        g )Nr  rO   rn   UUUUUU?)r>   r   r  r   r   r   r  s      rE   test_alpha_correct_depth&TestDirichlet.test_alpha_correct_deptha  s:    )GGFE"a"rG   c                     [         R                  " / SQ5      n[         R                  " SS5      n[        [        [
        R                  X!5        [        [        [
        R                  X!5        g )Nr  r  r,  r  r  s      rE   test_non_simplex_data#TestDirichlet.test_non_simplex_datag  sB    )GGFE"j)--:j)"2"2A=rG   c                     [         R                  " / SQ5      n[         R                  " SS5      n[        [        [
        R                  X!5        [        [        [
        R                  X!5        g )Nr  )rN   rn   r,  r  r  s      rE   test_data_vector_too_short(TestDirichlet.test_data_vector_too_shortm  C    -.GGFE"j)--:j)"2"2A=rG   c                     [         R                  " / SQ5      n[         R                  " SS5      n[        [        [
        R                  X!5        [        [        [
        R                  X!5        g )Nr  )rk   rn   r   r  r  s      rE   test_data_vector_too_long'TestDirichlet.test_data_vector_too_longs  r  rG   c                    [         R                  " / SQ5      n[        U5      n/ SQn/ SQn/ SQ/ SQ/ SQ/n[        UR	                  5       U5        [        UR                  5       U5        [        UR                  5       U5        g )N)r   皙?r   r,  rT  r   )UUUUUU?{Gz?Q?)r  )r  r  O贁N)r  r  r  )r>   r   r   r   r   r{  r   )r\   rF  r;  expected_meanexpected_varexpected_covs         rE   test_mean_var_covTestDirichlet.test_mean_var_covy  sh     (e'-../
 	"!&&(M:!!%%'<8!!%%'<8rG   c                 p   [         R                  " S/5      n[        U5      n[        UR	                  5       R
                  S5        [        UR                  5       R
                  S5        [        UR                  S/5      R
                  S5        [        UR                  S/5      R
                  S5        g )Nr   r   r   )	r>   r   r   r   r   r  r{  r   r   )r\   rF  r;  s      rE   r   TestDirichlet.test_scalar_values  sy    #e 	QVVX]]A&QUUW\\1%QUUB4[%%q)QXXrd^((!,rG   c                 |   [         R                  R                  S5      nUR                  SS5      nUR	                  SSU5      n[        U5      nSn[        U5       H\  nUR	                  SSU5      nU[         R                  " U5      -  n[        UR                  US S 5      UR                  U5      5        M^     g rw  )
r>   r   r   rz  r   r   r  r   r   r   r|  s           rE    test_K_and_K_minus_1_calls_equal.TestDirichlet.test_K_and_K_minus_1_calls_equal  s    ii##D)LLBFC+e	y!AFC+ANAafquuQx8 "rG   c                 H   [         R                  R                  S5      nUR                  SS5      nUR	                  SSU5      n[        U5      nSnSnS n[        U5       H  n[        U5       HM  n	UR	                  SSU5      n
U
[         R                  " U
5      -  n
Ub  [         R                  " Xz45      nMK  U
nMO     UR                  UR                  5      nS nU H1  nUR                  U5      nUb  [         R                  " X5      nM/  UnM3     [        X5        M     g )Nr9  r   rx  ry  r  r  rk   )r>   r   r   rz  r   r   r  r   vstackr   r   appendr   )r\   r   r   rF  r;  r}  num_multiplexmr  rj  rc   rmrsxsr  s                  rE   test_multiple_entry_calls'TestDirichlet.test_multiple_entry_calls  s    ii##D)LLBFC+e	y!A<(KKQ/RVVAY>B7+BB ) rttBBEE"I>2)BB  &b-! "rG   c                 $   [         R                  R                  S5      nUR                  SSS5      n[	        U5      n[        US   US   5      nSn[        U5       HZ  nUR                  SSS5      nU[         R                  " U5      -  n[        UR                  U5      UR                  U/5      5        M\     [        UR                  5       UR                  5       S   5        [        UR                  5       UR                  5       S   5        g )Nr9  ry  r  rN   r   r   r  )r>   r   r   r   r   r   r  r   r   r   r   r{  )r\   r   rF  r;  r4  r}  r  rc   s           rE   test_2D_dirichlet_is_beta'TestDirichlet.test_2D_dirichlet_is_beta  s    ii##D)FC+eq58$	y!AFC+ANAa!%%*5 "
 	AFFHaffhqk2AEEGQUUWQZ0rG   r   N)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   ru  ru  
  sc    L$
*>>C>>>>>#>>>9$	-9.:1rG   ru  c                     [         R                  " SS/5      n [         R                  " S//5      n[        [        [        X5         [	        X5        g ! [         a-  nSn[        [        U5      S [        U5       U5         S nAg S nAff = f)Nr   r   zDimension mismatch)r>   r   r  rT   r   r   strr   )r  r(  r  r  s       rE   ,test_multivariate_normal_dimensions_mismatchr    ss     
3*	BHHseWE*12=
-B& -"SVISX&,,-s   A 
B
#BB
c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestWisharti  c           	         [         R                  " SSS9nSS/[         R                  " S5      [         R                  S   [         R                  " SSS9/nU HO  n[        SU5      n[	        UR
                  U5        [	        UR
                  R                  UR                  5        MQ     [         R                  " SS/SS//5      nSS/[         R                  S   [         R                  " SS/SS//5      /nU HO  n[        SU5      n[	        UR
                  U5        [	        UR
                  R                  UR                  5        MQ     [        [        [        S[         R                  " S5      5        [        S[         R                  " S5      5        [         R                  " SSS9n[        [        [        SU5        g )Nr   rN   ndminr   r!  rw  rO   )
r>   r   r_r   r   r  r@   r  rT   rW   )r\   
true_scalescalesr  ws        rE   test_scale_dimensions!TestWishart.test_scale_dimensions  sj    XXaq)
CHHQKEE!HHHQa 
 E5!A*-
(8(89  XX!u !!u& '
 qEEE#JHHqee 
 E5!A*-
(8(89  	j'1bffQi8 	RVVAY !$j'1e4rG   c           
      `   SS/[         R                  " S5      [         R                  S   [         R                  " SSS9[         R                  " S/SS9/n[        SS5      nUR	                  [         R                  " SSS95      nU H  n[        UR	                  U5      U5        M      / SQ[         R                  S   [         R                  " / SQSS9/n[        SS5      nUR	                  [         R                  " / SQSS95      nU H  n[        UR	                  U5      U5        M      SSS/[         R                  " S5      [         R                  S   [         R                  " SS/SS//5      [         R                  " SS/SS//5      S S 2S S 2[         R                  4   /n[        S[         R                  " S5      5      nUR	                  [         R                  " SS/SS//5      S S 2S S 2[         R                  4   5      nU H  n[        UR	                  U5      U5        M      g )Nr   rN   r  rO   rR   r/  r   )r>   r   r  r   r   r   r   rW   )r\   r   r  densityrc   s        rE   test_quantile_dimensions$TestWishart.test_quantile_dimensions	  s   
 CHHQKEE!HHHQa HHaS"
 AaL%%!,-Aq7+ 
 EE%LHHWA&
 AaL%%23Aq7+  qEHHQKEE#JHHqee HHqee "**n.	
 AbffQi %%1Q%#$Q%") **+Abjj.: ;Aq7+ rG   c           	         Sn[         R                  " [         R                  " U5      S-   5      n[         R                  " XS-
  -  S-  5      U[         R                  " USS9'   [         R                  " UR
                  U5      n/ n[        S5       H  n[         R                  " [         R                  " U5      US-   S-  -   5      n[         R                  " XS-
  -  S-  5      U[         R                  " USS9'   [         R                  " UR
                  U5      nUR                  U5        M     [         R                  " U5      R
                  nSS[         R                  " SSS5      4SX#4/nU H  u  prn[        Xr5      n[        UR                  5       [        R                  " Xr5      5        [        UR                  5       [        R                  " Xr5      5        [        UR                  5       [        R                  " Xr5      5        [        UR                  5       [        R                  " Xr5      5        [        UR!                  U5      [        R                   " XWU5      5        M     g 	Nrm   r   rN   ro   r  rk   r  r   )r>   rx   r  tril_indicesr  r   r  r  r   rU  r   r   r{  r   moder   r   )	r\   r   r  r   r  rc   
parametersr  r  s	            rE   r  TestWishart.test_frozenB	  s    		#q(),.IIcUmq6H,IboocR()uww& qA		#!ax/0A,.IIcUmq6H,IAboocR()qssAAHHQK	 
 HHQKMM BKKR+,N


 )NR"A'++b"897<<#:;7<<#:;goob&@Aq7;;qe#<= )rG   c                 @   SnSn[         R                  " U5      nSUS'   SUS'   [        X#5      n[         R                  R	                  S5      n[        R
                  " X#US9n[         R                  R	                  S5      nUR                  US9n[         R                  R	                  S5      nUR                  SS9n[         R                  UR                  U5      UR                  US	-
  5      UR                  US
-
  5      4   S-  n	[         R                  " U	5      n
X[         R                  " USS9'   [         R                  R                  U5      nUR                  U
5      n[         R                  " XR                  5      n[        Xm5        [        X}5        g )NrO   r  r,  r}  r  i r   r   r   rN   ro   r  )r>   rW   r   r   r  r   r   r  	chisquarerx   r  r   r   r  r   r   )r\   r   r  r  r  r   w_rvsfrozen_w_rvscovariances	variancesr~   DDAmanual_w_rvss                 rE   test_wishart_2D_rvsTestWishart.test_wishart_2D_rvsb	  s\    sc
c
 B ii##F+BC8ii##F+uu#u. ii##F+jjaj(EEMM"MM"Q$MM"Q$!
 		 GGI(3"//#
$% IIu%UU1Xvvb$$' 	,3rG   c                    [         R                  R                  S5      nSnSn[         R                  " U5      n[         R                  " SSS[
        S9n[         R                  " SSSS9nU H  n[        Xt5      n[        U5      n	[        UR                  5       U	R                  5       5        [        UR                  5       U	R                  5       5        [        UR                  5       U	R                  5       5        [        UR                  U5      U	R                  U5      5        UR                  X!S	9n
U4nS
n[        SXU
5        M     g )N^   r   r  rN   r   r   numr   r  r   )r>   r   r   rW   r  r`  rU  r   r   r   r{  r   r   r   r   r   )r\   r   snr   r  df_ranger   r  r  cr   rC   rF  s                rE   test_1D_is_chisquared!TestWishart.test_1D_is_chisquared	  s    
 ii##F+s99QAU3KKB2&B"ARA AEEGQUUW-AFFHaffh/AIIK5 AEE!HaeeAh/ %%R%2C5DE"64<! rG   c                    [         R                  R                  S5      nSnSnSn[         R                  " [         R                  " S5      S-   5      n[         R                  " S5      U[         R
                  " SSS9'   [         R                  " UR                  U5      n[         R                  " US45      nUR                  R                  U5      R                  U5      R                  5       n[        X75      n[        X7S	9n	[        UR                  5       U	R                  5       5        [        UR                  5       U	R                  5       5        [        UR                  5       U	R                  5       5        [         R                   " S
SSS9n
[        UR#                  U
5      U	R#                  U
5      5        UR%                  X!S9nUSU4nSn['        SXU5        g )Nr  r  r  rm   r   rl   ro   r  r  r   r  r   r   r  r   )r>   r   r   rx   r  r  r  r   rV   r   r   r   r   r{  r   r   rU  r   r   r   )r\   r   r   r  r   r  lamdasigma_lamdar  r  r   r   rC   rF  s                 rE   test_is_scaled_chisquared%TestWishart.test_is_scaled_chisquared	  s_   
 ii##F+		!Q'*,))A,booa2&'uww&Q ggkk%(,,U3;;=B$' 	)!&&(+		QYY[1 KKB2&a!%%(+ eee.1[!vtC8rG   r   N)r   r   r   r   r  r  r  r  r  r	  r   r   rG   rE   r  r    s$    )5V/,b>@*4X=>!9rG   r  c                      \ rS rSrS rS rS r\R                  R                  SSS/5      S 5       r
S	 rS
 r\R                  R                  SSS/5      S 5       rS r\R                  R                  SSS/5      S 5       rS r\R                  R                  SSS/5      S 5       rS rS rS r\R                  R                  S\R,                  \R.                  /5      S 5       rSrg)TestMultinomiali	  c                 b   [         R                  " SSS5      n[        USSS9  [         R                  " SS/S	S
S/5      nU[        R                  * :X  d   e[         R                  " S	S	/S	S
S/5      nUS	:X  d   e[         R                  " SS/S	SS/5      n[        U[        R
                  SS9  g )NrO   rm   rn   r   r  g&Mtyr  r  rO   rm   r   r   r  rr   )r   logpmfr   r>   r  r  )r\   vals1vals2vals3vals4s        rE   test_logpmfTestMultinomial.test_logpmf	  s    ""5!Z81=""Aq61r2h7""Aq61r2h7zz""Aq61r1g6rvvD1rG   c                     [         R                  " SSS5      n[        R                  " SSS5      n[        XSS9  [         R                  " SS	S
5      n[        R                  " SS	S5      n[        XSS9  g )Nr  rn   r  rO   r   r  r  )rl         r   r  rl   r   )r   r  r"   r   pmfr\   val1val2s      rE   test_reduces_binomial%TestMultinomial.test_reduces_binomial	  sb     !!&!Z8||Aq#&.vr:6yyB$.rG   c                 ~    S/ SQp!SSSSSSS	SS
SS.
nU H%  n[        [        R                  " XAU5      X4   SS9  M'     g )NrO   )g      ?r  g      ?g     @?g     ?g      ?g      `?g     ?g      ?g      ?g      ?g      ?)
)r   r   rO   )r   r   rN   )rN   r   r   )rO   r   r   r~  rE  rN   r   r   )r   rN   r   r!  )r   rO   r   +=r#  )r   r   r  )r\   r   ri  r_valsrc   s        rE   test_RTestMultinomial.test_R	  sR     $1([([([([([	B
 AKOOA!4fieL rG   r   r   rO   c                 <   Sn[         R                  " [        US9   [        R                  R                  S5      n[        R                  " US/S-  SSS9nUR                  US/S-  SS9n[        XE5        S S S 5        [         R                  " [        US9   [        R                  R                  S5      n[        R                  " US/S	-  SSS9nUR                  US/S	-  SS9n[        XE5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)
Nz,Some rows of `p` do not sum to 1.0 within...rL   rh  r  rO   rn   r   r   rk   )	rS   warnsFutureWarningr>   r   r  r   r   r   )r\   r   r]   rndmsc_rvsnp_rvss         rE   test_rvs_npTestMultinomial.test_rvs_np	  s     A\\-w799((-D __QqqsKF%%a$%:F(	 8
 \\-w799((-D __QqqsKF%%a$%:F(	 87 87
 87s   AC<AD<
D

Dc                    [         R                  " SSS5      n[        USSS9  [         R                  " SSS	5      n[        US
SS9  [         R                  " SS/SS//SS/SS///SS5      n[        USS/SS//SS9  [        R                  " S[        R
                  S9n[         R                  " USS	5      n[        U[        R                  " / [        R
                  S95        [         R                  " SS/SS	5      n[        USSS9  [         R                  " / SQS/ SQ5      n[        USSS9  [         R                  " / SQS/ SQ5      nUS:X  d   e[         R                  " / SQS/ SQ5      nUS:X  d   eg )N)rk   rk   r   r   r  r  r  rn   r  g5
?rO   r   r  ro   	   r  g*7?g<Wƌ?r   rN   r   rm   rN   rO   rO   r   rl   )gUUUUUU?r  r   gߦ?rp   r"  )r   r  r   r>   r   float64r   )	r\   vals0r  r  rc   r  r  vals5vals6s	            rE   test_pmfTestMultinomial.test_pmf	
  sJ   a.qt,q(31=1Q%1"a1a&0A BA (*I 6A?dKHHU"**-1h/UBHHRrzz:;1q(3qt,	1.?@~D9	1.?@zz	1.?@zzrG   c                    [         R                  " SS/SSS/SS//5      n[        USS	/S
S9  [         R                  " SS/SS/SS/5      n[        USS/S
S9  [         R                  " SS/SS///SSS/5      n[        USS//S
S9  [         R                  " SS/S/S///SS/5      n[        US/S///S
S9  [         R                  " SS/SS//S////SS/5      n[        USS////S
S9  g )Nr   rN   rO   r   r  r   r  gv?g~jt?r  r  rm   r   )r   r  r   )r\   r5  r  r  r  r  s         rE   test_pmf_broadcasting%TestMultinomial.test_pmf_broadcasting$
  s   ARHr2h+?@d|$7AAR9ayt41a&1a&!1 2ABx@q	{6A1#sr2h?$!T:!Q!AQC5'RHE4)T:rG   rk   c                     [         R                  " US5      nUS-  S-  U* S-  S-  U* S-  S-  /U* S-  S-  US-  S-  U* S-  S-  /U* S-  S-  U* S-  S-  US-  S-  //n[        X#SS9  g )	N)r   r   r,  r   r  r   r,  r  r  r  r   r   r   )r\   r   cov1r*  s       rE   test_covTestMultinomial.test_cov4
  s    q,/2b1"R%(QBrE"H-Br1R47QBrE"H-BrA2b58QrT"W-/ 	.rG   c                 N   [         R                  " SSS/SS//5      nSS/SS//SS/SS///n[        XS	S
9  [         R                  " SS/SS/5      nSS/SS//SS/SS///n[        X4S	S
9  [         R                  " SS/SS/SS//5      nSS/SS//SS/SS///n[        XVS	S
9  g )Nrk   r   r  r   r  g?gܿgr  r  rm   g
ףp=
?g
ףp=
׿r   r  rT  r  gzG?gzGr  g333333r>  r\   r?  r*  cov3cov4cov5cov6s          rE   test_cov_broadcasting%TestMultinomial.test_cov_broadcasting<
  s    qB8b"X"67tdC[)RIRy+AB.1vBx0ttSk*c4[4+,FG.1vR2r(';<8$x&9:8$x&9:<.rG   rN   c                 v    [         R                  " USS/5      n[        U[        R                  " US5      SS9  g Nr   r  r  r  r   r   r   r"   )r\   r   ent0s      rE   rB  TestMultinomial.test_entropyJ
  s1     ""1r2h/emmAr2>rG   c           	      `   [         R                  " SS/SS/5      n[        U[        R                  " SS5      [        R                  " SS5      /SS9  [         R                  " SS/S	S
/SS//5      n[        U[        R                  " SS	5      [        R                  " SS5      /SS9  [         R                  " S/S//S	S
/SS//5      n[        U[        R                  " SS	5      [        R                  " SS5      /[        R                  " SS	5      [        R                  " SS5      //SS9  g )NrN   rO   r   r  r  r  rn   r  r   r  rT  r  rL  )r\   rM  ent1ent2s       rE   test_entropy_broadcasting)TestMultinomial.test_entropy_broadcastingQ
  s   ""Aq6B84u}}Q3U]]1b5IJ!	# ""Aq6RHr2h+?@u}}Q3U]]1b5IJ!	# ""QC!:R2r(/CD--2.a0DE--2.a0DEG!	#rG   c                 Z    [         R                  " USS/5      n[        X!S-  US-  /SS9  g rK  r   r   r   )r\   r   mean1s      rE   	test_meanTestMultinomial.test_mean`
  s.      RH-"ad|$7rG   c                 \    [         R                  " SS/SS/5      n[        USS/SS//S	S
9  g )Nrk   rl   r   r  r   r  g433333?g433333@r  r  rU  )r\   rV  s     rE   test_mean_broadcasting&TestMultinomial.test_mean_broadcastinge
  s5      !Q"b2ttTl;$GrG   c                    SnSn/ SQ/ SQ/ SQ/ SQ/ SQ/n[         R                  " U[         R                  S9n[        X5      n[	        UR                  U5      [        R
                  " X1U5      5        [	        UR                  U5      [        R                  " X1U5      5        [	        UR                  5       [        R                  " X5      5        g )	Nrp  )r   r   r   rT  r   r   r   rp  r   r   r   r}  r   r   r   r  r   r   r   r1  r   r   rN   r  r   )r>   r?   r4  r   r   r  r  r   )r\   r   pvalsrc   	mn_frozens        rE   r  TestMultinomial.test_frozeni
  s     
:i	BJJq

+)		a(+//!*FG	((+[-?-?e-LM	))+[-@-@-JKrG   c                 8   Sn[         R                  R                  S5      nUR                  U5      nSUS'   U[         R                  " U5      -  n[         R                  " U5      n[
        R                  " XAU5      n[         R                  " U5      (       d   eg )NX   l   iRZY gKH9ro   )r>   r   r   r   rV   r   r  isfinite)r\   r   r   ri  rc   r  s         rE   test_gh_11860TestMultinomial.test_gh_11860t
  sy    
 ii##$78JJqM"	RVVAYGGAJ##A!,{{6""""rG   r   c                     Sn[         R                  " / SQUS9n[        R                  " / SQX#S9n[        R                  " / SQX#S9n[         R                  R                  XESS9  g )	N   )r   r   r   r   r   r   )r   rN   rk   rn   rm   )rc   r   ri  )r   rN   rm   rk   rn   r  r  )r>   r?   r   r  testingr   )r\   r   r   ri  res1res2s         rE   test_gh_22565TestMultinomial.test_gh_22565
  sQ     JJ0>A;A;


""4E":rG   r   N)r   r   r   r   r  r  r%  rS   r   r   r-  r8  r;  r@  rH  rB  rR  rW  rZ  r  rh  r>   float32r4  ro  r   r   rG   rE   r  r  	  s   2	/M" [[S1a&)) *)6;  [[S1a&)/ *// [[S1a&)? *?# [[S1a&)8 *8H	L# [[Wrzz2::&>?; @;rG   r  c                   2    \ rS rSrS rS rS rS rS rSr	g)	TestInvwisharti
  c           	         Sn[         R                  " [         R                  " U5      S-   5      n[         R                  " XS-
  -  S-  5      U[         R                  " USS9'   [         R                  " UR
                  U5      n/ n[        S5       H  n[         R                  " [         R                  " U5      US-   S-  -   5      n[         R                  " XS-
  -  S-  5      U[         R                  " USS9'   [         R                  " UR
                  U5      nUR                  U5        M     [         R                  " U5      R
                  nSS[         R                  " SSS5      4SX#4/nU H  u  prn[        Xr5      n[        UR                  5       [        R                  " Xr5      5        [        UR                  5       [        R                  " Xr5      5        [        UR                  5       [        R                  " Xr5      5        [        UR!                  U5      [        R                   " XWU5      5        M     g r  )r>   rx   r  r  r  r   r  r  r   rU  r   r   r{  r   r  r   r   )	r\   r   r  r   r  rc   r  r  iws	            rE   r  TestInvwishart.test_frozen
  s   
 		#q(),.IIcq5k!m,DboocR()uww& qA		#!ax/0A,.IIcq5k!m,DAboocR()qssAAHHQK	 
 HHQKMM BKKR+,N


 )NRB&B:>>"#<=JOOB$>?JOOB$>?BFF1Iz~~aU'CD )rG   c                    [         R                  R                  S5      nSnSn[         R                  " U5      n[         R                  " SSS[
        S9n[         R                  " SS	S	S
9nU H  n[        Xt5      n[        US-  SS9n	[        UR                  5       U	R                  5       5        [        UR                  5       U	R                  5       5        [        UR                  U5      U	R                  U5      5        UR                  X!S9n
US-  SS4nSn[        SXU
5        [        UR                  5       U	R                  5       5        M     g )Nr  r  r   rk      rN   r   r   r  r  r,  r  r   r   r  r   )r>   r   r  rW   r  r`  rU  r   r   r   r{  r   r   r   r   r   )r\   r   r   r   r  r  r   r  ru  igr   rC   rF  s                rE   test_1D_is_invgamma"TestInvwishart.test_1D_is_invgamma
  s   
 ii##F+s99QAU3KKB2&BB&B"Q$d+B BFFHbffh/BGGIrwwy1 BFF1Irvvay1 &&b&3CqD!T?DE":tC@ BJJL"**,7% rG   c                    SnSn[         R                  " U5      nSUS'   SUS'   [        X#5      n[         R                  R	                  S5      n[        R
                  " X#US9n[         R                  R	                  S5      nUR                  US9n[         R                  R	                  S5      nUR                  SS9n[         R                  UR                  US	-
  5      UR                  US
-
  5      UR                  U5      4   S-  n	[         R                  " U	5      n
X[         R                  " USS9'   [         R                  R                  U5      n[         R                  R                  U
R                  UR                  5      R                  n[         R                  " XR                  5      n[!        Xm5        [!        X}5        g )NrO   r  r,  r}  r  iHG	 r   r   rN   r   ro   r  )r>   rW   r   r   r  r   r   r  r  rx   r  r   r   solver   r  r   )r\   r   r  r  ru  r   iw_rvsfrozen_iw_rvsr  r  r~   r  Lmanual_iw_rvss                 rE   test_invwishart_2D_rvs%TestInvwishart.test_invwishart_2D_rvs
  sp    sc
c
 " ii##F+<ii##F+C0 ii##F+jjaj(EEMM"Q$MM"Q$MM"
 		 GGI(3"//#
$% IIu%IIOOACC%''q## 	.5rG   c                 b   SnSnS GH$  n[         R                  " [         R                  " U5      S-   5      n[         R                  " X3S-
  -  S-  5      U[         R                  " USS9'   [         R                  " UR
                  U5      n[        X5      nUR                  5       nUR                  5       nXr-  S-  nUR                  US	S
9n	U	R                  SS9n
X3S-   -  S-  nSU-  n[        R                  " SUS-  -
  5      n[         R                  " X-
  U-  SUS9(       a  GM%   e   g)z1Test that sample mean consistent with known mean.r   N  r   rk   r   rN   ro   r  r,  r  r   r   r   r  r#  N)r>   rx   r  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_meanTestInvwishart.test_sample_mean
  s    CGGBIIcNQ./E02		#q/A:M0NE"//#,-FF577E*Eb(D		IxxzH!/#5Ik=AAI']A%FvIxxIM 12H;;&)3   ! rG   c                 f   [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ/ SQ/ SQ/ SQ/5      nS	n[        R                  " XU5      nUR                  S
   n[         R
                  R                  U5      u  pg[         R
                  R                  U5      u  ph[         R
                  R                  X5      n	US-  U-  X5-  S-  [         R                  " S5      -  -
  [        US-  U5      -
  X5-   S-   S-  U-  -
  SU	R                  5       -  -
  n
[        XJ5        g)zRegression test for gh-8844.)rN   r   r   r,  )r   rN   r,  r,  )r   r,  rO   r   )r,  r,  r   rN   )r1  rn   rO   r   )rn   r1  rk   r   )rO   rk   r  rN   )r   r   rN   r1  rl   r   rN   r   r,  N)r>   r   r   r   r@   r   r  r}  r  r8   r>  r   )r\   r   Psinuprobri  siglogdetX	logdetPsir   r  s              rE   test_logpdf_4x4TestInvwishart.test_logpdf_4x4  s   HHn&$&( ) hh$$$& '   ,GGAJyy((+**3/IIOOA#T9$tAvrvvay()"2a4+, vz1nW,- !'')m	$
 	'rG   r   N)
r   r   r   r   r  rz  r  r  r  r   r   rG   rE   rs  rs  
  s    E@8B,6\6(rG   rs  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)TestSpecialOrthoGroupi1  c                     [         R                  " S[        R                  R	                  S5      S9n[        R
                  " / SQ/ SQ/ SQ/5      n[        X5        g )NrO     r   )gDbgMPFh?g,׿)g7?g++?guC))g?gg]Qg^ɿ)r   r   r>   r   r   r   r   )r\   rc   r  s      rE   test_reproducibility*TestSpecialOrthoGroup.test_reproducibility2  sK    ##ABII4I4I#4NO88CBCE F 	"!.rG   c                     [        [        [        R                  S 5        [        [        [        R                  S5        [        [        [        R                  S5        [        [        [        R                  S5        g Nr/  ro   r  )r  rT   r   r   r\   s    rE   test_invalid_dim&TestSpecialOrthoGroup.test_invalid_dim9  sN    j"5"9"94@j"5"9"96Bj"5"9"92>j"5"9"93?rG   c                 |    Sn[        U5      nUR                  SS9n[         R                  " USS9n[        X45        g )Nrn   r  r   )r   r   r   )r\   r   r  r  r  s        rE   test_frozen_matrix(TestSpecialOrthoGroup.test_frozen_matrix?  s;    $S)zztz,"&&s>T rG   c                    [        SS5       VVs/ s H,  n[        S5        H  n[        R                  " U5      PM     M.     nnnU Vs/ s H"  n[        R                  R                  U5      PM$     nn[        US/S-  SS9  U HN  n[        [        R                  " XDR                  5      [        R                  " UR                  S   5      5        MP     g s  snnf s  snf )	NrN   rp  rO   r      vIh%<=r  r   )r  r   r   r>   r   r  r   r   r  r   rW   r@   )r\   r   r  r  rc   detss         rE   test_det_and_ortho(TestSpecialOrthoGroup.test_det_and_orthoH  s    q!$#Qx! "%%c* +$ 	 !
 +--"Q		a "-rd2gE2 A%bffQn&(ffQWWQZ&8: !
 .s   3C
)Cc                    SnSnSn[         R                  " X[        R                  R	                  S5      S9nSnU VVVs0 s H(  u  pgXg4[        U Vs/ s H
  oU   U   PM     sn5      _M*     n	nnnU V
Vs/ s H  o  H  oU:  d  M
  X4PM     M     nn
nU VVs/ s H  u  p[        X   X   5      S   PM     nnn[        U/[        U5      -  U5        g s  snf s  snnnf s  snn
f s  snnf )Nrk   r  rb  i  r   r  r2  )r   rm   rY  r   )	r   r   r>   r   r   sortedr    r   r   )r\   r   r  ks_probr  elserecrc   proje0e1pairsp0p1ks_testss                   rE   	test_haarTestSpecialOrthoGroup.test_haarV  s      $$BII,A,A#,F
 +HKLfb&R!8RB%)R!899L$'ACb#Bb"#CADIJEHTXtx03EJ7)CJ.9 "9LAJs*   CC%C9C&C&C,Cc                 @    [        [        R                  " SSS9SSS9  g )Nr   r  r   r  r  )r   r   r   r  s    rE   test_one_by_one%TestSpecialOrthoGroup.test_one_by_oner  s     	+//=quMrG   c                 V    [        [        R                  " SSS9R                  S5        g Nr   rm   r   )rm   r   r   r   r   r   r@   r  s    rE   test_zero_by_zero'TestSpecialOrthoGroup.test_zero_by_zerow       (,,QQ7==yIrG   r   N)r   r   r   r   r  r  r  r  r  r  r  r   r   rG   rE   r  r  1  s(    /@!::8N
JrG   r  c                       \ rS rSrS rS rS rS r\R                  R                  S/ SQ5      S 5       rS	 rS
 rS r\R                  R                  S 5       rSrg)TestOrthoGroupi{  c                 V   Sn[         R                  R                  U5      n[        R                  " SUS9n[        R                  " SUS9n[        [         R                  R                  U5      S5        [         R                  " / SQ/ SQ/ SQ/5      n[        X55        [        XE5        g )Nr  rO   r   ro   )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   rc   r   r  s         rE   r  #TestOrthoGroup.test_reproducibility|  s    ii##D)OOAC0__QT2BIIMM!,b188<==? @ 	"!.!"/rG   c                     [        [        [        R                  S 5        [        [        [        R                  S5        [        [        [        R                  S5        [        [        [        R                  S5        g r  )r  rT   r   r   r  s    rE   r  TestOrthoGroup.test_invalid_dim  sB    j+//48j+//6:j+//26j+//37rG   c                     Sn[        U5      n[        USS9nUR                  SS9n[         R                  " USS9nUR                  SS9n[        XE5        [        XF5        g )Nrn   r  r   r   r   r   )r   r   r   r\   r   r  frozen_seedr  r  rvs3s          rE   r  !TestOrthoGroup.test_frozen_matrix  s]    S!!#D1zztz,s6A&T T rG   c                    [        SS5       VVs/ s H3  n[        S5       Vs/ s H  n[        R                  " U5      PM     snPM5     nnn[        R                  " U VVs/ s H2  oD Vs/ s H"  n[        R
                  R                  U5      PM$     snPM4     snn5      n[        [        R                  " U5      [        R                  " UR                  5      SS9  U HW  nU HN  n[        [        R                  " XUR                  5      [        R                  " UR                  S   5      5        MP     MY     g s  snf s  snnf s  snf s  snnf )NrN   rp  r  r  r  r   )r  r   r   r>   r   r   r  r   fabsrV   r@   r   r  r   rW   )r\   r   r  r  xxrc   r  s          rE   r  !TestOrthoGroup.test_det_and_ortho  s     q&$# b	#!1 s#!#$ 	 &
 xx"E"BB7Bq"))--*B7"EFrwwtzz':G B)"&&CC.*,&&*<>  # &
 8Es.   E D>E"	E
+)E	E
>E	E
r   )rN   rk   r  rx  c                 l   [         R                  R                  S5      n[        US9nUR	                  SUS9n[
        R                  R                  U5      n[         R                  " US:  5      n[        U5      n[        R                  " Xg5      nUR                  SS9u  pU	Ss=:  a  U
:  d   e   eg )	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_gh18272,TestOrthoGroup.test_det_distribution_gh18272  s     ii##$78s#hhDsh3||$FF4!8Iooa#%%t%<	S4rG   c                    SnSnSn[         R                  R                  S5      n[        R                  " XUS9nSnU VVV	s0 s H(  u  pxXx4[        U V	s/ s H
  oU   U   PM     sn	5      _M*     n
nnn	U VVs/ s H  o  H  oU:  d  M
  X4PM     M     nnnU VVs/ s H  u  p[        X   X   5      S   PM     nnn[        U/[        U5      -  U5        g s  sn	f s  sn	nnf s  snnf s  snnf )Nrk   r  rb  i  r   r  r   )	r>   r   r  r   r   r  r    r   r   )r\   r   r  r  r   r  r  r  r  rc   r  r  r  r  r  r  r  s                    rE   r  TestOrthoGroup.test_haar  s     ii##C(__SSA +HKLfb&R!8RB%)R!899L$'ACb#Bb"#CADIJEHTXtx03EJ7)CJ.9 "9LAJs*   C!C'C!;C(C( C.C!c                 f   Sn[         R                  " US[        R                  R	                  S5      S9n[        [        R                  " U5      SSS9  [        R                  " US:  5      n[        U5      n[        R                  " X45      nUR                  SS	9u  pgUS
s=:  a  U:  d   e   eg )Nr   r:  r  r   r  r  r   r  r  r,  )r   r   r>   r   r   r   r  r   r   r0   r  r  )r\   r   r  r  r   rA   r  r  s           rE   r  TestOrthoGroup.test_one_by_one  s    __St")):O:OPS:TUr
AE2FF26NGooa#%%t%<	S4rG   c                 V    [        [        R                  " SSS9R                  S5        g r  r  r  s    rE   r   TestOrthoGroup.test_zero_by_zero  r  rG   c                 L  ^^ [         R                  R                  S5      mSU4S jjn[        SS5       Hk  mSUU4S jjnU" U5      nU" [        R
                  R                  R                  5      n[        R
                  R                  X45      u  pV[        SU5        Mm     g )	Nr  c                    > [         R                  R                  TR                  X 4S95      u  p#n[         R                  " X$5      $ Nr   )r>   r   r   r   r  )r   r   r   _sr   r   s        rE   random_ortho<TestOrthoGroup.test_pairwise_distances.<locals>.random_ortho  s4    yy}}SZZcZZ%@AHA166!<rG   rN   rl   c                   > [         R                  " [        U5       Vs/ s H)  n[         R                  " U " TTS9U " TTS9-
  S-  5      PM+     sn5      nU[         R                  R                  U* X$R                  S9-  nU$ s  snf )N)r   r   rN   r   )r>   r   r  r   r   r   r@   )r   r5  epsr   r0   r   r   s        rE   generate_test_statisticsHTestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statistics  s     #1X" & FFCCc:Cc:;=>? @%"  **C4;;*GG"s   0Brb  r=   )r  r"  )
r>   r   r  r  r   r0   r   r   r    r   )	r\   r  r  r  r  _Dri  r   r   s	          @@rE   test_pairwise_distances&TestOrthoGroup.test_pairwise_distances  s     ii##C(	  A;C  0=H-ekk.E.E.I.IJFKK((:EBc1%! rG   r   N)r   r   r   r   r  r  r  r  rS   r   r   r  r  r  r  r  r  r   r   rG   rE   r  r  {  si    08
!> [[UN3
  4
 :6	 J [[& &rG   r  c                   2    \ rS rSrS rS rS rS rS rSr	g)	TestRandomCorrelationi  c                    [         R                  R                  S5      nSn[        R                  " X!S9n[        R                  " USS9n[         R
                  " / SQ/ SQ/ SQ/ SQ/5      n[        X55        [        XE5        g )Nr  r,  r  r  r  r   )r   ѓ2ǿA?Ϳ)r  r   4($?R}%?)r  r  r   qTnƿ)r  r  r  r   )r>   r   r  r   r   r   r   )r\   r   r@  rc   r   r  s         rE   r  *TestRandomCorrelation.test_reproducibility  sp    ii##C(!""4:##Ds;88A@@AC D 	"!.!"/rG   c                    [        [        [        R                  S 5        [        [        [        R                  S5        [        [        [        R                  S5        [        [        [        R                  S/5        [        [        [        R                  SS/SS//5        [        [        [        R                  SS/5        [        [        [        R                  / SQ5        g )	Ntestr  r   rN   rO   rm   g      )r   rN   r   )r  rT   r   r   r  s    rE   test_invalid_eigs'TestRandomCorrelation.test_invalid_eigs	  s    j"4"8"8$?j"4"8"8&Aj"4"8"8#>j"4"8"83%@j"4"8"8Aa5!A-Hj"4"8"83*Ej"4"8"8*ErG   c                     Sn[        U5      n[        USS9n[         R                  " USS9nUR                  SS9nUR                  5       n[        XE5        [        XF5        g )Nr  r  r   r   )r   r   r   )r\   r@  r  r  r  r  r  s          rE   r  (TestRandomCorrelation.test_frozen_matrix  s[    !#D)(C8!%%d=zzsz+ T T rG   c           
      6   S n[         R                  R                  S5      n[        SS5       Vs/ s H  o1" X2R	                  US95      PM     nnUR                  / SQ5        U Vs/ s H  nS/[        U5      -  PM     nnU Vs/ s H  n[        R                  " XRS9PM     nnU Vs/ s H6  n[         R                  " [         R                  R                  U5      5      PM8     n	nU Vs/ s H  n[         R                  " U5      PM     n
n[        XS	S	S
9  U Vs/ s H  n[         R                  " U5      PM     nn[        X5       H  u  p[        XS	S9  M     U H  n[        XR                   S	S9  M     g s  snf s  snf s  snf s  snf s  snf s  snf )Nc                 "    X-  [        U5      -  $ r=   )r   )r  r  s     rE   r   3TestRandomCorrelation.test_definition.<locals>.norm&  s    3s1v:rG   rh  rN   rl   r   )rm   r   r   r   r   r   r  r  r  )r>   r   r  r  r   r  r   r   r   r  r   r  r>  r   rx   zipr   )r\   r   r   r  r@  r  rV   r  rc   r  
dets_knowndiagsr3  r4  s                 rE   test_definition%TestRandomCorrelation.test_definition  sS   	 ii##C(6;AqkBkQ+,kBI%)*TSVT*CGH4a $$Q94H 4662a		a()26*./$Qbggaj$
/u5A &((RR($DAAu- % AAss/ ) C +H 7/ )s#   E=(FF+=F. F Fc           	         [         R                  " SS/SS//[        S9n[        R                  " U5      n[        U[         R                  " SS/SS//5      5        [         R                  " SS9   [         R                  " SS/SS//5      n[         R                  " SS/S[         R                  " SS5      //[        S9n[        R                  " UR                  5       5      n[        XR                  R                  U5      R                  U5      5        [         R                  " S	S/SS
//[        S9n[        R                  " UR                  5       5      n[        XR                  R                  U5      R                  U5      5        S S S 5        [         R                  " SS/SS//[        S9n[        R                  " UR                  5       5      n[        US   S5        [         R                  " SS/SS//[        S9n[        R                  " UR                  5       5      n[        US   S5        g ! , (       d  f       N= f)Nr   r   r   r   ignore)overro   gu <7~r  rw  rN   r  gMk   @)r>   r   r`  r   _to_corrr   errstate	nextaftercopyr   r  )r\   rj  r  m0s       rE   test_to_corr"TestRandomCorrelation.test_to_corrB  s    HHsAhA'u5''*288aVaX$678
 [[h'1a&2q'*+AE1:2<<1+='>?uMB"++BGGI6AAsswwr{q12C<%6eDB"++BGGI6AAsswwr{q12 ( XX1v1v&e4''	2#" XX!}q!f-U;''	2#"' ('s   0DH;;
I	r   N)
r   r   r   r   r  r  r  r	  r  r   r   rG   rE   r  r    s    
0F
!"0H#rG   r  c                   4   \ rS rSr\R
                  R                  SSS/5      \R
                  R                  S/ SQ5      S 5       5       r\R
                  R                  S/ SQ5      S	 5       rS
 r	\R
                  R                  S/ SQ5      S 5       r
Srg)TestUniformDirectionic  r   r   rO   r   Nr   rk   )rk   rm   c                 x   [         R                  R                  S5      n[        XS9nUR	                  U5      n[         R
                  " U5      [         R                  " U5      pvUR                  XgUS9R                  nUR                  U:X  d   e[         R                  R                  USS9n	[        U	S5        g )N   Sid)_i4 r   r   ro   r   r   )r>   r   r   r(   r   r   rW   r   r@   r   r   r   )
r\   r   r   r   uniform_direction_distr  r   r   expected_shapenormss
             rE   r  !TestUniformDirection.test_samplesd  s     ii##$78!23!A(,,T2HHSM266#;c000FLL}}...		wR0r"rG   )Nr   r/  r  c                     Sn[         R                  " [        US9   [        R                  " U5        S S S 5        g ! , (       d  f       g = f)NzMDimension of vector must be specified, and must be an integer greater than 0.rL   )rS   r
   rT   r(   r   )r\   r   r]   s      rE   r  %TestUniformDirection.test_invalid_dimq  s1    <]]:W5!!#& 655s	   <
A
c                     Sn[        U5      n[        USS9nUR                  SS9n[         R                  " USS9nUR                  5       n[        XE5        [        XF5        g )Nrk   r  r   r   )r(   r   r   r  s          rE   test_frozen_distribution-TestUniformDirection.test_frozen_distributionx  s[    "3''#6zzsz+ $$Ss; T T rG   )rN   rk   r  c                    [         R                  R                  S5      n[        XS9nUR	                  SS9u  pEXTU-  U-  -  nU[         R
                  R                  U5      -  n[        XE-  SSS9  UR	                  SS9nXd-  nXe-  n[         R                  " Xx5      n	U	[         R                  -  n	U	S[         R                  -  -  n	[        5       n
[        XR                  5      nUR                  S	:  d   eg )
Nl   @9Y sr   rN   r   r   r#  r#  r  rb  )r>   r   r   r(   r   r   r   r   arctan2r?  r   r!   r   pvalue)r\   r   r   spherical_distv1v2r  s1s2anglesuniform_distkstest_results               rE   test_uniform!TestUniformDirection.test_uniform  s    ii##$78*39###+
2gl
biinnR  / $$%$0\\B# 	"%%!BEE'yv'7'78##d***rG   r   N)r   r   r   r   rS   r   r   r  r  r!  r.  r   r   rG   rE   r  r  c  s    [[UQF+[[V%9:	# ; ,	# [[U$:;' <'
! [[UI.+ /+rG   r  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestUnitaryGroupi  c                     [         R                  R                  S5      n[        R                  " SUS9n[        R                  " SSS9n[         R
                  " / SQ/ SQ/ SQ/5      n[        X$5        [        X45        g )Nr  rO   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   rc   r   r  s        rE   r  %TestUnitaryGroup.test_reproducibility  si    ii##C(ac2qs388IHKM
 	"!.!"/rG   c                     [        [        [        R                  S 5        [        [        [        R                  S5        [        [        [        R                  S5        [        [        [        R                  S5        g r  )r  rT   r   r   r  s    rE   r  !TestUnitaryGroup.test_invalid_dim  sJ    j-"3"3T:j-"3"3V<j-"3"3R8j-"3"3S9rG   c                     Sn[        U5      n[        USS9nUR                  SS9n[         R                  " USS9nUR                  SS9n[        XE5        [        XF5        g )Nrn   r  r   r   r   r   )r   r   r   r  s          rE   r  #TestUnitaryGroup.test_frozen_matrix  s_    s##Cc2zzsz+  37A&T T rG   c                 \   [        SS5       VVs/ s H,  n[        S5        H  n[        R                  " U5      PM     M.     nnnU H[  n[        [        R
                  " XDR                  5       R                  5      [        R                  " UR                  S   5      SS9  M]     g s  snnf )NrN   rp  rO   r   r  r#  )
r  r   r   r   r>   r  conjr   rW   r@   )r\   r   r  r  rc   s        rE   test_unitarityTestUnitaryGroup.test_unitarity  s    q!$#Qx! $ %$ 	 !
 ABFF1ffhjj1266!''!*3EER !s   3B(c           	      6   S GH  nSn[         R                  " X[        R                  R	                  S5      S9n[        R
                  " U Vs/ s H"  n[        R                  R                  U5      PM$     sn5      n[        R                  " UR                  UR                  5      n[        UR                  5       [        [        R                  * S[        R                  -  5      R                   5      n[#        UR$                  S:  5        GM     g s  snf )Nr  r  r  r   rN   rb  )r   r   r>   r   r   r  r   r   eigvalsr$  imagro  r!   ravelr   r?  r   r	   r%  )r\   r   r  r  rc   r@  rA   s          rE   r  TestUnitaryGroup.test_haar  s    
 CG""		0E0Ec0JB 99rBr!ell2215rBCD

499dii0AGRUUFAbeeG$<$@$@ACCJJ%&  Cs   )D
c                 V    [        [        R                  " SSS9R                  S5        g r  )r   r   r   r@   r  s    rE   r  "TestUnitaryGroup.test_zero_by_zero  s    ]&&qq177CrG   r   N)r   r   r   r   r  r  r  r:  r  r  r   r   rG   rE   r1  r1    s"    0:
!S'&DrG   r1  c                      \ rS rSrSS/SS/SS/SS/SS/SS/SS/SS/SS/SS//
SS/SS/SS//S/ SQ4/ S	Q/ S
Q/ SQ/ SQ/ SQ// SQ/ SQ/ SQ/ SQ/S/ SQ4/r\R                  R                  S\5      S 5       r\R                  R                  S\5      S 5       r	S r
S r\R                  R                  SS9\" S5      S 5       5       rS rS rSS S!S"S/SS"//S!SS/S"S/SS"//S4S!S"S/SS"//S"SS/S"S/SS"//S"4S"S"/S!S!S"S"/SS/SS//S4S"S"/S!S"S"S"/SS/SS//S"4S"S"/S"S/SS"//S!S"S"/S"S/SS"//S4S"S"/S"S/SS"//S"S"S"/S"S/SS"//S"4/r\R                  R                  S#\5      S$ 5       rS%SSS%/S//S4S%/S/SS%/S//S4\R(                  " S%/5      \R(                  " S/5      SS%/S//S4/r\R                  R                  S#\5      S& 5       rS' rS( rS) r\R                  R                  S*S+S,/5      \R                  R                  S-/ S.Q5      \R                  R                  S/S0S1\R4                  /5      S2 5       5       5       rS3 r\R                  R                  S-/ S4Q5      S5 5       r\R                  R                  S-/ S6Q5      S7 5       rSYS9 jrS: r \R                  R                  S-/ S;Q5      \R                  R                  S</ S=Q5      \R                  R                  S>S8S?/5      S@ 5       5       5       r!\R                  RD                  SA 5       r#SB r$SC r%SD r&\R                  R                  S-SE5      SF 5       r'SG r(\R                  R                  S// SHQ5      SI 5       r)\R                  R                  SJSK\RT                  " SS5      SLSM4SN\R(                  " SOS/SSK//5      SPSQ4/5      SR 5       r+\R                  R                  SS/ STQ5      SU 5       r,SV r-SW r.SXr/g!)ZTestMultivariateTi  r   rN   rm   rO   rk   r   )
|	ߌ?v
2R?rE  g0$H?rF  rF  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?)ro   r   2   )r   r,  r  )r,  r   rv  )r  rv  r   r  )gJ#R<g^<gL[<gN=<g`$<zx, loc, shape, df, ansc                 R    [        X#USS9nUR                  U5      n[        Xu5        g Nr   r   )r$   r   r   )r\   rc   r  r@   r  ansr   vals           rE   test_pdf_correctness&TestMultivariateT.test_pdf_correctness&  s%    c"15hhqk!#+rG   c                     [        X#USS9nUR                  U5      nUR                  U5      n[        [        R
                  " U5      U5        g rI  )r$   r   r   r   r>   r  )	r\   rc   r  r@   r  rJ  r   r  r  s	            rE   test_logpdf_correct%TestMultivariateT.test_logpdf_correct,  s<    c"15xx{{{1~!"&&,5rG   c                 x    / SQn[         R                  " USS9n[        R                  " U5      n[        X#5        g )N)
r1  rn   rm   r   ri  r1  r   ri  ro   rO   r   r  )r$   r   r%   r   )r\   rc   rK  rJ  s       rE   test_mvt_with_df_one_is_cauchy0TestMultivariateT.test_mvt_with_df_one_is_cauchy4  s.    -  q)jjm!#+rG   c                     Sn[        SSSSS9nUR                  SS9n[        U5      u  pEXQ:  d   e[        SS/S	S
/S
S	//SSS9nUR                  SS9n[        U5      u  pEXQ:  R                  5       (       d   eg )Nr   r   r   順 r  r   r   rr   rO   r  ro   rJ  )r$   r   r&   r  )r\   	P_VAL_MINr   r  r   ri  s         rE   &test_mvt_with_high_df_is_approx_normal8TestMultivariateT.test_mvt_with_high_df_is_approx_normal:  s    
 	avA6(((''"r1gR2r(';#%'(((''"##%%&%rG   zuses mockingreasonz'scipy.stats.multivariate_normal._logpdfc                 :   [        SS[        R                  SS9n[        U[        5      (       d   e[         R
                  " S[        R                  S9  UR                  S:X  d   e[         R                  " S[        R                  S9  UR                  S:X  d   eg )Nr   r   rn   rV  r  rN   )r$   r>   r  r   r   r   
call_countr   )r\   mockr   s      rE   !test_mvt_with_inf_df_calls_normal3TestMultivariateT.test_mvt_with_inf_df_calls_normalL  sx     arvvA6$ :;;;;1(!###aBFF+!###rG   c                    Sn[         R                  " U5      n[         R                  " U5      nSn[         R                  " U5      n[        X#U5      R	                  U5      n[         R
                  " U5      (       d   e[        X#U5      R                  U5      n[         R
                  " U5      (       d   eSn[         R                  R                  S5      nUR                  Xq45      n[        X#U5      R	                  U5      nUR                  U4:X  d   e[        X#U5      R                  U5      nUR                  U4:X  d   e[        [         R                  " S5      [         R                  " S5      S5      R                  5       n[         R
                  " U5      (       d   eSn	[        [         R                  " S5      [         R                  " S5      S5      R                  U	S9nUR                  U	4:X  d   eg )Nrm         @rn   l   I r   r   )r>   r   rW   r$   r   isscalarr   r   r   r@   r   )
r\   r   r  r@   r  rc   rA   	n_samplesr   r   s
             rE   test_shape_correctness(TestMultivariateT.test_shape_correctnessV  s    hhsmsHHSMS,003{{3S,33A6{{3 	ii##J/JJ	'(S,003		i\)*)S,33A6		i\)*) RXXa["&&)Q7;;={{3 RXXa["&&)Q7;;;F		dW$%$rG   c                     [        5       n[        UR                  S/5        [        UR                  S//5        UR                  S:X  d   eg )Nr   r   r$   r   r  r@   r  )r\   r   s     rE   test_default_arguments(TestMultivariateT.test_default_argumentsw  s<    TXXs#TZZ1#'1rG   )NNNr   r   r   )NNrn   r   r   rn   Nrn   z*loc, shape, df, loc_ans, shape_ans, df_ansc                     [        XUS9n[        UR                  U5        [        UR                  U5        UR                  U:X  d   eg )Nrl  rh  r\   r  r@   r  loc_ans	shape_ansdf_ansr   s           rE   test_default_args#TestMultivariateT.test_default_args  s>     #r:TXXw'TZZ+6!"!rG   ro   c                     [        XU5      n[        UR                  U5        [        UR                  U5        [        UR                  U5        g r=   rh  rl  s           rE   &test_scalar_list_and_ndarray_arguments8TestMultivariateT.test_scalar_list_and_ndarray_arguments  s:     c"-TXXw'TZZ+TWWf%rG   c           
      h   SS//n[        [        [        40 [        US9D6  SS/SS/SS//n[        [        [        40 [        XS9D6  [        R
                  " S5      n[        R                  " S5      nSn[        [        [        40 [        XUS9D6  Sn[        [        [        40 [        XUS9D6  g )	Nr   )r  rN   rO   )r  r@   ro   rl  r   )r  rT   r$   r6  r>   r   rW   )r\   r  r@   r  s       rE   test_argument_error_handling.TestMultivariateT.test_argument_error_handling  s    1vhj$	'	'
 Q!Q!Q(j$	42	4
 hhqkq	j$	;b9	; j$	;b9	;rG   c                 
   [         R                  R                  S5      nUR                  SS9n[         R                  " S5      n[        X#SSS9n[        X#SSS9nUR                  SS9nUR                  SS9n[        Xg5        g )Nrm   rO   r   rN   rV  r  )r>   r   r  r   rW   r$   r   r   )r\   r   r  r@   r   dist2samples1samples2s           rE   r  &TestMultivariateT.test_reproducibility  sw    ii##A&kkqk!q	saa8saa899"9%99"9%X(rG   c                 ~    [        SS/SS/SS//SSS9n[        [        R                  R                  [
        40 UD6  g )Nr   r   F)r  r@   r  rb   )r6  r  r>   r   r  r$   )r\   rC   s     rE   test_allow_singular%TestMultivariateT.test_allow_singular  s;    1qeQqE]qObii++^DtDrG   r   )r  rO   )rk   rl   rm   rO   r   )rN   rO   rm   rk   r  r   r  c                     [        [        R                  " U5      [        R                  " U5      U5      nUR	                  US9nUR
                  X4-   :X  d   eg r  )r$   r>   r   rW   r   r@   )r\   r   r   r  r   r   s         rE   test_rvsTestMultivariateT.test_rvs  sH     bhhsmRVVC["=hhDh!yyD7N***rG   c                    [         R                  " S5      n[         R                  " S5      nSn/ SQ/ SQ/ SQ/ SQ/n/ SQ/ SQ/ SQ/ SQ/n[         R                  " / SQ5      n[        R
                  " XAX#US9n[        XwS	   U-  5        g )
NrO   r  rE  rp   r`  ra  rb  rK  r   rc  )r\   r   r   r  r4  r3  rd  r   s           rE   re   TestMultivariateT.test_cdf_signs  sp    xx{ffQi	9i8	9i8.1!%%asAFVN23rG   )r   rN   rk   c                 &    U R                  U5        g r=   cdf_against_mvn_testr\   r   s     rE   $test_cdf_against_multivariate_normal6TestMultivariateT.test_cdf_against_multivariate_normal  s     	!!#&rG   )rO   rl   r1  c                 (    U R                  SS5        g )NrO   Tr  r  s     rE   -test_cdf_against_multivariate_normal_singular?TestMultivariateT.test_cdf_against_multivariate_normal_singular  s     	!!!T*rG   Fc           
         [         R                  R                  S5      nSnSUR                  SSUS9-  n[	        XX25      nSUR                  SSUS9-  [         R
                  " UR                  US95      -  nSUR                  SSXA4S9-  * U-   nSUR                  SSXA4S9-  U-   n	[        R                  R                  XUS	US
US9n
[        R                  R                  XUS
US9n[        XSS9  g )N   ]J>?a rO   r  rr   r   r   ro   rN   r  T)r  rL  rb   r   )rb   rL  Mb@?r#  )r>   r   r   r   r   signr   r0   r$   r   r   r   )r\   r   r   r   r   r  r   r   r3  r4  rA   rB   s               rE   r  &TestMultivariateT.cdf_against_mvn_test  s   ii##O4B,, 73;;r13;//"''#**#*:N2OOR!222T9B11D8""&&q16: ' N''++AS89 , ;t,rG   c           	      F   [         R                  R                  S5      nSnSnUR                  S[         R                  " U5      S9nSn[
        R                  R                  XCX%[         R                  * US9n[
        R                  R                  XEU[         R                  " U5      5      n[
        R                  R                  XC[         R                  " U5      5      n[        XgSS	9  [         R                  " [         R                  " Xh-
  5      S
:  5      (       d   eg )Nr  rN   r   r  )r   r  rO   )rL  r   r  r#  r  )r>   r   r   r   r"  r0   r$   r   r  rA  r   r   r  r  )	r\   r   r   r   rc   r  rA   rB   	incorrects	            rE   test_cdf_against_univariate_t/TestMultivariateT.test_cdf_against_univariate_t  s    ii##O4JJBbggclJ3""&&qbffW47 ' 9ggkk!rwws|4JJNN1BGGCL9	t,vvbffS_-45555rG   )rN   rO   rk   r  r   )   no l   m, l   sO l   U iOfYl   O_ r   Tc           
      4   U(       a  US:w  a  [         R                  " S5        [        R                  R	                  U5      nSUR                  SSUS9-  n[        XXC5      nUR                  U5      nUR                  U5      * nUR                  U5      n	UR                  5       S-  n
[        R                  R                  XXjUSS	9n[        R                  " S
S9   [        SX[        R                  U-  X-
  U5      S   nS S S 5        [        UWSSS9  [        R                  R                  XXjUUSS9n[        R                  " S
S9   [        SXX-
  X-
  U5      S   nS S S 5        [        XSSS9  g ! , (       d  f       Nz= f! , (       d  f       N+= f)Nr  z4Agreement with qsimvtv is not great in singular caser  rr   rN   r   rk   T)r   rb   r  )invalidr  r   g-C6*?r  r  r  )rL  r   rb   rZ  )rS   r   r>   r   r   r   r   r0   r$   r   r  r:   r  r   )r\   r   r   r   r   r  r   r   r3  r4  r  rA   rB   s                rE   test_cdf_against_qsimvtv*TestMultivariateT.test_cdf_against_qsimvtv  sg   
 
*KKNOii##D)B,, 7zz#ZZ_JJsOZZ\A ""&&qc6: ' <[[*5"266!8QXsCAFC +St$7 ""&&qQ47 ' N[[*5"18QXsCAFC +t$7 +* +*s   &E8F	8
F	
Fc           
      N  ^	^
^ Sn[         R                  R                  S5      nSUR                  SSUS9-  n[	        XUSS9m	UR                  U5      mUR                  U5      * nUR                  U5      nUR                  5       S	-  m
[
        R                  R                  UTT	T
UUS
9nU	U
U4S jn[        XtU[
        R                  R                  XS9S9n[        XhR                  SS9  U	U
U4S jn[        XtS   US   US   US   US   US   5      n[        XhS   SS9  g )NrO   l   	!y r  ro   r   r   T)r   rk   )r   rL  c                 \   > [         R                  R                  U R                  TTT5      $ r=   )r0   r$   r   r   )rc   r   r  r   s    rE   	integrandITestMultivariateT.test_cdf_against_generic_integrators.<locals>.integrand2  s$    ''++ACCsB??rG   )r;  r   )qrngr  r  c                  T   > [         R                  R                  U S S S2   TTT5      $ )Nro   )r0   r$   r   )zyxr   r  r   s    rE   r  r  8  s(    ''++C"ItS"EErG   r   rN   )r>   r   r   r   r   r0   r$   r   r5   qmcHaltonr   integralr7   )r\   r   r   r  r3  r4  rA   r  rB   r   r  r   s            @@@rE   $test_cdf_against_generic_integrators6TestMultivariateT.test_cdf_against_generic_integrators#  s    ii##N3#++b!#+.. t<zz#ZZ_JJsOZZ\A""&&q$Rc34 ' 6	@ yQUYY-=-=-=-NO\\5	F i1qtQqT1Q41qtDV$/rG   c                     [         R                  R                  S5      n[         R                  " / SQ/ SQ/ SQ/5      nSn[        R
                  " X#S9nUR                  / SQUS9nS	n[        XVS
S9  g )Nl   Ja )go!@S<?^Ss@)r  gRP=@jT0@)r  r  gk`-3@gWK?r@   r  rp   r   g1%?r  r  )r>   r   r   r   r0   r$   r   r   )r\   r   r   r  r   rA   rB   s          rE   test_against_matlab%TestMultivariateT.test_against_matlab>  sn     ii##J/hh???A B  ###5hhysh3t,rG   c                    Sn[         R                  R                  U5      nUR                  SS9nUR                  SS9U-   n[         R                  " S5      nUR                  5       nX5U4n[         R                  R                  U5      n[         R                  R                  U5      n	[
        R                  " USU06n
[        U
R                  U5      [        R                  " U/UQ7SU	065        g )Nl   2m rO   r   r   r   )	r>   r   r   r   rW   r0   r$   r   r   )r\   r   r   r  rc   r@   r  rC   
rng_frozenrng_unfrozenr   s              rE   r  TestMultivariateT.test_frozenO  s    ii##D)kkqk!KKQK#%q	ZZ\BYY**40
yy,,T2##T;
;TXXa[#''LDL|L	NrG   c                   ^^	^
^ SnSn[         R                  R                  S5      mTR                  X4S9nX3R                  -  mTR                  U5      m
TR                  X!4-   5      nTR                  5       S-  m	[        R
                  R                  UT
TT	TS9nUU	U
U4S jn[         R                  " USU5      n[        XWS	S
S9  g )Nrm   rY  r  r   rk   r   c                 T   > [        STT[        R                  * U -  U T-
  T5      S   $ )Nr  r   )r:   r>   r  )rc   r   r  r   r   s    rE   _cdf_1d2TestMultivariateT.test_vectorized.<locals>._cdf_1dj  s+    E2sRVVGAIqvsCAFFrG   ro   rZ  r  r  )	r>   r   r   r   r0   r$   r   apply_along_axisr   )r\   r   r   r~   rc   rA   r  rB   r   r  r   r   s           @@@@rE   test_vectorized!TestMultivariateT.test_vectorized^  s    ii##O4JJSJJ'##gzz#JJq6z"ZZ\A""&&q$Rc&J	G 	G !!'2q1t$7rG   r  c                    [         R                  R                  S5      n[        R                  R                  S/S/US-
  -  -   S9n[        R                  " US9R                  S/U-  US9nSUS-   -  n[        XESS	9  g )
Nr  r   r,  )r  )r@   r   r   rq  r  )
r>   r   r   r   r   toeplitzr0   r$   r   r   )r\   r   r   r~   rA   rB   s         rE   test_against_analytical)TestMultivariateT.test_against_analyticalp  s|    ii##O4LL!!QC3%37*;$;!<""+//c	/L37mt,rG   c                     [         R                  " SS5      n[         R                  n[        R                  R                  XS9n[        R                  R                  S U5      nX4:X  d   eg )NrO   r  )r>   rW   r  r0   r$   r   r   )r\   r   r  mvt_entropymvn_entropys        rE   test_entropy_inf_df%TestMultivariateT.test_entropy_inf_dfx  sW    ffQlVV**222D//77cB)))rG   )r   r  r  c                     [         R                  R                  SUS9n[         R                  R                  US9n[	        X#SS9  g )Nr   r  r  r  r  )r0   r$   r   rA  r   )r\   r  r  	t_entropys       rE   test_entropy_1d!TestMultivariateT.test_entropy_1d  s;    **222CGGOOrO*	U;rG   zdf, cov, ref, tolr  g}M@r#  r  r,  gNfh@r  c                     [         R                  " S5      n[        R                  " XRU5      n[	        UR                  5       X4S9  g )Nr  r  )r>   r   r0   r$   r   r   )r\   r  r   rB   tolr  mvts          rE   %test_entropy_vs_numerical_integration7TestMultivariateT.test_entropy_vs_numerical_integration  s3    
 hhuo""3R0s5rG   zdf, dim, ref, tol))r  r   gDdVW?r  )r  r   gU?r  )r  r   g/+?r#  )@xDr   Z_2?r  )}Ô%ITr   r  r  )r  r  gzg#.@r  )r  r  gD:f,@r  )r  r  1>`,@r  )r  r  r  r  )r  r  g8d?b@r  )r  r  g-YҺa@r#  )r  r  ZGra@r  )r  r  r  r  c                     [         R                  " [        R                  " U5      US9n[	        UR                  5       X4S9  g )Nr  r  )r0   r$   r>   rW   r   r   )r\   r  r   rB   r  r  s         rE   test_extreme_entropy&TestMultivariateT.test_extreme_entropy  s/    F ""<s5rG   c                 |   [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      nXR                  -  nSn[        R                  R                  X#S9n[        S US9R                  5       n[        XES	S
9  SnSn[        R                  R                  X&S9n[        R                  R                  X'S9n	[        XSS
9  g )N)gQ?g
ףp=
?g\(\߿(\?gGz?)gGzg{GzgQ?rT  gQ)gQ?g)\(?gQѿg)\(ܿg(\?)g      gGzgq=
ףpg\(\?g)r  g{Gzg\(\?g{GzԿg(\?r  r  r  r  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_covariance.TestMultivariateT.test_entropy_with_covariance  s     XX+-,,,
  44i ,,4434F.t=EEGeD ((00s0C	((00s0C		48rG   c                 t   [         R                  " SSS[        R                  S9n[        R                  " SSS5      n[        X5        [        R                  R                  S5      nUR                  S5      nUR                  S5      [        R                  " S5      S-  -   nUR                  U-   n[	        XES9n[        XE[        R                  S9nUR                  S5      n[        UR                  U5      UR                  U5      5        [        UR                  U5      UR                  U5      5        g )	Nr   r  l   18KJ.rO   rX  r   rl  r  )r$   r   r>   r  r   r   r   r   rW   r   r   r   )	r\   rA   rB   r   r   r   r   r  rc   s	            rE   test_logpdf_df_inf_gh19930,TestMultivariateT.test_logpdf_df_inf_gh19930  s    
 ##Aq!7!((Aq1! ii##L1zz!}jj 266!9Q;.eeckT3t266: EE"IQXXa[1a!%%(+rG   r   F)0r   r   r   r   	PDF_TESTSrS   r   r   rL  rO  rR  rX  thread_unsafer;   r_  re  ri  DEFAULT_ARGS_TESTSrp  r>   r   ARGS_SHAPES_TESTSrs  rv  r  r~  r  r  re  r  r  r  r  r  r  r  r  r  r  r  r  r  rW   r  r  r  r  r   r   rG   rE   rD  rD    st    FFFFFFFFFF	
 
A FF	

 	
	
1%P %$$$$	
 	 %%%	
 	
	
)K@ID [[5yA, B,
 [[5yA6 B6,'$ [[n5
45$ 6 6$&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# 
QB41#"
sAtqcUA&	2$1#B41#: [[I.0&0&;2)E
 [[Vg|%<=[[UL1[[TBBFF#34+ 5 2 >+

4 [[UI.' /' [[UI.+ /+-$6 [[UM2[[V &J K[[Z%78 8K 382 [[0 04-"N8$ [[UF+- ,-* [[T<0< 1<& [[0!266!Q<1CUK"BHHsAhB-@$A/7896	96
 [[	
$6%$6(9<,rG   rD  c                      \ rS rSr\R
                  R                  SSS/SS/SS4SS/SS/S	\R                  * 4S
S/SS/S\R                  * 4SS/SS/S\R                  4SS/SS//SS/SS//SS/\R                  \R                  /4S
S/SS/S\R                  4SS/SS/S\R                  4SS/SS/S\R                  4SS/SS/S\R                  4SS/SS/S\R                  * 4/
5      S 5       r
S rS rS r\R
                  R                  S/ SQS4/ SQS	4S	S	/S	4S	/S	445      S 5       r\R
                  R                  SS/S/SS4SS/SS/SS4SS/S	S//SS/SS///SS/SS/SS//S S!/S	S"//4\R                  " / \S#9\R                  " / \S#9S	/ 4SS/SS/SS	4/ S$Q/ S%QS&S'4/5      S( 5       r\R
                  R                  SSS/SS/SS)//SSS*/4S/S//S/S//SS/S+S,/4S/S///S/S//SS/S+S,//4S/S//S////SS/S+S,///4/5      S- 5       rS. rS/ rS0 rS1 rS2 rS3 rS4 rS5 rS6 rS7 rS8 rS9rg:);TestMultivariateHypergeomi  zx, m, n, expectedrO   rm   rk   r  rn   gr   ri  r   rN   ru   iir}  rp  ro   ic                 F    [         R                  " XU5      n[        XTSS9  g )Nrk  r  )r   r  r   r\   rc   rj  r   r  valss         rE   r  %TestMultivariateHypergeom.test_logpmf  s     6 &,,Q15T2rG   c                     [         R                  " SS/SS/SS9n[        R                  " SSSSS9n[        XS	S
9  [         R                  " SS/SS/SS9n[        R                  " SSSSS9n[        XS	S
9  g )NrO   r   r  rk   rm   )rc   rj  r      )r  r   r   r5  r  r  rn      )r   r  r#   r   r  s      rE   test_reduces_hypergeom0TestMultivariateHypergeom.test_reduces_hypergeom  sx     &))QFr1gC}}qB!r2.%))QFr2h"E}}qB"3.rG   c                     [        SS/SS9nUR                  SSS9n[        UR                  S5      UR                  5       S	S
9  g )NrO   rk   rm   rj  r   r  rh  r   r   r  r  r   r   r   r   r\   r   r   s      rE   r  "TestMultivariateHypergeom.test_rvs"  s@     $q!f2ff$Sf1RWWYT:rG   c                     [        SS/SS//SS/S9nUR                  SSS	9n[        UR                  S
5      UR                  5       SS9  g )NrO   rk   r  rm   r1  r  r  rN   rh  r   r   r  r  r  r  s      rE   test_rvs_broadcasting/TestMultivariateHypergeom.test_rvs_broadcasting)  sK    #1v2w&7Aq6Bff)#f6RWWYT:rG   zm, n)r   r   rx  r   r   )r   r   r   r   r   c                     [         R                  " X5      n[        R                  " U5      nUR	                  5       nX$US:g  '   [        X45        g )Nr   )r   r   r>   r?   r  r   )r\   rj  r   rA   res_exs        rE   test_rvs_gh16171*TestMultivariateHypergeom.test_rvs_gh16171.  s?    
 %((.JJqMqAvS!rG   g zl?r  r1  gQ?gE|?g
y?r   r3  )rk   rl   rn   rl   gzp?c                 F    [         R                  " XU5      n[        XTSS9  g Nr  r  r   r  r   r  s         rE   r8  "TestMultivariateHypergeom.test_pmf9  s     " &))!2T2rG   r  g ?r   r   c                 F    [         R                  " XU5      n[        XTSS9  g r  r  r  s         rE   r;  /TestMultivariateHypergeom.test_pmf_broadcastingM  s      &))!2T2rG   c                 \    [         R                  " / SQSS9n/ SQ/ SQ/ SQ/n[        XSS9  g )	N)rO   rn   r  rp  r  )gf_?&BUп疈Cx@ؿ)r  ggs>d?ZsK)r	  r
  g35?r  r  r   r   r   )r\   r?  r*  s      rE   r@  "TestMultivariateHypergeom.test_covZ  s0    %))J"=6668 	.rG   c                 2   [         R                  " SS/SS//SS/S9nSS	/S	S//S
S/SS
///n[        XSS9  [         R                  " S/S//SS/S9nS//S///n[        X4SS9  [         R                  " SS/SS/S9nSS	/S	S//SS/SS///n[        XVSS9  g )Nrn   r1  r  r  r  rp  r  g?gg(\?g(\r  r  rm   rk   r   g333333?g333333r  rC  s          rE   rH  /TestMultivariateHypergeom.test_cov_broadcastinga  s    %))aVb"X,>1b'J..0.%))aS1#J1a&A".%))QFq"g>.'"Wf$568.rG   c                 r    [         R                  " SS/SS9n[        R                  " SSSS9n[        XSS9  g )	Nr  rk   rm   r  r  r   r   r5  r  r  )r   r{  r#   r   )r\   var0var1s      rE   test_var"TestMultivariateHypergeom.test_varp  s4    %))RGq9}}rQ"-.rG   c                 ~   [         R                  " SS/SS/S9n[         R                  " SS/SS9n[         R                  " SS/SS9n[        US   USS9  [        US	   USS9  [         R                  " SS/SS
//SS/S9nSS/SS//n[        XESS9  [         R                  " S/S//SS/S9nS/S//n[        XgSS9  g )Nr  rk   rm   r  r  r   r  r  r   r  g̍3eY?gI{?r   )r   r{  r   )r\   r  r  var2var3var4var5var6s           rE   test_var_broadcasting/TestMultivariateHypergeom.test_var_broadcastingv  s    %))RG1v>%))RGq9%))RGq9QD1QD1%))b!Wr2h,?Aq6JI&8(<=.%))aS2$KAr7Crd|.rG   c                     [         R                  " SS/SS9n[        R                  " SSSS9n[        US   USS	9  [         R                  " S
S/SS9nSS/n[        X4SS	9  g )Nr  rk   rm   r  r  r  r   r  r  rp  r  g      @r  )r   r   r#   r   r\   mean0rV  r)  mean3s        rE   rW  #TestMultivariateHypergeom.test_mean  sd    &++r1g;qB/a%d3&++r1g<j)40rG   c                 b    [         R                  " SS/SS//SS/S9nSS/S	S
//n[        XSS9  g )NrO   rk   r  rm   r  r  r  r  gUUUUUU@gUUUUUU@r  r  )r   r   r   )r\   r  rV  s      rE   rZ  0TestMultivariateHypergeom.test_mean_broadcasting  sC    &++1vAw.?Aq6JH%
I'>?40rG   c                 <   [         R                  " / SQSS9n[        U/ SQ5        [         R                  " / SQSS9n[        U[        R                  [        R                  [        R                  /5        [         R                  " / SQ/ SQ/SS9n[        U[        R                  [        R                  [        R                  // SQ/S	S
9  [         R                  " [        R                  " / [        S9SS9n[        U/ 5        [        UR                  S:H  5        g )Nrp   r   r  r   r   r   r   r   r   rN   r`  )r   r   r   FFg<r  r   r   )
r   r   r   r>   r  r   r   r]  r	   r@   r  s        rE   test_mean_edge_cases.TestMultivariateHypergeom.test_mean_edge_cases  s    &++i1=UL)&++i1=URVVRVVRVV45&++y).DJ 8,G"	$ '++bhhr.EKUBu$%rG   c                 :   [         R                  " / SQSS9n[        U/ SQSS9  [         R                  " / SQSS9n[        U[        R
                  [        R
                  [        R
                  /5        [         R                  " / SQ/ S	Q/SS9n[        U[        R
                  [        R
                  [        R
                  // SQ/S
S9  [         R                  " [        R                  " / [        S9SS9n[        U/ 5        [        UR                  S:H  5        g )Nrp   r   r  r%  gؗҜ<r  r&  rN   r`  r'  r   r(  )
r   r{  r   r   r>   r  r   r]  r	   r@   )r\   r  r  r  r  s        rE   test_var_edge_cases-TestMultivariateHypergeom.test_var_edge_cases  s    %))I;l7%))I;TBFFBFFBFF34%))Y	,BaH7F"	$ &))BHHRs,CqIT2

e#$rG   c                    [         R                  " / SQSS9n/ SQ/ SQ/ SQ/n[        XSS9  [         R                  " / SQSS9n/ SQ/ SQ/ SQ/n[        X45        [         R                  " [        R
                  " / [        S	9SS9n[        R
                  " / [        R                  S	9R                  SS5      n[        XVSS9  [        UR                  S
:H  5        g )Nr&  r   r  r%  r'  r  rp   r   r   r  )r   r   r   r   r>   r   r]  r4  r  r	   r@   )r\   cov0r?  rD  rE  rF  rG  s          rE   test_cov_edge_cases-TestMultivariateHypergeom.test_cov_edge_cases  s    %))I;lL9/%))I;lL9T %))BHHRs,CqIxx"**-55a;/

f$%rG   c                    Sn/ SQn/ SQ/ SQ/ SQ/ SQ/ SQ/n[         R                  " U[        S9n[        X!5      n[	        UR                  U5      [        R
                  " X2U5      5        [	        UR                  U5      [        R                  " X2U5      5        [	        UR                  5       [        R                  " X!5      5        [	        UR                  5       [        R                  " X!5      5        g )	Nrp  )rn   r1  r}     r]  r^  r_  r`  ra  r   )	r>   r?   r]  r   r   r  r  r{  r   )r\   r   rj  rc   
mhg_frozens        rE   r  %TestMultivariateHypergeom.test_frozen  s    M=<)JJq$+A1

q).221;	=
))!,.55aA>	@
(*@*D*DQ*JK
(*@*D*DQ*JKrG   c                    [        [        [        R                  SSS5        [        [        [        R                  SS/S5        [        [        [        R                  SS/S/S5        [        [        [        R                  SS/SS/S5        [        [        [        R                  SS/SS/S5        [        [        [        R                  SS/SS/S5        g )	Nrk   r  rm   g      @rb  r  g      %@g      /@)r  rT   r   r  	TypeErrorr  s    rE   test_invalid_params-TestMultivariateHypergeom.test_invalid_params  s    j"8"<"<aQGj"8"<"<a"qIj"8"<"<q!frdANi!7!;!;c3Z2h	#i!7!;!;aVTlA	'i!7!;!;aV2h	%rG   r   N)r   r   r   r   rS   r   r   r>   r  r  r  r  r  r  r  r   r]  r8  r;  r@  rH  r  r  rW  rZ  r)  r,  r0  r  r8  r   r   rG   rE   r  r    sx   [[ VaWa+VaWa"&&)!Wq"gq266'*Vb"Xq"&&)!fq!fR2s)4Vbffbff%' !Wr2h266*Wr1gr266*Wr2hBFF+VaWb"&&)VaWa"&&)+	
43543	/;;
 [[V	13
Qqc1X& "	" [[S1#q!VaWa+1v1v"a1a& 12W1v1v&+&I79 XXb$bhhr&=q"EVaVQ"	1j1	
 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////11
&%&L	%rG   r  c                   \   \ rS rSrS rS r\R                  R                  SS5      S 5       r	S r
\R                  R                  SS	5      \R                  R                  S
S	5      S 5       5       r\R                  R                  SS5      S 5       rS r\R                  R                  SS5      S 5       r\R                  R                  SS5      S 5       r\R                  R                  SS5      S 5       r\R                  R                  SS5      \R                  R                  S/ S/45      \R                  R                  S/ S/45      S 5       5       5       r\R                  R                  SS5      S 5       rS r\R                  R                  SS5      S 5       rSrg)TestRandomTablei  c                 @    [         R                  R                  S5      $ )Nl   OfE)r>   r   r   r  s    rE   get_rngTestRandomTable.get_rng  s    yy$$%788rG   c                    Sn[         R                  " [        US9   [        SS//SS/5        S S S 5        Sn[         R                  " [        US9   [        SS/SS//5        S S S 5        Sn[         R                  " [        US9   [        SS/SS/5        S S S 5        Sn[         R                  " [        US9   [        SS/SS	/5        S S S 5        S
n[         R                  " [        US9   [        SS/SS/5        S S S 5        Sn[         R                  " [        US9   [        SS// SQ5        S S S 5        Sn[         R                  " [        US9   [        SS// SQ5        S S S 5        SS/n/ SQn[        R                  " SS// SQ5      u  pEn[        X$5        [        X55        U[        R                  " U5      :X  d   eg ! , (       d  f       GN= f! , (       d  f       GN~= f! , (       d  f       GN\= f! , (       d  f       GN:= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f)Nz`row` must be one-dimensionalrL   r   rN   z`col` must be one-dimensionalz*each element of `row` must be non-negativero   z*each element of `col` must be non-negativerr   z'sums over `row` and `col` must be equalr   z(each element of `row` must be an integer @)r   r   rN   z(each element of `col` must be an integer)rw  rw  r   rO   rN   r   r   )rS   r
   rT   r'   _process_parametersr   r>   r   )r\   r]   rh  ri  r  r  r   s          rE   test_process_parameters'TestRandomTable.test_process_parameters  s   1]]:W51a&Aq6* 6 2]]:W5!Q1a&* 6 ?]]:W5!R1a&) 6 ?]]:W5!Q!R) 6 <]]:W5!Q!Q( 6 =]]:W5#sY/ 6 =]]:W5!Q/ 6 !f22Aq69EaSSBFF3KA 65 65 65 65 65 65 65sS   GGG,:G>.H"H"H3
G
G),
G;>
H
H"
H03
Izscale,method))r   boyett)r  	patefieldc                     [         R                  " SS/5      U-  n[         R                  " / SQ5      U-  n[        nUR                  X4USS9nUR                  X4S SS9n[	        Xg5        g )Nr   rO   rA  methodr   )r>   r   r'   r   r   )r\   r  rI  rh  ri  ctr  gots           rE   test_process_rvs_method_on_None/TestRandomTable.test_process_rvs_method_on_None  sc     hh1v&hhy!E)66#66BffSdf;X#rG   c                     SS/n/ SQnSn[         R                  " [        US9   [        R                  " XSS9  S S S 5        g ! , (       d  f       g = f)Nr   rO   rA  z$'foo' not recognized, must be one ofrL   foo)rI  )rS   r
   rT   r'   r   )r\   rh  ri  r]   s       rE   $test_process_rvs_method_bad_argument4TestRandomTable.test_process_rvs_method_bad_argument  sA    !f 9]]:W5Se4 655s   A
Ar  )TFr  c                   ^^^^ U R                  5       nSS/m/ SQm[        R                  " TTSSUS9nU(       a  [        TT5      O[        n[        XR(       a  SOS5      mU(       d
  TmUUU4S	 jmU(       a  U4S
 jOTn[        R
                  " USSS9u  pxU" U5      n	[        U	[        U5      -  USS9  U" [        US   5      5      n
[        XS   5        UR                  SUR                  SS  -   5      nU" U5      n	U	R                  S:X  d   e[        U	R                  S   5       HB  n[        U	R                  S   5       H#  nXU4   nXU4   nU" U5      n[        UU5        M%     MD     / SQ/ SQ/n[        [        R                  " USS9T5        U" U5      n	U	S:X  d   e/ SQ/ SQ/n[        [        R                  " USS9T5        U" U5      n	U	S:X  d   eSn[        R                  " [         US9   U" S/5        S S S 5        Sn[        R                  " [         US9   U" S//5        S S S 5        Sn[        R                  " [         US9   U" [        R"                  //5        S S S 5        Sn[        R                  " [         US9   U" S//5        S S S 5        Sn[        R                  " [         US9   U" / SQ/5        S S S 5        S n[        R                  " [         US9   U" SS/S!S"//5        S S S 5        g ! , (       d  f       GN	= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)#NrN   rl   r   rO   rm   r  rE  r   rI  r   r  r  c                    > T" U TT5      $ r=   r   )rc   ri  original_methodrh  s    rE   rI  /TestRandomTable.test_pmf_logpmf.<locals>.method)  s    &q#s33rG   c                 <   > [         R                  " T" U 5      5      $ r=   )r>   r  )rc   rI  s    rE   rd   1TestRandomTable.test_pmf_logpmf.<locals>.<lambda>+  s    q	*rG   r   Tr   return_countsr   r  )r  r  r   )r   r   r   )rN   r   rO   ro   r   r~  )r   rN   rN   rr   z$`x` must be at least two-dimensionalrL   z%`x` must contain only integral valuesrw  z)`x` must contain only non-negative valuesz"shape of `x` must agree with `row`rR   z"shape of `x` must agree with `col`rO   rm   )r=  r'   r   ry   r>   uniquer   r   r   r   r  r@   r  r   rS   r
   rT   r  )r\   r  r  r   r   objr  
unique_rvscountsri  p2rvs_ndr  r  pijrvijqijrc   r]   ri  rI  rV  rh  s                      @@@@rE   test_pmf_logpmfTestRandomTable.test_pmf_logpmf  s    lln!fsCd&.SB )/l3$L#h59$O4/2*YYs$G
 
OCHf37 jm$%R1 Y1267Kww)###qwwqz"A1771:&1gd|$iS#&	 ' # 	"RVVAB'-FAvv 	"RVVAB'-FAvv 9]]:W5H 6 :]]:W5#L 6 :]]:W5"&&
O 6 >]]:W5"K 6 7]]:W5 6 7]]:W5!QQ  65) 65 65 65 65 65 65sH   =
L	*LL,L=M1M	
L
L),
L:=
M
M
M-rI  )rE  rF  c                    U R                  5       nSS/n/ SQn[        R                  " X4SUUS9n[        R                  " X45      n[	        [
        R                  " U5      [
        R                  " U5      5        [        UR                  S5      USS9  [	        UR                  S	S
9[
        R                  " US5      5        [	        UR                  SS
9[
        R                  " US5      5        g )NrN   rl   rS  r  rT  r   rb  r#  ro   r   r  rr   )r  rO   )	r=  r'   r   r   r   r>   r   r   broadcast_to)r\   rI  r   rh  ri  r   r   s          rE   test_rvs_meanTestRandomTable.test_rvs_meanh  s     lln!fsd6,/1  *RVVD\266#;/T5SWW"W%rsI'FGSWW"W%rsI'FGrG   c                     U R                  5       nSS/n/ SQn[        R                  " X#SSUS9n[        R                  " X#SSUS9n[        R                  " USS	9n[        R                  " USS	9n[        XgS
S9  g )NrN   rl   rS  r  rE  rT  rF  r   r   {Gz?r#  )r=  r'   r   r>   r{  r   )r\   r   rh  ri  r  r  r?  r*  s           rE   test_rvs_covTestRandomTable.test_rvs_covw  sy     lln!fuX-02u[-02vvd#vvd#.rG   c           	         SS/n/ SQn[         R                  " X#UU R                  5       S9nUR                  S:X  d   e[         R                  " X#SUU R                  5       S9nUR                  S:X  d   e[	        XES	   5        [         R                  " X#S	UU R                  5       S9nUR                  S
:X  d   e[         R                  " X#SUU R                  5       S9nUR                  S:X  d   e[         R                  " X#SUU R                  5       S9nUR                  S:X  d   e[        UR                  SSS5      USS9  Sn	[        R                  " [        U	S9   [         R                  " X#SUU R                  5       S9  S S S 5        [        R                  " [        U	S9   [         R                  " X#[        R                  UU R                  5       S9  S S S 5        g ! , (       d  f       Nd= f! , (       d  f       g = f)NrN   rl   rS  rH  rY  r   rT  rR   r   )r   rN   rO   rx  )rx  rN   rO   )rm   rk   )rm   rk   rN   rO   rO   r  r  z/`size` must be a non-negative integer or `None`rL   ro   )r'   r   r=  r@   r   r   r  rS   r
   rT   r>   r  )
r\   rI  rh  ri  r   rv2rv3rv4rv5r]   s
             rE   test_rvs_sizeTestRandomTable.test_rvs_size  s   !f cv+/<<>;xx6!!! sa,0LLN<yyI%%%RQ  sa,0LLN<yyI%%% sb,0LLN<yyJ&&&sfV,0LLN<yyL(((B1-s? D]]:W5SBv*.,,.: 6 ]]:W5SBFF6*.,,.: 65	 65 65s    &G$'4G5$
G25
Hc                     SS/n/ SQn[         nUR                  X#SUU R                  5       S9n[        R                  " USSS9u  pgUR                  XbU5      n[        U[        U5      -  US	S
9  g )NrN   rl   rS  rU  rT  r   TrZ  rl  r  )r'   r   r=  r>   r\  r  r   r   )	r\   rI  rh  ri  rJ  r   r^  r_  ri  s	            rE   test_rvs_methodTestRandomTable.test_rvs_method  sv     !fffSF6"&,,.  2  YYs$G
 FF:C(CHf48rG   c                     / SQn/ SQn[        X#5      nUR                  SXR                  5       S9n[        R                  " S[        U5      [        U5      45      n/ SQ/ SQ/ SQ/US'   [        XV5        g )Nra  )r   r   r   r   r  rH  )r   r   r   r   .r'   r   r=  r>   r   r   r   r\   rI  rh  ri  r;  r   r  s          rE   test_rvs_with_zeros_in_col_row.TestRandomTable.test_rvs_with_zeros_in_col_row  si    "UU4\\^UD88T3s8SX67%%%' 	R"rG   )NrE  rF  ri  r   rh  c                     [        X#5      nUR                  SXR                  5       S9n[        R                  " S[        U5      [        U5      45      n[        XV5        g )Nr  rH  rz  r{  s          rE   test_rvs_with_edge_cases(TestRandomTable.test_rvs_with_edge_cases  sK     "UU2f<<>UB88RS3s845R"rG   r   r!  c                    SS K Js  Jn  [        R                  " SS/[        R
                  S9n[        R                  " / SQ[        R
                  S9n[        USU 35      n[        R                  " U5      nU" X4USU R                  5       5      nUR                  S[        U5      [        U5      4:X  d   e[        R                  " U5      U:X  d   eg )Nr   r   rO   r   rA  	rvs_rcont)scipy.stats._rcontr0   _rcontr>   r   int64ry   r   r=  r@   r   )r\   r   r  rh  ri  r   ntotresults           rE   test_rvs_rcontTestRandomTable.test_rvs_rcont  s     	,+hh1vRXX.hhy1f	!o.vvc{StQ7||3s8SX6666vvf~%%%rG   c                    SS/n/ SQn[        XU R                  5       S9nUR                  5       n[         R                  " X5      n[	        XSR                  5       5        [         R
                  " XAU5      n[	        XSR                  U5      5        [         R                  " XAU5      n[	        XSR                  U5      5        g )NrN   rl   rS  r   )r'   r=  r   r   r   r  r  )r\   rh  ri  r;  r1  r  s         rE   r  TestRandomTable.test_frozen  s    !f7$$S.Xvvx(##F5XuuV}-&&vC8Xxx/0rG   c                     SS/n/ SQn[        X#U R                  5       S9n[         R                  " X#SUU R                  5       S9nUR                  SUS9n[        XV5        g )NrN   rl   rS  r   r  rT  )r   rI  )r'   r=  r   r   )r\   rI  rh  ri  r;  r  rK  s          rE   test_rvs_frozenTestRandomTable.test_rvs_frozen  s\    !f7##C2f15AeeFe+X#rG   r   N)r   r   r   r   r=  rC  rS   r   r   rL  rP  re  ri  rm  rt  rw  r|  r  r  r  r  r   r   rG   rE   r;  r;    s   9" H [[^@B$B$5 [[X}5[[UM2L 3 6L\ [[X'>?H @H/ [[X'>?': @':R [[X'>?9 @9( [[X'>?	# @	# [[X'DE[[UR!I.[[UR!I.# / / F# [[S&)& *& 1  [[X'>?$ @$rG   r;  c                    U R                   nSU l         U R                  " USS06  [        R                  " U 5      nU R                  " USS06n[        R                  " U5      nUR                  " USS06n[        XF5        X l         g )Nr  r   r  )r   r   pickledumpsloadsr   )distfnrC   r*  r   r0	unpickledr1s          rE   check_picklingr    sy    
 DF
JJ1VA	T	"	"BQI		%1	%B rG   z2uses numpy global random state and monkey-patchingrZ  c                  (   [         R                  " S5      n SU S'   SU S'   [        S/[        [         R                  " S/5      4/[
        SU 4/[        SU 4/[        S/ S	Q4/[        S
/[        S
//nU H  u  p#[        X#5        [        X#5        M     g )NrO   r,  r}  r  r   r   r  rk   r  r  )r>   rW   r   r   r   r   r   r   r   r   r9   r  )r  distsr  rC   s       rE   test_random_state_propertyr    s    FF1IEE$KE$K	b!	RXXrd^&'	2u+	b%[!	q/*+	d	d#E #F1v$ rG   c                      \ rS rSr\R
                  R                  S/ SQ5      \R
                  R                  S/ SQ5      S 5       5       r\R
                  R                  SSS/5      \R
                  R                  S	/ S
Q5      S 5       5       rS r	S r
S r\R
                  R                  S	SS/5      S 5       r\R
                  R                  S	SS/5      S 5       r\R
                  R                  S\R                  \R                   /5      S 5       r\R
                  R                  S\R                  \R                   /5      S 5       r\R
                  R                  S\R(                  " / SQ5      \R(                  " / SQ5      SS4\R(                  " / SQ5      \R(                  " / SQ5      SS4\R(                  " / SQ5      \R(                  " / SQ5      SS 4\R(                  " / SQ5      \R(                  " / SQ5      SS!4\R(                  " / SQ5      \R(                  " \R*                  " S"5      \R*                  " S#5      S/5      S$S%4\R(                  " / SQ5      \R(                  " / SQ5      S$S&4\R(                  " / S'Q5      \R(                  " / S'Q5      S$S(4\R(                  " / S'Q5      \R(                  " \R*                  " S"5      \R*                  " S#5      SSS/5      S$S)4\R(                  " / S'Q5      \R(                  " \R*                  " S*5      \R*                  " S+5      SSS/5      S$S,4/	5      S- 5       r\R
                  R                  S\R(                  " / SQ5      \R(                  " / SQ5      SS.4\R(                  " / SQ5      \R(                  " / SQ5      SS/4\R(                  " / SQ5      \R(                  " / SQ5      SS04\R(                  " / SQ5      \R(                  " / SQ5      SS14\R(                  " / SQ5      \R(                  " \R*                  " S"5      \R*                  " S#5      S/5      S$S24\R(                  " / SQ5      \R(                  " / SQ5      S$S34\R(                  " / S'Q5      \R(                  " / S'Q5      S$S44\R(                  " / S'Q5      \R(                  " \R*                  " S"5      \R*                  " S#5      SSS/5      S$S54\R(                  " / S'Q5      \R(                  " \R*                  " S*5      \R*                  " S+5      SSS/5      S$S64/	5      S7 5       r\R
                  R                  S8/ S9Q5      S: 5       r\R
                  R                  S\R                  \R                   /5      S; 5       rS< r\R
                  R                  S/ S=Q5      \R
                  R                  S>/ S?Q5      S@ 5       5       rSA rSB rSC rSDrgE)FTestVonMises_Fisheri-  r   )rN   rO   rm   rl   r   r  c                    [         R                  R                  S5      n[         R                  " U4S[         R                  " U5      -  5      n[        USUS9nUR                  U5      n[         R                  " U5      [         R                  " U5      pUR                  XxUS9R                  n	UR                  U	:X  d   e[         R                  R                  USS9n
[        U
S5        g )Nr  r   r   r   ro   r   r   )r>   r   r   r  r"  r)   r   r   rW   r   r@   r   r   r   )r\   r   r   r   r  vmf_distr  r   r   r  r  s              rE   r   TestVonMises_Fisher.test_samples.  s     ii##$78WWcWan-"2qs3,,t$HHSM266#;c000FLL}}...		wR0r"rG   rk   r  kappa)g  4&kCr  gꌠ9Y>)Fc                     [         R                  R                  S5      n[         R                  " U4S[         R                  " U5      -  5      n[        XBUS9nUR                  S5        g )Nr  r   r   r  )r>   r   r   r  r"  r)   r   )r\   r   r  r   r  r  s         rE    test_sampling_high_concentration4TestVonMises_Fisher.test_sampling_high_concentration<  sO     ii##$78WWcWan-"237RrG   c                     [         R                  " S5      nSn[        R                  " [        US9   [        US5        S S S 5        g ! , (       d  f       g = f)Nr/  z%'mu' must have one-dimensional shape.rL   r   r>   rV   rS   r
   rT   r)   r\   r  r  s      rE   test_two_dimensional_mu+TestVonMises_Fisher.test_two_dimensional_muE  s8    WWV_5]]:S1B" 211   A
Ac                     [         R                  " S5      nSn[        R                  " [        US9   [        US5        S S S 5        g ! , (       d  f       g = f)Nr  z%'mu' must be a unit vector of norm 1.rL   r   r  r  s      rE   test_wrong_norm_mu&TestVonMises_Fisher.test_wrong_norm_muK  s8    WWU^5]]:S1B" 211r  c                     [         R                  " S5      nSn[        R                  " [        US9   [        US5        S S S 5        g ! , (       d  f       g = f)Nr0  z$'mu' must have at least two entries.rL   r   r  r  s      rE   test_one_entry_mu%TestVonMises_Fisher.test_one_entry_muQ  s8    WWU^4]]:S1B" 211r  ro   )rk   rO   c                     Sn[         R                  " [        US9   [        SS/U5        S S S 5        g ! , (       d  f       g = f)Nz"'kappa' must be a positive scalar.rL   r   r   rS   r
   rT   r)   r\   r  r  s      rE   test_kappa_validation)TestVonMises_Fisher.test_kappa_validationW  s/    2]]:S1QFE* 211	   4
Ar   r   c                     Sn[         R                  " [        US9   [        SS/U5        S S S 5        g ! , (       d  f       g = f)NzFor 'kappa=0' the von Mises-Fisher distribution becomes the uniform distribution on the sphere surface. Consider using 'scipy.stats.uniform_direction' instead.rL   r   r   r  r  s      rE   test_kappa_zero#TestVonMises_Fisher.test_kappa_zero]  s3     ]]:S1QFE* 211r  rI  c                     [         R                  " / SQ5      nSn[        R                  " [        US9   U" USS/S5        S S S 5        g ! , (       d  f       g = f)Nr   r   r   znThe dimensionality of the last axis of 'x' must match the dimensionality of the von Mises Fisher distribution.rL   r   r   r>   r   rS   r
   rT   r\   rI  rc   r  s       rE   test_invalid_shapes_pdf_logpdf2TestVonMises_Fisher.test_invalid_shapes_pdf_logpdfg  sE     HH[! ]]:S11q!fa  211   A


Ac                     [         R                  " SS/5      nSn[        R                  " [        US9   U" USS/S5        S S S 5        g ! , (       d  f       g = f)Nr,  r   8'x' must be unit vectors of norm 1 along last dimension.rL   r   r   r  r  s       rE   test_unnormalized_input+TestVonMises_Fisher.test_unnormalized_inputq  sE     HHc2YH]]:S11q!fa  211r  zx, mu, kappa, reference)r   r   r   rZ  g0_?r  )r   r   r   g7m0_?r  gLI/@gFK:h*7g\(\?rl  i  g3pB>g7Ks@)r   r   r   r   r   go齿@gW+x\(?r  r   gS-c                 L    [        X#5      R                  U5      n[        XTSS9  g )Nr  r  )r)   r   r   )r\   rc   r  r  	referencer   s         rE   test_pdf_accuracy%TestVonMises_Fisher.test_pdf_accuracy  s#    4 b(,,Q/U3rG   g[d6U?g1*?gJ8j#@g=fNXg][,g1VV@g|'@gmF&!gehc                 L    [        X#5      R                  U5      n[        XTSS9  g )Nr#  r  )r)   r   r   )r\   rc   r  r  r  r   s         rE   test_logpdf_accuracy(TestVonMises_Fisher.test_logpdf_accuracy  s#    4 !+22156rG   zdim, kappa, reference))rO   rZ  g?@)rO   r  gp&F)rk   r:  gT;ӷ&)r  r   goZ@c                     [         R                  " U4S[         R                  " U5      -  5      n[        XB5      R	                  5       n[        XSSS9  g )Nr   g+=r  )r>   r  r"  r)   r   r   )r\   r   r  r  r  r   s         rE   test_entropy_accuracy)TestVonMises_Fisher.test_entropy_accuracy  s?     WWcWan-!",4467rG   c           	         Sn[         R                  R                  S5      n[        S5      R	                  X#S9n[         R
                  " SS[         R                  " S5      -  5      nSnU" XEU5      nUR                  U:X  d   e[        US   5       H6  n[        US   5       H!  n	U" XHU	S S 24   XV5      n
[        XX4   S	S
9  M#     M8     g )Nr/  r  rO   r   r  r   rk   r   r  r  )
r>   r   r   r(   r   r  r"  r@   r  r   )r\   rI  	testshaper   rc   r  r  
result_allr  r  current_vals              rE   r  %TestVonMises_Fisher.test_broadcasting  s     	ii##$78a $$Y$AWWUAbggajL)A5)
9,,,y|$A9Q<($Q!QwZ;-=EJ ) %rG   c                 L   [         R                  R                  S5      n[         R                  " SS/5      n[         R                  " US   US   5      nSn[        X$5      n[        X4S9n[        S5      R                  SUS9n[         R                  " US S 2S4   US S 2S4   5      n[        UR                  5       UR                  5       5        [        UR                  U5      UR                  U5      5        [        UR                  U5      UR                  U5      5        g )	Nr  r   r   rx  )r  r  rN   r  r   )r>   r   r   r   r$  r)   r+   r(   r   r   r   r   r   )	r\   r   r  mu_angler  vmfvonmises_distvectorsr+  s	            rE   test_vs_vonmises_2d'TestVonMises_Fisher.test_vs_vonmises_2d  s     ii##$78XXq!f::beRU+b( X;#A&**2C*@GAqDM71a4=9--/?))&137773CD,,V4cjj6IJrG   )rN   rO   rl   zkappa, mu_tol, kappa_tol))r   rb  rb  )r  r  r  )r  {Gzt?rl  )r  r  rl  c                 ~   [         R                  " U4S[         R                  " U5      -  5      n[        XR5      n[         R                  R                  S5      nSnUR                  XS9n	[        R                  " U	5      u  p[         R                  " UR                  U
5      5      n[        USUSS9  [        X+US9  g )	Nr   r  r  r   r   r   r  r  )r>   r  r"  r)   r   r   r   r  arccosr  r   )r\   r   r  mu_tol	kappa_tolr  r  r   rd  r  mu_fit	kappa_fitangular_errors                rE   test_fit_accuracy%TestVonMises_Fisher.test_fit_accuracy  s     WWcWan-"2-ii##$78	,,y,;+//8		"&&.1rQ?y9rG   c                     [         R                  " S5      nSn[        R                  " [        US9   [
        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nr  z'x' must be two dimensional.rL   )r>   r   rS   r
   rT   r)   r  r\   rc   r  s      rE   #test_fit_error_one_dimensional_data7TestVonMises_Fisher.test_fit_error_one_dimensional_data  s<    HHUO,]]:S1" 211   A
A c                     [         R                  " S5      nSn[        R                  " [        US9   [
        R                  " U5        S S S 5        g ! , (       d  f       g = f)NrX  r  rL   )r>   rV   rS   r
   rT   r)   r  r  s      rE    test_fit_error_unnormalized_data4TestVonMises_Fisher.test_fit_error_unnormalized_data  s<    GGFOH]]:S1" 211r  c                     [         R                  " / SQ5      nSn[        X5      n[        XSS9nUR                  SS9n[        R                  " XSS9nUR                  5       n[	        XV5        [	        XW5        g )N)r   r   r   rk   r  r   r   )r>   r   r)   r   r   )r\   r  r  r  r  r  r  r  s           rE   r!  ,TestVonMises_Fisher.test_frozen_distribution   si    XXi  +%bc:zzsz+""23? T T rG   r   N) r   r   r   r   rS   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   rG   rE   r  r  -  s   [[UL1[[V%9:
# ; 2
# [[UQF+[[W&89 : ,### [[Wr6l3+ 4+
 [[Wq"g.+ /+ [[X(;(;(7(>(>(@ A!A! [[X(;(;(7(>(>(@ A!A!$ [[6!xx5rxx7M#%79!xx4bhh|6L#%8:!xx5rxx7M"$68!xx4bhh|6L"$9;!xx5!xxr(JK#%:<  "xx4bhh|6L#%68!xx(<=!xx(<=#%79  "xx(<=!xxr)*B)0  1#%;=  "xx(<=!xxrwws|R)*B)0  1#%;=)>?243?24" [[6!xx5rxx7M#%8:!xx4bhh|6L#%8:!xx5rxx7M"$57!xx4bhh|6L"$68!xx5!xxr(JK#%8:  "xx4bhh|6L#%68!xx(<=!xx(<=#%79  "xx(<=!xxr)*B)0  1#%79  "xx(<=!xxrwws|R)*B)0  1#%8:);<273<27$ [[4:;
8;
8
 [[X(;(;(7(>(>(@ AKAKK [[UI.[[723
	:3 /	:##!rG   r  c                   n   \ rS rSr\S 5       rS rS rS rS r	S r
\R                  R                  SS	S
/5      S 5       r\R                  R                  SSS/5      S 5       rS rS r\R                  R                  SS	S
/5      S 5       r\R                  R                  S/ SQ5      S 5       rSrg)TestDirichletMultinomiali.  c                     [         R                  R                  S5      nUR                  SSSS9nUR	                  SSUS4S9nUR                  SS	9nX!X5U4$ )
N   t7)r   r  rN   r   r   rx  ro   r   )r>   r   r   r   rz  r   )r\   rj  r   rF  rc   r   s         rE   
get_params#TestDirichletMultinomial.get_params/  s_    ii##$56As+LLBaVL,EErENu""rG   c                    [         R                  R                  S5      nUR                  SSS5      nUR	                  SSS5      n[         R
                  " USS9n[        X$5      n[        UR                  U5      [        R                  " X2U5      5        [        UR                  U5      [        R                  " X2U5      5        [        UR                  5       [        R                  " X$5      5        [        UR                  5       [        R                  " X$5      5        [        UR                  5       [        R                  " X$5      5        g )Nr  r   r  r  ro   r   )r>   r   r   r   rz  r   r*   r   r  r  r   r{  r   )r\   r   rF  rc   r   r;  s         rE   r  $TestDirichletMultinomial.test_frozen7  s    ii##$56AsB'LLB#FF12!%+QXXa["7">">q"KLQUU1X4881EFQVVX499%CDQUUW377ABQUUW377ABrG   c                    [         R                  " / SQ5      n[         R                  " U5      n[         R                  " / SQ5      n[        R                  " XU5      n[        R
                  " XU5      nSn[        XF5        [        U[         R                  " U5      5        UR                  UR                  s=:X  a  S:X  d   e   e[         R                  R                  S5      nUR                  SSS5      nUR                  SSS5      n[         R                  " US	S
9n[        X25      R	                  U5      n[        R
                  " XU5      nSn[        XF5        [        U[         R                  " U5      5        g )NrR   rO   rm   rk   gp.U.?r   r  r   r  r  ro   r   g+T<)r>   r   r   r*   r  r  r   r  r@   r   r   r   rz  )r\   rc   r   rF  rA   logresrB   r   s           rE   test_pmf_logpmf_against_R2TestDirichletMultinomial.test_pmf_logpmf_against_RE  s"   
 HHYFF1I##''!4&--a:!!s,yyFLL.B..... ii##$56AsB'LLB#FF12#E-11!4&--a:"!s,rG   c                 6   U R                  S5      u  pp4nUS-  n[        [        X45      R                  U5      S5        [        [        X45      R	                  U5      [
        R                  * 5        U R                  S5      u  pp4nUR                  SS9S:  n[
        R                  " XV   S-  5      XV'   [        [        X45      R                  U5      U   S5        [        [        X45      R	                  U5      U   [
        R                  * 5        [
        R                  " [        X45      R                  U5      U)    S:  5      (       d   e[
        R                  " [        X45      R	                  U5      U)    [
        R                  * :  5      (       d   eg )Nr   r   r  r   r,  rN   )
r  r   r*   r  r  r>   r  r   roundr  )r\   r   rj  rF  r   rc   r  s          rE   test_pmf_logpmf_support0TestDirichletMultinomial.test_pmf_logpmf_supportd  sN    #ooa0!	Q*5488;Q?*54;;A>H"oob1!JJBJ#%xxq!*5488;A>B*54;;A>qABFF7Kvv+E599!<aR@1DEEEEvv+E5<<Q?CrvvgMNNNNrG   c                    SnS/n[         R                  " U/5      n[        X!5      n[        UR	                  U5      S5        [        UR	                  US-   5      S5        [        UR                  U5      S5        [        UR                  US-   5      [         R                  * 5        [        UR                  5       U5        [        UR                  5       S5        [        UR                  5       S5        g )Nrl   r  r   r   
r>   r?   r*   r   r  r  r  r   r{  r   r\   r   rF  rc   r   s        rE   test_dimensionality_one0TestDirichletMultinomial.test_dimensionality_onet  s    JJsO$U.TXXa[!$TXXac]A&T[[^Q'T[[1%w/TYY[!$TXXZ#TXXZ#rG   c                 0   Sn[         R                  " SS/5      n[         R                  " SS/5      n[        X!5      n[        UR	                  U5      S5        [        UR	                  US-   5      S5        [        UR                  U5      S5        [        UR                  US-   5      [         R                  * 5        [        UR                  5       SS/5        [        UR                  5       SS/5        [        UR                  5       SS/SS//5        g )Nr   r   r   r   r  s        rE   test_n_is_zero'TestDirichletMultinomial.test_n_is_zero  s    

B8$JJ1v$U.TXXa[!$TXXac]A&T[[^Q'T[[1%w/TYY[1a&)TXXZ!Q(TXXZ1a&1a&!12rG   method_namer  r  c                     U R                  S5      u  p#pEn[        [        XE5      U5      n[        [        R                  " U/UR
                  Q76 U5      nU" U5      n	U" UR
                  S   5      n
[        X5        g Nr  r   r  ry   r*   r0   	betabinomr   r   r\   r  r   rj  rF  r   rc   rI  
ref_methodrA   rB   s              rE   test_against_betabinom_pmf3TestDirichletMultinomial.test_against_betabinom_pmf  sj    "ooc2!.u8+FU__Q99;G
QiQ !rG   r   r{  c                     U R                  S5      u  p#pEn[        [        XE5      U5      n[        [        R                  " U/UR
                  Q76 U5      nU" 5       S S 2S4   n	U" 5       n
[        X5        g r	  r
  r  s              rE   test_against_betabinom_moments7TestDirichletMultinomial.test_against_betabinom_moments  se    "ooc2!.u8+FU__Q99;G
hq!tnl!rG   c                    [         R                  R                  S5      nSnUR                  SS5      nUR                  US9S-  n[	        XC5      nSnUR                  XFS9nUR                  X7US9n[        UR                  5       [         R                  " USS	9S
S9  [        UR                  5       [         R                  " USS	9SS9  UR                  5       R                  UR                  5       R                  s=:X  a  U4:X  d   e   eUR                  5       n	U	R                  X"4:X  d   e[        U	[         R                  " UR                  5      SS9  [        [         R                  " U	5      UR                  5       5        [         R                  " [         R"                  R%                  U	5      S   S:  5      (       d   eg )Nr  rk   r   r  r   r  rU  r   r   r  r  r  rl  )r>   r   r   rz  r*   r   r   r   r   r{  r@   r   r   r   rx   r  r   r   r   )
r\   r   r   r   rF  r   rj  ri  rc   r   s
             rE   r  %TestDirichletMultinomial.test_moments  s^   ii##$56LLC 


$r)$U. MM%M(OOAqO)		RWWQQ%7dC
BFF11$5DAyy{  DHHJ$4$4>>>>>>hhjyySJ&&&RVVACC[t4RWWS\488:.vvell'',Q/!34444rG   c                    [         R                  " / SQ5      n[         R                  " U5      n[         R                  " / SQ5      nSn[        [        US9   [
        R                  " / SQX25        S S S 5        [        [        US9   [
        R                  " / SQX25        S S S 5        Sn[        [        US9   [
        R                  " U/ SQU5        S S S 5        [        [        US9   [
        R                  " U/ S	QU5        S S S 5        S
n[        [        US9   [
        R                  " XS5        S S S 5        [        [        US9   [
        R                  " XS5        S S S 5        [         R                  " / SQ5      n[         R                  " / SQ5      nSn[        [        US9   [
        R                  " XVUR                  5       5        S S S 5        g ! , (       d  f       GNp= f! , (       d  f       GNR= f! , (       d  f       GN1= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)NrR   r  z,`x` must contain only non-negative integers.rL   )r   ro   rO   )r   r@  rO   z*`alpha` must contain only positive values.)rO   r   rm   )rO   ro   rm   z#`n` must be a non-negative integer.ǧH@ro   )r   rN   rO   rm   z&`x` and `alpha` must be broadcastable.)r>   r   r   r  rT   r*   r  )r\   x0n0alpha0textrc   rF  s          rE   r^   .TestDirichletMultinomial.test_input_validation  s   XXi VVBZ)$=:T2!((V@ 3:T2!((fA 3 <:T2!((Y; 3:T2!((Z< 3 5:T2!((T: 3:T2!((R8 3 HH\"#7:T2!((1557; 32) 3222 3222 3222 32sT   GG,9G>*HH"H3+&I
G),
G;>
H
H"
H03
I
IrI  c           	      d   [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " S/S/S//5      n[         R                  " / SQ/ S	Q/5      R                  S
5      n[        [        U5      nU" XBU5      nUR
                  S:X  d   e[        [        U5      5       H  n[        [        U5      5       Hi  n[        [        U5      5       HN  nXVXx4   n	U" XF   R                  5       X(   R                  5       X7   R                  5       5      n
[        X5        MP     Mk     M     g )Nr  r  rk   rk   rn   r  r1  r  rl   rn   r  rR   )rN   rN   rO   )rN   r   r   rO   )rN   rO   rm   )
r>   r   r  ry   r*   r@   r  r   r   r   )r\   rI  rF  r   rc   rA   r  r  r  res_ijkrB   s              rE   test_broadcasting_pmf.TestDirichletMultinomial.test_broadcasting_pmf  s    )Y	:FGHHqcA3_%HHi+,44\B.7Qq!yyI%%%s1vA3q6]s5z*A!Q'lG 1A1A1CQT\\^TC#G1 + # rG   )r   r{  r   c                    [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " S/S/S//5      n[        [        U5      nU" X#5      nUS:w  a  UR                  S	:X  d   e [        [        U5      5       HX  n[        [        U5      5       H=  nXVU4   nU" X'   R                  5       X6   R                  5       5      n	[        X5        M?     MZ     g )
Nr  r  r  r  rl   rn   r  r   )rO   rm   rO   )	r>   r   ry   r*   r@   r  r   r   r   )
r\   r  rF  r   rI  rA   r  r  r  rB   s
             rE   test_broadcasting_moments2TestDirichletMultinomial.test_broadcasting_moments  s    )Y	:FGHHqcA3_%.<U)4)=syyI%OO<s1vA3u:&d)UX--/@- ' rG   r   N)r   r   r   r   ra  r  r  r  r  r  r  rS   r   r   r  r  r  r^   r  r"  r   r   rG   rE   r  r  .  s    # #C->O $3 [[]UH,=>" ?" [[]VUO<" ="5,<< [[Xx'892 :2 [[],BC
. D
.rG   r  c                   B   \ rS rSrS rS rS rS rS r\	R                  R                  \	R                  R                  S5      S 5       5       r\	R                  R                  S	\R                   \R"                  \R$                  \R&                  /5      S
 5       rSrg)TestNormalInverseGammai  c           	      <  ^ [         R                  R                  S5      nUR                  S5      u  p#pE[        R                  " X#XE5      m[        R
                  " SU-  US[         R                  " XC-  U-  5      -  S9n[         R                  " SSS5      n[        U4S	 jS
[         R                  U4S9nUR                  U5      n	[        UR                  U	5        TR                  SUS9n[        R                  " US
   UR                  5      u  pUS:  d   eg )N   &( rm   rN   r   r  r  rk   r}  c                 &   > TR                  X5      $ r=   r   )r*  rc   norm_inv_gammas     rE   rd   8TestNormalInverseGamma.test_marginal_x.<locals>.<lambda>      ^%7%7%>rG   r   rC   r  r   r   )r>   r   r   r0   normal_inverse_gammarA  r"  rU  r1   r  r   r   r  r   ks_1sampr   )r\   r   r  lmbdar3  r4  rA  rc   rA   rB   r   r%  r*  s               @rE   test_marginal_x&TestNormalInverseGamma.test_marginal_x  s     ii##J/**Q-133BqDGGAaCRqQ)?'?@ KKAr">266QRPTUeeAhc*   e# >NN3q61551	||rG   c                   ^ [         R                  R                  S5      nUR                  S5      u  p#pE[        R                  " X#XE5      m[        R
                  " XES9n[         R                  " SSS5      n[        U4S j[         R                  * [         R                  U4S9nUR                  U5      n	[        UR                  U	5        TR                  SUS	9n[        R                  " US
   UR                  5      u  pUS:  d   eg )Nr'  rm   r  r   r  c                 &   > TR                  X5      $ r=   r)  )rc   r*  r*  s     rE   rd   9TestNormalInverseGamma.test_marginal_s2.<locals>.<lambda>  r,  rG   r-  r  r   r   )r>   r   r   r0   r.  r   rU  r1   r  r   r   r  r   r/  r   )r\   r   r  r0  r3  r4  	inv_gammar*  rA   rB   r   r%  r*  s               @rE   test_marginal_s2'TestNormalInverseGamma.test_marginal_s2  s     ii##J/**Q-133BqDNN1.	 [[b"%>wbU4mmBc*   e# >NN3q69==9	||rG   c                 f   [         R                  R                  S5      nUR                  S5      S-
  u  p#pEUR                  SS9S-
  u  pg[        R                  " X#XE5      R                  Xg5      n[        R                  R                  XgX#XE5      n	[        U[         R                  " U	5      5        g )Nr'  )rm   rx  r  )rN   rx  r   )	r>   r   r   r0   r.  r   r   r   r  )
r\   r   r  r0  r3  r4  rc   r*  rA   rB   s
             rE   test_pdf_logpdf&TestNormalInverseGamma.test_pdf_logpdf&  s    ii##J/**W-41


(4/((A9==aD((//r!GRVVC[)rG   c                    [         R                  R                  S5      nUR                  S5      u  p#pEUR                  S5      u  pg[        R                  " [         R
                  X4U5      R                  Xg5      n[        U[         R
                  5        [        R                  " USXE5      R                  Xg5      n[        U[         R
                  5        [        R                  " X#SU5      R                  Xg5      n[        U[         R
                  5        [        R                  " X#US5      R                  Xg5      n[        U[         R
                  5        [        R                  " X#XE5      R                  US5      n[        US5        [        R                  " US[         R
                  /XE5      R                  US5      n[        U[         R
                  5        [        R                  " USXE5      R                  5       n[        U[         R
                  [         R
                  45        [        R                  " X#SU5      R                  5       n[        U[         R
                  [         R
                  45        [        R                  " [        SS9   [        R                  " X#US5      R                  5         S S S 5        g ! , (       d  f       g = f)Nr'  rm   rN   ro   r   zDomain error in arguments...rL   )r>   r   r   r0   r.  r  r   r   r   r{  rS   r
   rT   r   )	r\   r   r  r0  r3  r4  rc   r*  rA   s	            rE   test_invalid_and_special_cases5TestNormalInverseGamma.test_invalid_and_special_cases/  s   ii##J/**Q-1

1((1=AA!HS"&&!((R6::1AS"&&!((Aq9==aDS"&&!((Ar:>>qES"&&!((A9==aDS! ((b"&&\1@DDQKS"&&!((R6;;=S266266*+((B:>>@S266266*+]]:-KL&&r!R8<<> MLLs   'K
Kc                    [         R                  R                  S5      nUR                  S5      nUR                  S5      S-   nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      n[        R                  " XTX25      n[         R
                  " XvXTX25      n	U	 V
s/ s H  n
[         R                  " U
5      PM     nn
UR                  Xv5      nUR                  U	S   R                  :X  d   e[        UR                  5       [        R                  R                  " U6 5        UR                  Xv5      nUR                  U	S   R                  :X  d   e[        UR                  5       [        R                  R                  " U6 5        [         R
                  " XTX25      n	U	 V
s/ s H  n
[         R                  " U
5      PM     nn
UR                  5       nUS   R                  U	S   R                  :X  d   e[        US   R                  5       US	   R                  5       4[        R                  R                  " U6 5        UR                  5       nUS   R                  U	S   R                  :X  d   e[        US   R                  5       US	   R                  5       4[        R                  R                  " U6 5        S
n[         R                  R                  S5      nUR                  XS9n[         R                  R                  S5      nSn[        R                  R                  " XUS.6n[        US   R                  U5      US	   R                  U5      4U5        g s  sn
f s  sn
f )Nr'  rN   )rO   r   )rm   r   r   )rk   r   r   r   )rl   r   r   r   r   )rn   r   r   r   r   r   r   r   )rl   rk   rm   rO   rN   l   Mr   )rl   x   )r>   r   r   r0   r.  broadcast_arraysr?  r   r@   r   r   r   r{  r   r  )r\   r   r4  r3  r0  r  r*  rc   r   broadcastedarrbroadcasted_raveledrA   r   r@   rB   s                   rE   r  (TestNormalInverseGamma.test_broadcastingQ  s    ii##J/JJqMJJv"

9%ZZ%ZZ(JJ)*))"Q: ))!AA8CDrxx}DhhqoyyKN00000		22668KL	N kk! yyKN00000		2299;NO	Q ))"Q:8CDrxx}Diik1v||{1~33333QQ822779LM	O hhj1v||{1~33333QQ822668KL	N ii##M2hhDh3ii##M2((,,.A:=?Q.Au0EFLE E Es   < N Nr  c                    ^ [         R                  R                  S5      nUR                  S5      u  p#pEUS-  n[        R                  " X#XE5      mTR                  5       n[        U4S j[         R                  * [         R                  S[         R                  5      n[        US   US   SS9  [        U4S j[         R                  * [         R                  S[         R                  5      n[        US	   US   SS9  g )
Nr'  rm   rN   c                 ,   > TR                  X5      U-  $ r=   r)  r*  rc   r   s     rE   rd   5TestNormalInverseGamma.test_moments.<locals>.<lambda>  s    DHHQOa$7rG   r   rk  r  c                 ,   > TR                  X5      U -  $ r=   r)  rH  s     rE   rd   rI    s    DHHQOb$8rG   r   )	r>   r   r   r0   r.  r   r6   r  r   )	r\   r   r  r0  r3  r4  rA   rB   r   s	           @rE   r  #TestNormalInverseGamma.test_moments  s     ii##J/**Q-1	Q))"Q:iik7"&&"&&!RVVTAAT28266'2661bffUAAT2rG   r   c                 b   [         R                  S:  a  [        R                  " S5        [         R                  R                  S5      nUR                  SSSS9R                  U5      u  p4pVpx[         R                  " SU5      n	[        R                  " XVXx5      n
U
R                  5       S	   R                  U	:X  d   eU
R                  5       S
   R                  U	:X  d   eU
R                  5       S	   R                  U	:X  d   eU
R                  5       S
   R                  U	:X  d   eU
R                  5       S	   R                  U	:X  d   eU
R                  5       S
   R                  U	:X  d   eU
R                  X45      R                  U	:X  d   eU
R!                  X45      R                  U	:X  d   eg )N2z*Scalar dtypes only respected after NEP 50.r'  rO   r  rl   r   r   r   r   )r>   __version__rS   r   r   r   r   astyperesult_typer0   r.  r   r   r   r{  r   r   )r\   r   r   rc   r*  r  r0  r3  r4  	dtype_outr   s              rE   
test_dtype!TestNormalInverseGamma.test_dtype  sd   >>CKKDEii##J/!$Q!;!B!B5!Ir!NN3.	))"Q:xxz!}""i///xxz!}""i///yy{1~##y000yy{1~##y000xxz!}""i///xxz!}""i///{{1!''9444xx$$	111rG   r   N)r   r   r   r   r1  r7  r:  r=  r  rS   r   r  	fail_slowr  r   r>   int32float16rq  r4  rR  r   r   rG   rE   r%  r%    s    *,* ?D1Mf [[[[23  3 [[WrxxRZZ&TU2 V2rG   r%  r  )lr\  r  dataclassesr   numpy.testingr   r   r   r   r   r	   rS   r
   r  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/   rG  r0   scipy.integrater1   r2   r3   r4   r5   r6   r7   scipy.specialr8   r?  common_testsr9   	data._mvtr:   unittest.mockr;   rF   rI   r   r   r
  r  rd  r{  r  r  r  ru  r  r  r  rs  r  r  r  r  r1  rD  r  r;  r  r   r  r  r  r  r%  r   rG   rE   <module>rd     s    !7 7  * 9  C CD D D D D D D D 0 @  4 4 < < &  5  ']! ]!@+. A A AH X X Xv
) 
)DG GTH* H*VO? O?dE1 E1P-&i9 i9Vz; z;za( a(HGJ GJT~& ~&Bd# d#N6+ 6+r>D >DBX, X,v`% `%Fh$ h$V	( "VW% X%$~! ~!BH. H.Vk2 k2rG   