
    bi                       d Z ddlZddlmZ ddlmZmZmZmZm	Z	m
Z
 ddlZddlmZ ddlmZ ddlZddlZddlmZmZmZ dd	lmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 dd
lm6Z6m7Z7 ddl8m9Z: ddlm;Z; ddl<m=Z=m>Z>m?Z? ddl<m@Z@mAZAmBZBmCZC ddlDmEZE ddlDmFZF ddlGmHZH ddlImJZJ ddlKmLZL d ZM G d d      ZNdHdZOd ZPd ZQe G d d             ZRe G d d             ZS G d d      ZT G d d       ZU G d! d"      ZV G d# d$      ZW G d% d&      ZXd' ZY G d( d)      ZZ G d* d+      Z[ G d, d-      Z\ G d. d/      Z] G d0 d1      Z^ G d2 d3      Z_ G d4 d5      Z` G d6 d7      Za G d8 d9      Zb G d: d;      Zc G d< d=      Zdd> Zeej                  j                  d?@      dA        Zh G dB dC      Zi G dD dE      Zj G dF dG      Zky)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                     t        j                  |       t        j                  |      }} t        | |g|i | t        | j                  |j                         y N)npasarrayr   r   shape)resrefargskwargss       ^/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/stats/tests/test_multivariate.pyassert_closerF   /   sA    zz#

3CC.t.v.CII&    c                      e Zd Zd Zej
                  ej                  j                  ej                  j                  ej                  j                  d dZ
 ej                   ee
            Z ej
                  g d      g dg dg dg ej
                  g d      g d	g d
g dgdZeedd eg d   edd dZej"                  j%                  dedd       d        Zej"                  j%                  d ee            ej"                  j%                  de      d               Zej"                  j%                  dd e       ddg      ej"                  j%                  d ee            ej"                  j%                  de      d                      Zej"                  j%                  d e       dg      ej"                  j%                  de      d               Zd Zej"                  j3                  d      d        Zd Zy)TestCovariancec                    d}t        j                  t        |      5  t        j                  t        j                  d             d d d        d}t        j                  t        |      5  t        j                  t        j                  d      t        j                  d             d d d        d}t        j                  t        |      5  t        j                  d       d d d        d	}t        j                  t        |      5  t        j                  t        j                  d             d d d        d
}t        j                  t        |      5  t        j                  dt        j                  d      f       d d d        d}t        j                  t        |      5  t        j                  t        j                  d      df       d d d        d}t        j                  t        |      5  t        j                  g dt        j                  d      f       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   exY w# 1 sw Y   $xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz:The input `precision` must be a square, two-dimensional...match   z0`precision.shape` must equal `covariance.shape`.   )
covariancez7The input `diagonal` must be a one-dimensional array...alpacaz9The input `cholesky` must be a square, two-dimensional...z4The input `eigenvalues` must be a one-dimensional...z,The input `eigenvectors` must be a square...z9The shapes of `eigenvalues` and `eigenvectors` must be...r   rM   rN   )pytestr
   
ValueErrorr-   CovViaPrecisionr>   oneseyeCovViaDiagonalCovViaCholeskyCovViaEigendecompositionselfmessages     rE   test_input_validationz$TestCovariance.test_input_validation7   s   N]]:W5 	4''
3	4 E]]:W5 	I''q	bffQiH	I L]]:W5 	1&&x0	1 N]]:W5 	3&&rwwqz2	3 I]]:W5 	H00(BFF1I1FG	H A]]:W5 	I00"''!*h1GH	I N]]:W5 	I00)RVVAY1GH	I 	I1	4 	4	I 	I	1 	1	3 	3	H 	H	I 	I	I 	IsS   )H.,>H;I
)I+I"(+I.8-I:.H8;III"I+.I7:Jc                     t        | d      S )NTallow_singular)r   )xs    rE   <lambda>zTestCovariance.<lambda>Y   s    %)!D%A rG   )Diagonal	PrecisionCholeskyEigendecompositionPSDrQ   )   r   rN   )r         )rN   rj      )r   r   rN   )rh   r   )rl   rh   r   r   r   r   )diagonal full rankzgeneral full rankzdiagonal singularzgeneral singularr   N)r   rl   ro   cov_type_namerl   c                 |   t        j                  g d      }g d}t        t        d|       }| j                  |   }t        t
        d|j                                } | ||            } | ||            }t        |      t        |      u sJ t        |j                  |      |j                  |             y )NrQ   )rM   rh   CovViafrom_)
r>   diaggetattrr-   _covariance_preprocessingr.   lowertyper   whiten)	r[   rp   Ara   cov_typepreprocessingfactoryrA   rB   s	            rE   test_factorieszTestCovariance.test_factoriese   s    GGI;&(@A66}E*m.A.A.C-D&EFmA&'}Q'(CyDI%%%

1szz!}5rG   matrix_typec                    d| d| d}|| j                   |   vrt        j                  |       | j                  |   }t	        t
        d|       }| j                  |   }t        |d      } | ||            }t        |j                  |j                         t        |j                  |j                         t        |j                  t        j                  |      j                         t        |j                  t        j                  |             t        j                   j#                  d      }	|	j!                  d      }
|j%                  |
      }|
|j&                  z  }t        ||z  ||z         t)        |d	      rd
|vrt        |j+                  |      |
       |	j!                  d      }
|j%                  |
      }|
|j&                  z  }t        |dz  j-                  d      |dz  j-                  d             t)        |d	      rd
|vrt        |j+                  |      |
       t)        |d	      rG|j+                  t        j.                  t1        |                  }t        |j2                  |z  |       y y )Nrs    does not support 	 matricesTr_      VGiVK rN   size	_colorizesingularrM   rj   rN   rM   rl   axis)
_cov_typesrR   skip	_matricesrv   r-   rw   r   rF   log_pdetr   rankr@   r>   r?   rO   randomdefault_rngrz   UhasattrcolorizesumrV   lenT)r[   r   rp   r\   r{   r|   r}   psd
cov_objectrngra   rA   rB   s                rE   test_covariancezTestCovariance.test_covariances   s    M?*<[M J  <<KK NN;';&(@A66}E1T* mA./
Z((#,,7Z__chh/Z%%rzz!}':':;Z**BJJqM: ii##$78JJAJ"#%%iS3Yc	*:{+
+0M,,S115 JJIJ&"#%%ic1f\\r\*S!VLLbL,AB:{+
+0M,,S115 :{+%%bffSVn5Ca( ,rG   r   r   c                    d| d| d}|| j                   |   vrt        j                  |       | j                  |   }t	        t
        d|       }| j                  |   }g d} | ||            }	t        }
t        ||d      }t        ||	d      }t        j                  j                  d      }|j                  |||      }t        j                  j                  d      }|
j                  ||	||	      }t        j                  j                  d      } |
||	|
      j                  |      }t        |	t
        j                        r?t        |t        j                  |             t        |t        j                  |             nLt!        |j"                  |j"                         t!        |j"                  |j"                         t        ||       t        |
j%                  |||	      |j%                  |             t        |j%                  |      |j%                  |             t        |
j'                  |||	      |j'                  |             t        |j'                  |      |j'                  |             t        |
j)                  ||	      |j)                                t        |j)                         |j)                                y )Nrs   r   r   皙?皙?333333?Tr_   r   r   r   random_stateseed)r   rR   r   r   rv   r-   rw   r   r>   r   r   rvs
isinstance	CovViaPSDrF   squeezer   r@   pdflogpdfentropy)r[   r   r   rp   r\   r{   r|   r}   meanr   mvndist0dist1r   ra   x1x2s                    rE   test_mvn_with_covariancez'TestCovariance.test_mvn_with_covariance   s/    M?*<[M J  <<KK NN;';&(@A66}EmA./
!#D!DA#D*TJii##$78##D!$#7ii##$78WWT:DsWCii##$78z,00d0;j+"7"78RZZ]+RZZ]+177+177+R SWWQj1599Q<@UYYq\599Q<0SZZ44ell1oFU\\!_ell1o6S[[z2EMMODU]]_emmo6rG   c                    d}| j                   |   }t        t        d|       }| j                  |   }g d} | ||            }t        }	t	        ||d      }
t	        ||d      }t
        j                  j                  d      }|j	                  |||      }t        |	j                  |||      |
j                  |             t        |j                  |      |
j                  |             t        |	j                  |||      |
j                  |             t        |j                  |      |
j                  |             y )Nrn   rs   r   Tr_   r   r   )r   rv   r-   rw   r   r>   r   r   rF   cdflogcdf)r[   r   rp   r   r{   r|   r}   r   r   r   r   r   r   ra   s                 rE   test_mvn_with_covariance_cdfz+TestCovariance.test_mvn_with_covariance_cdf   s    +NN;';&(@A66}EmA./
!#D!DA#D*TJii##$78##D!$#7SWWQj1599Q<@UYYq\599Q<0SZZ44ell1oFU\\!_ell1o6rG   c                 |    d}t        j                  t        |      5  t                d d d        y # 1 sw Y   y xY w)Nz7The `Covariance` class cannot be instantiated directly.rK   )rR   r
   NotImplementedErrorr.   rZ   s     rE   test_covariance_instantiationz,TestCovariance.test_covariance_instantiation   s0    K]].g> 	L	 	 	s   2;zignore::RuntimeWarningc                 v   t        j                  g d      }|j                  d   }t        j                  |      }t	        j
                  t        d      5  t        ||      j                          d d d        d}t         j                  j                  |      }t         j                  j                  |      }t        j                  t         j                  j                  |            }t        ||      }|j                  |      }	t        j                  |||      }
t        |	|
       y # 1 sw Y   xY w)N)r   rM   g:0yEr   zThe input matrix must be...rK   l   .ypGw r   )r>   ru   r@   zerosrR   r
   rS   r   r   r   r   r.   from_eigendecompositionlinalgeighr   )r[   r{   nr   r   rng1rng2covrvrA   rB   s              rE   test_gh9942zTestCovariance.test_gh9942   s    
 GGM"GGAJxx{ ]]:-JK 	/a(,,.	/ #yy$$T*yy$$T*001BC s+ff$f'!%%dCdCS#	/ 	/s   D//D8c                 r   t        j                  d      }t        j                  t        j                  d      t        j
                  d      f      }t        j                  j                  ||      }|j                  d       }t        ||       t        j                  j                  j                  t        j                  ddg      t        j                  ddgddgg      f      }t        j                  j                  ||      }|j                  d       }|d   |d   k7  sJ |d   |d   k(  sJ y )	NrM   r   r   r         ?        g      y@r   r   )r>   rU   r.   r   r   rV   scipyr0   r   r   r   array)r[   r   r   distr   s        rE   test_gh19197zTestCovariance.test_gh19197  s   
 wwqz00"((1+rvvay1IJ{{..Dc.BhhDh!S$kk$$<<XXr2hB8b$Z*@!ABD{{..Dc.BhhDh!1va   1va   rG   )__name__
__module____qualname__r]   r>   ru   r   invcholeskyr   rw   r   list_all_covariance_typesr   r   rR   markparametrizer   r   tupler   r   r   filterwarningsr   r    rG   rE   rI   rI   5   s   I< .0WW.0iimm-/YY-?-?79yy~~)B	!C %BHHT*C%DE'.rwwy'9'0)Y&G&-bggi&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                    |j                  | | f      }||j                  z  }t        j                  j	                  |      \  }}|r|j                  |       dkD  }d||<   |t        j                  |      z  |j                  z  }|S )Nr   r   )r   r   r>   r   r   normalru   )	dimevalsr   r   r{   _v	zero_eigsr   s	            rE   _random_covariancer     s{     	

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

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

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

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

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

        True analytically-derived answer is 1/(ndim+1).
              ?r  r   )r>   r   r   r   r  r  r  s          rE   generate_halveszMVNProblem.generate_halves  s`     ggdRVVG$xx~''#,	
 T!VrG   c                     t        dd      }|j                  |       t        | j                  fi |\  | _        | _        y)z?Perform the simplified integral and store the results.
              "      "@abNdictupdater3   univariate_funcr  r  r[   kwdsds      rE   r  zMVNProblem.find_target  s?     
 	
+/0D0D+J+J(rG   c           
         t        j                  d| j                  dz  z
        }t        j                  t	        j
                  | j                  | j                  |ddt         j                  f   z  z   |z        t	        j
                  | j                  | j                  |ddt         j                  f   z  z   |z        z
  d      S )z`The parameter-specific term of the univariate integrand,
        for separate plotting.
        r   rM   Nr   )	r>   r  r  prodspecialndtrr  r   r  )r[   tdenoms      rE   _univariate_termzMVNProblem._univariate_term  s     DLL!O+,wwLL$))dll1Q

]3C&CCuLMLL$((T\\!ArzzM2B%BBeKLM
 	
rG   c                     t        j                  |      }t        j                  t        |      | j	                  |      z        S )zUnivariate integrand.
        )r>   
atleast_1dr   norm_pdfr1  r[   r/  s     rE   r'  zMVNProblem.univariate_func  s5     MM!zz(1+(=(=a(@@AArG   c                 $   ddl m} t        j                  ddd      }|j	                  |t        |      d       |j	                  || j                  |      d       |j	                  || j                  |      d	       |j                          y
)QPlot the univariate integrand and its component terms for understanding.
        r   pyplotr  r     	$\phi(t)$label$f(t)$$f(t)*phi(t)$N)	
matplotlibr9  r>   linspaceplotr4  r1  r'  legendr[   pltr/  s      rE   plot_integrandzMVNProblem.plot_integrand  ss     	-KKc4(HQK|4D))!,I>D((+3CD

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

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

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

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

rG   r=   )r   r   r   rG  rH  rI  r>   rJ  rK  r  rL  rT  r  r1  r'  rF  r   rG   rE   rO  rO    sq    " J
**::jjJJ  K0B
rG   rO  c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zej$                  j'                  d ej*                  d       ej.                  ddg      g      d        Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d  Z&ej$                  jN                  ej$                  j'                  d!dd"g      d#               Z(d$ Z)ej$                  j'                  d! e*dd%            ej$                  j'                  d&d'd(g      d)               Z+ej$                  j'                  d! e*dd*            ej$                  j'                  d&d'd(g      d+               Z,ej$                  j'                  d! e*d,d*            ej$                  j'                  d&d'd-g      d.               Z-d/ Z.d0 Z/ej$                  j'                  d1d2      d3        Z0d4 Z1ej$                  j'                  d5 ejd                  d6       ejd                  d7      g      d8        Z3ej$                  j'                  d9 ejd                  d:       ejd                  d;       ejd                  d<      g      d=        Z4d> Z5d? Z6d@ Z7yA)BTestMultivariateNormalc                 `   t        j                  d      }t        j                  d      }t        t        t
        j                  d||       t        t        t
        j                  d||       t        t        t
        j                  d||       t        t        t
        j                  d||       y )NrN   rM   r   r   r   r   rM   )r>   arangeidentityassert_raisesrS   r   r   r   )r[   mur   s      rE   test_input_shapez'TestMultivariateNormal.test_input_shape"  sx    YYq\kk!nj"5"9"962sKj"5"9"99b#Nj"5"9"962sKj"5"9"99b#NrG   c                    t         j                  j                  d      }d\  }}}t        j                  |||      }t        |j                  d       |j                  d      }|j                  d      }t        j                  |j                  d            }t        j                  |||      }t        |j                  d       d\  }}}t        j                  |||      }t        |j                  d       |j                  d      }|j                  d      }t        j                  |j                  d            }t        j                  |||      }t        |j                  d       y )N  )      ?g333333?      @r   rh   )
r>   r   r   r   r   r   r   r   absr   )r[   r   ra   r   r   r   r   s          rE   test_scalar_valuesz)TestMultivariateNormal.test_scalar_values*  s.   ii##D) %4!%%as3SXXq! """1%ffS((+,!%%as3SXXq! %4!%%as3SXXq! """1%ffS((+,!%%as3SXXq!rG   c                 h   t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  |j                  d            }t        j                  |||      }t        j                  |||      }t        |t        j                  |             y Nrj  rh   )
r>   r   r   r   rm  r   r   r   r   logr[   r   ra   r   r   d1d2s          rE   test_logpdfz"TestMultivariateNormal.test_logpdfE      ii##D)"""1%ffS((+, ''45 $$Qc2BFF2J'rG   c                    t         j                  j                  d      }|j                  d      }t	        j
                  |      }t	        j                  |      }t	        j
                  |d d      }t	        j                  |d d      }t        |t        j                  |             t        |t        j                  |             y Nrj  rh   r   )	r>   r   r   r   r   r   r   r   rq  r[   r   ra   rs  rt  d3d4s          rE   test_logpdf_default_valuesz1TestMultivariateNormal.test_logpdf_default_valuesO       ii##D)" ''* $$Q' ''43 $$Qa0BFF2J'BFF2J'rG   c                 h   t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  |j                  d            }t        j                  |||      }t        j                  |||      }t        |t        j                  |             y rp  )
r>   r   r   r   rm  r   r   r   r   rq  rr  s          rE   test_logcdfz"TestMultivariateNormal.test_logcdf\  rv  rG   c                    t         j                  j                  d      }|j                  d      }t	        j
                  |      }t	        j                  |      }t	        j
                  |d d      }t	        j                  |d d      }t        |t        j                  |             t        |t        j                  |             y rx  )	r>   r   r   r   r   r   r   r   rq  ry  s          rE   test_logcdf_default_valuesz1TestMultivariateNormal.test_logcdf_default_valuesf  r}  rG   c                 R   t         j                  j                  d      }d}|j                  |      }t	        d|dz         D ]c  }|j                  ||f      }t        j
                  ||j                        }t        ||d      }t        |j                  j                  |       e y )Nrj  rj   r   Tr_   )r>   r   r   r   rangedotr   r   r   r   r   )r[   r   r   r   expected_rankr   r   distns           rE   	test_rankz TestMultivariateNormal.test_ranks  s    ii##D)""1%"1a!e_ 	?M##Q$67A&&ACC.C'c$GE))..>		?rG   c           	         t         j                  j                  d      }t        dd      D ]  }|j	                  |      }t        d|      D ]~  }|j	                  ||f      }t        j
                  ||j                        }t        j                  ||f      }||d |d |f<   t        j                  |      }|d | |d | t        |      }	t        j
                  |	t        j
                  ||	j                              }
t        j
                  |	|      }t        t        j                  |      |d      }t        t        j                  |      |d      }t        t        j                  |      |
d      }t        |j                  j                  |       t        |j                  j                  |       t        |j                  j                  |       |j                  |d |       }|j                  |      }|j                  |      }t        ||       t        ||       |j                  |d |       }|j                  |      }|j                  |      }t        ||       t        ||       ||	d d df   z   }|j                  |      }|j                  |      }t        |d       t        |t         j                             y )Nrj  r   rh   Tr_   rl   r   )r>   r   r   r  r   r  r   r   r   r   r   r   r   r   r   r   r   )r[   r   r   r   kr   cov_kkcov_nnra   r   cov_rrr   distn_kkdistn_nndistn_rrpdf_kkpdf_nnpdf_rr	logpdf_kk	logpdf_nn	logpdf_rry_orthpdf_rr_orthlogpdf_rr_orths                           rE   test_degenerate_distributionsz4TestMultivariateNormal.test_degenerate_distributions~  s^   ii##D)q! 0	6A##A&A1a[ .6''A/133 1a&)!'rr2A2v HHQK"1"1 /q1266&!###67FF1aL /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 Qq"uX&ll62!)!8 [#.^bffW5].60	6rG   c                 X   d}t        dd      D ]  }t        d|      D ]  }t        j                  |      }t        |      d d d |f   }t        j                  ||j
                        }t        j                  |||      }t        j                  |||d      }t        |j                  |       t        j                  |dkD        sJ t        j                  |||d      }	t        |	j                  |       t        j                  |	t        j                   kD        rJ   y )	N
   rM   ri   r   r   r   r   T)r   r   r`   r   )r  r>   r   r   r  r   r   r   r   r   r   allr   r   )
r[   r  r   rmnr   vrr   r   r   s
             rE   test_degenerate_arrayz,TestMultivariateNormal.test_degenerate_array  s    q! 	0A1a[ 0XXa[.q1!RaR%8VVAqss^'++!D)--abb=ACSXXq)vvcCi(((,33ABBCGIV[[!,vvfw.///0	0rG   c                 F   d}d}d}t        j                  ||z        }||z   }t        j                  ||ft              }t        j                  ||       d|| d | d f<   t        t        j                  j                  |      d       t        t        j                  j                  |d |d |f         t         j                         t        t         j                  j                  |d |d |f         d|f       t        |      }t        |j                  |       y )Ng     @@d   rM   r   r   r   )r>   expr   rK  r  r   r   r   detr   r   slogdetr   r   )r[   large_total_lognposnzerolarge_entryr   r   r   s           rE   test_large_pseudo_determinantz4TestMultivariateNormal.test_large_pseudo_determinant  s    
 !ff_t345Lhh1vU+
k* !UFGeVW 	U\\%%c*A.U\\%%c%4%$,&78"&&A		))#eteUdUl*;<O,	. 3io6rG   c                 F   t         j                  j                  d      }d}|j                  ||      }t        j                  ||j
                        }|j                  |      }|j                  dd|      }t        j                  |||      }t        j                  |||      }t        d      D ]n  }	t        d      D ]^  }
t        j                  ||	|
f   ||      }t        |||	|
f          t        j                  ||	|
f   ||      }t        |||	|
f   d       ` p y )Nrj  rj   rM   rN   MbP?rtol)r>   r   RandomStaterandnr  r   r   r   r   r  r   )r[   r   r   datar   r   r   desired_pdfdesired_cdfijactuals               rE   test_broadcastingz(TestMultivariateNormal.test_broadcasting  s   ii##D) yyAffT466"yy| IIaA *--as;)--as;q 	EA1X E,001a4$DAaC(89,001a4$DAaC(8tDE	ErG   c                 .   t        j                  ddd      }d\  }}|dz  }t        j                  |||      }t	        j                  |||      }t        ||       t        j                  |||      }t	        j                  |||      }t        ||       y )Nr   rM   r  )333333??r  )r>   rA  r   r   r   r   r   )r[   ra   r   r   scalers  rt  s          rE   test_normal_1Dz%TestMultivariateNormal.test_normal_1D  s     KK1b!	cSXXau% $$Qc2BXXau% $$Qc2BrG   c                 b   t        j                  ddg      }t        j                  ddgddgg      }d}d|dz
  z  }t        j                  d	d|      }t        j                  ||      \  }}t        j                  ||d
f      }||d d d d d	f<   ||d d d d df<   t        j                  |||      }	t        |	|d	      }
t        |	|d      }t        j                  ||d	   |d   dz        }t        j                  ||d   |d   dz        }t        |
|dd       t        ||dd       y )Nrl  g      @r  r   333333?i  ri   r   r   rM   r   r   r   locr  )r   r   {Gz?r  atol)
r>   r   rA  meshgridr   r   r   r4   r   r   )r[   r   r   r   deltar   xvyvposr   margin_xmargin_ygauss_xgauss_ys                 rE   test_marginalizationz+TestMultivariateNormal.test_marginalization  s)    xxc
#hhS	C9-.QUKK1a Q"Bhh1ay!Aq!GAq!G!%%c45 U+U+ ((1$q'Tc1AB((1$q'Tc1AB'4@'4@rG   c                 f   t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  |j                  d            }t        ||      }t        |j                  |      t        j                  |||             t        |j                  |      t        j                  |||             t        |j                  |      t        j                  |||             t        |j                  |      t        j                  |||             y rp  )r>   r   r   r   rm  r   r   r   r   r   r   )r[   r   ra   r   r   norm_frozens         rE   test_frozenz"TestMultivariateNormal.test_frozen  s    ii##D)"""1%ffS((+,)$4*,?,C,CAtS,QR**1-+221dC@	B*,?,C,CAtS,QR**1-+221dC@	BrG   rO   rM   r   c                     t        j                  d      }t        j                  d      }t        ||      }t        j                  |j
                  |      sJ t        j                  |j                  |      sJ y )NrM   rM   )r>   rU   rV   r   allcloser   r   )r[   rO   r   cov_should_ber  s        rE   2test_frozen_multivariate_normal_exposes_attributeszITestMultivariateNormal.test_frozen_multivariate_normal_exposes_attributes-  s\     wwt}q	)$
;{{;++T222{{;??M:::rG   c           
         t         j                  j                  d      }d}|j                  ||f      }t        j                  ||j
                        }t        j                  j                  |      \  }}t        j                  |d      }d|d<   d|d<   t        j                  |t        j                  t        j                  |      |j
                              }d}t        ||	      }t        |j                  |	      }	t        |j                  t        j                  t        j                   |d d                    t        |j                   |	j                         y )
Nrj  rk   r  r   r   Hz>rl   h㈵>)cond)r>   r   r   r   r  r   r   r   r   r   ru   r   pinvr   r   r   rq  )
r[   r   r   ra   r   r   r   r  r   psd_pinvs
             rE   test_pseudodet_pinvz*TestMultivariateNormal.test_pseudodet_pinv;  s    ii##D)A'ffQn||  %1GGAsO!"ffQrwwqz133/0 3T"t, 	bffRVVAcrF^&<= 	x'8'89rG   c                 >    g dg dg}t        t        t        |       y )NrQ   rj   rh   ri   rf  rS   r   r[   r   s     rE   test_exception_nonsquare_covz3TestMultivariateNormal.test_exception_nonsquare_covU  s    )$j$,rG   c                     ddgdt         j                  gg}t        t        t        |       ddgdt         j
                  gg}t        t        t        |       y )Nr   r   )r>   nanrf  rS   r   r   )r[   cov_nancov_infs      rE   test_exception_nonfinite_covz3TestMultivariateNormal.test_exception_nonfinite_covY  sF    q6Arvv;'j$0q6Arvv;'j$0rG   c                 >    ddgddgg}t        t        t        |       y )Nr   r   rl   r  r  s     rE   test_exception_non_psd_covz1TestMultivariateNormal.test_exception_non_psd_cov_  s     1v2wj$,rG   c                    t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  d      }t         j
                  j                  }t        |t        ||       t        |t        j                  |||       t        |t        j                  |||       t        |t        j                  |||       t        |t        j                  |||       ddgddgg}d}t        j                  t         j
                  j                  |      5  t        |       d d d        y # 1 sw Y   y xY w)	Nrj  rh   )rh   rh   r   r   z0When `allow_singular is False`, the input matrixrK   r   )r>   r   r   r   rU   r   LinAlgErrorrf  r   r   r   r   r   rR   r
   )r[   r   ra   r   r   emsgs          rE   test_exception_singular_covz2TestMultivariateNormal.test_exception_singular_covc  s   ii##D)"""1%ggfoII!!a,dC8a,00!T3?a,33QcBa,00!T3?a,33QcB Bx"b"@]]29900< 	)C(	) 	) 	)s   0EEc                 6   t        j                  g d      }t        j                  ddd      }d|z  dz
  }|t        j                  |      z   }t        j                  |||g      j                  }t        j                  g dd      }t        j                  g dg d	g d
gd      }t        j                  |||      }t        ||d       t        j                  g d      }	t        j                  |||      }
t        |
|	d       t        j                  g d      }t        j                  ||g      j                  }t        j                  ddgd      }t        j                  ddgddggd      }t        j                  |||      }t        ||d       y )N)g0Q-?gox'V?g[S, t?gDB?gc_.?r   rM   rh   rN   )r   rN   rM   r*  r   rM   r   )rM   rh   r  )r   r  rN   绽|=r  )gwk:E]?g̙Z?g0?gL8?gAG*?gh㈵>)gIى?gG?gƏ)?gėh?gEE?r   r  )	r>   r   rA  cosr   r   r   r   r   )r[   r_pdfra   r   r   r  r   r   r   r_cdfr   r_cdf2r2mean2cov2cdf2s                   rE   test_R_valuesz$TestMultivariateNormal.test_R_valuesv  sa     6 7 KK1a EAIq	MHHaAY!!xx	3'hh	:z:C@!%%as3U/  6 7 "%%as3U.  3 4 XXq!f!Q%xx!Q!Q(#."&&r5$7f40rG   c                     t        j                  d      }t        j                  d      }t        ||d      }|j                         }t	        |ddg       y )NrM   rM   rM   Tr_   r   )r>   r   r   r   r   )r[   r   rO   modelsamples        rE   ,test_multivariate_normal_rvs_zero_covariancezCTestMultivariateNormal.test_multivariate_normal_rvs_zero_covariance  sD    xx{XXf%
#D*TJVaV$rG   c                    d}d}t        j                  t        j                  |      d|      }t	        |j
                  ||f       t        j                  d t        j                  ddgddgg      |      }t	        |j
                  |df       t        dd      }|j                  |      }t	        |j
                  |f       y )	Ni,  rj   r   r  rM   r   r   r   )r   r   r>   r   r   r@   r   )r[   Nr*  r  r   s        rE   test_rvs_shapez%TestMultivariateNormal.test_rvs_shape  s     $((bhhqkqqIV\\Aq6*$((d-/XX2wQ6H-I./1 	V\\Aq6*QA.qV\\A5)rG   c                    t         j                  j                  d      }d}|j                  |      }|j                  ||      }t        j                  ||j
                        }d}t        j                  ||||      }t        t        j                  |j
                        |d       t        |j                  d      |d       y )N  rN     r   r   r  r   )r>   r   r  r  r  r   r   r   r   r   r   )r[   r   r   r   r   r   r   r  s           rE   test_large_samplez(TestMultivariateNormal.test_large_sample  s     ii##D)yy|IIaOffQn$((sDsKvxx(#D9A48rG   c                 h   t         j                  j                  d      }d}|j                  |      }|j                  ||      }t        j                  ||j
                        }t        ||      }t        |j                         t        j                  ||             t         j                  j                  |      d   }d|t        j                  dt         j                  z        dz   z  t        j                  t        j                  |            z   z  }t        ||j                                y )Nr  rN   r   r  rM   r   )r>   r   r  r  r  r   r   r   r   r   eigrq  pir   )	r[   r   r   r   r   r   r   eigsdesireds	            rE   test_entropyz#TestMultivariateNormal.test_entropy  s    ii##D)yy|IIaOffQn s+ 	BJJL*=*E*EdC*PQ yy}}S!!$1q255y 1A 56t9MMNGRZZ\2rG   c                     t        j                  g d      }d}t        t        j                  t	        |            |       y )Nr   r   r   r  )r>   r   r   r  r   )r[   alphar  s      rE   test_lnBzTestMultivariateNormal.test_lnB  s,    #BFF4;/9rG   c                    t         j                  j                  d      }ddg}t        j                  d      }|j                  d      dz  dz
  }|j                  d      dz  dz
  }t	        j
                  ||||      }t	        j
                  |||      }t	        j
                  |||      }t        j                  |ddd	f   |dd	df   fd
      }	t        j                  |dd	df   |ddd	f   fd
      }
t	        j
                  |	||      }t	        j
                  |
||      }||z   |z
  |z
  }t        ||       y )N   FYc@Y r   rM   )rj   rN   rM   ri   rN   lower_limit.r   rl   r   )r>   r   r   rV   r   r   concatenater   )r[   r   r   r   r"  r#  cdf1cdf2acdf2bab1ab2cdf2ab1cdf2ab2r  s                 rE    test_cdf_with_lower_limit_arraysz7TestMultivariateNormal.test_cdf_with_lower_limit_arrays  s:   ii##$781vffQiJJy!!#a'JJy!!#a'"&&q$C#''45#''45nnaQqSk1S!A#X;7bAnnaQqSk1S!A#X;7bA%))#tS9%))#tS9u}w&0d#rG   c                 x   t         j                  j                  d      }|j                  d      }|j                  d      }||j                  z  }|j                  d      dz  dz
  }|j                  d      dz  dz
  }t	        j
                  ||||      }t	        ||      j                  ||      }t        j                  t	        j                  ||||            }t        j                  t	        ||      j                  ||            }	t        ||d       t        ||d       t        |	|d       y )	Nr  rN   rN   rN   rM   rN   ri   r  -C6?r  )	r>   r   r   r   r   r   r  r   r   )
r[   r   r   r   r"  r#  r  r  cdf3cdf4s
             rE   %test_cdf_with_lower_limit_consistencyz<TestMultivariateNormal.test_cdf_with_lower_limit_consistency  s   ii##$78zz!}jj CEEkJJvq 1$JJvq 1$"&&q$C"4-11!1Cvv)00D#1MNvv)$4;;A1;MNd.d.d.rG   c                    t        j                  d      }t        j                  d      }g dg dg dg dg}g dg dg dg dg}t        j                  g d      }t	        j
                  ||||      }t        ||d   |z         y )	NrN   r  rm   r   r   r   r   r   r   r   rl   rl   r   r  r   r>   r   rV   r   r   r   r   )r[   r   r   r#  r"  expected_signsr   s          rE   test_cdf_signsz%TestMultivariateNormal.test_cdf_signs  so    xx{ffQi	9i8	9i8.1!%%asBSVN23rG   r   rN   c                    t         j                  j                  d      }|j                  ||f      }|j                  |z  }|j                  |      }t        ||      }|j                  dd|f      }|j                  |      }t        dg|z  |      }	t        |	j                  t         j                   g|z  ||z
        j                  }
t        ||
d	       y )
N{   r   r   rN   )r  r  r   r   gh㈵>r  )r>   r   r   r   r   r   r   r2   r   r   r   r   )r[   r   r   r"  r   mr   ra   r   dist_icdf_is              rE   test_cdf_vs_cubaturez+TestMultivariateNormal.test_cdf_vs_cubature(  s     ii##C(KKdD\K*ccAgKKTK""s3KKBQdWK5hhqk$1#d(<rvvgYt^QU;DDU.rG   c                     t        dd      D ]h  }t        j                  ||fd      }t        j                  |d       t	        dg|z  |      }t        |j                  dg|z        dd|z   z  d       j y )	NrM      r  r   r   r  -C6
?r  )r  r>   r   r  r   r   r   )r[   r   r   r   s       rE   test_cdf_knownz%TestMultivariateNormal.test_cdf_known6  sv    !RL 	D''4,,CS"%&s4xS9D!T"b4i 		rG   r  r   l   >[= l	   HVqKWs.!) c                 l   t         j                  j                  |      }t        j	                  ||      }|j
                  t         j                   k(  j                         sJ t        dg|z  |j                        }|j                  |j                  |      }t        ||j                  d       y Nr   r   r   r   r   r8  r  )r>   r   r   r   r  r  r   r  r   r  r   r  r   r  r[   r   r   r   caser   cdf_vals          rE   test_cdf_vs_univariatez-TestMultivariateNormal.test_cdf_vs_univariateB  s     ii##D)..Dc.BRVVG#((***"DdjjA((499#(.t<rG      c                 l   t         j                  j                  |      }t        j	                  ||      }|j
                  t         j                   k(  j                         sJ t        dg|z  |j                        }|j                  |j                  |      }t        ||j                  d       y r;  )r>   r   r   r   r  r  r   r  r   r  r   r  r   r  r>  s          rE   test_cdf_vs_univariate_2z/TestMultivariateNormal.test_cdf_vs_univariate_2M  s     ii##D)++3+?RVVG#((***"DdjjA((499#(.t<rG   rj   l	   HVqKWs.!) c                    t         j                  j                  |      }t        j	                  ||      }|j
                  t         j                   k(  j                         sJ t        dg|z  |j                  dd|j                  j                  d   z        }|j                  |j                  |      }t        ||j                  d       y )	Nr<  r   T'  )r   r   r`   maxptsr=  r  r  )r>   r   r   rO  rT  r  r   r  r   r  r@   r   r  r   r  r>  s          rE   test_cdf_vs_univariate_singularz6TestMultivariateNormal.test_cdf_vs_univariate_singularX  s    
 ii##D)!77Ts7KRVVG#((***"DdjjQU*01A1A!1D*D
 ((499#(.t<rG   c                    t        j                  dt        j                  g d      z        }t        j                  |      }d}t        j                  t        |      5  t        j                  ddg|       d d d        t        j                  t        |      5  t        ddg|       d d d        g d}t        j                  |g d|      }t        t        j                  ||      |       t        j                  |g d	|      }t        t        j                  |d|      |       y # 1 sw Y   xY w# 1 sw Y   xY w)
Nr   rQ   z7`cov` represents a covariance matrix in 3 dimensions...rK   r   )r  r  r  rm   r  r  )r>   ru   r   r-   rT   rR   r
   rS   r   r   r   r   )r[   Pr   r\   ra   rB   s         rE   test_mean_covz$TestMultivariateNormal.test_mean_covh  s    GGA++, 003
K]]:W5 	<''A
;	< ]]:W5 	4A
3	4 !%%aJ?(,,QJ?E!%%aJ?(,,QzBCH	< 	<	4 	4s    D-D9-D69Ec                     ddg}d}t        j                  t        |      5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   rN   z`x` must be two-dimensional.rK   )rR   r
   rS   r   fit)r[   r  	error_msgs      rE   test_fit_wrong_fit_data_shapez4TestMultivariateNormal.test_fit_wrong_fit_data_shape{  sA    1v2	]]:Y7 	*##D)	* 	* 	*s   AA
r   )rN   rh   c                 @   t         j                  j                  d      }|j                  d|f      }t        j                  |      \  }}t        j
                  |d      t        j                  |j                  d      }}t        ||d       t        ||d       y )	N   @,Q| r  r   r   )ddofV瞯<r  r  )	r>   r   r   r   rM  r   r   r   r   )r[   r   r   ra   mean_estcov_estmean_refcov_refs           rE   test_fit_correctnessz+TestMultivariateNormal.test_fit_correctness  sy    ii##$45JJSz"/33A6'GGAA.qss0C'(7u5rG   c                     t        j                  dd      }d}t        j                  d      }t        j                  |||      \  }}t        ||       t        ||       y )N)rM   r   rN   r   )fix_meanfix_cov)r>   r   
atleast_2dr   rM  r   )r[   r  
mean_fixed	cov_fixedr   r   s         rE   test_fit_both_parameters_fixedz5TestMultivariateNormal.test_fit_both_parameters_fixed  sT    wwvq!
MM"%	'++D:4=?	cT:&S)$rG   rZ  r  rN   c                     d}t        j                  t        |      5  t        j                  t        j                  d      |       d d d        y # 1 sw Y   y xY w)Nzd`fix_mean` must be a one-dimensional array the same length as the dimensionality of the vectors `x`.rK   rM   rZ  rR   r
   rS   r   rM  r>   rV   )r[   rZ  r  s      rE   "test_fit_fix_mean_input_validationz9TestMultivariateNormal.test_fit_fix_mean_input_validation  sI    C]]:S1 	B##BFF1IA	B 	B 	B   +AAr[  r  )rN   rM   )rj   rj   c                     d}t        j                  t        |      5  t        j                  t        j                  d      |       d d d        y # 1 sw Y   y xY w)Nzn`fix_cov` must be a two-dimensional square array of same side length as the dimensionality of the vectors `x`.rK   rN   r[  rc  )r[   r[  r  s      rE   +test_fit_fix_cov_input_validation_dimensionzBTestMultivariateNormal.test_fit_fix_cov_input_validation_dimension  sJ     ]]:S1 	@##BFF1Iw?	@ 	@ 	@re  c                     d}t        j                  t        |      5  t        j                  ddgddgg      }t        j                  t        j                  d      |       d d d        y # 1 sw Y   y xY w)Nz2`fix_cov` must be symmetric positive semidefinite.rK   r   r   r  rM   rg  )rR   r
   rS   r>   r   r   rM  rV   )r[   rN  r[  s      rE   *test_fit_fix_cov_not_positive_semidefinitezATestMultivariateNormal.test_fit_fix_cov_not_positive_semidefinite  sa    H	]]:Y7 	@hhR2s)45G##BFF1Iw?	@ 	@ 	@s   AA--A6c                    t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  ||j                        }t        j                  ||d|      }t        j                  |      \  }}t        j                  |||      j                         }t        j                  ||      \  }	}
t        |	|       t        j                  ||	|
      j                         }||k  sJ |j                  d      }dt        j                  ||j                        z  }|
|z   }t        j                  ||	|      j                         }||k  sJ y )	NrQ  rN   r"  r  r   r   r   r   r   rb  :0yE>)r>   r   r   r  r   r   r   rM  r   r   r   )r[   r   r  r{   r   samples	mean_freecov_free	logp_freemean_fixcov_fixlogp_fixr2  cov_perturbedlogp_perturbeds                  rE   test_fit_fix_meanz(TestMultivariateNormal.test_fit_fix_mean  sL   ii##$45jjmJJvffQn%))s#7:<155g>	8'..wY3;==@SU 	/33GcJ'Xs#&--gH29;;>35 	 )### JJv266!QSS>!!-44W:B9FH 8;su 	 (((rG   c                    t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  ||j                        }t        j                  ||d|      }t        j                  |      \  }}t        j                  |||      j                         }t        j                  ||      \  }	}
t        |	t        j                  |d	             t        |
|       t        j                  ||	|
      j                         }||k  sJ |	d
|j                  d      z  z   }t        j                  |||
      j                         }||k  sJ y )NrQ  rN   r"  r  rl  r   rg  r   r   rm  )r>   r   r   r  r   r   r   rM  r   r   r   r   )r[   r   r  r{   r   rn  ro  rp  rq  rr  rs  rt  mean_perturbedrv  s                 rE   test_fit_fix_covz'TestMultivariateNormal.test_fit_fix_cov  sJ   ii##$45jjmJJvffQn%))s/2F155g>	8'..wY3;==@SU 	/33GSI'XrwwwQ78Wc"&--gH29;;>35 	 )### "D3::a=$88-44W:H9@B 8;su 	 (((rG   N)8r   r   r   rh  rn  ru  r|  r  r  r  r  r  r  r  r  r  r  rR   r   r   r>   rV   r.   from_diagonalr  r  r  r  r  r  r  r  r  r	  r  r  r   r'  r.  slowr5  r9  r  rA  rD  rH  rK  rO  rX  r_  r   rd  rh  rj  rw  rz  r   rG   rE   r`  r`  !  s   O"6((((	?26h0,70E0 A2B [[BFF1I$J$$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*:*2"((5/*; <B<B [[Y%)1&)9)1&)9); <@<@@)8)rG   r`  c            	          e Zd Zej                  j                  dei feddifg      ej                  j                  ddg      ej                  j                  ddgddgg      ej                  j                  d	d
dg      ej                  j                  dd
dg      d                                    Zej                  j                  deeg      d        Z	ej                  j                  deeg      d        Z
y)TestMarginalzdist,kwargsdfrj   r   rN   r   r   rl   frozenTFr   c                 J   t         j                  j                  d      }|j                  |      }|j                  ||f      }	|	|	j                  z  }
|r|t
        k(  rt        j                  d       n|rt        j                  |
      }
t         j                  j                  dt        |      f      } |||
fi |}|r#|j                  |      }|j                  |      }n& |j                  |||
fi |}|j                  |      }t        ||||      }t        ||       y )Nɫz6`multivariate_t` does not accept a `Covariance` objectrj   )r>   r   r   r   r   r$   rR   r   r-   rT   r   marginalr   r   r   )r[   r   r   r   r  r   rD   r   r  r{   r  ra   r   YrA   rB   s                   rE   test_marginal_distributionz'TestMarginal.test_marginal_distribution  s    ii##I.!!&) 01ACC$.0KKPQ//6E II%%q#j/&:;e&v&

:&A%%(Cj#u??A%%(C1fj!4S!rG   r   c                 ^   t         j                  j                  d      }|j                  d      }|j                  d      }||j                  z  } |||      }d}t        j                  t        |      5  |j                  d       d d d        t        j                  t        |      5  |j                  g d       d d d        d}t        j                  t        |      5  |j                  dd	g       d d d        t        j                  t        |      5  |j                  d
dgg       d d d        d}t        j                  t        |      5  |j                  ddg       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   gxY w# 1 sw Y   y xY w)Nr  rN   r"  zDimensions \[3\] are invalid .*rK   )r   r   rM   rN   z,All elements of `dimensions` must be unique.rM   rl   r   r   z*Elements of `dimensions` must be integers.r]         @	r>   r   r   r   r   rR   r
   rS   r  )r[   r   r   r   r{   r   r   r  s           rE   test_marginal_input_validationz+TestMarginal.test_marginal_input_validation  sb   ii##I.""1%'!##gsO0]]:S1 	JJqM	 ]]:S1 	%JJ|$	% >]]:S1 	 JJ2w	  ]]:S1 	!JJAx 	! <]]:S1 	#JJSz"	# 	#	 		% 	%	  	 	! 	!	# 	#s<   7E3,E?%FFF#3E<?FFF #F,c                 <   t         j                  j                  d      }|j                  d      }|j                  d      }||j                  z  } |||      }d}t        j                  t        |      5  |j                  g        d d d        y # 1 sw Y   y xY w)Nr  rN   r"  z"Cannot marginalize all dimensions.rK   r  )r[   r   r   r  r{   r  r   r  s           rE   test_marginal_special_casesz(TestMarginal.test_marginal_special_cases  s    ii##I.!!!$'ACCe3]]:S1 	JJrN	 	 	s   7BBN)r   r   r   rR   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                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestMatrixNormalc           
      2   d}d}t        j                  ||fd      }dt        j                  |      z  t        j                  ||fd      z   }dt        j                  |      z  t        j                  ||fd      z   }t        t        t
        t        j                  d             t        t        t
        |t        j                  d      |       t        t        t
        ||t        j                  d             t        t        t
        |||       t        t        t
        |||       t        t        t
        |j                  ||       t         j                  j                  }t        |t
        j                  ||t        j                  ||f             t        |t
        j                  |t        j                  ||f      |       t        |t
        ||t        j                  ||f             t        |t
        |t        j                  ||f      |       y )Nrj   rN   r   r  ffffff?rh   rj   rN   r  )r>   r   re  rf  rS   r   r   r   r   r  r   rU   )r[   num_rowsnum_colsr   r   Vr  s          rE   test_bad_inputzTestMatrixNormal.test_bad_input/  s   GGXh'-"++h''"''8X2F*LL"++h''"''8X2F*LL 	j-'1BCj-BHHRL!Dj-Arxx|Dj-Aq9j-Aq9j-a;II!!a**BGGXx$89	;a**(H!56	; 	a1bggx6J.KLa277Hh3G+H!LrG   c                    d}d}t        j                  ||fd      }dt        j                  |      z  t        j                  ||fd      z   }dt        j                  |      z  t        j                  ||fd      z   }t        j                  ||f      }t        j                  |df      }t        j                  d|f      }t        j                  |      }	t        j                  |      }
t        j                  d      }t	        t        j                  |||      j                  ||f       t	        t        j                  |      j                  ||f       t	        t        j                  |	      j                  |df       t	        t        j                  |
      j                  d|f       t	        t        j                  ||      j                  ||f       t	        t        j                  ||      j                  ||f       t	        t        j                  ||      j                  ||f       t	        t        |      j                  |	       t	        t        |      j                  |
       t	        t        |	      j                  |       t	        t        |	      j                  |       t	        t        |
      j                  |       t	        t        |
      j                  |       t	        t        ||      j                  |
       t	        t        ||      j                  |	       t	        t        ||      j                  |       y )Nrj   rN   r   r  r  r   r   rowcovcolcovr   )r  )r  )r   r  )r   r  )r  r  )r>   r   re  r   r   r   r   r@   r  r  r   )r[   r  r  r   r   r  ZZrZcIrIcI1s               rE   test_default_inputsz$TestMatrixNormal.test_default_inputsI  s   GGXh'-"++h''"''8X2F*LL"++h''"''8X2F*LLHHh)*XXxm$XXq(m$[["[["[[^]&&AaBHH)	+]&&A.44)	+]&&a066]	$]&&a066]	$]&&Aa8>>)	+]&&Aa8>>)	+]&&a:@@)	+ 	]*1126]*1126]!,1126]!,33R8]!,1126]!,33R8]!4;;R@]!4;;R@]!A6;;Q?rG   c                    d}d}t        j                  ||fd      }t        j                  |d      }d}t        j                  |d      }d}t        j                  |      }t        j                  |      }	t        t	        |||      j
                  d|z         t        t	        |||      j                  d|	z         t        t	        |||      j
                  d|z         t        t	        |||      j                  d|	z         y )Nrj   rN   r   r   r   r  )r>   r   re  r   r   r  r  )
r[   r  r  r   UvUsVvVsr  r  s
             rE   test_covariance_expansionz*TestMatrixNormal.test_covariance_expansionp  s    GGXx(#.WWXs#WWXs#[["[["]"R@GGV	]"R@GGV	]"R@GGV	]"R@GGV	rG   c                    t        dd      D ]S  }t        dd      D ]@  }t        j                  ||fd      }dt        j                  |      z  t        j                  ||fd      z   }dt        j                  |      z  t        j                  ||fd      z   }t	        |||      }|j                  d      }t	        j
                  |||d	      }t        ||       |j                  d      }	|j                  |	      }
t	        j                  |	|||      }t        |
|       |j                  |	      }t	        j                  |	|||      }t        ||       C V y )
Nr   rh   r   r  r  r  rj  r   )r   r  r  r   )	r  r>   r   re  r   r   r   r   r   )r[   r  r  r   r   r  r  rvs1rvs2r   pdf1pdf2logpdf1logpdf2s                 rE   test_frozen_matrix_normalz*TestMatrixNormal.test_frozen_matrix_normal  s8   q 	/A1QZ /GGQqE3'"++a.(277Aa5#+>>"++a.(277Aa5#+>>&AaBzztz4$((a!6:<T4(JJDJ1zz!}$((1QGT4( --*'..qq1MWg.)/	/rG   c                 Z   t        dd      D ]  }t        dd      D ]  }t        j                  ||fd      }dt        j                  |      z  t        j                  ||fd      z   }dt        j                  |      z  t        j                  ||fd      z   }t	        |||      }|j                  d      }|j                  |      }|j                  |      }	|j                         }
|j                  j                         }|j                  j                         }t        j                  ||      }t        j                  |||	      }t        j                  |||	      }t        j                  ||	      }t        ||d
       t        |	|d
       t        |
|         y )Nr   rh   r   r  r  r  rj  r   r   r  r  )r  r>   r   re  r   r   r   r   r   r   flattenkronr   r   )r[   r  r  r   r   r  r  r   r  r  entropy1vecXvecMr   r  r  entropy2s                    rE   test_matches_multivariatez*TestMatrixNormal.test_matches_multivariate  s\    q 	4A1QZ 4GGQqE3'"++a.(277Aa5#+>>"++a.(277Aa5#+>>&AaBJJDJ1zz!} --*!>>+ss{{}ss{{}ggal*..t$CH-44T#N.66DcJd7u=(3)4	4rG   c           	      0   d}d}t        j                  ||fd      }dt        j                  |      z  t        j                  ||fd      z   }dt        j                  |      z  t        j                  ||fd      z   }d}t        |||      }|j	                  |d	      }|j	                  |d
	      }	t        j
                  |t         j                  d d d d d d f   |	t         j                  d d d d d d f   fd      }
t        |
j                  d|||f       |j                  |
      }t        |j                  d|f       t        d      D ]B  }t        |      D ]2  }t        j                  |
||f   |||      }t        ||||f   d       4 D y )Nrj   rN   r   r  r  r  r  rj  r     r   r   rM   r  )r>   r   re  r   r   r  r   r   r@   r   r  r   )r[   r  r  r   r   r  r  r  X1X2r   array_logpdfr  r  separate_logpdfs                  rE   test_array_inputz!TestMatrixNormal.test_array_input  s{   GGXh'-"++h''"''8X2F*LL"++h''"''8X2F*LLAa:ZZQTZ2ZZQTZ2NNBrzz!Aa/0BJJq14D1EFQOQWWq!Xx89}}Q'\''!Q0q 	KA1X K"/"6"6q1vA>?#Kac1BEJK	KrG   c                    d}d}t        j                  ||fd      }dt        j                  |      z  t        j                  ||fd      z   }dt        j                  |      z  t        j                  ||fd      z   }d}t        |||      }|j	                  |d	      }t        j
                  |d
      }	t        |	|d       t        j                  |j                  ||z  |      j                        }
t        |
|d       t        j                  t        j                  |dd      j                  ||z  |      j                        }t        ||d       y )Nrj   rN   r   r  r    r  rj  r   r   r   r   r  r   rM   )r>   r   re  r   r   r   r   r   reshaper   swapaxes)r[   r  r  r   r   r  r  r  r   sample_meansample_colcovsample_rowcovs               rE   test_momentszTestMatrixNormal.test_moments  s%   GGXh'-"++h''"''8X2F*LL"++h''"''8X2F*LLAa:JJADJ1ggaQ'QS1qyy8H=??@qs3r{{1Qq19989(
8 MMNQPqs3rG   c           	      f   t        j                  t        j                  ddgddgg      t        j                  ddgddgg      t        j                  ddgddgg      t        j                  j                  d      d	      }t        j                  d
dgddggddgddggg      }t        ||       y )Nr   rM   rN   rj   rl   rh   r  r   )r   r  r  r   r   g6?gǀgcϿ@g"'@gI2͖@g^jy%@gDn3@g|\3@)r   r   r>   r   r   r   r   )r[   r  expecteds      rE   test_sampleszTestMatrixNormal.test_samples  s     ""Aq6Aq6*+88aWr1g./88aVaW-...q1
 88!23!124!23!1245
 	)rG   N)r   r   r   r  r  r  r  r  r  r  r  r   rG   rE   r  r  -  s.    M4%@N,/044K.4,*rG   r  c                      e Zd Zd Zd Zd Zej                  j                  d e	dd            ej                  j                  d e	dd            d               Z
d	 Zed
ej                  dej                  fd       Zedej                  dej                  defd       Zedej                  dej                  fd       Zd Zd Zd Zd Zej                  j                  dddg      d        Zy)TestMatrixTc           	         d}d}d}t        j                  ||fd      }dt        j                  |      z  t        j                  ||fd      z   }dt        j                  |      z  t        j                  ||fd      z   }t        j                  t
        d      5  t        d	
       d d d        t        j                  t
        d      5  t        t        j                  d             d d d        t        j                  t
        d      5  t        t        j                  d             d d d        t        j                  t
        d      5  t        t        j                  d             d d d        t        j                  t
        d      5  t        t        j                  d             d d d        t        j                  t
        d      5  t        t        j                  d             d d d        t        j                  t
        d      5  t        t        j                  d             d d d        t        j                  t
        d      5  t        t        j                  d             d d d        t        j                  t
        d      5  t        t        j                  d             d d d        t        j                  t
        d      5  t        ||       d d d        t        j                  t
        d      5  t        ||       d d d        t        j                  t
        d      5  t        j                  t        j                  ||f      |        d d d        t        j                  t         j                  j                  d!      5  t        j                  ||t        j                  ||f      |       d d d        t        j                  t         j                  j                  d!      5  t        j                  |t        j                  ||f      ||       d d d        t        j                  t         j                  j                  d"      5  t        ||t        j                  ||f      |       d d d        t        j                  t         j                  j                  d"      5  t        |t        j                  ||f      ||       d d d        y # 1 sw Y   UxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   }xY w# 1 sw Y   GxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ]xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   jxY w# 1 sw Y   xY w# 1 sw Y   y xY w)#Nrj   rN   rh   r   r  r  z$Degrees of freedom must be positive.rK   r   r  zArray `mean` must be 2D.r  r  zArray `mean` has invalid shape.)rj   rN   r   z%Array `row_spread` has invalid shape.r   r   
row_spreadz2Array `row_spread` must be a scalar or a 2D array.rQ   z"Array `row_spread` must be square.r   rM   z%Array `col_spread` has invalid shape.
col_spreadz2Array `col_spread` must be a scalar or a 2D array.z"Array `col_spread` must be square.zAArrays `mean` and `row_spread` must have the same number of rows.r   r  zDArrays `mean` and `col_spread` must have the same number of columns.r   r  zIThe shape of array `X` is not conformal with the distribution parameters.)r   r   z82-th leading minor of the array is not positive definitezUWhen `allow_singular is False`, the input matrix must be symmetric positive definite.)r>   r   re  rR   r
   rS   r,   r   rU   r   r   r  r   )r[   r  r  r  r   r   r  s          rE   r  zTestMatrixT.test_bad_input  sz   GGXx(#."++h''"''8X2F*LL"++h''"''8X2F*LL ]]:-ST 	N	 ]]:-GH 	/"((9-.	/ ]]:-NO 	/"((9-.	/ ]]:-TU 	10	1 ]]R
 	4 	 23	4
 ]]:-QR 	10	1 ]]:-TU 	10	1 ]]R
 	4 	 23	4
 ]]:-QR 	10	1 ]]
 	+
 !*	+ ]]
 	+
 !*	+ ]]+
 	C
 LL288Xx$89B	C ]]II!!L
 	B LLArww(';<bA		B ]]II!!L
 	B LLBGGXx$891bA		B ]]II!!+
 	>
 Q277Hh#78"=	> ]]II!!+
 	>
 Q8 45q"=	> 	>[	 		/ 	/	/ 	/	1 	1	4 	4
	1 	1	1 	1	4 	4
	1 	1	+ 	+	+ 	+	C 	C	B 	B	B 	B	> 	>	> 	>s   S< T	 T T# T0 T= U
 U! U$$U1U>-V*.V.V%4$V2$V?<T	TT #T-0T:=U
UU!$U.1U;>VVV"%V/2V<?Wc                    d}d}d}t        j                  ||fd      }dt        j                  |      z  t        j                  ||fd      z   }dt        j                  |      z  t        j                  ||fd      z   }t        j                  ||f      }t        j                  |df      }t        j                  d|f      }	t        j                  |      }
t        j                  |      }t        j                  d      }d}t	        t        j                  ||||      j                  ||f       t	        t        j                  |	      j                  ||f       t	        t        j                  |
      j                  |df       t	        t        j                  |      j                  d|f       t	        t        j                  ||      j                  ||f       t	        t        j                  ||      j                  ||f       t	        t        j                  ||      j                  ||f       t	        t               j                  |       t	        t        |	      j                  |
       t	        t        |	      j                  |       t	        t        |
      j                  |       t	        t        |
      j                  |       t	        t        |      j                  |	       t	        t        |      j                  |       t	        t        ||      j                  |       t	        t        ||      j                  |
       t	        t        |||      j                  |       y )Nrj   rN   rh   r   r  r  r   r   r  r  r  r  r  r  r  r  )r  r  )r  r  r  )r>   r   re  r   r   r,   r   r@   r  r  r  r   )r[   r  r  r  r   r   r  r  r  r  r  r  r  	dfdefaults                 rE   r  zTestMatrixT.test_default_inputsX  s   GGXx(#."++h''"''8X2F*LL"++h''"''8X2F*LLHHh)*XXxm$XXq(m$[["[["[[^	LLaA!CIIx 	
 	X\\q)//(H1EFX\\Q/55!}EX\\Q/558}EX\\qQ7==(?STX\\qQ7==(?STLLA!4::Xx<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qR@EEqIrG   c                 $   d}d}d}t        j                  ||fd      }t        j                  |d      }d}t        j                  |d      }d}t        j                  |      }	t        j                  |      }
t        t	        ||||      j
                  d|	z         t        t	        ||||      j                  d|
z         t        t	        ||||      j
                  d|	z         t        t	        ||||      j                  d|
z         y )Nrj   rN   r   r   r   r   r  )r>   r   re  r   r,   r  r  )r[   r  r  r  r   r  r  r  r  r  r  s              rE   r  z%TestMatrixT.test_covariance_expansion  s    GGXx(#.WWXs#WWXs#[["[["!rbALLcTVh	
 	!rbALLcTVh	
 	!rbALLcTVh	
 	!rbALLcTVh	
rG   r  r   rj   r  c                    t        j                  ||fd      }dt        j                  |      z  t        j                  ||fd      z   }dt        j                  |      z  t        j                  ||fd      z   }||z   }t        ||||      }|j	                  d      }t        j                  ||||d      }	t        ||	       |j	                  d      }
|j                  |
      }t        j                  |
||||      }t        ||       |j                  |
      }t        j                  |
||||      }t        ||       y )Nr   r  r  r  rj  r   )r   r  r  r  r   )r>   r   re  r,   r   r   r   r   )r[   r  r  r   r   r  r  r  r  r  r   r  r  r  r  s                  rE   test_frozen_matrix_tz TestMatrixT.test_frozen_matrix_t  s    GGQFC "++a. 277Aq63#77"++a. 277Aq63#77UqQ1Dzztz,||qQ2D
 	T4 JJDJ)zz!}||AA!bIT4 --"//!!aBOWg&rG   c           	      <   d}d}t        j                  ||fd      }dt        j                  |      z  t        j                  ||fd      z   }dt        j                  |      z  t        j                  ||fd      z   }d}d}t        ||||      }|j	                  |d	
      }	|j	                  |d
      }
t        j
                  |	t         j                  d d d d d d f   |
t         j                  d d d d d d f   fd      }t        |j                  d|||f       |j                  |      }|j                  }t        |d|f       t        d      D ]C  }t        |      D ]3  }t        j                  |||f   ||||      }t        ||||f   d       5 E y )Nrj   rN   r   r  r  r   r  r  rj  r   r  r   r   rM   r  )r>   r   re  r,   r   r  r   r   r@   r   r  r   )r[   r  r  r   r   r  r  r  r  r  r  r   r  logpdf_shaper  r  r  s                    rE   r  zTestMatrixT.test_array_input  s   GGXx(#."++h''"''8X2F*LL"++h''"''8X2F*LLqQ1DZZQTZ2ZZQTZ2NNBrzz1a23R

Aq!8K5LMTUVQWWq!Xx89}}Q'#))\Aq6*q 	LA1X L"*//adG!aB#  ad1CUK	L	LrG   vec1vec2c                     t         j                  j                  | |z
        dz  }t         j                  j                  |       dz  t         j                  j                  |      dz  z   }||z  S )NrM   )r>   r   r   )r  r  	numeratordenominators       rE   relative_errorzTestMatrixT.relative_error  sV    IINN4$;/14	iinnT*a/"))..2F!2KK;&&rG   mat_truemat_estreturnc                 |   t        | d      }t        |d      }t        j                  |j                        dk  s"t        j                  |j                        dk  rt        j                  S t        j
                  |j                  | z        }|j                  |j                  z
  }||z   t        |       z
  dz  S )NFr_   r   rM   )r   r>   r  r   r   tracer  r   )r  r  mat_true_psdmat_est_psd
trace_termlog_detratios         rE   matrix_divergencezTestMatrixT.matrix_divergence  s    HU;759FF;''(A-266,:O:O3PTU3U66MXXk..9:
"++l.C.CC\)CM9Q>>rG   a_matc                 p    | j                   dk(  sJ | j                  j                  | j                  f      S )z
        For an (m,n) array `a_mat` the output `vec(a_mat)` is an (m*n, 1)
        array formed by stacking the columns of `a_mat` in the order in
        which they occur in `a_mat`.
        rM   )r   r   r  r   )r  s    rE   veczTestMatrixT.vec  s-     zzQww

}--rG   c           
         d}d}d}t        j                  ||fd      }dt        j                  |      z  t        j                  ||fd      z   }dt        j                  |      z  t        j                  ||fd      z   }d}d}t        ||||	      }	|	j	                  |d
      }
| j                  ||
j                  d            }t        |d|       t        j                  ||      |dz
  z  }t        j                  t        j                  |
D cg c]  }| j                  |       c}      d      }| j                  ||      }t        |d|       yc c}w )a*  
        Gupta and Nagar (2000) Theorem 4.3.1 (p.135)
        --------------------------------------------
        The covariance of the vectorized matrix variate t-distribution equals
        $ (V \otimes U) / (\text{df} - 2)$, where $\otimes$
        denotes the usual Kronecker product.
        rh   rj   rN   r   r  r  rF  r   r  *   r   r   r   r  rM   F)rowvarN)r>   r   re  r,   r   r  r   rF   r  r   r   r  r  )r[   r  r  r  r   r   r  r  r  r  r   relerrcov_vec_truera   cov_vec_rvskls                   rE   r  zTestMatrixT.test_moments  s3    GGXx(#."++h''"''8X2F*LL"++h''"''8X2F*LLqQ1DJJABJ/$$QA7VQT*wwq!}Q/ffRXXA&>qtxx{&>?N##L+>R& '?s   Ec                    d}t        j                  g dg dg      }t        j                  ddgddgg      }t        j                  g dg dg dg      }d	}t        j                  g d
g dgg dg dgg dg dgg dg dgg dg dgg dg dgg dg dgg dg dgg dg dgg dg dgg
      }t        j                  g d      }t        j                  |||||      }t	        |||        y!)"u  
        Test values generated from Julia.

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

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

        mu={{1,2,3},{4,5,6}};
        sigma={{1,0.5},{0.5,1}};
        omega={{1,0.3,0.2},{0.3,1,0.4},{0.2,0.4,1}};
        df=5;
        sampleSize=10;
        SeedRandom[42];
        dist=MatrixTDistribution[mu,sigma,omega,df];
        samples=SetPrecision[RandomVariate[dist,sampleSize],15];
        pdfs=SetPrecision[PDF[dist,#]&/@samples,15];
        rh   rQ   r  r   r  r  r  r  r  )gz?gr	_@gJ@)g]r@gyE3@g@)g(NJ2?g!A5@gNfA@@)go]M@gn}@gP@)gm?gT, @gG6}@@)gs>U@g๭@gO@)gK1?gR]i;@gr=u@)g^~@g:Y@g#b4@)g @?g{/	@g3Oң@)gCʶ@gR'A@gX^]@)g`Zj?gn-@g @)g`De@g̷@g^|s9@)gM_n* @gq5)D?g0@)g}[K@g^Nfi@g1X@)g6h&?g!,,@gMWx@)gBeuy@g5q@g<@)gx,(.?gԯؠGn @g	<@)gPud@g\@g"m@)gsV?g%egS?gOąqF
@)gkW0@g)HP@gT4@)
g*?gVwxs?g@^`!?gxM?g|Cد?gK(jϛ?g=zh?g,Nv?gU=	Dh?gioq!ƾ?r  r  Nr  )	r[   r  r   r   r  r  	samples_mpdfs_mr  s	            rE   test_pdf_against_mathematicaz(TestMatrixT.test_pdf_against_mathematicah  s,     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 
 ,,yqQ1QSTd3rG   c                    d}d}d}t        j                  ||fd      }dt        j                  |      z  t        j                  ||fd      z   }dt        j                  |      z  t        j                  ||fd      z   }d}d}t        ||||	      }	|	j	                  |d
      }
|
j                  d      }t        |j                  |||	      }|j	                  |d
      }|j                  d      }t        |||       t        |j                  ||       t        ||j                  |       t        |j                  ||       y )Nrh   rj   rN   r   r  r  rF  皙?r  r  r   r   r  )r>   r   re  r,   r   r   r   r   )r[   r  r  r  r   r   r  r  r  r  r   r2  frozenTXTmTs                  rE   r  zTestMatrixT.test_samples  s"   GGXx(#."++h''"''8X2F*LL"++h''"''8X2F*LL
 qQ1DJJABJ/FF1IaBG[[ab[1WWQZ 	14(Rd+244d+Rd+rG   
shape_caserowcolc                    d}d}|dk(  r*d}d}d}t        j                  g dg dg dg      }||z  }n)d}d}t        j                  g dg dg dg      }d}||z  }t        j                  ||fd	      }	t        |	|||
      }
t	        |	j                         ||      }|
j                  dd      }|
j                  |      }|j                  |j                               }t        |||       y)a8  
        Gupta and Nagar (2000) p.133f
        When the number of rows or the number of columns equals 1 the
        matrix t reduces to the multivariate t. But, the matrix t
        is parameterized by raw 2nd moments whereas the multivariate t is
        parameterized by a covariance (raw 2nd central moment normalized by df).
        We can see the difference by comparing the author's notation
            $t_p(n, \omega, \mathbf{\mu}, \Sigma)$
        for a matrix t with a single column
        to the formula (4.1.2) for the PDF of the multivariate t.
        ư>rh   r  r   rN   r  r  r  r   r  r  r@   r  r  r   r  N)	r>   r   r   r,   r$   r   r   r   r   )r[   r
  r  r  r  r  r  r  r@   r   t_matt_mvtr   t_mat_logpdft_mvt_logpdfs                  rE   test_against_multivariate_tz'TestMatrixT.test_against_multivariate_t  s     HHJ=-"OPJOEHH=-"OPJJOEGGXx(#.zjR
 199;eCII12I.||A||AIIK0l>rG   N)r   r   r   r  r  r  rR   r   r   r  r  r  staticmethodr>   rJ  r  rK  r  r  r  r   r  r  r  r   rG   rE   r  r    s,   \>|&JP
6 [[S%1+.[[S%1+.' / /'2L4 'RZZ 'rzz ' '
 ?BJJ ? ? ? ? .2:: ."** . .':_4BU4n,B [[\E5>:&? ;&?rG   r  c                   ~    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestDirichletc           	         t         j                  j                  d      }|j                  dd      }|j	                  dd|      }t        |      }t        |j                         t        j                  |             t        |j                         t        j                  |             t        |j                         t        j                  |             d}t        |      D ]  }|j	                  dd|      }|t        j                  |      z  }t        |j                  |d d       t        j                  |d d |             t        |j                  |d d       t        j                  |d d |              y Nr  r       &.>r  r  rl   )r>   r   r   integersr   r   r   varr   r   r  r   r   r   r[   r   r   r  r*  	num_testsr  ra   s           rE   test_frozen_dirichletz#TestDirichlet.test_frozen_dirichlet  s"   ii##D)LLBFC+eQUUWimmE23QVVXy~~e45QYY[)"3"3E":;	y! 	LAFC+ANAq"v	afe(DE!CR&)9+;+;AcrFE+JK		LrG   c                 N   t         j                  j                  d      }t        j                  g d      }|j	                  |d      }t        |j                  d       t        t        t        j                  ||       t        t        t        j                  ||       t	        j                  |j                  |       t	        j                  |j                  d d |       t	        j                  |j                  |       t	        j                  |j                  d d |       y )Nr  r   r        @rk   r   )rk   rN   rl   )r>   r   r   r   r   r   r@   rf  rS   r   r   r   r[   r   r  ra   s       rE   "test_numpy_rvs_shape_compatibilityz0TestDirichlet.test_numpy_rvs_shape_compatibility  s    ii##D))MM%aM(QWWf%j)--E:j)"2"2Au=acc5!acc#2h&e$Sb5)rG   c                 ,   t         j                  j                  d      }g d}|j                  t        j                  d|      d      j
                  }t        t        t        j                  ||       t        t        t        j                  ||       y )Nr  )r   r   r#  r  rk   r   
r>   r   r   r   maximumr   rf  rS   r   r   r$  s       rE   test_alpha_with_zerosz#TestDirichlet.test_alpha_with_zeros*  sd    ii##D)MM"**T51M:<<j)--E:j)"2"2Au=rG   c                 ,   t         j                  j                  d      }g d}|j                  t        j                  d|      d      j
                  }t        t        t        j                  ||       t        t        t        j                  ||       y )Nr  )r   g       r#  r  rk   r   r'  r$  s       rE    test_alpha_with_negative_entriesz.TestDirichlet.test_alpha_with_negative_entries2  sd    ii##D) MM"**T51M:<<j)--E:j)"2"2Au=rG   c                    t        j                  g d      }t        j                  g d      }t        j                  ||       t        j                  ||       t        j                  g d      }t        t        j                  ||      d       t        t        j                  ||      t        j                  d             y )Nr   r  r#        @r   r   r   r  )r   r   r   r   ri   )r>   r   r   r   r   r   rq  r[   r  ra   s      rE   test_data_with_zerosz"TestDirichlet.test_data_with_zeros:  s    -.HH)*aE"-.IMM!U3Q7I,,Q6q	BrG   c                     t        j                  g d      }t        j                  g d      }t        t        t        j
                  ||       t        t        t        j                  ||       y )N)r   r  r#  r.  r/  r>   r   rf  rS   r   r   r   r0  s      rE   $test_data_with_zeros_and_small_alphaz2TestDirichlet.test_data_with_zeros_and_small_alphaC  F    -.HH)*j)--E:j)"2"2Au=rG   c                     t        j                  g d      }t        j                  g d      }t        t        t        j
                  ||       t        t        t        j                  ||       y )Nr-  )r   r\  r   r  r3  r0  s      rE   test_data_with_negative_entriesz-TestDirichlet.test_data_with_negative_entriesI  sF    -.HH*+j)--E:j)"2"2Au=rG   c                     t        j                  g d      }t        j                  g d      }t        t        t        j
                  ||       t        t        t        j                  ||       y )Nr-  )r   r]  r   r  r3  r0  s      rE    test_data_with_too_large_entriesz.TestDirichlet.test_data_with_too_large_entriesO  r5  rG   c                     t        j                  g d      }t        j                  dd      }t        t        t
        j                  ||       t        t        t
        j                  ||       y )Nr"  )rM   rk   rk   g$I$I?r>   r   r   rf  rS   r   r   r   r0  s      rE   test_data_too_deep_cz"TestDirichlet.test_data_too_deep_cU  sF    )GGIv&j)--E:j)"2"2Au=rG   c                     t        j                  ddgddgg      }t        j                  dd      }t        t        t
        j                  ||       t        t        t
        j                  ||       y )Nr   r  r#  r.  )rM   rM   rk         ?r;  r0  s      rE   test_alpha_too_deepz!TestDirichlet.test_alpha_too_deep[  sS    3*sCj12GGIu%j)--E:j)"2"2Au=rG   c                     t        j                  g d      }t        j                  dd      }t        j                  ||       t        j
                  ||       y )Nr"  rN   rk   UUUUUU?)r>   r   r   r   r   r   r0  s      rE   test_alpha_correct_depthz&TestDirichlet.test_alpha_correct_deptha  s>    )GGFE"aE"rG   c                     t        j                  g d      }t        j                  dd      }t        t        t
        j                  ||       t        t        t
        j                  ||       y )Nr"  rA  r  r;  r0  s      rE   test_non_simplex_dataz#TestDirichlet.test_non_simplex_datag  sF    )GGFE"j)--E:j)"2"2Au=rG   c                     t        j                  g d      }t        j                  dd      }t        t        t
        j                  ||       t        t        t
        j                  ||       y )Nr-  )rM   rk   r  r;  r0  s      rE   test_data_vector_too_shortz(TestDirichlet.test_data_vector_too_shortm  G    -.GGFE"j)--E:j)"2"2Au=rG   c                     t        j                  g d      }t        j                  dd      }t        t        t
        j                  ||       t        t        t
        j                  ||       y )Nr-  )rh   rk   r   r;  r0  s      rE   test_data_vector_too_longz'TestDirichlet.test_data_vector_too_longs  rH  rG   c                 
   t        j                  g d      }t        |      }g d}g d}g dg dg dg}t        |j	                         |       t        |j                         |       t        |j                         |       y )N)r   皙?r   r  r  r   )UUUUUU?{Gz?Q?)rN  )rQ  rO  O贁N)rR  rS  rP  )r>   r   r   r   r   r  r   )r[   r  r*  expected_meanexpected_varexpected_covs         rE   test_mean_var_covzTestDirichlet.test_mean_var_covy  sh     (e'-../
 	"!&&(M:!!%%'<8!!%%'<8rG   c                 n   t        j                  dg      }t        |      }t        |j	                         j
                  d       t        |j                         j
                  d       t        |j                  dg      j
                  d       t        |j                  dg      j
                  d       y )Nr   r   r   )	r>   r   r   r   r   r   r  r   r   )r[   r  r*  s      rE   rn  z TestDirichlet.test_scalar_values  sy    #e 	QVVX]]A&QUUW\\1%QUUB4[%%q)QXXrd^((!,rG   c                 v   t         j                  j                  d      }|j                  dd      }|j	                  dd|      }t        |      }d}t        |      D ]Z  }|j	                  dd|      }|t        j                  |      z  }t        |j                  |d d       |j                  |             \ y r  )
r>   r   r   r  r   r   r  r   r   r   r  s           rE    test_K_and_K_minus_1_calls_equalz.TestDirichlet.test_K_and_K_minus_1_calls_equal  s    ii##D)LLBFC+e	y! 	9AFC+ANAafquuQx8	9rG   c                 4   t         j                  j                  d      }|j                  dd      }|j	                  dd|      }t        |      }d}d}d }t        |      D ]  }t        |      D ]I  }	|j	                  dd|      }
|
t        j                  |
      z  }
|t        j                  ||
f      }H|
}K |j                  |j                        }d }|D ].  }|j                  |      }|t        j                  ||      }-|}0 t        ||        y )Nr  r   r  r  r  r  rh   )r>   r   r   r  r   r   r  r   vstackr   r   appendr   )r[   r   r   r  r*  r  num_multiplexmr  r2  ra   rmrsxsr  s                  rE   test_multiple_entry_callsz'TestDirichlet.test_multiple_entry_calls  s   ii##D)LLBFC+e	y! 	.A<( KKQ/RVVAY>B7+BB rttBB EE"I>2q)BB &b"-!	.rG   c                    t         j                  j                  d      }|j                  ddd      }t	        |      }t        |d   |d         }d}t        |      D ]X  }|j                  ddd      }|t        j                  |      z  }t        |j                  |      |j                  |g             Z t        |j                         |j                         d          t        |j                         |j                         d          y )Nr  r  r  rM   r   r   r  )r>   r   r   r   r   r   r  r   r   r   r   r  )r[   r   r  r*  r#  r  r  ra   s           rE   test_2D_dirichlet_is_betaz'TestDirichlet.test_2D_dirichlet_is_beta  s    ii##D)FC+eq58$	y! 	6AFC+ANAa!%%*5	6
 	AFFHaffhqk2AEEGQUUWQZ0rG   N)r   r   r   r   r%  r)  r+  r1  r4  r7  r9  r<  r?  rC  rE  rG  rJ  rW  rn  rZ  rc  re  r   rG   rE   r  r  
  sc    L$
*>>C>>>>>#>>>9$	-9.:1rG   r  c                     t        j                  ddg      } t        j                  dgg      }t        t        t        | |       	 t	        | |       y # t        $ r-}d}t        t        |      d t        |       |       Y d }~y d }~ww xY w)Nr   r   zDimension mismatch)r>   r   rf  rS   r   r   strr   )rg  r  r  r  s       rE   ,test_multivariate_normal_dimensions_mismatchrh    sw     
3*	BHHseWE*12u=
-B& -"SVISX&,,-s   A 	B	#BB	c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestWishartc                    t        j                  dd      }ddgt        j                  d      t         j                  d   t        j                  dd      g}|D ]N  }t        d|      }t	        |j
                  |       t	        |j
                  j                  |j                         P t        j                  ddgddgg      }ddgt         j                  d   t        j                  ddgddgg      g}|D ]N  }t        d|      }t	        |j
                  |       t	        |j
                  j                  |j                         P t        t        t        dt        j                  d             t        dt        j                  d             t        j                  dd      }t        t        t        d|       y )Nr   rM   ndminr   r  r]  rN   )
r>   r   r_r   r   r  r@   rf  rS   rV   )r[   
true_scalescalesr  ws        rE   test_scale_dimensionsz!TestWishart.test_scale_dimensions  st    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           
      \   ddgt        j                  d      t         j                  d   t        j                  dd      t        j                  dgd      g}t        dd      }|j	                  t        j                  dd            }|D ]  }t        |j	                  |      |        g dt         j                  d   t        j                  g dd      g}t        dd      }|j	                  t        j                  g dd            }|D ]  }t        |j	                  |      |        dddgt        j                  d      t         j                  d   t        j                  ddgddgg      t        j                  ddgddgg      d d d d t         j                  f   g}t        dt        j                  d            }|j	                  t        j                  ddgddgg      d d d d t         j                  f         }|D ]  }t        |j	                  |      |        y )Nr   rM   rl  rN   rQ   r  r   )r>   r   rn  r   r   r   r   rV   )r[   r   rq  densityra   s        rE   test_quantile_dimensionsz$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           	         d}t        j                  t        j                  |      dz         }t        j                  ||dz
  z  dz        |t        j                  |d      <   t        j                  |j
                  |      }g }t        d      D ]  }t        j                  t        j                  |      |dz   dz  z         }t        j                  ||dz
  z  dz        |t        j                  |d      <   t        j                  |j
                  |      }|j                  |        t        j                  |      j
                  }ddt        j                  ddd      fd||fg}|D ]  \  }}}t        ||      }t        |j                         t        j                  ||             t        |j                         t        j                  ||             t        |j                         t        j                  ||             t        |j                         t        j                  ||             t        |j!                  |      t        j                   |||              y 	Nrj   r   rM   rl   r  rh   r  r   )r>   ru   rd  tril_indicesr  r   r  r]  r   rA  r   r   r  r   moder   r   )	r[   r   r  r   r  ra   
parametersr  rq  s	            rE   r  zTestWishart.test_frozenB	  s    		#q(),.IIcSUmq6H,IboocR()uww& q 	A		#!ax/0A,.IIcSUmq6H,IAboocR()qssAAHHQK		
 HHQKMM BKKR+,N


 ) 	>NRE"A'++b%"897<<E#:;7<<E#:;goob%&@Aq7;;q"e#<=	>rG   c                 Z   d}d}t        j                  |      }d|d<   d|d<   t        ||      }t         j                  j	                  d      }t        j
                  |||      }t         j                  j	                  d      }|j                  |      }t         j                  j	                  d      }|j                  d      }t         j                  |j                  |      |j                  |d	z
        |j                  |d
z
        f   dz  }	t        j                  |	      }
||
t        j                  |d      <   t         j                  j                  |      }|j                  |
      }t        j                  ||j                        }t        ||       t        ||       y )NrN   r  r  rb  r  i r   r   r   rM   rl   rx  )r>   rV   r   r   r  r   r   rn  	chisquareru   ry  r   r   r  r   r   )r[   r   r  r  rq  r   w_rvsfrozen_w_rvscovariances	variancesr{   DDAmanual_w_rvss                 rE   test_wishart_2D_rvszTestWishart.test_wishart_2D_rvsb	  sh    sc
c
 B ii##F+BC8ii##F+uu#u. ii##F+jjaj(EEMM"MM"Q$MM"Q$!
 		 GGI(3"//#
$% IIu%UU1Xvvb"$$' 	|,l3rG   c                    t         j                  j                  d      }d}d}t        j                  |      }t        j                  dddt
              }t        j                  ddd      }|D ]  }t        ||      }t        |      }	t        |j                         |	j                                t        |j                         |	j                                t        |j                         |	j                                t        |j                  |      |	j                  |             |j                  ||	      }
|f}d
}t        d|||
        y )N^   r   r  rM   r   r   numr   r  r   )r>   r   r   rV   rd  rK  rA  r   r   r   r  r   r   r   r   r   )r[   r   snr   r  df_ranger   r  rq  cr   rC   r  s                rE   test_1D_is_chisquaredz!TestWishart.test_1D_is_chisquared	  s   
 ii##F+s99QAU3KKB2& 	=BE"ARA AEEGQUUW-AFFHaffh/AIIK5 AEE!HaeeAh/ %%Rc%2C5DE"64<!	=rG   c                    t         j                  j                  d      }d}d}d}t        j                  t        j                  d      dz         }t        j                  d      |t        j
                  dd      <   t        j                  |j                  |      }t        j                  |df      }|j                  j                  |      j                  |      j                         }t        ||      }t        ||	      }	t        |j                         |	j                                t        |j                         |	j                                t        |j                         |	j                                t        j                   d
dd      }
t        |j#                  |
      |	j#                  |
             |j%                  ||      }|d|f}d}t'        d|||       y )Nr  r  r  rj   r   ri   rl   rx  r  r   r  r   r   r  r   )r>   r   r   ru   rd  ry  r  r   rU   r   r   r   r   r  r   r   rA  r   r   r   )r[   r   r  r  r   r  lamdasigma_lamdarq  r  r   r   rC   r  s                 rE   test_is_scaled_chisquaredz%TestWishart.test_is_scaled_chisquared	  sg   
 ii##F+		!Q'*,))A,booa2&'uww&Q ggkk%(,,U3;;=B$;' 	)!&&(+		QYY[1 KKB2&a!%%(+ ee#e.1[!vtUC8rG   N)	r   r   r   rr  ru  r  r  r  r  r   rG   rE   rj  rj    s$    )5V/,b>@*4X=>!9rG   rj  c                      e Zd Zd Zd Zd Zej                  j                  dddg      d        Z	d Z
d	 Zej                  j                  ddd
g      d        Zd Zej                  j                  dddg      d        Zd Zej                  j                  ddd
g      d        Zd Zd Zd Zej                  j                  dej*                  ej,                  g      d        Zy)TestMultinomialc                 b   t        j                  ddd      }t        |dd       t        j                  ddgd	d
dg      }|t        j                   k(  sJ t        j                  d	d	gd	d
dg      }|d	k(  sJ t        j                  ddgd	ddg      }t        |t        j
                  d       y )NrN   rj   rk   r   r  g&Mtyrm  r  rN   rj   r   r   r  ro   )r   logpmfr   r>   r   r  )r[   vals1vals2vals3vals4s        rE   test_logpmfzTestMultinomial.test_logpmf	  s    ""5!Z81=""Aq61r2h7""Aq61r2h7zz""Aq61r1g6rvvD1rG   c                     t        j                  ddd      }t        j                  ddd      }t        ||d       t        j                  dd	d
      }t        j                  dd	d      }t        ||d       y )Nr  rk   r  rN   r   rm  r  )ri         r   r  ri   r   )r   r  r"   r   pmfr[   val1val2s      rE   test_reduces_binomialz%TestMultinomial.test_reduces_binomial	  sf     !!&!Z8||Aq#&d.vr:6yyB$d.rG   c                     dg d}}ddddddd	dd
dd
}|D ](  }t        t        j                  |||      ||   d       * y )NrN   )g      ?r>  g      ?g     @?g     ?g      ?g      `?g     ?g      ?g      ?g      ?g      ?)
)r   r   rN   )r   r   rM   )rM   r   r   )rN   r   r   rc  r  rM   r   r   )r   rM   r   r  )r   rN   r   +=r  )r   r   r  )r[   r   rS  r_valsra   s        rE   test_RzTestMultinomial.test_R	  s_     $1([([([([([	B
  	MAKOOAq!4fQieL	MrG   r   r   rN   c                 H   d}t        j                  t        |      5  t        j                  j                  d      }t        j                  |dgdz  dd      }|j                  |dgdz  d      }t        ||       d d d        t        j                  t        |      5  t        j                  j                  d      }t        j                  |dgd	z  dd      }|j                  |dgd	z  d      }t        ||       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)
Nz,Some rows of `p` do not sum to 1.0 within...rK   r0  r>  rN   rk   r   r   rh   )	rR   warnsFutureWarningr>   r   r  r   r   r   )r[   r   r\   rndmsc_rvsnp_rvss         rE   test_rvs_npzTestMultinomial.test_rvs_np	  s    A\\-w7 	)99((-D __QqqsKF%%a$%:F(		)
 \\-w7 	)99((-D __QqqsKF%%a$%:F(		) 	)	) 	)
	) 	)s   A!D"A!DDD!c                    t        j                  ddd      }t        |dd       t        j                  ddd	      }t        |d
d       t        j                  ddgddggddgddgggdd      }t        |ddgddggd       t        j                  dt        j
                        }t        j                  |dd	      }t        |t        j                  g t        j
                               t        j                  ddgdd	      }t        |dd       t        j                  g ddg d      }t        |dd       t        j                  g ddg d      }|dk(  sJ t        j                  g ddg d      }|dk(  sJ y )N)rh   rh   r   r   rm  r  r  rk   r  g5
?rN   r   r  rl   	   r  g*7?g<Wƌ?r   rM   r   rj   rM   rN   rN   r   ri   )gUUUUUU?rB  r   gߦ?rm   r  )r   r  r   r>   r   float64r   )	r[   vals0r  r  ra   r  r  vals5vals6s	            rE   test_pmfz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                    t        j                  ddgdddgddgg      }t        |dd	gd
       t        j                  ddgddgddg      }t        |ddgd
       t        j                  ddgddgggdddg      }t        |ddggd
       t        j                  ddgdgdgggddg      }t        |dgdgggd
       t        j                  ddgddggdggggddg      }t        |ddggggd
       y )Nr   rM   rN   r   r  r   rL  gv?g~jt?rm  r  rj   r   )r   r  r   )r[   r  r  r  r  r  s         rE   test_pmf_broadcastingz%TestMultinomial.test_pmf_broadcasting$
  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   rh   c                     t        j                  |d      }|dz  dz  | dz  dz  | dz  dz  g| dz  dz  |dz  dz  | dz  dz  g| dz  dz  | dz  dz  |dz  dz  gg}t        ||d       y )	N)r   r   r  r   rL  r   r  r  rm  r  r   r   r   )r[   r   cov1r  s       rE   test_covzTestMultinomial.test_cov4
  s    q,/2b1"R%(QBrE"H-Br1R47QBrE"H-BrA2b58QrT"W-/ 	d.rG   c                 `   t        j                  dddgddgg      }ddgddggddgddggg}t        ||d	
       t        j                  ddgddg      }ddgddggddgddggg}t        ||d	
       t        j                  ddgddgddgg      }ddgddggddgddggg}t        ||d	
       y )Nrh   r   r  r   rL  g?gܿgrm  r  rj   g
ףp=
?g
ףp=
׿r   r  r  r  gzG?gzGr  g333333r  r[   r  r  cov3cov4cov5cov6s          rE   test_cov_broadcastingz%TestMultinomial.test_cov_broadcasting<
  s    qB8b"X"67tdC[)RIRy+ABd.1vBx0ttSk*c4[4+,FGd.1vR2r(';<8$x&9:8$x&9:<d.rG   rM   c                 x    t        j                  |ddg      }t        |t        j                  |d      d       y Nr   rL  rm  r  r   r   r   r"   )r[   r   ent0s      rE   r  zTestMultinomial.test_entropyJ
  s1     ""1r2h/emmAr2>rG   c           	      \   t        j                  ddgddg      }t        |t        j                  dd      t        j                  dd      gd       t        j                  ddgd	d
gddgg      }t        |t        j                  dd	      t        j                  dd      gd       t        j                  dgdggd	d
gddgg      }t        |t        j                  dd	      t        j                  dd      gt        j                  dd	      t        j                  dd      ggd       y )NrM   rN   r   rL  rm  r  rk   r  r   r  r  r  r  )r[   r  ent1ent2s       rE   test_entropy_broadcastingz)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                 `    t        j                  |ddg      }t        ||dz  |dz  gd       y r  r   r   r   )r[   r   mean1s      rE   	test_meanzTestMultinomial.test_mean`
  s0      RH-"ad|$7rG   c                 `    t        j                  ddgddg      }t        |ddgddggd	
       y )Nrh   ri   r   rL  r   r.  g433333?g433333@rm  r  r  )r[   r  s     rE   test_mean_broadcastingz&TestMultinomial.test_mean_broadcastinge
  s5      !Q"b2ttTl;$GrG   c                    d}d}g dg dg dg dg dg}t        j                  |t         j                        }t        ||      }t	        |j                  |      t        j
                  |||             t	        |j                  |      t        j                  |||             t	        |j                         t        j                  ||             y )	Nr7  )r   r   r   r  r   r   r   r7  r   r   r   rB  r   r   r   r  r   r   r   r  r   r   rM   r  r   )r>   r?   r  r   r   r  r  r   )r[   r   pvalsra   	mn_frozens        rE   r  zTestMultinomial.test_frozeni
  s     
:i	BJJq

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


""4E":rG   N)r   r   r   r  r  r  rR   r   r   r  r  r  r  r  r  r  r  r  r  r  r>   float32r  r  r   rG   rE   r  r  	  s   2	/M" [[S1a&)) *)6;  [[S1a&)/ *// [[S1a&)? *?# [[S1a&)8 *8H	L# [[Wrzz2::&>?; @;rG   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestInvwishartc           	      |   d}t        j                  t        j                  |      dz         }t        j                  ||dz
  z  dz        |t        j                  |d      <   t        j                  |j
                  |      }g }t        d      D ]  }t        j                  t        j                  |      |dz   dz  z         }t        j                  ||dz
  z  dz        |t        j                  |d      <   t        j                  |j
                  |      }|j                  |        t        j                  |      j
                  }ddt        j                  ddd      fd||fg}|D ]  \  }}}t        ||      }t        |j                         t        j                  ||             t        |j                         t        j                  ||             t        |j                         t        j                  ||             t        |j!                  |      t        j                   |||              y rw  )r>   ru   rd  ry  r  r   r  r]  r   rA  r   r   r  r   rz  r   r   )	r[   r   r  r   r  ra   r{  r  iws	            rE   r  zTestInvwishart.test_frozen
  s   
 		#q(),.IIc3q5k!m,DboocR()uww& q 	A		#!ax/0A,.IIc3q5k!m,DAboocR()qssAAHHQK		
 HHQKMM BKKR+,N


 ) 	ENRB&B:>>"e#<=JOOB$>?JOOB$>?BFF1Iz~~aU'CD	ErG   c                    t         j                  j                  d      }d}d}t        j                  |      }t        j                  dddt
              }t        j                  dd	d	
      }|D ]  }t        ||      }t        |dz  d      }	t        |j                         |	j                                t        |j                         |	j                                t        |j                  |      |	j                  |             |j                  ||      }
|dz  ddf}d}t        d|||
       t        |j                         |	j                                 y )Nr  r  r   rh      rM   r   r   r  r  r  r  r   r   r  r   )r>   r   r  rV   rd  rK  rA  r   r   r   r  r   r   r   r   r   )r[   r   r  r   r  r  r   r  r  igr   rC   r  s                rE   test_1D_is_invgammaz"TestInvwishart.test_1D_is_invgamma
  s   
 ii##F+s99QAU3KKB2& 	8BB&B"Q$d+B BFFHbffh/BGGIrwwy1 BFF1Irvvay1 &&bs&3CqD!T?DE":tUC@ BJJL"**,7%	8rG   c                    d}d}t        j                  |      }d|d<   d|d<   t        ||      }t         j                  j	                  d      }t        j
                  |||      }t         j                  j	                  d      }|j                  |      }t         j                  j	                  d      }|j                  d      }t         j                  |j                  |d	z
        |j                  |d
z
        |j                  |      f   dz  }	t        j                  |	      }
||
t        j                  |d      <   t         j                  j                  |      }t         j                  j                  |
j                  |j                        j                  }t        j                  ||j                        }t!        ||       t!        ||       y )NrN   r  r  rb  r  iHG	 r   r   rM   r   rl   rx  )r>   rV   r   r   r  r   r   rn  r}  ru   ry  r   r   solver   r  r   )r[   r   r  r  r  r   iw_rvsfrozen_iw_rvsr  r  r{   r  Lmanual_iw_rvss                 rE   test_invwishart_2D_rvsz%TestInvwishart.test_invwishart_2D_rvs
  s|    sc
c
 E" ii##F+E<ii##F+C0 ii##F+jjaj(EEMM"Q$MM"Q$MM"
 		 GGI(3"//#
$% IIu%IIOOACC%''q!## 	.}5rG   c                 h   d}d}dD ](  }t        j                  t        j                  |      dz         }t        j                  ||dz
  z  dz        |t        j                  |d      <   t        j                  |j
                  |      }t        ||      }|j                         }|j                         }||z  dz  }|j                  |d	
      }	|	j                  d      }
||dz   z  dz  }d|z  }t        j                  d|dz  z
        }t        j                  |
|z
  |z  d|      r)J  y)z1Test that sample mean consistent with known mean.r   N  r   rh   r   rM   rl   rx  r  rj  r   r   r   r  r  N)r>   ru   rd  ry  r  r   r   r   r  r   r   ppfr  )r[   r  sample_sizer   r  r   	Xmean_expXvar_exp	Xmean_stdr   	Xmean_estntests	fail_ratemax_diffs                 rE   test_sample_meanzTestInvwishart.test_sample_mean
  s$     	CGGBIIcNQ./E02		#q/A:M0NE"//#,-FF577E*Eb%(D		IxxzH!K/#5Ik=AAI#']A%FvIxxIM 12H;;Y&)3  !	rG   c                 l   t        j                  g dg dg dg dg      }t        j                  g dg dg dg dg      }d	}t        j                  |||      }|j                  d
   }t         j
                  j                  |      \  }}t         j
                  j                  |      \  }}t         j
                  j                  ||      }	|dz  |z  ||z  dz  t        j                  d      z  z
  t        |dz  |      z
  ||z   dz   dz  |z  z
  d|	j                         z  z
  }
t        ||
       y)zRegression test for gh-8844.)rM   r   r   r  )r   rM   r  r  )r   r  rN   r   )r  r  r   rM   )r  rk   rN   r   )rk   r  rh   r   )rN   rh   r  rM   )r   r   rM   r  ri   r   rM   r   r  N)r>   r   r   r   r@   r   r  r  rq  r8   r  r   )r[   r   PsinuprobrS  siglogdetX	logdetPsir   r  s              rE   test_logpdf_4x4zTestInvwishart.test_logpdf_4x4  s%   HHn&$&( ) hh$$$& '   B,GGAJyy((+W**3/YIIOOAs#T9$!tAvrvvay()"2a4+, Avz1nW,- !'')m	$
 	h'rG   N)r   r   r   r  r  r  r  r  r   rG   rE   r  r  
  s    E@8B,6\6(rG   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestSpecialOrthoGroupc                     t        j                  dt        j                  j	                  d            }t        j
                  g dg dg dg      }t        ||       y )NrN     r   )gDbgMPFh?g,׿)g7?g++?guC))g?gg]Qg^ɿ)r   r   r>   r   r   r   r   )r[   ra   r  s      rE   test_reproducibilityz*TestSpecialOrthoGroup.test_reproducibility2  sM    ##ABII4I4I#4NO88CBCE F 	"!X.rG   c                     t        t        t        j                  d        t        t        t        j                  d       t        t        t        j                  d       t        t        t        j                  d       y Nr  rl   rl  )rf  rS   r   r   r[   s    rE   test_invalid_dimz&TestSpecialOrthoGroup.test_invalid_dim9  sN    j"5"9"94@j"5"9"96Bj"5"9"92>j"5"9"93?rG   c                     d}t        |      }|j                  d      }t        j                  |d      }t        ||       y )Nrk   rj  r   )r   r   r   )r[   r   r  r  r  s        rE   test_frozen_matrixz(TestSpecialOrthoGroup.test_frozen_matrix?  s=    $S)zztz,"&&s>T4 rG   c                    t        dd      D cg c]'  }t        d      D ]  }t        j                  |       ) }}}|D cg c]!  }t        j                  j                  |      # }}t        |dgdz  d       |D ]L  }t        t        j                  ||j                        t        j                  |j                  d                N y c c}}w c c}w )	NrM   r7  rN   r      vIh%<=r  r   )r  r   r   r>   r   r  r   r   r  r   rV   r@   )r[   r   r  rb  ra   detss         rE   test_det_and_orthoz(TestSpecialOrthoGroup.test_det_and_orthoH  s    q!Qx! "%%c* !* ! !
 +--Q		a --rd2gE2  	:A%bffQn&(ffQWWQZ&8:	:!
 .s   ,C&Cc                    d}d}d}t        j                  ||t        j                  j	                  d            }d}|D ci c]'  \  }}||ft        |D cg c]
  }||   |    c}      ) }	}}}|D 
cg c]  }
|D ]  }|
|kD  s	|
|f  }}
}|D cg c]  \  }}t        |	|   |	|         d    }}}t        |gt        |      z  |       y c c}w c c}}}w c c}}
w c c}}w )Nrh   r  r  i  r   r  r  )r   rj   r#  r   )	r   r   r>   r   r   sortedr    r   r   )r[   r   rn  ks_probrb  elserecra   proje0e1pairsp0p1ks_testss                   rE   	test_haarzTestSpecialOrthoGroup.test_haarV  s      $$gBII,A,A#,F
 +HKLLfb"R&R!8!B%)!899LL$'Ab#ABb"bAAADIJRHT"XtBx03JJ7)CJ.9 "9LAJs*   CC'	C9C!	C!C'Cc                 J    t        t        j                  dd      dd       y )Nr   r  r   r  r  )r   r   r   r  s    rE   test_one_by_onez%TestSpecialOrthoGroup.test_one_by_oner  s     	+//=quMrG   c                 Z    t        t        j                  dd      j                  d       y Nr   rj   r   )rj   r   r   r   r   r   r@   r  s    rE   test_zero_by_zeroz'TestSpecialOrthoGroup.test_zero_by_zerow       (,,QQ7==yIrG   N)
r   r   r   r  r  r  r  r.  r0  r4  r   rG   rE   r  r  1  s(    /@!::8N
JrG   r  c                       e Zd Zd Zd Zd Zd Zej                  j                  dg d      d        Z
d Zd	 Zd
 Zej                  j                  d        Zy)TestOrthoGroupc                 `   d}t         j                  j                  |      }t        j                  d|      }t        j                  d|      }t        t         j                  j                  |      d       t        j                  g dg dg dg      }t        ||       t        ||       y )Nr  rN   r   rl   )gm?gӠh"gEo?)g~7ݲC?g>Ŀg0J_ٿ)gݱ&ǿg 6qrg`X|[)
r>   r   r  r   r   r   r   r  r   r   )r[   r   r   ra   r   r  s         rE   r  z#TestOrthoGroup.test_reproducibility|  s    ii##D)OOAC0__QT2BIIMM!,b188<==? @ 	"!X.!"h/rG   c                     t        t        t        j                  d        t        t        t        j                  d       t        t        t        j                  d       t        t        t        j                  d       y r  )rf  rS   r   r   r  s    rE   r  zTestOrthoGroup.test_invalid_dim  sB    j+//48j+//6:j+//26j+//37rG   c                     d}t        |      }t        |d      }|j                  d      }t        j                  |d      }|j                  d      }t        ||       t        ||       y )Nrk   rj  r   r   r   r   )r   r   r   r[   r   r  frozen_seedr  r  rvs3s          rE   r  z!TestOrthoGroup.test_frozen_matrix  sa    S!!#D1zztz,s6A&T4 T4 rG   c                    t        dd      D cg c].  }t        d      D cg c]  }t        j                  |       c}0 }}}t        j                  |D cg c]/  }|D cg c]!  }t        j
                  j                  |      # c}1 c}}      }t        t        j                  |      t        j                  |j                        d       |D ]S  }|D ]L  }t        t        j                  ||j                        t        j                  |j                  d                N U y c c}w c c}}w c c}w c c}}w )NrM   r7  r  r  r  r   )r  r   r   r>   r   r   r  r   fabsrU   r@   r   r  r   rV   )r[   r   r  rb  xxra   r  s          rE   r  z!TestOrthoGroup.test_det_and_ortho  s     q& b	# s# # & &
 xx"EBB7q"))--*7EFrwwtzz':G  	>B >)"&&ACC.*,&&*<>>	># &
 8Es-   D2D-D2	D=
#&D8	D=
-D28D=
r   )rM   rh   r  r  c                 z   t         j                  j                  d      }t        |      }|j	                  d|      }t
        j                  j                  |      }t        j                  |dkD        }t        |      }t        j                  ||      }|j                  d      \  }	}
|	dcxk  r|
k  sJ  J y )	Nl   <`Lr )r   r  r   r   ffffff?confidence_levelr  )r>   r   r   r   r   r   r   r  r   r   r0   	binomtestproportion_ci)r[   r   r   r   r   r  r  r   rA   r  r  s              rE   test_det_distribution_gh18272z,TestOrthoGroup.test_det_distribution_gh18272  s     ii##$78s#hhDsh3||$FF4!8Iooa#%%t%<	TS4rG   c                    d}d}d}t         j                  j                  d      }t        j                  |||      }d}|D 	ci c]'  \  }}||ft        |D 	cg c]
  }	|	|   |    c}	      ) }
}}}	|D cg c]  }|D ]  }||kD  s	||f  }}}|D cg c]  \  }}t        |
|   |
|         d    }}}t        |gt        |      z  |       y c c}	w c c}	}}w c c}}w c c}}w )Nrh   r  r  i  r   r!  r   )	r>   r   r  r   r   r"  r    r   r   )r[   r   rn  r#  r   rb  r$  r%  r&  ra   r'  r(  r)  r*  r+  r,  r-  s                    rE   r.  zTestOrthoGroup.test_haar  s     ii##C(__SwSA +HKLLfb"R&R!8!B%)!899LL$'Ab#ABb"bAAADIJRHT"XtBx03JJ7)CJ.9 "9LAJs*   CC)	C;C#C#C)Cc                 p   d}t        j                  |dt        j                  j	                  d            }t        t        j                  |      dd       t        j                  |dkD        }t        |      }t        j                  ||      }|j                  d	      \  }}|d
cxk  r|k  sJ  J y )Nr   r  r  r   r  r  r   rB  rC  r  )r   r   r>   r   r   r   rm  r   r   r0   rE  rF  )r[   r   rb  r  r   rA   r  r  s           rE   r0  zTestOrthoGroup.test_one_by_one  s    __St")):O:OPS:TUr
AE2FF26NGooa#%%t%<	TS4rG   c                 Z    t        t        j                  dd      j                  d       y r2  r3  r  s    rE   r4  z TestOrthoGroup.test_zero_by_zero  r5  rG   c                 D   t         j                  j                  d      dfd	}t        dd      D ]j  dfd	} ||      } |t        j
                  j                  j                        }t        j
                  j                  ||      \  }}t        d|       l y )	Nr  c                     t         j                  j                  j                  | | f            \  }}}t        j                  ||      S Nr   )r>   r   r   r   r  )r   r   r   _sr   r   s        rE   random_orthoz<TestOrthoGroup.test_pairwise_distances.<locals>.random_ortho  s:    yy}}SZZc3ZZ%@AHAr166!Q<rG   rM   ri   c                    t        j                  t        |      D cg c]-  }t        j                   |        |       z
  dz        / c}      }|t         j                  j                  | ||j                        z  }|S c c}w )N)r   r   rM   r   )r>   r   r  r   r   r   r@   )r   r  epsr   r0   r   r   s        rE   generate_test_statisticszHTestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statistics  s     #1X"  FFCCc:Cc:;=>? @"  **C45;;*GG"s   2B	r  r=   )r  r  )
r>   r   r  r  r   r0   r   r   r    r   )	r[   rO  rR  r  r  _DrS  r   r   s	          @@rE   test_pairwise_distancesz&TestOrthoGroup.test_pairwise_distances  s     ii##C(	  A; 	&C 0=H-ekk.E.E.I.IJFKK((6:EBc1%!	&rG   N)r   r   r   r  r  r  r  rR   r   r   rG  r.  r0  r4  r|  rT  r   rG   rE   r7  r7  {  si    08
!> [[UN3
  4
 :6	 J [[& &rG   r7  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestRandomCorrelationc                    t         j                  j                  d      }d}t        j                  ||      }t        j                  |d      }t        j
                  g dg dg dg dg      }t        ||       t        ||       y )Nr  r  rL  r  rk  r   )r   ѓ2ǿA?Ϳ)rY  r   4($?R}%?)rZ  r\  r   qTnƿ)r[  r]  r^  r   )r>   r   r  r   r   r   r   )r[   r   r  ra   r   r  s         rE   r  z*TestRandomCorrelation.test_reproducibility  sv    ii##C(!""4c:##Ds;88A@@AC D 	"!X.!"h/rG   c                    t        t        t        j                  d        t        t        t        j                  d       t        t        t        j                  d       t        t        t        j                  dg       t        t        t        j                  ddgddgg       t        t        t        j                  ddg       t        t        t        j                  g d       y )	Ntestrl  r   rM   rN   rj   g      )r   rM   r   )rf  rS   r   r   r  s    rE   test_invalid_eigsz'TestRandomCorrelation.test_invalid_eigs	  s    j"4"8"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                     d}t        |      }t        |d      }t        j                  |d      }|j                  d      }|j                         }t        ||       t        ||       y )NrX  r  r   r   )r   r   r   )r[   r  r  r<  r  r  r=  s          rE   r  z(TestRandomCorrelation.test_frozen_matrix  s_    !#D)(C8!%%d=zzsz+ T4 T4 rG   c           	      0   d }t         j                  j                  d      }t        dd      D cg c]  } |||j	                  |             }}|j                  g d       |D cg c]  }dgt        |      z   }}|D cg c]  }t        j                  ||       }}|D cg c]4  }t        j                  t         j                  j                  |            6 }	}|D cg c]  }t        j                  |       }
}t        |	|
d	d	
       |D cg c]  }t        j                  |       }}t        ||      D ]  \  }}t        ||d	        |D ]  }t        ||j                   d	        y c c}w c c}w c c}w c c}w c c}w c c}w )Nc                 $    | |z  t        |      z  S r=   )r   )r  r  s     rE   r   z3TestRandomCorrelation.test_definition.<locals>.norm&  s    Q3s1v:rG   r0  rM   ri   r   )rj   r   r   r   r   r   r  r  r  )r>   r   r  r  r   r]  r   r   r   r?  r   r  r,  r   ru   zipr   )r[   r   r   r  r  r  rU   rb  ra   r  
dets_knowndiagsr"  r#  s                 rE   test_definitionz%TestRandomCorrelation.test_definition  se   	 ii##C(6;AqkBQ+,BBI%)*SV**CGHa $$QS9HH 466a		a()66*./Qbggaj/
/ju5A &((((t$ 	.DAqAqu-	.  	0AAqss/	0) C +H 7/ )s#    E:*E?F*9F	)FFc           	         t        j                  ddgddggt              }t        j                  |      }t        |t        j                  ddgddgg             t        j                  d      5  t        j                  ddgddgg      }t        j                  ddgdt        j                  dd      ggt              }t        j                  |j                               }t        ||j                  j                  |      j                  |             t        j                  d	dgdd
ggt              }t        j                  |j                               }t        ||j                  j                  |      j                  |             d d d        t        j                  ddgddggt              }t        j                  |j                               }t        |d   d       t        j                  ddgddggt              }t        j                  |j                               }t        |d   d       y # 1 sw Y   xY w)Nr   r   r   r   ignore)overrl   gu <7~r  r]  rM   r  gMk   @)r>   r   rK  r   _to_corrr   errstate	nextaftercopyr   r  )r[   r2  r   m0s       rE   test_to_corrz"TestRandomCorrelation.test_to_corrB  s    HHsAhA'u5''*288aVaX$678
 [[h' 		31a&2q'*+AE1:2<<1+='>?uMB"++BGGI6AAqsswwr{q12C<%6eDB"++BGGI6AAqsswwr{q12		3 XX1v1v&e4''	2#" XX!}q!f-U;''	2#"'		3 		3s   2D II
N)r   r   r   r  ra  r  rh  rq  r   rG   rE   rV  rV    s    
0F
!"0H#rG   rV  c                   ,   e Zd Zej                  j                  dddg      ej                  j                  dg d      d               Zej                  j                  dg d      d        Zd	 Zej                  j                  dg d
      d        Z	y)TestUniformDirectionr   r   rN   r   Nr   rh   )rh   rj   c                    t         j                  j                  d      }t        ||      }|j	                  |      }t        j
                  |      t        j                  |      }}|j                  |||      j                  }|j                  |k(  sJ t         j                  j                  |d      }	t        |	d       y )N   Sid)_i4 r   r   rl   r   r   )r>   r   r   r(   r   r   rV   r   r@   r   r   r   )
r[   r   r   r   uniform_direction_distrn  r   r   expected_shapenormss
             rE   r  z!TestUniformDirection.test_samplesd  s     ii##$78!23S!A(,,T2HHSM266#;c00s0FLL}}...		wR0r"rG   )Nr   r  rl  c                     d}t        j                  t        |      5  t        j                  |       d d d        y # 1 sw Y   y xY w)NzMDimension of vector must be specified, and must be an integer greater than 0.rK   )rR   r
   rS   r(   r   )r[   r   r\   s      rE   r  z%TestUniformDirection.test_invalid_dimq  s:    <]]:W5 	'!!#&	' 	' 	's	   =Ac                     d}t        |      }t        |d      }|j                  d      }t        j                  |d      }|j                         }t        ||       t        ||       y )Nrh   r  r   r   )r(   r   r   r;  s          rE   test_frozen_distributionz-TestUniformDirection.test_frozen_distributionx  s_    "3''#6zzsz+ $$Ss; T4 T4 rG   )rM   rh   r  c                    t         j                  j                  d      }t        ||      }|j	                  d      \  }}|||z  |z  z  }|t         j
                  j                  |      z  }t        ||z  dd       |j	                  d      }||z  }||z  }t        j                  ||      }	|	t         j                  z  }	|	dt         j                  z  z  }	t               }
t        |	|
j                        }|j                  d	kD  sJ y )
Nl   @9Y sr   rM   r   r   r  r  rF  r  )r>   r   r   r(   r   r   r   r   arctan2r  r   r!   r   pvalue)r[   r   r   spherical_distv1v2rn  s1s2anglesuniform_distkstest_results               rE   test_uniformz!TestUniformDirection.test_uniform  s    ii##$78*3S9###+B
b2gl
biinnR  R/ $$%$0r\r\B# 	"%%!BEE'yv|'7'78##d***rG   N)
r   r   r   rR   r   r   r  r  r|  r  r   rG   rE   rs  rs  c  s    [[UQF+[[V%9:	# ; ,	# [[U$:;' <'
! [[UI.+ /+rG   rs  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestUnitaryGroupc                 
   t         j                  j                  d      }t        j                  d|      }t        j                  dd      }t        j
                  g dg dg dg      }t        ||       t        ||       y )Nr  rN   r   )y~p?yZ?y뉦?ĭ?y8Z?&4?)yEHξr?8i?ye??+ݓݿyu=ٿB۽'?)yqXQÿ?yN6ҿzܷy! 8l?2W'?)r>   r   r  r   r   r   r   )r[   r   ra   r   r  s        rE   r  z%TestUnitaryGroup.test_reproducibility  sm    ii##C(ac2qs388IHKM
 	"!X.!"h/rG   c                     t        t        t        j                  d        t        t        t        j                  d       t        t        t        j                  d       t        t        t        j                  d       y r  )rf  rS   r   r   r  s    rE   r  z!TestUnitaryGroup.test_invalid_dim  sJ    j-"3"3T:j-"3"3V<j-"3"3R8j-"3"3S9rG   c                     d}t        |      }t        |d      }|j                  d      }t        j                  |d      }|j                  d      }t        ||       t        ||       y )Nrk   r  r   r   r   r   )r   r   r   r;  s          rE   r  z#TestUnitaryGroup.test_frozen_matrix  sc    s##Cc2zzsz+  37A&T4 T4 rG   c                 N   t        dd      D cg c]'  }t        d      D ]  }t        j                  |       ) }}}|D ]\  }t        t	        j
                  ||j                         j                        t	        j                  |j                  d         d       ^ y c c}}w )NrM   r7  rN   r   rS  r  )
r  r   r   r   r>   r  conjr   rV   r@   )r[   r   r  rb  ra   s        rE   test_unitarityzTestUnitaryGroup.test_unitarity  s    q!Qx! $ !$ ! !
  	SABFF1affhjj1266!''!*3EER	S!s   ,B!c           	      .   dD ]
  }d}t        j                  ||t        j                  j	                  d            }t        j
                  |D cg c]!  }t        j                  j                  |      # c}      }t        j                  |j                  |j                        }t        |j                         t        t        j                   dt        j                  z        j                         }t#        |j$                  dkD          y c c}w )Nr  r  r  r   rM   r  )r   r   r>   r   r   r\  r   r   eigvalsr~  imagrW  r!   ravelr   r  r   r	   r  )r[   r   rn  rb  ra   r  rA   s          rE   r.  zTestUnitaryGroup.test_haar  s    
  	'CG""'		0E0Ec0JB 99rB!ell2215BCD

499dii0AGRUUFAbeeG$<$@$@ACCJJ%&	' Cs   &D
c                 Z    t        t        j                  dd      j                  d       y r2  )r   r   r   r@   r  s    rE   r4  z"TestUnitaryGroup.test_zero_by_zero  s    ]&&qq177CrG   N)	r   r   r   r  r  r  r  r.  r4  r   rG   rE   r  r    s"    0:
!S'&DrG   r  c                      e Zd Zddgddgddgddgddgddgddgddgddgddgg
ddgddgddggdg dfg dg d	g d
g dg dgg dg dg dg dgdg dfgZej
                  j                  de      d        Zej
                  j                  de      d        Zd Z	d Z
ej
                  j                  d       ed      d               Zd Zd Zddd d!dgdd!ggd ddgd!dgdd!ggdfd d!dgdd!ggd!ddgd!dgdd!ggd!fd!d!gd d d!d!gddgddggdfd!d!gd d!d!d!gddgddggd!fd!d!gd!dgdd!ggd d!d!gd!dgdd!ggdfd!d!gd!dgdd!ggd!d!d!gd!dgdd!ggd!fgZej
                  j                  d"e      d#        Zd$ddd$gdggdfd$gdgdd$gdggdf ej&                  d$g       ej&                  dg      dd$gdggdfgZej
                  j                  d"e      d%        Zd& Zd' Zd( Zej
                  j                  d)d*d+g      ej
                  j                  d,g d-      ej
                  j                  d.d/d0ej2                  g      d1                      Zd2 Zej
                  j                  d,g d3      d4        Zej
                  j                  d,g d5      d6        ZdWd8Zd9 Zej
                  j                  d,g d:      ej
                  j                  d;g d<      ej
                  j                  d=d7d>g      d?                      Z ej
                  jB                  d@        Z"dA Z#dB Z$dC Z%ej
                  j                  d,dD      dE        Z&dF Z'ej
                  j                  d.g dG      dH        Z(ej
                  j                  dIdJ ejR                  dd      dKdLfdM ej&                  dNdgddJgg      dOdPfg      dQ        Z*ej
                  j                  dRg dS      dT        Z+dU Z,dV Z-y )XTestMultivariateTr   rM   rj   rN   rh   r   )
|	ߌ?v
2R?r  g0$H?r  r  gO`?gՒXO?g	ߌ,?g8N8?)gHP?gQI?go_?)g9m4?g=U?gˡE?)g$C?ghs?gǺ?)g!uq?g%C?gS㥛?)gOec?gz,C?g	h"l?)rl   r   2   )r   r  r>  )r  r   r\  )r>  r\  r   r  )gJ#R<g^<gL[<gN=<g`$<zx, loc, shape, df, ansc                 \    t        |||d      }|j                  |      }t        ||       y Nr   r   )r$   r   r   )r[   ra   r  r@   r  ansr   vals           rE   test_pdf_correctnessz&TestMultivariateT.test_pdf_correctness&  s)    c5"15hhqk!#s+rG   c                     t        |||d      }|j                  |      }|j                  |      }t        t	        j
                  |      |       y r  )r$   r   r   r   r>   rq  )	r[   ra   r  r@   r  r  r   r  r  s	            rE   test_logpdf_correctz%TestMultivariateT.test_logpdf_correct,  s>    c5"15xx{{{1~!"&&,5rG   c                 |    g d}t        j                  |d      }t        j                  |      }t        ||       y )N)
r  rk   rj   r   r1  r  r   r1  rl   rN   r   r  )r$   r   r%   r   )r[   ra   r  r  s       rE   test_mvt_with_df_one_is_cauchyz0TestMultivariateT.test_mvt_with_df_one_is_cauchy4  s0    -  q)jjm!#s+rG   c                    d}t        dddd      }|j                  d      }t        |      \  }}||kD  sJ t        ddgd	d
gd
d	ggdd      }|j                  d      }t        |      \  }}||kD  j                         sJ y )Nr   r   r   順 r  r   r   ro   rN   r  rl   r  )r$   r   r&   r  )r[   	P_VAL_MINr   rn  r   rS  s         rE   &test_mvt_with_high_df_is_approx_normalz8TestMultivariateT.test_mvt_with_high_df_is_approx_normal:  s    
 	avA6(((''"1Ir1gR2r(';#%'(((''"1Y##%&%rG   zuses mockingreasonz'scipy.stats.multivariate_normal._logpdfc                 :   t        ddt        j                  d      }t        |t              sJ t        j
                  dt        j                         |j                  dk(  sJ t        j                  dt        j                         |j                  dk(  sJ y )Nr   r   rk   r  r  rM   )r$   r>   r   r   r   r   
call_countr   )r[   mockr   s      rE   !test_mvt_with_inf_df_calls_normalz3TestMultivariateT.test_mvt_with_inf_df_calls_normalL  su     arvvA6$ :;;;1(!###aBFF+!###rG   c                    d}t        j                  |      }t        j                  |      }d}t        j                  |      }t        |||      j	                  |      }t        j
                  |      sJ t        |||      j                  |      }t        j
                  |      sJ d}t         j                  j                  d      }|j                  ||f      }t        |||      j	                  |      }|j                  |fk(  sJ t        |||      j                  |      }|j                  |fk(  sJ t        t        j                  d      t        j                  d      d      j                         }t        j
                  |      sJ d}	t        t        j                  d      t        j                  d      d      j                  |	      }|j                  |	fk(  sJ y )Nrj         @rk   l   I r   r   )r>   r   rV   r$   r   isscalarr   r   r   r@   r   )
r[   r   r  r@   r  ra   rA   	n_samplesr   r   s
             rE   test_shape_correctnessz(TestMultivariateT.test_shape_correctnessV  s    hhsmsHHSMS%,003{{3S%,33A6{{3 	ii##J/JJ	3'(S%,003		i\)*)S%,33A6		i\)*) RXXa["&&)Q7;;={{3 RXXa["&&)Q7;;;F		dW$%$rG   c                     t               }t        |j                  dg       t        |j                  dgg       |j                  dk(  sJ y )Nr   r   r$   r   r  r@   r  )r[   r   s     rE   test_default_argumentsz(TestMultivariateT.test_default_argumentsw  s<    TXXs#TZZ1#'1rG   )NNNr   r   r   )NNrk   r   r   rk   Nrk   z*loc, shape, df, loc_ans, shape_ans, df_ansc                     t        |||      }t        |j                  |       t        |j                  |       |j                  |k(  sJ y )Nr  r  r[   r  r@   r  loc_ans	shape_ansdf_ansr   s           rE   test_default_argsz#TestMultivariateT.test_default_args  s@     #Ur:TXXw'TZZ+6!"!rG   rl   c                     t        |||      }t        |j                  |       t        |j                  |       t        |j                  |       y r=   r  r  s           rE   &test_scalar_list_and_ndarray_argumentsz8TestMultivariateT.test_scalar_list_and_ndarray_arguments  s<     c5"-TXXw'TZZ+TWWf%rG   c           	         ddgg}t        t        t        fi t        |       ddgddgddgg}t        t        t        fi t        ||       t	        j
                  d      }t	        j                  d      }d}t        t        t        fi t        |||       d}t        t        t        fi t        |||       y )	Nr   )r  rM   rN   )r  r@   rl   r  r   )rf  rS   r$   r%  r>   r   rV   )r[   r  r@   r  s       rE   test_argument_error_handlingz.TestMultivariateT.test_argument_error_handling  s    1vhj$	'	'
 Q!Q!Q(j$	4E2	4
 hhqkq	j$	;Eb9	; j$	;Eb9	;rG   c                 ,   t         j                  j                  d      }|j                  d      }t        j                  d      }t        ||dd      }t        ||dd      }|j                  d      }|j                  d      }t        ||       y )Nrj   rN   r   rM   r  r  )r>   r   r  r   rV   r$   r   r   )r[   r   r  r@   r   dist2samples1samples2s           rE   r  z&TestMultivariateT.test_reproducibility  s}    ii##A&kkqk!q	sEaa8sEaa899"9%99"9%Xx(rG   c                     t        ddgddgddggdd      }t        t        j                  j                  t
        fi | y )Nr   r   F)r  r@   r  r`   )r%  rf  r>   r   r  r$   )r[   rC   s     rE   test_allow_singularz%TestMultivariateT.test_allow_singular  s;    1qeQqE]qObii++^DtDrG   r   )r  rN   )rh   ri   rj   rN   r   )rM   rN   rj   rh   r  r   r  c                     t        t        j                  |      t        j                  |      |      }|j	                  |      }|j
                  ||fz   k(  sJ y rM  )r$   r>   r   rV   r   r@   )r[   r   r   r  r   r   s         rE   test_rvszTestMultivariateT.test_rvs  sJ     bhhsmRVVC["=hhDh!yyDC7N***rG   c                    t        j                  d      }t        j                  d      }d}g dg dg dg dg}g dg dg dg dg}t        j                  g d      }t	        j
                  |||||      }t        ||d	   |z         y )
NrN   r  r  rm   r)  r*  r+  r  r   r,  )r[   r   r   r  r#  r"  r-  r   s           rE   r.  z TestMultivariateT.test_cdf_signs  sv    xx{ffQi	9i8	9i8.1!%%asBAFSVN23rG   )r   rM   rh   c                 &    | j                  |       y r=   cdf_against_mvn_testr[   r   s     rE   $test_cdf_against_multivariate_normalz6TestMultivariateT.test_cdf_against_multivariate_normal  s     	!!#&rG   )rN   ri   r  c                 (    | j                  dd       y )NrN   Tr  r  s     rE   -test_cdf_against_multivariate_normal_singularz?TestMultivariateT.test_cdf_against_multivariate_normal_singular  s     	!!!T*rG   Fc           	      ,   t         j                  j                  d      }d}d|j                  dd|      z  }t	        ||||      }d|j                  dd|      z  t        j
                  |j                  |            z  }d|j                  dd||f      z   |z   }d|j                  dd||f      z  |z   }	t        j                  j                  |	||d	|d
|      }
t        j                  j                  |	||d
|      }t        |
|d       y )N   ]J>?a rN   r  ro   r   r   rl   rM   rF  T)r  r  r`   r   )r`   r  Mb@?r  )r>   r   r   r   r   signr   r0   r$   r   r   r   )r[   r   r   r   r   rq  r   r   r"  r#  rA   rB   s               rE   r  z&TestMultivariateT.cdf_against_mvn_test  s   ii##O4B,, ah73;;r13;//"''#**#*:N2OOR!S222T9BC11D8""&&q$16: ' N''++AtS89 , ;St,rG   c                 P   t         j                  j                  d      }d}d}|j                  dt        j                  |            }d}t
        j                  j                  ||||t         j                   |      }t
        j                  j                  |||t        j                  |            }t
        j                  j                  ||t        j                  |            }t        ||d	       t        j                  t        j                  ||z
        d
kD        sJ y )Nr  rM   r   r  )r   r  rN   )r  r   r  r  r  )r>   r   r   r   r  r0   r$   r   r   r/  r   r   r  rm  )	r[   r   r   r   ra   r  rA   rB   	incorrects	            rE   test_cdf_against_univariate_tz/TestMultivariateT.test_cdf_against_univariate_t  s    ii##O4JJBbggclJ3""&&q$RbffW47 ' 9ggkk!Rrwws|4JJNN1dBGGCL9	St,vvbffS9_-4555rG   )rM   rN   rh   r  r   )   no l   m, l   sO l   U iOfYl   O_ r   Tc           	      P   |r|dk7  rt        j                  d       t        j                  j	                  |      }d|j                  dd|      z  }t        ||||      }|j                  |      }|j                  |       }|j                  |      }	|j                         dz  }
t        j                  j                  |	|||
|d	      }t        j                  d
      5  t        d|
|t        j                  |z  |	|z
  |      d   }d d d        t        |dd       t        j                  j                  |	|||
||d      }t        j                  d
      5  t        d|
|||z
  |	|z
  |      d   }d d d        t        ||dd       y # 1 sw Y   xY w# 1 sw Y   %xY w)Nr  z4Agreement with qsimvtv is not great in singular caser  ro   rM   r   rh   T)r   r`   rj  )invalidr  r   g-C6*?r  r  r  )r  r   r`   r$  )rR   r   r>   r   r   r   r   r0   r$   r   rm  r:   r   r   )r[   r   r   r   r   rq  r   r   r"  r#  r  rA   rB   s                rE   test_cdf_against_qsimvtvz*TestMultivariateT.test_cdf_against_qsimvtv  s   
 
*KKNOii##D)B,, ah7zz#ZZ_JJsOZZ\A ""&&q$Rc6: ' <[[* 	G5"c266!8QXsCAFC	GSt$7 ""&&q$RQ47 ' N[[* 	G5"c1t8QXsCAFC	GSt$7	G 	G	G 	Gs   #(FFFF%c           
        	
 d}t         j                  j                  d      }d|j                  dd|      z  }t	        |||d      	|j                  |      |j                  |       }|j                  |      }|j                         d	z  
t
        j                  j                  |	
||
      }	
fd}t        |||t
        j                  j                  ||            }t        ||j                  d       	
fd}t        ||d   |d   |d   |d   |d   |d         }t        ||d   d       y )NrN   l   	!y r  rl   r   r   T)r   rh   )r   r  c                 \    t         j                  j                  | j                        S r=   )r0   r$   r   r   )ra   r   r  r   s    rE   	integrandzITestMultivariateT.test_cdf_against_generic_integrators.<locals>.integrand2  s$    ''++ACCsB??rG   )r*  r   )qrngr  r  c                  T    t         j                  j                  | d d d         S )Nrl   )r0   r$   r   )zyxr   r  r   s    rE   r  zITestMultivariateT.test_cdf_against_generic_integrators.<locals>.integrand8  s(    ''++C"ItS"EErG   r   rM   )r>   r   r   r   r   r0   r$   r   r5   qmcHaltonr   integralr7   )r[   r   r   rq  r"  r#  rA   r  rB   r   r  r   s            @@@rE   $test_cdf_against_generic_integratorsz6TestMultivariateT.test_cdf_against_generic_integrators#  s+    ii##N3#++b!#+.. at<zz#ZZ_JJsOZZ\A""&&q$Rc34 ' 6	@ y!QUYY-=-=#-=-NOS\\5	F i1qtQqT1Q41qtDSV$/rG   c                     t         j                  j                  d      }t        j                  g dg dg dg      }d}t	        j
                  ||      }|j                  g d|      }d	}t        ||d
       y )Nl   Ja )go!@S<?^Ss@)r  gRP=@jT0@)r  r  gk`-3@gWK?r@   r  rm   r   g1%?r  r  )r>   r   r   r   r0   r$   r   r   )r[   r   r   r  r   rA   rB   s          rE   test_against_matlabz%TestMultivariateT.test_against_matlab>  sr     ii##J/hh???A B  ###"5hhysh3St,rG   c                    d}t         j                  j                  |      }|j                  d      }|j                  d      |z   }t        j                  d      }|j                         }|||f}t         j                  j                  |      }t         j                  j                  |      }	t        j                  |d|i}
t        |
j                  |      t        j                  |g|d|	i       y )Nl   2m rN   r   r   r   )	r>   r   r   r   rV   r0   r$   r   r   )r[   r   r   r  ra   r@   r  rC   
rng_frozenrng_unfrozenr   s              rE   r  zTestMultivariateT.test_frozenO  s    ii##D)kkqk!KKQK#%q	ZZ\UBYY**40
yy,,T2##T;
;TXXa[#''LDL|L	NrG   c                   	
 d}d}t         j                  j                  d      j                  ||f      }||j                  z  j                  |      
j                  ||fz         }j                         dz  	t        j
                  j                  |
	      }	
fd}t        j                  |d|      }t        ||d	d
       y )Nrj   r#  r  r   rh   r   c                 T    t        dt        j                   | z  | z
        d   S )NrF  r   )r:   r>   r   )ra   r   r  r   r   s    rE   _cdf_1dz2TestMultivariateT.test_vectorized.<locals>._cdf_1dj  s+    E2sRVVGAIqvsCAFFrG   rl   r$  r  r  )	r>   r   r   r   r0   r$   r   apply_along_axisr   )r[   r   r   r{   ra   rA   r  rB   r   r  r   r   s           @@@@rE   test_vectorizedz!TestMultivariateT.test_vectorized^  s    ii##O4JJS#JJ'!##gzz#JJqC6z"ZZ\A""&&q$Rc&J	G !!'2q1St$7rG   rA  c                    t         j                  j                  d      }t        j                  j                  dgdg|dz
  z  z         }t        j                  |      j                  dg|z  |      }d|dz   z  }t        ||d	       y )
Nr  r   r  )r  )r@   r   r   r8  r  )
r>   r   r   r   r   toeplitzr0   r$   r   r   )r[   r   r   r{   rA   rB   s         rE   test_against_analyticalz)TestMultivariateT.test_against_analyticalp  s~    ii##O4LL!!QC3%37*;$;!<""+//c	/L37mSt,rG   c                     t        j                  dd      }t         j                  }t        j                  j                  ||      }t        j                  j                  d |      }||k(  sJ y )NrN   r  )r>   rV   r   r0   r$   r   r   )r[   r   r  mvt_entropymvn_entropys        rE   test_entropy_inf_dfz%TestMultivariateT.test_entropy_inf_dfx  s[    ffQlVV**222D//77cBk)))rG   )r   r  r  c                     t         j                  j                  d|      }t         j                  j                  |      }t	        ||d       y )Nr   r  r  r  r  )r0   r$   r   r/  r   )r[   r  r  	t_entropys       rE   test_entropy_1dz!TestMultivariateT.test_entropy_1d  s=    **222CGGOOrO*	YU;rG   zdf, cov, ref, tolr  g}M@r  r  r  gNfh@rm  c                     t        j                  d      }t        j                  |||      }t	        |j                         ||       y )Nr  r  )r>   r   r0   r$   r   r   )r[   r  r   rB   tolr  mvts          rE   %test_entropy_vs_numerical_integrationz7TestMultivariateT.test_entropy_vs_numerical_integration  s7    
 hhuo""3R0s5rG   zdf, dim, ref, tol))r  r   gDdVW?rS  )r  r   gU?r  )r  r   g/+?r  )@xDr   Z_2?rS  )}Ô%ITr   r  rS  )r  r  gzg#.@rS  )r  r  gD:f,@r  )r  r  1>`,@rS  )r  r  r  rS  )r  r  g8d?b@rS  )r  r  g-YҺa@r  )r  r  ZGra@rS  )r  r  r  rS  c                     t        j                  t        j                  |      |      }t	        |j                         ||       y )Nr  r  )r0   r$   r>   rV   r   r   )r[   r  r   rB   r   r  s         rE   test_extreme_entropyz&TestMultivariateT.test_extreme_entropy  s1    F ""<s5rG   c                    t        j                  g dg dg dg dg dg      }||j                  z  }d}t        j                  j                  ||      }t        d |      j                         }t        ||d	
       d}d}t        j                  j                  ||      }t        j                  j                  ||      }	t        ||	d
       y )N)gQ?g
ףp=
?g\(\߿(\?gGz?)gGzg{GzgQ?r  gQ)gQ?g)\(?gQѿg)\(ܿg(\?)g      gGzgq=
ףpg\(\?g)r  g{Gzg\(\?g{GzԿg(\?r  r  r  rS  r  i  i   r  )r>   r   r   r0   r$   r   r   r   )
r[   _Ar   r  mul_t_entropymul_norm_entropydf1df2	_entropy1	_entropy2s
             rE   test_entropy_with_covariancez.TestMultivariateT.test_entropy_with_covariance  s     XX+-,,,
  244i ,,44324F.t=EEG'7eD ((00ss0C	((00ss0C		948rG   c                    t        j                  dddt        j                        }t	        j                  ddd      }t        ||       t        j                  j                  d      }|j                  d      }|j                  d      t        j                  d      dz  z   }|j                  |z   }t	        ||      }t        ||t        j                        }|j                  d      }t        |j                  |      |j                  |             t        |j                  |      |j                  |             y )	Nr   r  l   18KJ.rN   r"  r   r  r  )r$   r   r>   r   r   r   r   r   rV   r   r   r   )	r[   rA   rB   r   r   r   r   r  ra   s	            rE   test_logpdf_df_inf_gh19930z,TestMultivariateT.test_logpdf_df_inf_gh19930  s    
 ##Aq!7!((Aq1S! ii##L1zz!}jj 266!9Q;.eeckTs3t3266: EE"IQXXa[1a!%%(+rG   F).r   r   r   	PDF_TESTSrR   r   r   r  r  r  r  thread_unsafer;   r  r  r  DEFAULT_ARGS_TESTSr  r>   r   ARGS_SHAPES_TESTSr  r  r  r  r   r  r.  r  r  r  r  r  r|  r  r  r  r  r  r  r  rV   r  r	  r  r  r   rG   rE   r  r    s|    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!6266!Q<1CUK"HBHHsAhB-@$A/7896	96
 [[	
$6%$6(9<,rG   r  c                      e Zd Zej                  j                  dddgddgddfddgddgdej                   fd	dgddgdej                   fddgd
dgdej                  fddgddggddgd
dggddgej                  ej                  gfd	dgd
dgdej                  fddgddgdej                  fddgddgdej                  fddgddgdej                  fddgddgdej                   fg
      d        Z	d Z
d Zd Zej                  j                  dg ddfg ddfddgdfdgdff      d        Zej                  j                  ddgdgddfddgddgddfddgddggddgddgggddgddgddggdd gdd!ggf ej                  g e"       ej                  g e"      dg fddgddgddfg d#g d$d%d&fg      d'        Zej                  j                  dddgddgdd(ggddd)gfdgdggdgdggddgd*d+gfdgdgggdgdggddgd*d+ggfdgdggdggggddgd*d+gggfg      d,        Zd- Zd. Zd/ Zd0 Zd1 Zd2 Zd3 Zd4 Zd5 Zd6 Zd7 Zy8)9TestMultivariateHypergeomzx, m, n, expectedrN   rj   rh   r  rk   gr   r1  r   rM   rr   iirB  r7  rl   ic                 N    t        j                  |||      }t        ||d       y )Nr  r  )r   r  r   r[   ra   r2  r   r  valss         rE   r  z%TestMultivariateHypergeom.test_logpmf  s$    6 &,,Q15hT2rG   c                    t        j                  ddgddgd      }t        j                  dddd      }t        ||d	
       t        j                  ddgddgd      }t        j                  dddd      }t        ||d	
       y )NrN   r   r  rh   rj   )ra   r2  r      )r  r   r   r  rm  r  rk      )r   r  r#   r   r  s      rE   test_reduces_hypergeomz0TestMultivariateHypergeom.test_reduces_hypergeom  s|     &))QFr1gC}}qB!r2d.%))QFr2h"E}}qB"3d.rG   c                     t        ddgd      }|j                  dd      }t        |j                  d      |j                         d	
       y )NrN   rh   rj   r2  r   r  r0  r   r   r  r  r   r   r   r   r[   r   r   s      rE   r  z"TestMultivariateHypergeom.test_rvs"  s@     $q!f2ff$Sf1RWWYT:rG   c                     t        ddgddggddg      }|j                  dd	      }t        |j                  d
      |j                         d       y )NrN   rh   r  rj   r  r&  r  rM   r0  r   r   r  r  r'  r(  s      rE   test_rvs_broadcastingz/TestMultivariateHypergeom.test_rvs_broadcasting)  sK    #1v2w&7Aq6Bff)#f6RWWYT:rG   zm, n)r   r   r  r   r   )r   r   r   r   r   c                     t        j                  ||      }t        j                  |      }|j	                         }|||dk7  <   t        ||       y )Nr   )r   r   r>   r?   ro  r   )r[   r2  r   rA   res_exs        rE   test_rvs_gh16171z*TestMultivariateHypergeom.test_rvs_gh16171.  sE    
 %((A.JJqMqAvS&!rG   g zl?r  r  gQ?gE|?g
y?r   r  )rh   ri   rk   ri   gzp?c                 N    t        j                  |||      }t        ||d       y Nr  r  r   r  r   r  s         rE   r  z"TestMultivariateHypergeom.test_pmf9  s$    " &))!Q2hT2rG   r"  g ?r   r   c                 N    t        j                  |||      }t        ||d       y r0  r1  r  s         rE   r  z/TestMultivariateHypergeom.test_pmf_broadcastingM  s$     &))!Q2hT2rG   c                 h    t        j                  g dd      }g dg dg dg}t        ||d       y )	N)rN   rk   r  r7  r&  )gf_?&BUп疈Cx@ؿ)r4  ggs>d?ZsK)r5  r6  g35?rm  r  r   r   r   )r[   r  r  s      rE   r  z"TestMultivariateHypergeom.test_covZ  s2    %))J"=6668 	d.rG   c                 V   t        j                  ddgddggddg      }dd	gd	dggd
dgdd
ggg}t        ||d       t        j                  dgdggddg      }dggdggg}t        ||d       t        j                  ddgddg      }dd	gd	dggddgddggg}t        ||d       y )Nrk   r  r  r"  r  r7  r&  g?gg(\?g(\rm  r  rj   rh   r   g333333?g333333r7  r  s          rE   r  z/TestMultivariateHypergeom.test_cov_broadcastinga  s    %))aVb"X,>1b'J..0d.%))aS1#J1a&A"d.%))QFq"g>.'"Wf$568d.rG   c                     t        j                  ddgd      }t        j                  ddd      }t        ||d       y )	Nr  rh   rj   r&  r"  r   r   r  rm  r  )r   r  r#   r   )r[   var0var1s      rE   test_varz"TestMultivariateHypergeom.test_varp  s6    %))RGq9}}rQ"-d.rG   c                    t        j                  ddgddg      }t        j                  ddgd      }t        j                  ddgd      }t        |d   |d       t        |d	   |d       t        j                  ddgdd
ggddg      }ddgddgg}t        ||d       t        j                  dgdggddg      }dgdgg}t        ||d       y )Nr  rh   rj   r  r&  r   rm  r  r   r  g̍3eY?gI{?r   )r   r  r   )r[   r;  r<  var2var3var4var5var6s           rE   test_var_broadcastingz/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(<=d.%))aS2$KAr7Crd|d.rG   c                     t        j                  ddgd      }t        j                  ddd      }t        |d   |d	       t        j                  d
dgd      }ddg}t        ||d	       y )Nr  rh   rj   r&  r"  r:  r   rm  r  r7  r  g      @r.  )r   r   r#   r   r[   mean0r  r  mean3s        rE   r  z#TestMultivariateHypergeom.test_mean  sf    &++r1g;qB/a%d3&++r1g<j)u40rG   c                 n    t        j                  ddgddggddg      }ddgd	d
gg}t        ||d       y )NrN   rh   r  rj   r  r&  rk  rl  gUUUUUU@gUUUUUU@rm  r  )r   r   r   )r[   rG  r  s      rE   r  z0TestMultivariateHypergeom.test_mean_broadcasting  sE    &++1vAw.?Aq6JH%
I'>?u40rG   c                 V   t        j                  g dd      }t        |g d       t        j                  g dd      }t        |t        j                  t        j                  t        j                  g       t        j                  g dg dgd      }t        |t        j                  t        j                  t        j                  gg dgd	
       t        j                  t        j                  g t              d      }t        |g        t        |j                  dk(         y )Nrm   r   r&  r   r   r   r   r   r   rM   r)  )r   r   r   FFg<r  r   r   )
r   r   r   r>   r  r   r   rH  r	   r@   rF  s        rE   test_mean_edge_casesz.TestMultivariateHypergeom.test_mean_edge_cases  s    &++i1=UL)&++i1=URVVRVVRVV45&++y).DJ 8,G"	$ '++bhhr.EKUBu$%rG   c                 Z   t        j                  g dd      }t        |g dd       t        j                  g dd      }t        |t        j
                  t        j
                  t        j
                  g       t        j                  g dg d	gd      }t        |t        j
                  t        j
                  t        j
                  gg dgd
       t        j                  t	        j                  g t              d      }t        |g        t        |j                  dk(         y )Nrm   r   r&  rK  gؗҜ<r  rL  rM   r)  rM  r   rN  )
r   r  r   r   r>   r  r   rH  r	   r@   )r[   r;  r<  r?  r@  s        rE   test_var_edge_casesz-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                    t        j                  g dd      }g dg dg dg}t        ||d       t        j                  g dd      }g dg dg dg}t        ||       t        j                  t	        j
                  g t        	      d      }t	        j
                  g t        j                  	      j                  dd      }t        ||d       t        |j                  d
k(         y )NrL  r   r&  rK  rM  r  rm   r   r   r  )r   r   r   r   r>   r   rH  r  r  r	   r@   )r[   cov0r  r  r  r  r  s          rE   test_cov_edge_casesz-TestMultivariateHypergeom.test_cov_edge_cases  s    %))I;lL9d/%))I;lL9T4 %))BHHRs,CqIxx"**-55a;d/

f$%rG   c                    d}g d}g dg dg dg dg dg}t        j                  |t              }t        ||      }t	        |j                  |      t        j
                  |||             t	        |j                  |      t        j                  |||             t	        |j                         t        j                  ||             t	        |j                         t        j                  ||             y )	Nr7  )rk   r  rB     r  r  r  r  r  r   )	r>   r?   rH  r   r   r  r  r  r   )r[   r   r2  ra   
mhg_frozens        rE   r  z%TestMultivariateHypergeom.test_frozen  s    M=<)JJq$+Aq1

q).221a;	=
))!,.55aA>	@
(*@*D*DQ*JK
(*@*D*DQ*JKrG   c                    t        t        t        j                  ddd       t        t        t        j                  ddgd       t        t        t        j                  ddgdgd       t        t        t        j                  ddgddgd       t        t        t        j                  ddgddgd       t        t        t        j                  ddgddgd       y )	Nrh   r  rj   g      @r  r"  g      %@g      /@)rf  rS   r   r  	TypeErrorr  s    rE   test_invalid_paramsz-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   N)r   r   r   rR   r   r   r>   r   r  r  r$  r  r+  r.  r   rH  r  r  r  r  r=  rD  r  r  rO  rQ  rT  r  rZ  r   rG   rE   r  r    s|   [[ 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 RXXb$hbhhr&=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                   T   e Zd Zd Zd Zej                  j                  dd      d        Zd Z	ej                  j                  dd      ej                  j                  d	d      d
               Z
ej                  j                  dd      d        Zd Zej                  j                  dd      d        Zej                  j                  dd      d        Zej                  j                  dd      d        Zej                  j                  dd      ej                  j                  dg dgf      ej                  j                  dg dgf      d                      Zej                  j                  dd      d        Zd Zej                  j                  dd      d        Zy)TestRandomTablec                 @    t         j                  j                  d      S )Nl   OfE)r>   r   r   r  s    rE   get_rngzTestRandomTable.get_rng  s    yy$$%788rG   c                 ^   d}t        j                  t        |      5  t        ddggddg       d d d        d}t        j                  t        |      5  t        ddgddgg       d d d        d}t        j                  t        |      5  t        ddgddg       d d d        d}t        j                  t        |      5  t        ddgdd	g       d d d        d
}t        j                  t        |      5  t        ddgddg       d d d        d}t        j                  t        |      5  t        ddgg d       d d d        d}t        j                  t        |      5  t        ddgg d       d d d        ddg}g d}t        j                  ddgg d      \  }}}t        ||       t        ||       |t        j                  |      k(  sJ y # 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   UxY w# 1 sw Y   ,xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nz`row` must be one-dimensionalrK   r   rM   z`col` must be one-dimensionalz*each element of `row` must be non-negativerl   z*each element of `col` must be non-negativero   z'sums over `row` and `col` must be equalr   z(each element of `row` must be an integer @)r   r   rM   z(each element of `col` must be an integer)r]  r]  r   rN   rM   r   r   )rR   r
   rS   r'   _process_parametersr   r>   r   )r[   r\   r  r  r  r  r   s          rE   test_process_parametersz'TestRandomTable.test_process_parameters  s   1]]:W5 	+1a&Aq6*	+ 2]]:W5 	+!Q1a&*	+ ?]]:W5 	*!R1a&)	* ?]]:W5 	*!Q!R)	* <]]:W5 	)!Q!Q(	) =]]:W5 	0#sY/	0 =]]:W5 	0!Q/	0 !f22Aq69E1aS!S!BFF3KA	+ 	+	+ 	+	* 	*	* 	*	) 	)	0 	0	0 	0sS   GG#G0G=8H
.H$H#G #G-0G:=H
HH #H,zscale,method))r   boyett)r  	patefieldc                     t        j                  ddg      |z  }t        j                  g d      |z  }t        }|j                  |||d      }|j                  ||d d      }t	        ||       y )Nr   rN   ra  methodr   )r>   r   r'   r   r   )r[   r  rh  r  r  ctr  gots           rE   test_process_rvs_method_on_Nonez/TestRandomTable.test_process_rvs_method_on_None  si     hh1v&hhy!E)66#s66BffS#df;Xs#rG   c                     ddg}g d}d}t        j                  t        |      5  t        j                  ||d       d d d        y # 1 sw Y   y xY w)Nr   rN   ra  z$'foo' not recognized, must be one ofrK   foo)rh  )rR   r
   rS   r'   r   )r[   r  r  r\   s       rE   $test_process_rvs_method_bad_argumentz4TestRandomTable.test_process_rvs_method_bad_argument  sL    !f 9]]:W5 	5S#e4	5 	5 	5s   AAr  )TFrq  c                    | j                         }ddgg dt        j                  dd|      }|rt              nt        }t        ||rdnd      |s	fd	|rfd
n}t	        j
                  |dd      \  }} ||      }	t        |	t        |      z  |d        |t        |d               }
t        |
|	d          |j                  d|j                  dd  z         } ||      }	|	j                  dk(  sJ t        |	j                  d         D ]A  }t        |	j                  d         D ]$  }|	||f   }|||f   } ||      }t        ||       & C g dg dg}t        t	        j                  |d              ||      }	|	dk(  sJ g dg dg}t        t	        j                  |d              ||      }	|	dk(  sJ d}t        j                  t         |      5   |dg       d d d        d}t        j                  t         |      5   |dgg       d d d        d}t        j                  t         |      5   |t        j"                  gg       d d d        d}t        j                  t         |      5   |dgg       d d d        d}t        j                  t         |      5   |g dg       d d d        d }t        j                  t         |      5   |ddgd!d"gg       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   oxY w# 1 sw Y   y xY w)#NrM   ri   r   rN   rj   r  rd  r   rh  r   r  r  c                      |       S r=   r   )ra   r  original_methodr  s    rE   rh  z/TestRandomTable.test_pmf_logpmf.<locals>.method)  s    &q#s33rG   c                 :    t        j                   |             S r=   )r>   r  )ra   rh  s    rE   rb   z1TestRandomTable.test_pmf_logpmf.<locals>.<lambda>+  s    q	* rG   r   Tr   return_countsr   r  )r  r  r   )r   r   r   )rM   r   rN   rl   r   rc  )r   rM   rM   ro   z$`x` must be at least two-dimensionalrK   z%`x` must contain only integral valuesr]  z)`x` must contain only non-negative valuesz"shape of `x` must agree with `row`rQ   z"shape of `x` must agree with `col`rN   rj   )r^  r'   r   rv   r>   uniquer   r   r   r   r  r@   r  r   rR   r
   rS   r  )r[   r  rq  r   r   objr  
unique_rvscountsrS  p2rvs_ndr  r  pijrvijqijra   r\   r  rh  rs  r  s                      @@@@rE   test_pmf_logpmfzTestRandomTable.test_pmf_logpmf  s(    lln!fsCd&.SB )/l3$L#h59$O4/2*YYs$G
F 
OCHf37 jm$%R1 Y1267Kww)###qwwqz" 	'A1771:& '1gad|$iS#&	'	' 	"RVVAB'-FAvv 	"RVVAB'-FAvv 9]]:W5 	H	 :]]:W5 	#L	 :]]:W5 	"&&
O	 >]]:W5 	"K	 7]]:W5 		 7]]:W5 	!QQ 	 	)	 		 		 		 		 		 	sH   2
L!LL!L-?L90MLL!L*-L69MMrh  )rd  re  c                    | j                         }ddg}g d}t        j                  ||d||      }t        j                  ||      }t	        t        j                  |      t        j                  |             t        |j                  d      |d       t	        |j                  d	
      t        j                  |d             t	        |j                  d
      t        j                  |d             y )NrM   ri   rp  r  rq  r   r  r  rl   r   r*  ro   )r  rN   )	r^  r'   r   r   r   r>   r   r   broadcast_to)r[   rh  r   r  r  r   r   s          rE   test_rvs_meanzTestRandomTable.test_rvs_meanh  s     lln!fsCd6,/1  c*RVVD\266#;/T5SWW"W%rsI'FGSWW"W%rsI'FGrG   c                    | j                         }ddg}g d}t        j                  ||dd|      }t        j                  ||dd|      }t        j                  |d	      }t        j                  |d	      }t        ||d
       y )NrM   ri   rp  rF  rd  rq  re  r   r   {Gz?r  )r^  r'   r   r>   r  r   )r[   r   r  r  r  r  r  r  s           rE   test_rvs_covzTestRandomTable.test_rvs_covw  s     lln!fSuX-02Su[-02vvd#vvd#d.rG   c           	      (   ddg}g d}t        j                  |||| j                               }|j                  dk(  sJ t        j                  ||d|| j                               }|j                  dk(  sJ t	        ||d	          t        j                  ||d	|| j                               }|j                  d
k(  sJ t        j                  ||d|| j                               }|j                  dk(  sJ t        j                  ||d|| j                               }|j                  dk(  sJ t        |j                  ddd      |d       d}	t        j                  t        |	      5  t        j                  ||d|| j                                d d d        t        j                  t        |	      5  t        j                  ||t        j                  || j                                d d d        y # 1 sw Y   dxY w# 1 sw Y   y xY w)NrM   ri   rp  rg  r#  r   rq  rQ   r   )r   rM   rN   r  )r  rM   rN   )rj   rh   )rj   rh   rM   rN   rN   rS  r  z/`size` must be a non-negative integer or `None`rK   rl   )r'   r   r^  r@   r   r   r  rR   r
   rS   r>   r  )
r[   rh  r  r  r   rv2rv3rv4rv5r\   s
             rE   test_rvs_sizezTestRandomTable.test_rvs_size  s   !f c3v+/<<>;xx6!!! sCa,0LLN<yyI%%%RQ  sCa,0LLN<yyI%%% sCb,0LLN<yyJ&&&sCfV,0LLN<yyL(((B1-s? D]]:W5 	:S#Bv*.,,.:	: ]]:W5 	:S#BFF6*.,,.:	: 	:		: 	:	: 	:s   0)G<<7H<HHc                     ddg}g d}t         }|j                  ||d|| j                               }t        j                  |dd      \  }}|j                  |||      }t        |t        |      z  |d	
       y )NrM   ri   rp  r  rq  r   Tru  r  r  )r'   r   r^  r>   rw  r  r   r   )	r[   rh  r  r  ri  r   ry  rz  rS  s	            rE   test_rvs_methodzTestRandomTable.test_rvs_method  s|     !fffS#F6"&,,.  2  YYs$G
F FF:sC(CHf48rG   c                     g d}g d}t        ||      }|j                  d|| j                               }t        j                  dt        |      t        |      f      }g dg dg dg|d<   t        ||       y )Nr*  )r   r   r   r   r  rg  )r   r   r   r   .r'   r   r^  r>   r   r   r   r[   rh  r  r  r*  r   r  s          rE   test_rvs_with_zeros_in_col_rowz.TestRandomTable.test_rvs_with_zeros_in_col_row  so    c"UU4T\\^UD88T3s8SX67%%%' 	R"rG   )Nrd  re  r  r   r  c                     t        ||      }|j                  d|| j                               }t        j                  dt        |      t        |      f      }t        ||       y )Nr  rg  r  r  s          rE   test_rvs_with_edge_casesz(TestRandomTable.test_rvs_with_edge_cases  sQ     c"UU2f4<<>UB88RS3s845R"rG   r   r  c                    dd l mc m} t        j                  ddgt        j
                        }t        j                  g dt        j
                        }t        |d|       }t        j                  |      } ||||d| j                               }|j                  dt        |      t        |      fk(  sJ t        j                  |      |k(  sJ y )Nr   r   rN   r   ra  	rvs_rcont)scipy.stats._rcontr0   _rcontr>   r   int64rv   r   r^  r@   r   )r[   r   r  r  r  r   ntotresults           rE   test_rvs_rcontzTestRandomTable.test_rvs_rcont  s     	,+hh1vRXX.hhy1f	!o.vvc{S#tQ7||3s8SX6666vvf~%%%rG   c                    ddg}g d}t        ||| j                               }|j                         }t        j                  ||      }t	        ||j                                t        j
                  |||      }t	        ||j                  |             t        j                  |||      }t	        ||j                  |             y )NrM   ri   rp  r   )r'   r^  r   r   r   r  r  )r[   r  r  r*  r  r  s         rE   r  zTestRandomTable.test_frozen  s    !fc7$$S#.Xqvvx(##FC5XquuV}-&&vsC8Xqxx/0rG   c                     ddg}g d}t        ||| j                               }t        j                  ||d|| j                               }|j                  d|      }t        ||       y )NrM   ri   rp  r   r  rq  )r   rh  )r'   r^  r   r   )r[   rh  r  r  r*  r  rj  s          rE   test_rvs_frozenzTestRandomTable.test_rvs_frozen  sb    !fc7##C2f15AeeFe+Xs#rG   N)r   r   r   r^  rc  rR   r   r   rk  rn  r  r  r  r  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                    | j                   }d| _          | j                  |ddi t        j                  |       } | j                  |ddi}t        j                  |      } |j                  |ddi}t        ||       || _         y )Nrj  r   r  )r   r   pickledumpsloadsr   )distfnrC   r  r   r0	unpickledr1s          rE   check_picklingr    s    
 DFFJJ1VA	T	"	"BQI		%1	%BR FrG   z2uses numpy global random state and monkey-patchingr  c                  &   t        j                  d      } d| d<   d| d<   t        dgt        t        j                  dg      fgt
        d| fgt        d| fgt        dg d	fgt        d
gt        d
gg}|D ]  \  }}t        ||       t        ||        y )NrN   r  rb  r  r   r   r  rh   rM  r  )r>   rV   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  %#FD1vt$%rG   c                      e Zd Zej                  j                  dg d      ej                  j                  dg d      d               Zej                  j                  dddg      ej                  j                  dg d	      d
               Zd Zd Z	d Z
ej                  j                  dddg      d        Zej                  j                  dddg      d        Zej                  j                  dej                  ej                  g      d        Zej                  j                  dej                  ej                  g      d        Zej                  j                  d ej&                  g d       ej&                  g d      ddf ej&                  g d       ej&                  g d      ddf ej&                  g d       ej&                  g d      ddf ej&                  g d       ej&                  g d      dd f ej&                  g d       ej&                   ej(                  d!       ej(                  d"      dg      d#d$f ej&                  g d       ej&                  g d      d#d%f ej&                  g d&       ej&                  g d&      d#d'f ej&                  g d&       ej&                   ej(                  d!       ej(                  d"      dddg      d#d(f ej&                  g d&       ej&                   ej(                  d)       ej(                  d*      dddg      d#d+fg	      d,        Zej                  j                  d ej&                  g d       ej&                  g d      dd-f ej&                  g d       ej&                  g d      dd.f ej&                  g d       ej&                  g d      dd/f ej&                  g d       ej&                  g d      dd0f ej&                  g d       ej&                   ej(                  d!       ej(                  d"      dg      d#d1f ej&                  g d       ej&                  g d      d#d2f ej&                  g d&       ej&                  g d&      d#d3f ej&                  g d&       ej&                   ej(                  d!       ej(                  d"      dddg      d#d4f ej&                  g d&       ej&                   ej(                  d)       ej(                  d*      dddg      d#d5fg	      d6        Zej                  j                  d7g d8      d9        Zej                  j                  dej                  ej                  g      d:        Zd; Zej                  j                  dg d<      ej                  j                  d=g d>      d?               Zd@ ZdA ZdB ZyC)DTestVonMises_Fisherr   )rM   rN   rj   ri   r   rt  c                    t         j                  j                  d      }t        j                  |fdt        j                  |      z        }t        |d|      }|j                  |      }t        j                  |      t        j                  |      }}|j                  |||      j                  }	|j                  |	k(  sJ t         j                  j                  |d      }
t        |
d       y )Nrv  r   r   r   rl   r   r   )r>   r   r   r   r  r)   r   r   rV   r   r@   r   r   r   )r[   r   r   r   rg  vmf_distrn  r   r   rx  ry  s              rE   r  z TestVonMises_Fisher.test_samples.  s     ii##$78WWcWan-"2qs3,,t$HHSM266#;c00s0FLL}}...		wR0r"rG   rh   r  kappa)g  4&kCr  gꌠ9Y>)Fc                     t         j                  j                  d      }t        j                  |fdt        j                  |      z        }t        |||      }|j                  d       y )Nrv  r   r   r  )r>   r   r   r   r  r)   r   )r[   r   r  r   rg  r  s         rE    test_sampling_high_concentrationz4TestVonMises_Fisher.test_sampling_high_concentration<  sQ     ii##$78WWcWan-"2u37RrG   c                     t        j                  d      }d}t        j                  t        |      5  t        |d       d d d        y # 1 sw Y   y xY w)Nr  z%'mu' must have one-dimensional shape.rK   r   r>   rU   rR   r
   rS   r)   r[   rg  r  s      rE   test_two_dimensional_muz+TestVonMises_Fisher.test_two_dimensional_muE  sA    WWV_5]]:S1 	#B"	# 	# 	#   A		Ac                     t        j                  d      }d}t        j                  t        |      5  t        |d       d d d        y # 1 sw Y   y xY w)Nr  z%'mu' must be a unit vector of norm 1.rK   r   r  r  s      rE   test_wrong_norm_muz&TestVonMises_Fisher.test_wrong_norm_muK  sA    WWU^5]]:S1 	#B"	# 	# 	#r  c                     t        j                  d      }d}t        j                  t        |      5  t        |d       d d d        y # 1 sw Y   y xY w)Nr  z$'mu' must have at least two entries.rK   r   r  r  s      rE   test_one_entry_muz%TestVonMises_Fisher.test_one_entry_muQ  sA    WWU^4]]:S1 	#B"	# 	# 	#r  rl   )rh   rN   c                     d}t        j                  t        |      5  t        ddg|       d d d        y # 1 sw Y   y xY w)Nz"'kappa' must be a positive scalar.rK   r   r   rR   r
   rS   r)   r[   r  r  s      rE   test_kappa_validationz)TestVonMises_Fisher.test_kappa_validationW  s8    2]]:S1 	+QFE*	+ 	+ 	+   6?r   r   c                     d}t        j                  t        |      5  t        ddg|       d d d        y # 1 sw Y   y xY w)NzFor 'kappa=0' the von Mises-Fisher distribution becomes the uniform distribution on the sphere surface. Consider using 'scipy.stats.uniform_direction' instead.rK   r   r   r  r  s      rE   test_kappa_zeroz#TestVonMises_Fisher.test_kappa_zero]  s<     ]]:S1 	+QFE*	+ 	+ 	+r  rh  c                     t        j                  g d      }d}t        j                  t        |      5   ||ddgd       d d d        y # 1 sw Y   y xY w)Nr   r   r   znThe dimensionality of the last axis of 'x' must match the dimensionality of the von Mises Fisher distribution.rK   r   r   r>   r   rR   r
   rS   r[   rh  ra   r  s       rE   test_invalid_shapes_pdf_logpdfz2TestVonMises_Fisher.test_invalid_shapes_pdf_logpdfg  sN     HH[! ]]:S1 	!1q!fa 	! 	! 	!   AAc                     t        j                  ddg      }d}t        j                  t        |      5   ||ddgd       d d d        y # 1 sw Y   y xY w)Nr  r   8'x' must be unit vectors of norm 1 along last dimension.rK   r   r   r  r  s       rE   test_unnormalized_inputz+TestVonMises_Fisher.test_unnormalized_inputq  sN     HHc2YH]]:S1 	!1q!fa 	! 	! 	!r  zx, mu, kappa, reference)r   r   r   r$  g0_?r  )r   r   r   g7m0_?r  gLI/@gFK:h*7g\(\?r  i  g3pB>g7Ks@)r   r   r   r   r   go齿@gW+x\(?rL  r   gS-c                 V    t        ||      j                  |      }t        ||d       y )Nr  r  )r)   r   r   )r[   ra   rg  r  	referencer   s         rE   test_pdf_accuracyz%TestVonMises_Fisher.test_pdf_accuracy  s'    4 b%(,,Q/YU3rG   g[d6U?g1*?gJ8j#@g=fNXg][,g1VV@g|'@gmF&!gehc                 V    t        ||      j                  |      }t        ||d       y )Nr  r  )r)   r   r   )r[   ra   rg  r  r  r   s         rE   test_logpdf_accuracyz(TestVonMises_Fisher.test_logpdf_accuracy  s'    4 !U+2215	6rG   zdim, kappa, reference))rN   r$  g?@)rN   r  gp&F)rh   r  gT;ӷ&)r  r   goZ@c                     t        j                  |fdt        j                  |      z        }t        ||      j	                         }t        ||d       y )Nr   g+=r  )r>   r   r  r)   r   r   )r[   r   r  r  rg  r   s         rE   test_entropy_accuracyz)TestVonMises_Fisher.test_entropy_accuracy  sC     WWcWan-!"e,4467rG   c           	         d}t         j                  j                  d      }t        d      j	                  ||      }t        j
                  ddt        j                  d      z        }d} ||||      }|j                  |k(  sJ t        |d         D ]:  }t        |d         D ]'  }	 ||||	d d f   ||      }
t        |
|||	f   d	
       ) < y )Nr  rv  rN   r   r`  r   rh   r   rS  r  )
r>   r   r   r(   r   r   r  r@   r  r   )r[   rh  	testshaper   ra   rg  r  
result_allr  r  current_vals              rE   r  z%TestVonMises_Fisher.test_broadcasting  s     	ii##$78a $$YS$AWWUAbggajL)Ar5)
9,,,y|$ 	KA9Q<( K$Qq!QwZU;Z1-=EJK	KrG   c                 V   t         j                  j                  d      }t        j                  ddg      }t        j                  |d   |d         }d}t        ||      }t        ||      }t        d      j                  d|      }t        j                  |d d df   |d d df         }t        |j                         |j                                t        |j                  |      |j                  |             t        |j                  |      |j                  |             y )	Nrv  r   r   r  )r  r  rM   r  r   )r>   r   r   r   r~  r)   r+   r(   r   r   r   r   r   )	r[   r   rg  mu_angler  vmfvonmises_distvectorsr  s	            rE   test_vs_vonmises_2dz'TestVonMises_Fisher.test_vs_vonmises_2d  s     ii##$78XXq!f::beRU+b%( XU;#A&**2C*@GAqDM71a4=9--/?))&137773CD,,V4cjj6IJrG   )rM   rN   ri   zkappa, mu_tol, kappa_tol))r   r  r  )r  r  r  )r  {Gzt?r  )r  r  r  c                    t        j                  |fdt        j                  |      z        }t        ||      }t         j                  j                  d      }d}|j                  ||      }	t        j                  |	      \  }
}t        j                  |j                  |
            }t        |d|d       t        |||       y )	Nr   rv  rF  r   r   r   r  r  )r>   r   r  r)   r   r   r   rM  arccosr  r   )r[   r   r  mu_tol	kappa_tolrg  r  r   r  rn  mu_fit	kappa_fitangular_errors                rE   test_fit_accuracyz%TestVonMises_Fisher.test_fit_accuracy  s     WWcWan-"2u-ii##$78	,,ys,;+//8			"&&.1rQ?yy9rG   c                     t        j                  d      }d}t        j                  t        |      5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr`  z'x' must be two dimensional.rK   )r>   r   rR   r
   rS   r)   rM  r[   ra   r  s      rE   #test_fit_error_one_dimensional_dataz7TestVonMises_Fisher.test_fit_error_one_dimensional_data  sE    HHUO,]]:S1 	#"	# 	# 	#   AAc                     t        j                  d      }d}t        j                  t        |      5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr"  r  rK   )r>   rU   rR   r
   rS   r)   rM  r  s      rE    test_fit_error_unnormalized_dataz4TestVonMises_Fisher.test_fit_error_unnormalized_data  sE    GGFOH]]:S1 	#"	# 	# 	#r  c                    t        j                  g d      }d}t        ||      }t        ||d      }|j                  d      }t        j                  ||d      }|j                         }t	        ||       t	        ||       y )N)r   r   r   rh   r  r   r   )r>   r   r)   r   r   )r[   rg  r  r  r<  r  r  r=  s           rE   r|  z,TestVonMises_Fisher.test_frozen_distribution   ss    XXi  U+%b%c:zzsz+""2u3? T4 T4 rG   N)r   r   r   rR   r   r   r  r  r  r  r  r  r  r)   r   r   r  r  r>   r   r  r  r  r  r  r  r  r  r  r|  r   rG   rE   r  r  -  s   [[UL1[[V%9:
# ; 2
# [[UQF+[[W&89 : ,### [[Wr6l3+ 4+
 [[Wq"g.+ /+ [[X(;(;(7(>(>(@ A!A! [[X(;(;(7(>(>(@ A!A!$ [[6'rxx5xrxx7M#%79'rxx4hbhh|6L#%8:'rxx5xrxx7M"$68'rxx4hbhh|6L"$9;'rxx5'rxxr(JK#%:<  (rxx4hbhh|6L#%68'rxx(<='rxx(<=#%79  (rxx(<='rxxr)*B)0  1#%;=  (rxx(<='rxxwrwws|R)*B)0  1#%;=)>?243?24" [[6'rxx5xrxx7M#%8:'rxx4hbhh|6L#%8:'rxx5xrxx7M"$57'rxx4hbhh|6L"$68'rxx5'rxxr(JK#%8:  (rxx4hbhh|6L#%68'rxx(<='rxx(<=#%79  (rxx(<='rxxr)*B)0  1#%79  (rxx(<='rxxwrwws|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                   f   e Zd Zed        Zd Zd Zd Zd Zd Z	e
j                  j                  ddd	g      d
        Ze
j                  j                  dddg      d        Zd Zd Ze
j                  j                  ddd	g      d        Ze
j                  j                  dg d      d        Zy)TestDirichletMultinomialc                     t         j                  j                  d      }|j                  ddd      }|j	                  dd|df      }|j                  d	      }|||||fS )
N   t7)r   r  rM   r   r   r  rl   r   )r>   r   r   r   r  r   )r[   r2  r   r  ra   r   s         rE   
get_paramsz#TestDirichletMultinomial.get_params/  sc    ii##$56As+LLBaVL,EErENAua""rG   c                    t         j                  j                  d      }|j                  ddd      }|j	                  ddd      }t        j
                  |d      }t        ||      }t        |j                  |      t        j                  |||             t        |j                  |      t        j                  |||             t        |j                         t        j                  ||             t        |j                         t        j                  ||             t        |j                         t        j                  ||             y )Nr  r   r  r  rl   r   )r>   r   r   r   r  r   r*   r   r  r  r   r  r   )r[   r   r  ra   r   r*  s         rE   r  z$TestDirichletMultinomial.test_frozen7  s    ii##$56AsB'LLB#FF12!%+QXXa["7">">q%"KLQUU1X488E1EFQVVX499%CDQUUW377qABQUUW377qABrG   c                    t        j                  g d      }t        j                  |      }t        j                  g d      }t        j                  |||      }t        j
                  |||      }d}t        ||       t        |t        j                  |             |j                  |j                  cxk(  rdk(  sJ  J t         j                  j                  d      }|j                  ddd      }|j                  ddd      }t        j                  |d	
      }t        ||      j	                  |      }t        j
                  |||      }d}t        ||       t        |t        j                  |             y )NrQ   rN   rj   rh   gp.U.?r   r  r   r  r  rl   r   g+T<)r>   r   r   r*   r  r  r   rq  r@   r   r   r   r  )r[   ra   r   r  rA   logresrB   r   s           rE   test_pmf_logpmf_against_Rz2TestDirichletMultinomial.test_pmf_logpmf_against_RE  s.   
 HHYFF1I##''5!4&--a:!S!s,yyFLL.B..... ii##$56AsB'LLB#FF12#E1-11!4&--a:"S!s,rG   c                 :   | j                  d      \  }}}}}|dz  }t        t        ||      j                  |      d       t        t        ||      j	                  |      t
        j                          | j                  d      \  }}}}}|j                  d      dkD  }t        j                  ||   dz        ||<   t        t        ||      j                  |      |   d       t        t        ||      j	                  |      |   t
        j                          t        j                  t        ||      j                  |      |    dkD        sJ t        j                  t        ||      j	                  |      |    t
        j                   kD        sJ y )Nr   r   r  r   r  rM   )
r  r   r*   r  r  r>   r   r   roundr  )r[   r   r2  r  r   ra   r  s          rE   test_pmf_logpmf_supportz0TestDirichletMultinomial.test_pmf_logpmf_supportd  s`    #ooa0Qq!	Q*5!488;Q?*5!4;;A>H"oob1Qq!JJBJ#%xx!q!!*5!488;A>B*5!4;;A>qABFF7Kvv+E1599!<aR@1DEEEvv+E15<<Q?CrvvgMNNNrG   c                    d}dg}t        j                  |g      }t        ||      }t        |j	                  |      d       t        |j	                  |dz         d       t        |j                  |      d       t        |j                  |dz         t         j                          t        |j                         |       t        |j                         d       t        |j                         d       y )Nri   r  r   r   
r>   r?   r*   r   r  r  r   r   r  r   r[   r   r  ra   r   s        rE   test_dimensionality_onez0TestDirichletMultinomial.test_dimensionality_onet  s    JJsO$UA.TXXa[!$TXXac]A&T[[^Q'T[[1%w/TYY[!$TXXZ#TXXZ#rG   c                 .   d}t        j                  ddg      }t        j                  ddg      }t        ||      }t        |j	                  |      d       t        |j	                  |dz         d       t        |j                  |      d       t        |j                  |dz         t         j                          t        |j                         ddg       t        |j                         ddg       t        |j                         ddgddgg       y )Nr   r   r   r  r  s        rE   test_n_is_zeroz'TestDirichletMultinomial.test_n_is_zero  s    

B8$JJ1v$UA.TXXa[!$TXXac]A&T[[^Q'T[[1%w/TYY[1a&)TXXZ!Q(TXXZ1a&1a&!12rG   method_namer  r  c                    | j                  d      \  }}}}}t        t        ||      |      }t        t        j                  |g|j
                   |      } ||      }	 ||j
                  d         }
t        |	|
       y Nr  r   r  rv   r*   r0   	betabinomr   r   r[   r   r   r2  r  r   ra   rh  
ref_methodrA   rB   s              rE   test_against_betabinom_pmfz3TestDirichletMultinomial.test_against_betabinom_pmf  sr    "ooc2Qq!.ua8+FU__Q99;G
QiQ S!rG   r   r  c                     | j                  d      \  }}}}}t        t        ||      |      }t        t        j                  |g|j
                   |      } |       d d df   }	 |       }
t        |	|
       y r  r  r  s              rE   test_against_betabinom_momentsz7TestDirichletMultinomial.test_against_betabinom_moments  sm    "ooc2Qq!.ua8+FU__Q99;G
hq!tnlS!rG   c                    t         j                  j                  d      }d}|j                  dd      }|j                  |      dz  }t	        ||      }d}|j                  ||      }|j                  |||      }t        |j                         t        j                  |d	      d
       t        |j                         t        j                  |d	      d       |j                         j                  |j                         j                  cxk(  r|fk(  sJ  J |j                         }	|	j                  ||fk(  sJ t        |	t        j                  |j                        d       t        t        j                  |	      |j                                t        j                  t         j"                  j%                  |	      d   dkD        sJ y )Nr  rh   r   r  r   r  r  r   r   r  r  r  r  )r>   r   r   r  r*   r   r   r   r   r  r@   r   r   r   ru   r  r   r   r   )
r[   r   r   r   r  r   r2  rS  ra   r   s
             rE   r  z%TestDirichletMultinomial.test_moments  sc   ii##$56LLC 


$r)$UA. MM%aM(OOAqqO)		RWWQQ%7dC
BFF11$5DAyy{  DHHJ$4$4>>>>>>hhjyyS#J&&&RVVACC[t4RWWS\488:.vvell'',Q/!3444rG   c                    t        j                  g d      }t        j                  |      }t        j                  g d      }d}t        t        |      5  t        j                  g d||       d d d        t        t        |      5  t        j                  g d||       d d d        d}t        t        |      5  t        j                  |g d|       d d d        t        t        |      5  t        j                  |g d	|       d d d        d
}t        t        |      5  t        j                  ||d       d d d        t        t        |      5  t        j                  ||d       d d d        t        j                  g d      }t        j                  g d      }d}t        t        |      5  t        j                  |||j                                d d d        y # 1 sw Y   yxY w# 1 sw Y   SxY w# 1 sw Y   +xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NrQ   r  z,`x` must contain only non-negative integers.rK   )r   rl   rN   )r   r`  rN   z*`alpha` must contain only positive values.)rN   r   rj   )rN   rl   rj   z#`n` must be a non-negative integer.ǧH@rl   )r   rM   rN   rj   z&`x` and `alpha` must be broadcastable.)r>   r   r   rf  rS   r*   r  )r[   x0n0alpha0textra   r  s          rE   r]   z.TestDirichletMultinomial.test_input_validation  s   XXi VVBZ)$=:T2 	A!((VR@	A:T2 	B!((fbA	B <:T2 	<!((Y;	<:T2 	=!((Z<	= 5:T2 	;!((VT:	;:T2 	9!((VR8	9 HH\"#7:T2 	<!((E1557;	< 	<)	A 	A	B 	B	< 	<	= 	=	; 	;	9 	9	< 	<sT   G(
G5?H2H'HH(9&H4(G25G?HHH%(H14H=rh  c           	      ^   t        j                  g dg dg dg dg      }t        j                  dgdgdgg      }t        j                  g dg d	g      j                  d
      }t        t        |      } ||||      }|j
                  dk(  sJ t        t        |            D ]  }t        t        |            D ]l  }t        t        |            D ]S  }||||f   }	 |||   j                         ||   j                         ||   j                               }
t        |	|
       U n  y )Nr  r  rh   rh   rk   r  r  r  ri   rk   r  rQ   )rM   rM   rN   )rM   r   r   rN   )rM   rN   rj   )
r>   r   r  rv   r*   r@   r  r   r   r   )r[   rh  r  r   ra   rA   r  r  r  res_ijkrB   s              rE   test_broadcasting_pmfz.TestDirichletMultinomial.test_broadcasting_pmf  s   )Y	:FGHHqcA3_%HHi+,44\B.7Qq!yyI%%%s1v 	2A3q6] 2s5z* 2A!!Q'lG 1q1A1A1CQqT\\^TC#GS122	2rG   )r   r  r   c                    t        j                  g dg dg dg dg      }t        j                  dgdgdgg      }t        t        |      } |||      }|dk7  r|j                  d	k(  sJ 	 t        t        |            D ]Y  }t        t        |            D ]@  }|||f   } |||   j                         ||   j                               }	t        ||	       B [ y )
Nr  r  r  r  ri   rk   r  r   )rN   rj   rN   )	r>   r   rv   r*   r@   r  r   r   r   )
r[   r   r  r   rh  rA   r  r  r  rB   s
             rE   test_broadcasting_momentsz2TestDirichletMultinomial.test_broadcasting_moments  s    )Y	:FGHHqcA3_%.<UA)4)=syyI%OO<s1v 	.A3u:& .ad)U1X--/1@-.	.rG   N)r   r   r   rL  r  r  r  r  r  r  rR   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                   :   e Zd Zd Zd Zd Zd Zd Zej                  j                  ej                  j                  d      d               Zej                  j                  dej                  ej                   ej"                  ej$                  g      d	        Zy
)TestNormalInverseGammac           	      L   t         j                  j                  d      }|j                  d      \  }}}}t        j                  ||||      t        j
                  d|z  |dt        j                  ||z  |z        z        }t        j                  ddd      }t        fd	d
t         j                  |f      }|j                  |      }	t        |j                  |	       j                  d|      }t        j                  |d
   |j                        \  }
}|dkD  sJ y )N   &( rj   rM   r   r  r  rh   rB  c                 (    j                  ||       S r=   r   )r  ra   norm_inv_gammas     rE   rb   z8TestNormalInverseGamma.test_marginal_x.<locals>.<lambda>      ^%7%72%> rG   r   rC   rF  r   r   )r>   r   r   r0   normal_inverse_gammar/  r  rA  r1   r   r   r   r  r   ks_1sampr   )r[   r   rg  lmbdar"  r#  r/  ra   rA   rB   r   r  r  s               @rE   test_marginal_xz&TestNormalInverseGamma.test_marginal_x  s     ii##J/**Q-E1a33Bq!DGGAaCRqUQ)?'?@ KKAr">266QRPTUeeAhc*   e# >NN3q61551	6||rG   c                 *   t         j                  j                  d      }|j                  d      \  }}}}t        j                  ||||      t        j
                  ||      }t        j                  ddd      }t        fdt         j                   t         j                  |f      }|j                  |      }	t        |j                  |	       j                  d|	      }t        j                  |d
   |j                        \  }
}|dkD  sJ y )Nr  rj   r  r   r  c                 (    j                  | |      S r=   r  )ra   r  r  s     rE   rb   z9TestNormalInverseGamma.test_marginal_s2.<locals>.<lambda>  r  rG   r  rF  r   r   )r>   r   r   r0   r   r   rA  r1   r   r   r   r  r   r!  r   )r[   r   rg  r"  r"  r#  	inv_gammar  rA   rB   r   r  r  s               @rE   test_marginal_s2z'TestNormalInverseGamma.test_marginal_s2  s     ii##J/**Q-E1a33Bq!DNN1A.	 [[b"%>wbU4mmBc*   e# >NN3q69==9	6||rG   c                 z   t         j                  j                  d      }|j                  d      dz
  \  }}}}|j                  d      dz
  \  }}t        j                  ||||      j                  ||      }t        j                  j                  ||||||      }	t        |t        j                  |	             y )Nr  )rj   r  r>  )rM   r  r   )	r>   r   r   r0   r   r   r   r   r  )
r[   r   rg  r"  r"  r#  ra   r  rA   rB   s
             rE   test_pdf_logpdfz&TestNormalInverseGamma.test_pdf_logpdf&  s    ii##J/**W-4E1a

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

12((1=AA!RHS"&&!((RA6::1bAS"&&!((UAq9==aDS"&&!((UAr:>>q"ES"&&!((UAq9==aDS! ((b"&&\1a@DDQKS"&&!((RA6;;=S266266*+((UB:>>@S266266*+]]:-KL 	?&&r5!R8<<>	? 	? 	?s   !'KKc                    t         j                  j                  d      }|j                  d      }|j                  d      dz   }|j                  d      }|j                  d      }|j                  d      }|j                  d      }t        j                  ||||      }t        j
                  ||||||      }	|	D 
cg c]  }
t        j                  |
       }}
|j                  ||      }|j                  |	d   j                  k(  sJ t        |j                         t        j                  j                  |        |j                  ||      }|j                  |	d   j                  k(  sJ t        |j                         t        j                  j                  |        t        j
                  ||||      }	|	D 
cg c]  }
t        j                  |
       }}
|j                         }|d   j                  |	d   j                  k(  sJ t        |d   j                         |d	   j                         ft        j                  j                  |        |j                         }|d   j                  |	d   j                  k(  sJ t        |d   j                         |d	   j                         ft        j                  j                  |        d
}t         j                  j                  d      }|j                  ||      }t         j                  j                  d      }d}t        j                  j                  |||d}t        |d   j                  |      |d	   j                  |      f|       y c c}
w c c}
w )Nr  rM   )rN   r   )rj   r   r   )rh   r   r   r   )ri   r   r   r   r   )rk   r   r   r   r   r   r   r   )ri   rh   rj   rN   rM   l   Mr   )ri   x   )r>   r   r   r0   r   broadcast_arraysr  r   r@   r   r   r   r  r   r  )r[   r   r#  r"  r"  rg  r  ra   r   broadcastedarrbroadcasted_raveledrA   r   r@   rB   s                   rE   r  z(TestNormalInverseGamma.test_broadcastingQ  s    ii##J/JJqMJJv"

9%ZZ%ZZ(JJ)*))"eQ: ))!RUAqA8CDrxx}DDhhq"oyyKN00000		22668KL	N kk!R yyKN00000		2299;NO	Q ))"eQ:8CDrxx}D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hhDsh3ii##M2((,,.A:=?Q.Au0EFLE E Es   ?M=Nr  c                    t         j                  j                  d      }|j                  d      \  }}}}|dz  }t        j                  ||||      j                         }t        fdt         j                   t         j                  dt         j                        }t        |d   |d   d       t        fdt         j                   t         j                  dt         j                        }t        |d	   |d   d       y )
Nr  rj   rM   c                 .    j                  ||       |z  S r=   r  r  ra   r   s     rE   rb   z5TestNormalInverseGamma.test_moments.<locals>.<lambda>  s    DHHQOa$7 rG   r   r  r  c                 .    j                  ||       | z  S r=   r  r4  s     rE   rb   z5TestNormalInverseGamma.test_moments.<locals>.<lambda>  s    DHHQOb$8 rG   r   )	r>   r   r   r0   r   r   r6   r   r   )	r[   r   rg  r"  r"  r#  rA   rB   r   s	           @rE   r  z#TestNormalInverseGamma.test_moments  s     ii##J/**Q-E1a	Q))"eQ:iik7"&&"&&!RVVTAAT28266'2661bffUAAT2rG   r   c                 ^   t         j                  dk  rt        j                  d       t         j                  j                  d      }|j                  ddd      j                  |      \  }}}}}}t        j                  d|      }	t        j                  ||||      }
|
j                         d	   j                  |	k(  sJ |
j                         d
   j                  |	k(  sJ |
j                         d	   j                  |	k(  sJ |
j                         d
   j                  |	k(  sJ |
j                         d	   j                  |	k(  sJ |
j                         d
   j                  |	k(  sJ |
j                  ||      j                  |	k(  sJ |
j!                  ||      j                  |	k(  sJ y )N2z*Scalar dtypes only respected after NEP 50.r  rN   r  ri   r   r   r   r   )r>   __version__rR   r   r   r   r   astyperesult_typer0   r   r   r   r   r  r   r   )r[   r   r   ra   r  rg  r"  r"  r#  	dtype_outr   s              rE   
test_dtypez!TestNormalInverseGamma.test_dtype  sr   >>CKKDEii##J/!$Q!;!B!B5!I2r5!QNN3.	))"eQ:xxz!}""i///xxz!}""i///yy{1~##y000yy{1~##y000xxz!}""i///xxz!}""i///{{1b!''9444xx2$$	111rG   N)r   r   r   r#  r'  r)  r+  r  rR   r   r|  	fail_slowr  r   r>   int32float16r  r  r<  r   rG   rE   r  r    s    *,* ?D1Mf [[[[23  3 [[WrxxRZZ&TU2 V2rG   r  r  )lrG  r  dataclassesr   numpy.testingr   r   r   r   r   r	   rR   r
   rf  test_continuous_basicr   numpyr>   scipy.linalgr   scipy.stats._multivariater   r   r   scipy.statsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   scipy.stats._continuous_distnsr/   r4  r0   scipy.integrater1   r2   r3   r4   r5   r6   r7   scipy.specialr8   r-  common_testsr9   	data._mvtr:   unittest.mockr;   rF   rI   r   r   r   r   rO  r`  r~  r  r  r  rh  rj  r  r  r  r7  rV  rs  r  r  r  r\  r  r   r  r  r  r  r  r   rG   rE   <module>rM     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   