
    5[gV                       d Z ddlZddlmZmZmZmZmZmZ ddl	Z	ddl	m
Z ddlmZ ddlZddlZddl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-m.Z.m/Z/m0Z0m1Z1m2Z2 dd	lm3Z3m4Z4 dd
lm5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZA d ZB G d d      ZCd8dZDd ZE G d d      ZF G d d      ZG G d d      ZHd ZI G d d      ZJ G d d      ZK G d  d!      ZL G d" d#      ZM G d$ d%      ZN G d& d'      ZO G d( d)      ZP G d* d+      ZQ G d, d-      ZR G d. d/      ZS G d0 d1      ZTd2 ZUd3 ZV G d4 d5      ZW G d6 d7      ZXy)9z8
Test functions for multivariate normal distributions.

    N)assert_allcloseassert_almost_equalassert_array_almost_equalassert_equalassert_array_lessassert_)raises   )check_distribution_rvs)_PSD_lnB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)_covariance
Covariance)stats)rombqmc_quad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       ^/var/www/html/bid-api/venv/lib/python3.12/site-packages/scipy/stats/tests/test_multivariate.pyassert_closer?   *   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
   rF   rG   )pytestr	   
ValueErrorr+   CovViaPrecisionr7   oneseyeCovViaDiagonalCovViaCholeskyCovViaEigendecompositionselfmessages     r>   test_input_validationz$TestCovariance.test_input_validation2   s   N]]:W5''
3 6 E]]:W5''q	bffQiH 6 L]]:W5&&x0 6 N]]:W5&&rwwqz2 6 I]]:W500(BFF1I1FG 6 A]]:W500"''!*h1GH 6 N]]:W500)RVVAY1GH 651 65 65 65 65 65 65 65sS   )H.,>H;I
)I+I"(+I.8-I:.H8;III"I+.I7:Jc                     t        | d      S )NTallow_singular)r   )xs    r>   <lambda>zTestCovariance.<lambda>T   s    %)!D%Ar@   )Diagonal	PrecisionCholeskyEigendecompositionPSDrJ   )   r
   rG   )r
         )rG   rc      )r
   r   rG   )ra   r   )re   ra   r   r   r   r   )diagonal full rankzgeneral full rankzdiagonal singularzgeneral singularr
   N)r   re   rh   cov_type_namere   c                 ~   t        j                  g d      }g d}t        t        d|       }| j                  |   }t        t
        d|j                                } | ||            } | ||            }t        |      t        |      k(  sJ t        |j                  |      |j                  |             y )NrJ   )rF   ra   CovViafrom_)
r7   diaggetattrr+   _covariance_preprocessingr,   lowertyper   whiten)	rT   ri   ArZ   cov_typepreprocessingfactoryr:   r;   s	            r>   test_factorieszTestCovariance.test_factories`   s    GGI;&(@A66}E*m.A.A.C-D&EFmA&'}Q'(CyDI%%%

1szz!}5r@   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 )Nrl    does not support 	 matricesTrX      VGiVK rG   size	_colorizesingularrF   rc   rG   rF   re   axis)
_cov_typesrK   skip	_matricesro   r+   rp   r   r?   log_pdetr   rankr9   r7   r8   rH   randomdefault_rngrs   UhasattrcolorizesumrO   lenT)rT   ry   ri   rU   rt   ru   rv   psd
cov_objectrngrZ   r:   r;   s                r>   test_covariancezTestCovariance.test_covariancen   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( ,r@   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 )Nrl   r{   r|   皙?皙?333333?TrX   r}   r~   r   random_stateseed)r   rK   r   r   ro   r+   rp   r   r7   r   r   rvs
isinstance	CovViaPSDr?   squeezer   r9   pdflogpdfentropy)rT   r   ry   ri   rU   rt   ru   rv   meanr   mvndist0dist1r   rZ   x1x2s                    r>   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6r@   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 )Nrg   rl   r   TrX   r}   r~   )r   ro   r+   rp   r   r7   r   r   r?   cdflogcdf)rT   r   ri   ry   rt   ru   rv   r   r   r   r   r   r   rZ   s                 r>   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6r@   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.rD   )rK   r	   NotImplementedErrorr,   rS   s     r>   test_covariance_instantiationz,TestCovariance.test_covariance_instantiation   s'    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
   rF   g:0yEr   zThe input matrix must be...rD   l   .ypGw r   )r7   rn   r9   zerosrK   r	   rL   r   r   r   r   r,   from_eigendecompositionlinalgeighr   )rT   rt   nr   r   rng1rng2covrvr:   r;   s              r>   test_gh9942zTestCovariance.test_gh9942   s    
 GGM"GGAJxx{ ]]:-JKa(,,. L #yy$$T*yy$$T*001BC s+ff$f'!%%dCdCS# LKs   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 )	NrF   r   r   r~         ?        g      y@r   r
   )r7   rN   r,   r   r   rO   scipyr-   r   r   r   array)rT   r   r   distr   s        r>   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   r@   )__name__
__module____qualname__rV   r7   rn   r   invcholeskyr   rp   r   list_all_covariance_typesr   r   rK   markparametrizerx   r   tupler   r   r   filterwarningsr   r    r@   r>   rB   rB   0   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 :,!r@   rB   c                    |j                  | | f      }||j                  z  }t        j                  j	                  |      \  }}|r|j                  |       dkD  }d||<   |t        j                  |      z  |j                  z  }|S )Nr~   r   )r   r   r7   r   r   normalrn   )	dimevalsr   r   rt   _v	zero_eigsr   s	            r>   _random_covariancer     s{     	

C:A	ACCA99>>!DAqJJCJ(1,	i
bggen
qss
"CJr@   c                     t         j                  j                  | |       }t        j                  j                  |      \  }}}|S r6   )r7   r   randnr   r   svd)r   Musr   s        r>   _sample_orthonormal_matrixr     s5    
		1Allq!GAq!Hr@   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&d! Z'd" Z(ej$                  j'                  d#d$      d%        Z)d& Z*ej$                  j'                  d' ejV                  d(       ejV                  d)      g      d*        Z,ej$                  j'                  d+ ejV                  d,       ejV                  d-       ejV                  d.      g      d/        Z-d0 Z.d1 Z/d2 Z0y3)4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 )NrG   rF   r   r
   r   r
   rF   )r7   arangeidentityassert_raisesrL   r   r   r   )rT   mur   s      r>   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#Nr@   c                    t         j                  j                  d       d\  }}}t        j                  |||      }t        |j                  d       t         j                  j                  d      }t         j                  j                  d      }t        j                  t         j                  j                  d            }t        j                  |||      }t        |j                  d       d\  }}}t        j                  |||      }t        |j                  d       t         j                  j                  d      }t         j                  j                  d      }t        j                  t         j                  j                  d            }t        j                  |||      }t        |j                  d       y )N  )      ?g333333?      @r   ra   )
r7   r   r   r   r   r   ndimr   absr   )rT   rZ   r   r   r   r   s         r>   test_scalar_valuesz)TestMultivariateNormal.test_scalar_values-  s6   
		t %4!%%as3SXXq! IIOOAyyq!ffRYY__Q'(!%%as3SXXq! %4!%%as3SXXq! IIOOAyyq!ffRYY__Q'(!%%as3SXXq!r@   c                    t         j                  j                  d       t         j                  j                  d      }t         j                  j                  d      }t        j                  t         j                  j                  d            }t        j                  |||      }t        j                  |||      }t        |t        j                  |             y Nr   ra   )
r7   r   r   r   r   r   r   r   r   logrT   rZ   r   r   d1d2s         r>   test_logpdfz"TestMultivariateNormal.test_logpdfH      
		tIIOOAyyq!ffRYY__Q'( ''45 $$Qc2BFF2J'r@   c                    t         j                  j                  d       t         j                  j                  d      }t	        j
                  |      }t	        j                  |      }t	        j
                  |d d      }t	        j                  |d d      }t        |t        j                  |             t        |t        j                  |             y Nr   ra   r
   )	r7   r   r   r   r   r   r   r   r   rT   rZ   r   r   d3d4s         r>   test_logpdf_default_valuesz1TestMultivariateNormal.test_logpdf_default_valuesR       			tIIOOA ''* $$Q' ''43 $$Qa0BFF2J'BFF2J'r@   c                    t         j                  j                  d       t         j                  j                  d      }t         j                  j                  d      }t        j                  t         j                  j                  d            }t        j                  |||      }t        j                  |||      }t        |t        j                  |             y r   )
r7   r   r   r   r   r   r   r   r   r   r   s         r>   test_logcdfz"TestMultivariateNormal.test_logcdf_  r   r@   c                    t         j                  j                  d       t         j                  j                  d      }t	        j
                  |      }t	        j                  |      }t	        j
                  |d d      }t	        j                  |d d      }t        |t        j                  |             t        |t        j                  |             y r   )	r7   r   r   r   r   r   r   r   r   r   s         r>   test_logcdf_default_valuesz1TestMultivariateNormal.test_logcdf_default_valuesi  r  r@   c                    t         j                  j                  d       d}t         j                  j                  |      }t	        d|dz         D ]p  }t         j                  j                  ||      }t        j
                  ||j                        }t        ||d      }t        |j                  j                  |       r y )Nr   rc   r
   TrX   )r7   r   r   r   rangedotr   r   r   r   r   )rT   r   r   expected_rankr   r   distns          r>   	test_rankz TestMultivariateNormal.test_rankv  s    
		tyyq!"1a!e_M		=1A&&ACC.C'c$GE))..>	 -r@   c           	         t        dd      D ]  }t        j                  j                  |      }t        d|      D ]  }t        j                  j                  ||      }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 )Nr
   ra   TrX   re   r   )r  r7   r   r   r	  r   r   r   r   r   r   r   r   r   r   inf)rT   r   zkr   cov_kkcov_nnrZ   r   cov_rry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                          r>   test_degenerate_distributionsz4TestMultivariateNormal.test_degenerate_distributions  sB   q!A		"A1a[IIOOAq)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] ! r@   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
   rF   rb   r
   r   r   r   T)r   r   rY   r   )r  r7   r   r   r	  r   r   r   r   r   r   allr   r  )
rT   r  r   rmnr   vrXr   r   s
             r>   test_degenerate_arrayz,TestMultivariateNormal.test_degenerate_array  s     q!A1a[XXa[.q1!RaR%8VVAqss^'++!D)--abb=ACSXXq)vvcCi(((,33ABBCGIV[[!,vvfw./// ! r@   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   rF   dtyper   r
   )r7   expr   floatfill_diagonalr   r   r   detr  r   slogdetr   r   )rT   large_total_lognposnzerolarge_entryr   r   r   s           r>   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6r@   c                    t         j                  j                  d       d}t         j                  j                  ||      }t        j                  ||j
                        }t         j                  j                  |      }t         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 )Nr   rc   rF   rG   MbP?rtol)r7   r   r   r   r	  r   r   r   r   r  r   )rT   r   datar   r   r)  desired_pdfdesired_cdfijactuals              r>   test_broadcastingz(TestMultivariateNormal.test_broadcasting  s   
		t yyq!$ffT466"yyq! IIOOAq!$ *--as;)--as;qA1X,001a4$DAaC(89,001a4$DAaC(8tD  r@   c                 .   t        j                  ddd      }d\  }}|dz  }t        j                  |||      }t	        j                  |||      }t        ||       t        j                  |||      }t	        j                  |||      }t        ||       y )Nr   rF   r#  )333333??      ?)r7   linspacer   r   r   r   r   )rT   rZ   r   r   scaler   r   s          r>   test_normal_1Dz%TestMultivariateNormal.test_normal_1D  s     KK1b!	cSXXau% $$Qc2BXXau% $$Qc2Br@   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 )Nr   g      @rG  r   333333?i  rb   r
   r   rF   r   r   r   )locrI  )r
   r
   {Gz?r<  atol)
r7   r   rH  meshgridemptyr   r   r.   r   r   )rT   r   r   r   deltar   xvyvposr   margin_xmargin_ygauss_xgauss_ys                 r>   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@r@   c                    t         j                  j                  d       t         j                  j                  d      }t         j                  j                  d      }t        j                  t         j                  j                  d            }t        ||      }t        |j                  |      t        j                  |||             t        |j                  |      t        j                  |||             t        |j                  |      t        j                  |||             t        |j                  |      t        j                  |||             y r   )r7   r   r   r   r   r   r   r   r   r   r   )rT   rZ   r   r   norm_frozens        r>   test_frozenz"TestMultivariateNormal.test_frozen"  s    
		tIIOOAyyq!ffRYY__Q'()$4*,?,C,CAtS,QR**1-+221dC@	B*,?,C,CAtS,QR**1-+221dC@	Br@   rH   rF   r
   c                     t        j                  d      }t        j                  d      }t        ||      }t        j                  |j
                  |      sJ t        j                  |j                  |      sJ y )NrF   rF   )r7   rN   rO   r   allcloser   r   )rT   rH   r   cov_should_ber^  s        r>   2test_frozen_multivariate_normal_exposes_attributeszITestMultivariateNormal.test_frozen_multivariate_normal_exposes_attributes0  s\     wwt}q	)$
;{{;++T222{{;??M:::r@   c           
         t         j                  j                  d       d}t         j                  j                  ||      }t        j                  ||j
                        }t        j                  j                  |      \  }}t        j                  |d      }d|d<   d|d<   t        j                  |t        j                  t        j                  |      |j
                              }d}t        ||	      }t        |j                  |	      }t        |j                  t        j                  t        j                   |d d                    t        |j                   |j                         y )
Nr   rd   rG  r   r   Hz>re   h㈵>)cond)r7   r   r   r   r	  r   r   r   r   fullrn   r   pinvr   r   r   r   )	rT   r   rZ   r   r   r   rh  r   psd_pinvs	            r>   test_pseudodet_pinvz*TestMultivariateNormal.test_pseudodet_pinv>  s    			tIIOOAq!ffQn||  %1GGAsO!"ffQrwwqz133/0 3T"t, 	bffRVVAcrF^&<= 	x'8'89r@   c                 >    g dg dg}t        t        t        |       y )NrJ   rc   ra   rb   r   rL   r   rT   r   s     r>   test_exception_nonsquare_covz3TestMultivariateNormal.test_exception_nonsquare_covX  s    )$j$,r@   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   )r7   nanr   rL   r   r  )rT   cov_nancov_infs      r>   test_exception_nonfinite_covz3TestMultivariateNormal.test_exception_nonfinite_cov\  sF    q6Arvv;'j$0q6Arvv;'j$0r@   c                 >    ddgddgg}t        t        t        |       y )Nr
   r   re   ro  rp  s     r>   test_exception_non_psd_covz1TestMultivariateNormal.test_exception_non_psd_covb  s     1v2wj$,r@   c                    t         j                  j                  d       t         j                  j                  d      }t         j                  j                  d      }t        j                  d      }t         j
                  j                  }t        |t        ||       t        |t        j                  |||       t        |t        j                  |||       t        |t        j                  |||       t        |t        j                  |||       d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)	Nr   ra   )ra   ra   r   r   z0When `allow_singular is False`, the input matrixrD   r   )r7   r   r   r   rN   r   LinAlgErrorr   r   r   r   r   r   rK   r	   )rT   rZ   r   r   emsgs         r>   test_exception_singular_covz2TestMultivariateNormal.test_exception_singular_covf  s   
		tIIOOAyyq!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   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   rF   ra   rG   )r
   rG   rF   dr
   rF   r   )rF   ra   rG  )r   rG  rG   绽|=rQ  )gwk:E]?g̙Z?g0?gL8?gAG*?gh㈵>)gIى?gG?gƏ)?gėh?gEE?r
   rg  )	r7   r   rH  cosr   r   r   r   r   )rT   r_pdfrZ   r  r  r&  r   r   r   r_cdfr   r_cdf2r2mean2cov2cdf2s                   r>   test_R_valuesz$TestMultivariateNormal.test_R_valuesy  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0r@   c                     t        j                  d      }t        j                  d      }t        ||d      }|j                         }t	        |ddg       y )NrF   rF   rF   TrX   r   )r7   r   r   r   r   )rT   r   rH   modelsamples        r>   ,test_multivariate_normal_rvs_zero_covariancezCTestMultivariateNormal.test_multivariate_normal_rvs_zero_covariance  sD    xx{XXf%
#D*TJVaV$r@   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,  rc   r
   r$  rF   r   r   r   )r   r   r7   r   r   r9   r   )rT   Nr  r  r   s        r>   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)r@   c                    t         j                  j                  d       d}t         j                  j                  |      }t         j                  j                  ||      }t        j                  ||j
                        }d}t        j                  |||      }t        t        j                  |j
                        |d       t        |j                  d      |d       y )N  rG     r   r;  r   )r7   r   r   r   r	  r   r   r   r   r   r   )rT   r   r   r   r   r   r  s          r>   test_large_samplez(TestMultivariateNormal.test_large_sample  s     			tyyq!IIOOAq!ffQn$((sD9vxx(#D9A48r@   c                    t         j                  j                  d       d}t         j                  j                  |      }t         j                  j                  ||      }t        j                  ||j
                        }t        ||      }t        |j                         t        j                  ||             t         j                  j                  |      d   }d|t        j                  dt         j                  z        dz   z  t        j                  t        j                  |            z   z  }t        ||j                                y )Nr  rG   r   rG  rF   r
   )r7   r   r   r   r	  r   r   r   r   r   eigr   pir   )rT   r   r   r   r   r   eigsdesireds           r>   test_entropyz#TestMultivariateNormal.test_entropy  s    
		tyyq!IIOOAq!ffQn s+ 	BJJL*=*E*EdC*PQ yy}}S!!$1q255y 1A 56t9MMNGRZZ\2r@   c                     t        j                  g d      }d}t        t        j                  t	        |            |       y )Nr
   r
   r
   rG  )r7   r   r   r/  r   )rT   alphar  s      r>   test_lnBzTestMultivariateNormal.test_lnB  s,    #BFF4;/9r@   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   rF   )rc   rG   rF   rb   rG   lower_limit.r
   re   r   )r7   r   r   rO   r   r   concatenater   )rT   r   r   r   abcdf1cdf2acdf2bab1ab2cdf2ab1cdf2ab2r  s                 r>    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#r@   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  rG   rG   rG   rF   rG   rb   r  -C6?r;  )	r7   r   r   r   r   r   r/  r   r   )
rT   r   r   r   r  r  r  r  cdf3cdf4s
             r>   %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.r@   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 )	NrG   r  rf   r
   r   r
   r   r
   r   r
   re   re   r
   r  r   r7   r   rO   r   r   r   r   )rT   r   r   r  r  expected_signsr   s          r>   test_cdf_signsz%TestMultivariateNormal.test_cdf_signs   so    xx{ffQi	9i8	9i8.1!%%asBSVN23r@   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
   rJ   z7`cov` represents a covariance matrix in 3 dimensions...rD   r   )rG  rG  rG  rf   rz  r  )r7   rn   r   r+   rM   rK   r	   rL   r   r   r   r   )rT   Pr   rU   rZ   r;   s         r>   test_mean_covz$TestMultivariateNormal.test_mean_cov+  s    GGA++, 003
K]]:W5''A
; 6 ]]:W5A
3 6 !%%aJ?(,,QJ?E!%%aJ?(,,QzBCH 65 65s    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
   rG   z`x` must be two-dimensional.rD   )rK   r	   rL   r   fit)rT   r=  	error_msgs      r>   test_fit_wrong_fit_data_shapez4TestMultivariateNormal.test_fit_wrong_fit_data_shape>  s8    1v2	]]:Y7##D) 877s   AA
r   )rG   ra   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;  )	r7   r   r   r   r  r   r   r   r   )rT   r   r   rZ   mean_estcov_estmean_refcov_refs           r>   test_fit_correctnessz+TestMultivariateNormal.test_fit_correctnessD  sy    ii##$45JJSz"/33A6'GGAA.qss0C'(7u5r@   c                     t        j                  dd      }d}t        j                  d      }t        j                  |||      \  }}t        ||       t        ||       y )N)rF   r
   rG   r   )fix_meanfix_cov)r7   ri  
atleast_2dr   r  r   )rT   r=  
mean_fixed	cov_fixedr   r   s         r>   test_fit_both_parameters_fixedz5TestMultivariateNormal.test_fit_both_parameters_fixedM  sT    wwvq!
MM"%	'++D:4=?	cT:&S)$r@   r  r  rG   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`.rD   rF   r  rK   r	   rL   r   r  r7   rO   )rT   r  r}  s      r>   "test_fit_fix_mean_input_validationz9TestMultivariateNormal.test_fit_fix_mean_input_validationV  s<    C]]:S1##BFF1IA 211   +AAr  ra  )rG   rF   )rc   rc   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`.rD   rG   r  r  )rT   r  r}  s      r>   +test_fit_fix_cov_input_validation_dimensionzBTestMultivariateNormal.test_fit_fix_cov_input_validation_dimension^  s=     ]]:S1##BFF1Iw? 211r  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.rD   r   r   g      rF   r  )rK   r	   rL   r7   r   r   r  rO   )rT   r  r  s      r>   *test_fit_fix_cov_not_positive_semidefinitezATestMultivariateNormal.test_fit_fix_cov_not_positive_semidefiniteh  sT    H	]]:Y7hhR2s)45G##BFF1Iw? 877s   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 )	Nr  rG   r  r,  r   r   r   r   r   r  :0yE>)r7   r   r   r	  r   r   r   r  r   r   r   )rT   r   rN  rt   r   samples	mean_freecov_free	logp_freemean_fixcov_fixlogp_fixmcov_perturbedlogp_perturbeds                  r>   test_fit_fix_meanz(TestMultivariateNormal.test_fit_fix_meann  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 	 (((r@   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 )Nr  rG   r  r,  r  r   r  r   r   r  )r7   r   r   r	  r   r   r   r  r   r   r   r   )rT   r   rN  rt   r   r  r  r  r  r  r  r  mean_perturbedr  s                 r>   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 	 (((r@   N)1r   r   r   r   r   r   r  r  r  r  r!  r*  r8  rC  rJ  r\  r_  rK   r   r   r7   rO   r,   from_diagonalrd  rl  rq  rv  rx  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r   r@   r>   r   r   $  s   O"6((((	?26h0,70E0 A2B [[BFF1I$J$$aV,	
;;:4-1-)&>1@%*"9"3$:$(/$	4I&* [[UF+6 ,6% [[Z("((6*:*2"((5/*; <B<B [[Y%)1&)9)1&)9); <@<@@):)r@   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 )Nrc   rG   r   rG  ffffff?)ra   rc   rG   r#  )r7   ri  r   r   rL   r   r   r   r   r{  r   rN   )rT   num_rowsnum_colsr   r   Vr|  s          r>   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!Lr@   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 )Nrc   rG   r   rG  r  r
   r   rowcovcolcov)r   )r  )r  )r   r  )r   r  )r  r  )r7   ri  r   r   r   r   r   r9   r  r  r   )rT   r  r  r   r   r  ZZrZcIrIcI1s               r>   test_default_inputsz$TestMatrixNormal.test_default_inputs  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?r@   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 )Nrc   rG   r   r   r   r  )r7   ri  r   r   r   r  r  )
rT   r  r  r   UvUsVvVsr  r  s
             r>   test_covariance_expansionz*TestMatrixNormal.test_covariance_expansion  s    GGXx(#.WWXs#WWXs#[["[["]"R@GGV	]"R@GGV	]"R@GGV	]"R@GGV	r@   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
   ra   r   rG  r  r  r   r   )r   r  r  r   )	r  r7   ri  r   r   r   r   r   r   )rT   r@  rA  r   r   r  frozenrvs1rvs2r)  pdf1pdf2logpdf1logpdf2s                 r>   test_frozen_matrix_normalz*TestMatrixNormal.test_frozen_matrix_normal   s.   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.)   r@   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
   ra   r   rG  r  r  r   r   r   r  r;  )r  r7   ri  r   r   r   r   r   r   r   flattenkronr   r   )rT   r@  rA  r   r   r  r  r)  r  r  entropy1vecXvecMr   r  r  entropy2s                    r>   test_matches_multivariatez*TestMatrixNormal.test_matches_multivariate  sR    qA1QZ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)   r@   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 )Nrc   rG   r   rG  r  r#  r  r   r   i  r   r   rF   r  )r7   ri  r   r   r   r  newaxisr   r9   r   r  r   )rT   r  r  r   r   r  r  r  X1X2r)  array_logpdfr@  rA  separate_logpdfs                  r>   test_array_inputz!TestMatrixNormal.test_array_input2  sm   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A1X"/"6"6q1vA>?#Kac1BEJ  r@   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 )Nrc   rG   r   rG  r    r  r   r   r   r   r   r  r
   rF   )r7   ri  r   r   r   r   r   r   reshaper   swapaxes)rT   r  r  r   r   r  r  r  r)  sample_meansample_colcovsample_rowcovs               r>   test_momentszTestMatrixNormal.test_momentsI  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3r@   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
   rF   rG   rc   re   ra   r#  r   )r   r  r  r   r   g6?gǀgcϿ@g"'@gI2͖@g^jy%@gDn3@g|\3@)r   r   r7   r   r   r   r   )rT   rB  expecteds      r>   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
 	)r@   N)r   r   r   r  r  r  r  r  r$  r,  r/  r   r@   r>   r  r    s.    M4%@N,/044K.4,*r@   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           	      R   t         j                  j                  d       t         j                  j                  dd      }t         j                  j	                  dd|      }t        |      }t        |j                         t        j                  |             t        |j                         t        j                  |             t        |j                         t        j                  |             d}t        |      D ]  }t         j                  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#  re   )r7   r   r   randintr   r   r   varr   r   r  r   r   r   rT   r   r  r  	num_testsr@  rZ   s          r>   test_frozen_dirichletz#TestDirichlet.test_frozen_dirichlett  s)   
		tIIa$		!!&#q1eQUUWimmE23QVVXy~~e45QYY[)"3"3E":;	y!A		!!&#q1ANAq"v	afe(DE!CR&)9+;+;AcrFE+JK	 "r@   c                 j   t         j                  j                  d       t        j                  g d      }t         j                  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          @      @rd   r~   )rd   rG   re   )r7   r   r   r   r   r   r9   r   rL   r   r   r   rT   r  rZ   s      r>   "test_numpy_rvs_shape_compatibilityz0TestDirichlet.test_numpy_rvs_shape_compatibility  s    
		t)IIA.QWWf%j)--E:j)"2"2Au=acc5!acc#2h&e$Sb5)r@   c                 H   t         j                  j                  d       g d}t         j                  j                  t        j                  d|      d      j
                  }t        t        t        j                  ||       t        t        t        j                  ||       y )Nr  )r   r   r>  r5  rd   r~   
r7   r   r   r   maximumr   r   rL   r   r   r?  s      r>   test_alpha_with_zerosz#TestDirichlet.test_alpha_with_zeros  sg    
		tII

4 7a@BBj)--E:j)"2"2Au=r@   c                 H   t         j                  j                  d       g d}t         j                  j                  t        j                  d|      d      j
                  }t        t        t        j                  ||       t        t        t        j                  ||       y )Nr  )r   g       r>  r5  rd   r~   rB  r?  s      r>    test_alpha_with_negative_entriesz.TestDirichlet.test_alpha_with_negative_entries  sg    
		t II

4 7a@BBj)--E:j)"2"2Au=r@   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   rb   )r7   r   r   r   r   r   r   r?  s      r>   test_data_with_zerosz"TestDirichlet.test_data_with_zeros  s    -.HH)*aE"-.IMM!U3Q7I,,Q6q	Br@   c                     t        j                  g d      }t        j                  g d      }t        t        t        j
                  ||       t        t        t        j                  ||       y )N)r   rG  r>  rI  rJ  r7   r   r   rL   r   r   r   r?  s      r>   $test_data_with_zeros_and_small_alphaz2TestDirichlet.test_data_with_zeros_and_small_alpha  F    -.HH)*j)--E:j)"2"2Au=r@   c                     t        j                  g d      }t        j                  g d      }t        t        t        j
                  ||       t        t        t        j                  ||       y )NrH  )r   皙r   r  rM  r?  s      r>   test_data_with_negative_entriesz-TestDirichlet.test_data_with_negative_entries  sF    -.HH*+j)--E:j)"2"2Au=r@   c                     t        j                  g d      }t        j                  g d      }t        t        t        j
                  ||       t        t        t        j                  ||       y )NrH  )r   皙?r   r  rM  r?  s      r>    test_data_with_too_large_entriesz.TestDirichlet.test_data_with_too_large_entries  rO  r@   c                     t        j                  g d      }t        j                  dd      }t        t        t
        j                  ||       t        t        t
        j                  ||       y )Nr<  )rF   rd   rd   g$I$I?r7   r   ri  r   rL   r   r   r   r?  s      r>   test_data_too_deep_cz"TestDirichlet.test_data_too_deep_c  sF    )GGIv&j)--E:j)"2"2Au=r@   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>  rI  )rF   rF   rd         ?rW  r?  s      r>   test_alpha_too_deepz!TestDirichlet.test_alpha_too_deep  sS    3*sCj12GGIu%j)--E:j)"2"2Au=r@   c                     t        j                  g d      }t        j                  dd      }t        j                  ||       t        j
                  ||       y )Nr<  rG   rd   UUUUUU?)r7   r   ri  r   r   r   r?  s      r>   test_alpha_correct_depthz&TestDirichlet.test_alpha_correct_depth  s>    )GGFE"aE"r@   c                     t        j                  g d      }t        j                  dd      }t        t        t
        j                  ||       t        t        t
        j                  ||       y )Nr<  r]  rG  rW  r?  s      r>   test_non_simplex_dataz#TestDirichlet.test_non_simplex_data  sF    )GGFE"j)--E:j)"2"2Au=r@   c                     t        j                  g d      }t        j                  dd      }t        t        t
        j                  ||       t        t        t
        j                  ||       y )NrH  )rF   rd   rG  rW  r?  s      r>   test_data_vector_too_shortz(TestDirichlet.test_data_vector_too_short  G    -.GGFE"j)--E:j)"2"2Au=r@   c                     t        j                  g d      }t        j                  dd      }t        t        t
        j                  ||       t        t        t
        j                  ||       y )NrH  )ra   rd   r   rW  r?  s      r>   test_data_vector_too_longz'TestDirichlet.test_data_vector_too_long  rd  r@   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   rG  皙?r   )UUUUUU?{Gz?Q?)rk  )rn  rl  O贁N)ro  rp  rm  )r7   r   r   r   r   r7  r   )rT   r  r  expected_meanexpected_varexpected_covs         r>   test_mean_var_covzTestDirichlet.test_mean_var_cov  sh     (e'-../
 	"!&&(M:!!%%'<8!!%%'<8r@   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   )	r7   r   r   r   r   r   r7  r   r   )rT   r  r  s      r>   r   z TestDirichlet.test_scalar_values  sy    #e 	QVVX]]A&QUUW\\1%QUUB4[%%q)QXXrd^((!,r@   c                    t         j                  j                  d       t         j                  j                  dd      }t         j                  j	                  dd|      }t        |      }d}t        |      D ]h  }t         j                  j	                  dd|      }|t        j                  |      z  }t        |j                  |d d       |j                  |             j y r3  )
r7   r   r   r6  r   r   r  r   r   r   r8  s          r>    test_K_and_K_minus_1_calls_equalz.TestDirichlet.test_K_and_K_minus_1_calls_equal  s     			tIIa$		!!&#q1e	y!A		!!&#q1ANAafquuQx8 "r@   c                    t         j                  j                  d       t         j                  j                  dd      }t         j                  j	                  dd|      }t        |      }d}d}d }t        |      D ]  }t        |      D ]W  }t         j                  j	                  dd|      }	|	t        j                  |	      z  }	|t        j                  ||	f      }V|	}Y |j                  |j                        }
d }|D ].  }|j                  |      }|t        j                  ||      }-|}0 t        |
|        y )Nr  r
   r4  r5  r,  r#  ra   )r7   r   r   r6  r   r   r  r   vstackr   r   appendr   )rT   r   r  r  r9  num_multiplexmr@  r  rZ   rmrsxsr&  s                 r>   test_multiple_entry_callsz'TestDirichlet.test_multiple_entry_calls  s   
		tIIa$		!!&#q1e	y!A<(II%%fc15RVVAY>B7+BB ) rttBBEE"I>2q)BB  &b"-! "r@   c                 V   t         j                  j                  d       t         j                  j                  ddd      }t	        |      }t        |d   |d         }d}t        |      D ]f  }t         j                  j                  ddd      }|t        j                  |      z  }t        |j                  |      |j                  |g             h t        |j                         |j                         d          t        |j                         |j                         d          y )Nr  r5  r,  rF   r   r
   r#  )r7   r   r   r   r   r   r  r   r   r   r   r7  )rT   r  r  r  r9  r@  rZ   s          r>   test_2D_dirichlet_is_betaz'TestDirichlet.test_2D_dirichlet_is_beta*  s    
		t		!!&#q1eq58$	y!A		!!&#q1ANAa!%%*5 "
 	AFFHaffhqk2AEEGQUUWQZ0r@   N)r   r   r   r:  r@  rD  rF  rK  rN  rR  rU  rX  r[  r_  ra  rc  rf  rt  r   rw  r  r  r   r@   r>   r1  r1  r  sc    L$
*>>C>>>>>#>>>9$	-9.:1r@   r1  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)r7   r   r   rL   r   r   strr   )r   sigmar|  r}  s       r>   ,test_multivariate_normal_dimensions_mismatchr  ;  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
   rF   ndminr   r
   rF   rT  rG   )
r7   r   r_r   r   rI  r9   r   rL   rO   )rT   
true_scalescalesrI  ws        r>   test_scale_dimensionsz!TestWishart.test_scale_dimensionsO  sj    XXaq)
CHHQKEE!HHHQa 
 E5!A*-
(8(89  XX!u !!u& '
 qEEE#JHHqee 
 E5!A*-
(8(89  	j'1bffQi8 	RVVAY !$j'1e4r@   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
   rF   r  rG   rJ   r  r   )r7   r   r  r   r   r   r  rO   )rT   r)  r  densityrZ   s        r>   test_quantile_dimensionsz$TestWishart.test_quantile_dimensionsz  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+ r@   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 	Nrc   r
   rF   re   r  ra   r#  r   )r7   rn   r   tril_indicesr	  r   r  rz  r   rH  r   r   r7  r   moder   r   )	rT   r   rI  r)  r@  rZ   
parametersdfr  s	            r>   r_  zTestWishart.test_frozen  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#<= )r@   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       t         j                  j                  d      }t         j                  t         j                  j                  |      t         j                  j                  |dz
        t         j                  j                  |d	z
        f   dz  }t        j                  |      }	||	t        j                  |d
      <   t         j                  j                  |      }
|
j                  |	      }t        j                  ||j                        }t        ||       t        ||       y )NrG   r#  rG  r   r
   r   i r~   r
   rF   re   r  )r7   rO   r   r   r   r   r   r  	chisquarern   r  r   r   r	  r   r   )rT   r   r  rI  r  w_rvsfrozen_w_rvscovariances	variancesrt   DDAmanual_w_rvss                r>   test_wishart_2D_rvszTestWishart.test_wishart_2D_rvs  sn    sc
c
 B 			vB&
		vuuw 			vii&&A&.EEII#II1%II1%'
 		 GGI(3"//#
$% IIu%UU1Xvvb"$$' 	|,l3r@   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#  rF   r-  r   numr~   rO  r   )r7   r   r   rO   r   r0  rH  r   r   r   r7  r   r   r   r   r   )rT   snr   rI  df_ranger)  r  r  cr   r<   r  s               r>   test_1D_is_chisquaredz!TestWishart.test_1D_is_chisquared  s    
 			vs99QAU3KKB2&BE"ARA AEEGQUUW-AFFHaffh/AIIK5 AEE!HaeeAh/ %%R%.C5DE"64<! r@   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#  rc   r
   rb   re   r  rI  r   r  r~   r   rO  r   )r7   r   r   rn   r   r  r	  r   rN   r   r   r   r   r7  r   r   rH  r   r   r   )rT   r  r  r   rI  lamdasigma_lamdar  r  r)  r   r<   r  s                r>   test_is_scaled_chisquaredz%TestWishart.test_is_scaled_chisquared  s`   
 			v		!Q'*,))A,booa2&'uww&Q ggkk%(,,U3;;=B$;' 	)!&&(+		QYY[1 KKB2&a!%%(+ eeen1[!vtUC8r@   N)	r   r   r   r  r  r_  r  r  r  r   r@   r>   r  r  N  s$    )5V/,b>@*4X=>!9r@   r  c                   h   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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rG   rc   rd   r   r  g&Mtyr  r;  rG   rc   r   r   r  rh   )r   logpmfr   r7   r  rs  )rT   vals1vals2vals3vals4s        r>   test_logpmfzTestMultinomial.test_logpmf:  s    ""5!Z81=""Aq61r2h7""Aq61r2h7zz""Aq61r1g6rvvD1r@   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  rd   r  rG   r   r  r;  )rb         r   rF  rb   r   )r   r  r!   r   pmfrT   val1val2s      r>   test_reduces_binomialz%TestMultinomial.test_reduces_binomialG  sf     !!&!Z8||Aq#&d.vr:6yyB$d.r@   c                     dg d}}ddddddd	dd
dd
}|D ](  }t        t        j                  |||      ||   d       * y )NrG   )g      ?rZ  g      ?g     @?g     ?g      ?g      `?g     ?g      ?g      ?g      ?g      ?)
)r   r   rG   )r
   r   rF   )rF   r   r
   )rG   r   r   r   r  rF   r
   r   )r   rF   r
   r  )r   rG   r   +=r  )r   r   r  )rT   r   pr_valsrZ   s        r>   test_RzTestMultinomial.test_RR  sX     $1([([([([([	B
 AKOOAq!4fQieL r@   r   r   rG   c                     t        j                  |dgdz  dd      }t        j                  j	                  d      }|j                  |dgdz  d      }t        ||       y )NrZ  rG   rd   {   r   r~   )r   r   r7   r   RandomStater   )rT   r   sc_rvsrndmnp_rvss        r>   test_rvs_npzTestMultinomial.test_rvs_npc  sY     TF1H13Gyy$$S)!!!dVAXA!6VV$r@   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)ra   ra   r
   r
   r  r;  r  rd   r  g5
?rG   r   r  re   	   r  g*7?g<Wƌ?r   rF   r-  rc   rF   rG   rG   r   rb   )gUUUUUU?r^  r   gߦ?rf   r  )r   r  r   r7   rS  float64r   )	rT   vals0r  r  rZ   r  r  vals5vals6s	            r>   test_pmfzTestMultinomial.test_pmfk  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zr@   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
   rF   rG   r   rF  r   rh  gv?g~jt?r  r;  rc   r   )r   r  r   )rT   r  r  r  r  r  s         r>   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:r@   ra   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   rG  r   rh  r   rG  r  r  r;  r   r   r   )rT   r   cov1r  s       r>   test_covzTestMultinomial.test_cov  s    q,/2b1"R%(QBrE"H-Br1R47QBrE"H-BrA2b58QrT"W-/ 	d.r@   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 )Nra   r   rF  r   rh  g?gܿgr  r;  rc   g
ףp=
?g
ףp=
׿r   r  rj  rL  gzG?gzGrE  g333333r  rT   r  r  cov3cov4cov5cov6s          r>   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.r@   rF   c                 x    t        j                  |ddg      }t        |t        j                  |d      d       y Nr   rh  r  r;  r   r   r   r!   )rT   r   ent0s      r>   r  zTestMultinomial.test_entropy  s1     ""1r2h/emmAr2>r@   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 )NrF   rG   r   r   r  r;  rd   r  r  rj  rL  r  )rT   r  ent1ent2s       r>   test_entropy_broadcastingz)TestMultinomial.test_entropy_broadcasting  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!	#r@   c                 `    t        j                  |ddg      }t        ||dz  |dz  gd       y r  r   r   r   )rT   r   mean1s      r>   	test_meanzTestMultinomial.test_mean  s0      RH-"ad|$7r@   c                 `    t        j                  ddgddg      }t        |ddgddggd	
       y )Nra   rb   r   rh  r   rI  g433333?g433333@r  r;  r  )rT   r  s     r>   test_mean_broadcastingz&TestMultinomial.test_mean_broadcasting  s5      !Q"b2ttTl;$Gr@   c                    t         j                  j                  d       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 )
Nr      )r   r   r   rj  r   r   r   r  r   r   r
      r   r
   r
   r#  r
   r
   r
   r  r
   r
   rF   r  r-  )
r7   r   r   r8   r  r   r   r  r  r   )rT   r   pvalsrZ   	mn_frozens        r>   r_  zTestMultinomial.test_frozen  s    
		t 
:i	BJJq

+5)		a(+//!Q*FG	((+[-?-?1e-LM	))+[-@-@E-JKr@   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 gKH9re   )r7   r   r   r   rN   r   r  isfinite)rT   r   r   r  rZ   r  s         r>   test_gh_11860zTestMultinomial.test_gh_11860  sx    
 ii##$78JJqM"	RVVAYGGAJ##Aq!,{{6"""r@   N)r   r   r   r  r  r  rK   r   r   r  r  r  r  r  r  r  r  r  r_  r  r   r@   r>   r  r  9  s    2	/M" [[S1a&)% *%6;  [[S1a&)/ *// [[S1a&)? *?# [[S1a&)8 *8H
L#r@   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 r  )r7   rn   r   r  r	  r   r  rz  r   rH  r   r   r7  r   r  r   r   )	rT   r   rI  r)  r@  rZ   r  r  iws	            r>   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


 )NRB&B:>>"e#<=JOOB$>?JOOB$>?BFF1Iz~~aU'CD )r@   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
   ra      rF   r-  r   r#  r  rG  r  r~   r   rO  r   )r7   r   r   rO   r   r0  rH  r   r   r   r7  r   r   r   r   r   )rT   r  r   rI  r  r)  r  r  igr   r<   r  s               r>   test_1D_is_invgammaz"TestInvwishart.test_1D_is_invgamma  s   
 			vs99QAU3KKB2&BB&B"Q$d+B BFFHbffh/BGGIrwwy1 BFF1Irvvay1 &&b&/CqD!T?DE":tUC@ BJJL"**,7% r@   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       t         j                  j                  d      }t         j                  t         j                  j                  |dz
        t         j                  j                  |d	z
        t         j                  j                  |      f   dz  }t        j                  |      }	||	t        j                  |d
      <   t         j                  j                  |      }
t         j                  j                  |	j                  |
j                        j                  }t        j                  ||j                        }t!        ||       t!        ||       y )NrG   r#  rG  r   r  iHG	 r~   rF   r
   re   r  )r7   rO   r   r   r   r   r   r  r  rn   r  r   r   solver   r	  r   )rT   r   r  rI  r  iw_rvsfrozen_iw_rvsr  r  rt   r  Lmanual_iw_rvss                r>   test_invwishart_2D_rvsz%TestInvwishart.test_invwishart_2D_rvs'  s    sc
c
 E" 			vE*
		v 			vii&&A&.EEII1%II1%II#%
 		 GGI(3"//#
$% IIu%IIOOACC%''q!## 	.}5r@   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
   ra   r
   rF   re   r  rG  r   r   r   r   rO  r  N)r7   rn   r   r  r	  r   r   r   r7  r   r   ppfrb  )rT   r  sample_sizer   rI  r   	Xmean_expXvar_exp	Xmean_stdr)  	Xmean_estntests	fail_ratemax_diffs                 r>   test_sample_meanzTestInvwishart.test_sample_meanU  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  ! r@   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.)rF   r
   r   rG  )r
   rF   rG  rG  )r   rG  rG   r
   )rG  rG  r
   rF   )r  rd   rG   r
   )rd   r  ra   r
   )rG   ra   r  rF   )r
   r
   rF   r  rb   r   rF   r
   rG  N)r7   r   r   r   r9   r   r3  r  r   r1   tracer   )rT   r)  Psinuprobr  siglogdetX	logdetPsir   r.  s              r>   test_logpdf_4x4zTestInvwishart.test_logpdf_4x4p  s%   HHn&$&( ) hh$$$& '   B,GGAJyy((+W**3/YIIOOAs#T9$!tAvrvvay()"2a4+, Avz1nW,- !'')m	$
 	h'r@   N)r   r   r   r_  r  r  r#  r,  r   r@   r>   r
  r
    s    E@8B,6\6(r@   r
  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestSpecialOrthoGroupc                 F   t         j                  j                  d       t        j                  d      }t        j
                  g dg dg dg      }t        ||       t         j                  j                  d      }t        j                  d|      }t        ||       y )N  rG   )g(fg^A.g*B?)g:d?g2ugi}?)gR#xlF?g^`D?g?r   r   )r7   r   r   r   r   r   r   r  )rT   rZ   r.  r   s       r>   test_reproducibilityz*TestSpecialOrthoGroup.test_reproducibility  s    
		s##A&88CBAC D 	"!X.yy,,#,6##ALA!!X.r@   c                     t        t        t        j                  d        t        t        t        j                  d       t        t        t        j                  d       t        t        t        j                  d       y Nr  r
   r   )r   rL   r   r   rT   s    r>   test_invalid_dimz&TestSpecialOrthoGroup.test_invalid_dim  sN    j"5"9"94@j"5"9"96Bj"5"9"91=j"5"9"93?r@   c                     d}t        |      }|j                  d      }t        j                  |d      }t        ||       y )Nrd   r   r   )r   r   r   )rT   r   r  r  r  s        r>   test_frozen_matrixz(TestSpecialOrthoGroup.test_frozen_matrix  s=    $S)zztz,"&&s>T4 r@   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 )	NrF   r  rG   r      vIh%<=r;  r   )r  r   r   r7   r   r2  r   r   r	  r   rO   r9   )rT   r   r@  r  rZ   detss         r>   test_det_and_orthoz(TestSpecialOrthoGroup.test_det_and_ortho  s    q!$#Qx! "%%c* +$ 	 !
 +--"Q		a "-rd2gE2 A%bffQn&(ffQWWQZ&8: !
 .s   ,C&C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 )Nra   r&  皙?r0  r~   rM  r  )r
   rc   r  r
   )	r7   r   r   r   r   sortedr   r   r   rT   r   r  ks_probr  elserecrZ   proje0e1pairsp0p1ks_testss                   r>   	test_haarzTestSpecialOrthoGroup.test_haar  s     
		s $$Sw7 +HKLfb"R&R!8R!B%)R!899L$'ACb#Bb"b#CADIJERHT"XtBx03EJ7)CJ.9 "9LAJ*   CC(	C:C"
C"C(CN)r   r   r   r1  r5  r7  r<  rM  r   r@   r>   r.  r.    s    
/@!::r@   r.  c                       e Zd Zd Zd Zd Zd Zej                  j                  dg d      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 )Nr0  rG   r   re   )gm?gӠh"gEo?)g~7ݲC?g>Ŀg0J_ٿ)gݱ&ǿg 6qrg`X|[)
r7   r   r   r   r   r   r   r2  r   r   )rT   r   rZ   r   r.  s        r>   r1  z#TestOrthoGroup.test_reproducibility  s    
		tOOA__QT2BIIMM!,b188<==? @ 	"!X.!"h/r@   c                     t        t        t        j                  d        t        t        t        j                  d       t        t        t        j                  d       t        t        t        j                  d       y r3  )r   rL   r   r   r4  s    r>   r5  zTestOrthoGroup.test_invalid_dim  sB    j+//48j+//6:j+//15j+//37r@   c                     d}t        |      }t        |d      }|j                  d      }t        j                  |d      }|j                  d      }t        ||       t        ||       y )Nrd   r   r   r   r
   r~   )r   r   r   rT   r   r  frozen_seedr  r  rvs3s          r>   r7  z!TestOrthoGroup.test_frozen_matrix  sa    S!!#D1zztz,s6A&T4 T4 r@   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 )NrF   r  r#  r:  r;  r   )r  r   r   r7   r   r   r2  r   fabsrN   r9   r   r	  r   rO   )rT   r   r@  r  xxrZ   r;  s          r>   r<  z!TestOrthoGroup.test_det_and_ortho  s     q&$# b	#!1 s#!#$ 	 &
 xx"E"BB7Bq"))--*B7"EFrwwtzz':G B)"&&ACC.*,&&*<>  # &
 8Es-   D2D-D2	D=
#&D8	D=
-D28D=
r   )rF   ra   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   gffffff?)confidence_levelrG  )r7   r   r   r   r   r   r   r2  r   r   r-   	binomtestproportion_ci)rT   r   r   r   r   r;  r  r   r:   lowhighs              r>   test_det_distribution_gh18272z,TestOrthoGroup.test_det_distribution_gh18272  s     ii##$78s#hhDsh3||$FF4!8Iooa#%%t%<	TS4r@   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 )Nra   r&  r>  i  r~   r?  r
   )	r7   r   r   r   r   r@  r   r   r   rA  s                   r>   rM  zTestOrthoGroup.test_haar  s     
		s__Sw/ +HKLfb"R&R!8R!B%)R!899L$'ACb#Bb"b#CADIJERHT"XtBx03EJ7)CJ.9 "9LAJrN  c                 :   t         j                  j                  d       d }t        dd      D ]i  dfd	} ||      } |t        j
                  j                  j                        }t        j
                  j                  ||      \  }}t        d|       k y )Nr0  c                     t         j                  j                  t         j                  j	                  | | f            \  }}}t        j
                  ||      S Nr~   )r7   r   r   r   r   r	  )r   r   _sr   s       r>   random_orthoz<TestOrthoGroup.test_pairwise_distances.<locals>.random_ortho+  s@    yy}}RYY%5%5C:%5%FGHAr166!Q<r@   rF   rb   c                    t        j                  t        |      D cg c]+  }t        j                   |        |       z
  dz        - c}      }|t         j                  j                  | ||j                        z  }|S c c}w )Nr[  rF   r~   )r7   r   r  r   r   r   r9   )r   r  epsr   r-   r   s        r>   generate_test_statisticszHTestOrthoGroup.test_pairwise_distances.<locals>.generate_test_statistics0  s}    "1X"% FFCCL33<7!;<%" 
 **C45;;*GG"s   0Br>  )r&  r  )
r7   r   r   r  r   r-   r   r   r   r   )rT   rg  rj  r.  rB  _Dr  r   s          @r>   test_pairwise_distancesz&TestOrthoGroup.test_pairwise_distances&  s{     			s	  A;C 0=H-ekk.E.E.I.IJFKK((6:EBc1% r@   N)r   r   r   r1  r5  r7  r<  rK   r   r   ra  rM  slowrl  r   r@   r>   rP  rP    s^    08
!> [[UN3
  4
 :6 [[& &r@   rP  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 )Nr0  rG  rh  rE  r   r   )r   ѓ2ǿA?Ϳ)rr  r   4($?R}%?)rs  ru  r   qTnƿ)rt  rv  rw  r   )r7   r   r   r   r   r   r   )rT   r  rZ   r   r.  s        r>   r1  z*TestRandomCorrelation.test_reproducibilityB  sp    
		s!""4(##Ds;88A@@AC D 	"!X.!"h/r@   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testr   r
   rF   rG   rc   g      )r
   rF   r   )r   rL   r   r   r4  s    r>   test_invalid_eigsz'TestRandomCorrelation.test_invalid_eigsN  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*Er@   c                     d}t        |      }t        |d      }t        j                  |d      }|j                  d      }|j                         }t        ||       t        ||       y )Nrq  r0  r   r   )r   r   r   )rT   r  r  rU  r  r  rV  s          r>   r7  z(TestRandomCorrelation.test_frozen_matrixW  s_    !#D)(C8!%%d=zzsz+ T4 T4 r@   c           	      H   d }t         j                  j                  d       t        dd      D cg c])  } ||t         j                  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 r6   )r   )r@  r|  s     r>   r   z3TestRandomCorrelation.test_definition.<locals>.normk  s    Q3s1v:r@   r  rF   rb   r~   )rc   r   r   r   r   r:  rP  r;  )r7   r   r   r  r   rz  r   r   r   rX  r   r2  prodr   rn   zipr   )rT   r   r@  r  r|  rN   r  rZ   r;  
dets_knowndiagsr  r  s                r>   test_definitionz%TestRandomCorrelation.test_definitionc  sb   	 			s<A!QKHKqQ		))q)12KHI%)*TSVT*156A $$Q'6 4662a		a()26*./$Qbggaj$
/ju5A &((RR(t$DAqAqu- % AAqss/ ) I +6 7/ )s#   .F8FF69F5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)overre   gu <7~rF  rT  rF   rM  gMk   @)r7   r   r0  r   _to_corrr   errstate	nextaftercopyr   r	  )rT   r  gm0s       r>   test_to_corrz"TestRandomCorrelation.test_to_corr  s    HHsAhA'u5''*288aVaX$678
 [[h'1a&2q'*+AE1:2<<1+='>?uMB"++BGGI6AAqsswwr{q12C<%6eDB"++BGGI6AAqsswwr{q12 ( XX1v1v&e4''	2#" XX!}q!f-U;''	2#"' ('s   2D II
N)r   r   r   r1  rz  r7  r  r  r   r@   r>   ro  ro  A  s    
0F
!"0H#r@   ro  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
   rG   r   Nr
   ra   )ra   rc   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~   re   r   r   )r7   r   r   r'   r   r   rO   r   r9   r   r   r   )
rT   r   r   r   uniform_direction_distr  r   r   expected_shapenormss
             r>   r/  z!TestUniformDirection.test_samples  s     ii##$78!23S!A(,,T2HHSM266#;c00s0FLL}}...		wR0r"r@   )Nr   r  r   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.rD   )rK   r	   rL   r'   r   )rT   r   rU   s      r>   r5  z%TestUniformDirection.test_invalid_dim  s1    <]]:W5!!#& 655s	   =Ac                     d}t        |      }t        |d      }|j                  d      }t        j                  |d      }|j                         }t        ||       t        ||       y )Nra   r0  r   r   )r'   r   r   rT  s          r>   test_frozen_distributionz-TestUniformDirection.test_frozen_distribution  s_    "3''#6zzsz+ $$Ss; T4 T4 r@   )rF   ra   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   rF   r~   r   r  r  '  r>  )r7   r   r   r'   r   r   r   r   arctan2r  r   r    r   pvalue)rT   r   r   spherical_distv1v2r  s1s2anglesuniform_distkstest_results               r>   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***r@   N)
r   r   r   rK   r   r   r/  r5  r  r  r   r@   r>   r  r    s    [[UQF+[[V%9:	# ; ,	# [[U$:;' <'
! [[UI.+ /+r@   r  c                   *    e 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 )Nr0  rG   r   )y~p?yZ?y뉦?ĭ?y8Z?&4?)yEHξr?8i?ye??+ݓݿyu=ٿB۽'?)yqXQÿ?yN6ҿzܷy! 8l?2W'?)r7   r   r   r   r   r   r   )rT   rZ   r   r.  s       r>   r1  z%TestUnitaryGroup.test_reproducibility  sg    
		sa qs388IHKM
 	"!X.!"h/r@   c                     t        t        t        j                  d        t        t        t        j                  d       t        t        t        j                  d       t        t        t        j                  d       y r3  )r   rL   r   r   r4  s    r>   r5  z!TestUnitaryGroup.test_invalid_dim  sJ    j-"3"3T:j-"3"3V<j-"3"3Q7j-"3"3S9r@   c                     d}t        |      }t        |d      }|j                  d      }t        j                  |d      }|j                  d      }t        ||       t        ||       y )Nrd   r0  r   r   r
   r~   )r   r   r   rT  s          r>   r7  z#TestUnitaryGroup.test_frozen_matrix  sc    s##Cc2zzsz+  37A&T4 T4 r@   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 )NrF   r  rG   r   r  r  )
r  r   r   r   r7   r	  conjr   rO   r9   )rT   r   r@  r  rZ   s        r>   test_unitarityzTestUnitaryGroup.test_unitarity	  s    q!$#Qx! $ %$ 	 !
 ABFF1affhjj1266!''!*3EER !s   ,B!c                 "   d}d}t         j                  j                  d       t        j                  ||      }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 )Nra   r&  r0  r~   rF   r>  )r7   r   r   r   r   ry  r   r   eigvalsr  imagrealr    ravelr   r  r   r   r  )rT   r   r  r  rZ   r  r:   s          r>   rM  zTestUnitaryGroup.test_haar	  s    
 
		ss1 yy2>2a%,,..q12>?JJtyy$)),QWWY"%% 8 < <=

T!" ?s   &DN)r   r   r   r1  r5  r7  r  rM  r   r@   r>   r  r    s    0:
!S#r@   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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-d.ej0                  g      d/                      Zd0 Zej
                  j                  d*g d1      d2        Zej
                  j                  d*g d3      d4        ZdTd6Zd7 Zej
                  j                  d*g d8      ej
                  j                  d9g d:      ej
                  j                  d;d5d<g      d=                      Zej
                  j@                  d>        Z!d? Z"d@ Z#dA Z$ej
                  j                  d*dB      dC        Z%dD Z&ej
                  j                  d,g dE      dF        Z'ej
                  j                  dGdH ejP                  dd      dIdJfdK ej$                  dLdgddHgg      dMdNfg      dO        Z)ej
                  j                  dPg dQ      dR        Z*dS Z+y)UTestMultivariateTr
   rF   rc   rG   ra   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?)re   r
   2   )r   rG  rZ  )rG  r   rQ  )rZ  rQ  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   )rT   rZ   rN  r9   r  ansr   vals           r>   test_pdf_correctnessz&TestMultivariateT.test_pdf_correctnessf	  s)    c5"15hhqk!#s+r@   c                     t        |||d      }|j                  |      }|j                  |      }t        t	        j
                  |      |       y r  )r#   r   r   r   r7   r   )	rT   rZ   rN  r9   r  r  r   r  r  s	            r>   test_logpdf_correctz%TestMultivariateT.test_logpdf_correctl	  s>    c5"15xx{{{1~!"&&,5r@   c                 |    g d}t        j                  |d      }t        j                  |      }t        ||       y )N)
r  rd   rc   r
   r  r   r  re   rG   r
   r  )r#   r   r$   r   )rT   rZ   r  r  s       r>   test_mvt_with_df_one_is_cauchyz0TestMultivariateT.test_mvt_with_df_one_is_cauchyt	  s0    -  q)jjm!#s+r@   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~   rh   rG   r#  re   *   )r#   r   r%   r%  )rT   	P_VAL_MINr   r  r   r  s         r>   &test_mvt_with_high_df_is_approx_normalz8TestMultivariateT.test_mvt_with_high_df_is_approx_normalz	  s    
 	avA6(((''"1Ir1gR2r(';#%'(((''"1Y##%&%r@   z'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
   rd   r  r  rF   )r#   r7   r  r   r   r   
call_countr   )rT   mockr   s      r>   !test_mvt_with_inf_df_calls_normalz3TestMultivariateT.test_mvt_with_inf_df_calls_normal	  ss    arvvA6$ :;;;1(!###aBFF+!###r@   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                  ||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 )Nrc         @rd   r
   r~   )
r7   r   rO   r#   r   isscalarr   r   r9   r   )	rT   r   rN  r9   r  rZ   r:   	n_samplesr   s	            r>   test_shape_correctnessz(TestMultivariateT.test_shape_correctness	  s    hhsmsHHSMS%,003{{3S%,33A6{{3 	IIi-.S%,003		i\)*)S%,33A6		i\)*) RXXa["&&)Q7;;={{3 RXXa["&&)Q7;;;F		dW$%$r@   c                     t               }t        |j                  dg       t        |j                  dgg       |j                  dk(  sJ y )Nr   r
   r#   r   rN  r9   r  )rT   r   s     r>   test_default_argumentsz(TestMultivariateT.test_default_arguments	  s<    TXXs#TZZ1#'1r@   )NNNr   r
   r
   )NNrd   r   r
   rd   Nrd   z*loc, shape, df, loc_ans, shape_ans, df_ansc                     t        |||      }t        |j                  |       t        |j                  |       |j                  |k(  sJ y )NrN  r9   r  r  rT   rN  r9   r  loc_ans	shape_ansdf_ansr   s           r>   test_default_argsz#TestMultivariateT.test_default_args	  s@     #Ur:TXXw'TZZ+6!"!r@   re   c                     t        |||      }t        |j                  |       t        |j                  |       t        |j                  |       y r6   r  r  s           r>   &test_scalar_list_and_ndarray_argumentsz8TestMultivariateT.test_scalar_list_and_ndarray_arguments	  s<     c5"-TXXw'TZZ+TWWf%r@   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
   )rN  rF   rG   )rN  r9   re   r  r   )r   rL   r#   dictr7   r   rO   )rT   rN  r9   r  s       r>   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	;r@   c                 ,   t         j                  j                  d      }|j                  d      }t        j                  d      }t        ||dd      }t        ||dd      }|j                  d      }|j                  d      }t        ||       y )Nrc   rG   r~   rF   r  r#  )r7   r   r  r   rO   r#   r   r   )rT   r   rN  r9   r   dist2samples1samples2s           r>   r1  z&TestMultivariateT.test_reproducibility	  s}    ii##A&kkqk!q	sEaa8sEaa899"9%99"9%Xx(r@   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)rN  r9   r  rY   )r  r   r7   r   r{  r#   )rT   r<   s     r>   test_allow_singularz%TestMultivariateT.test_allow_singular 
  s;    1qeQqE]qObii++^DtDr@   r   )r#  rG   )ra   rb   rc   rG   r   )rF   rG   rc   ra   r  r   r=  c                     t        t        j                  |      t        j                  |      |      }|j	                  |      }|j
                  ||fz   k(  sJ y re  )r#   r7   r   rO   r   r9   )rT   r   r   r  r   r   s         r>   test_rvszTestMultivariateT.test_rvs
  sJ     bhhsmRVVC["=hhDh!yyDC7N***r@   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 )
NrG   r#  r  rf   r  r  r  r  r   r  )rT   r   r   r  r  r  r  r   s           r>   r  z TestMultivariateT.test_cdf_signs
  sv    xx{ffQi	9i8	9i8.1!%%asBAFSVN23r@   )r
   rF   ra   c                 &    | j                  |       y r6   cdf_against_mvn_testrT   r   s     r>   $test_cdf_against_multivariate_normalz6TestMultivariateT.test_cdf_against_multivariate_normal
  s     	!!#&r@   )rG   rb   r  c                 (    | j                  dd       y )NrG   Tr  r  s     r>   -test_cdf_against_multivariate_normal_singularz?TestMultivariateT.test_cdf_against_multivariate_normal_singular
  s     	!!!T*r@   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 rG   r#  rh   r
   r~   re   rF   r  T)r  r  rY   r   )rY   r  Mb@?r  )r7   r   r   r   r   signr   r-   r#   r   r   r   )rT   r   r   r   r   r  r   r   r  r  r:   r;   s               r>   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,r@   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  rF   r   r#  )r   rI  rG   )r  r   r  r  r:  )r7   r   r   r   sqrtr-   r#   r   r  tr   r   r%  r   )	rT   r   r   r   rZ   r  r:   r;   	incorrects	            r>   test_cdf_against_univariate_tz/TestMultivariateT.test_cdf_against_univariate_t5
  s    ii##O4JJBbggclJ3""&&q$RbffW47 ' 9ggkk!Rrwws|4JJNN1dBGGCL9	St,vvbffS9_-4555r@   )rF   rG   ra   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#  rh   rF   r~   ra   T)r   rY   r  )invalidr  r   g-C6*?r:  rQ  r<  )r  r   rY   r  )rK   r   r7   r   r   r   r   r-   r#   r   r  r3   r  r   )rT   r   r   r   r   r  r   r   r  r  r  r:   r;   s                r>   test_cdf_against_qsimvtvz*TestMultivariateT.test_cdf_against_qsimvtvD
  s   
 
*KKNOii##D)B,, ah7zz#ZZ_JJsOZZ\A ""&&q$Rc6: ' <[[*5"c266!8QXsCAFC +St$7 ""&&q$RQ47 ' N[[*5"c1t8QXsCAFC +St$7 +* +*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 )NrG   l   	!y r#  re   r
   r~   T)r   ra   )r   r  c                 \    t         j                  j                  | j                        S r6   )r-   r#   r   r   )rZ   r   r  r   s    r>   	integrandzITestMultivariateT.test_cdf_against_generic_integrators.<locals>.integrandp
  s$    ''++ACCsB??r@   )r  r   )qrngr:  r;  c                  T    t         j                  j                  | d d d         S )Nre   )r-   r#   r   )zyxr   r  r   s    r>   r   zITestMultivariateT.test_cdf_against_generic_integrators.<locals>.integrandv
  s(    ''++C"ItS"EEr@   r   rF   )r7   r   r   r   r   r-   r#   r   r/   qmcHaltonr   integralr0   )rT   r   r   r  r  r  r:   r   r;   r   r  r   s            @@@r>   $test_cdf_against_generic_integratorsz6TestMultivariateT.test_cdf_against_generic_integratorsa
  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$/r@   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?r9   r  rf   r   g1%?r:  r;  )r7   r   r   r   r-   r#   r   r   )rT   r   r   r  r   r:   r;   s          r>   test_against_matlabz%TestMultivariateT.test_against_matlab|
  sr     ii##J/hh???A B  ###"5hhysh3St,r@   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 rG   r~   r   r   )	r7   r   r   r   rO   r-   r#   r   r   )rT   r   r   rN  rZ   r9   r  r<   
rng_frozenrng_unfrozenr   s              r>   r_  zTestMultivariateT.test_frozen
  s    ii##D)kkqk!KKQK#%q	ZZ\UBYY**40
yy,,T2##T;
;TXXa[#''LDL|L	Nr@   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 )Nrc   r  r  r~   ra   r   c                 T    t        dt        j                   | z  | z
        d   S )Nr  r   )r3   r7   r  )rZ   r   r  r   r   s    r>   _cdf_1dz2TestMultivariateT.test_vectorized.<locals>._cdf_1d
  s+    E2sRVVGAIqvsCAFFr@   re   r  r:  r  )	r7   r   r   r   r-   r#   r   apply_along_axisr   )rT   r   r   rt   rZ   r:   r  r;   r   r  r   r   s           @@@@r>   test_vectorizedz!TestMultivariateT.test_vectorized
  s    ii##O4JJS#JJ'!##gzz#JJqC6z"ZZ\A""&&q$Rc&J	G !!'2q1St$7r@   r]  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
   rG  )r  )r9   r   r   g-C6
?r;  )
r7   r   r   r   r   toeplitzr-   r#   r   r   )rT   r   r   rt   r:   r;   s         r>   test_against_analyticalz)TestMultivariateT.test_against_analytical
  s~    ii##O4LL!!QC3%37*;$;!<""+//c	/L37mSt,r@   c                     t        j                  dd      }t         j                  }t        j                  j                  ||      }t        j                  j                  d |      }||k(  sJ y )NrG   r  )r7   rO   r  r-   r#   r   r   )rT   r   r  mvt_entropymvn_entropys        r>   test_entropy_inf_dfz%TestMultivariateT.test_entropy_inf_df
  s[    ffQlVV**222D//77cBk)))r@   )r
   r#  r,  c                     t         j                  j                  d|      }t         j                  j                  |      }t	        ||d       y )Nr   r  r  r:  r;  )r-   r#   r   r  r   )rT   r  r  	t_entropys       r>   test_entropy_1dz!TestMultivariateT.test_entropy_1d
  s=    **222CGGOOrO*	YU;r@   zdf, cov, ref, tolr#  g}M@r  r,  rG  gNfh@r  c                     t        j                  d      }t        j                  |||      }t	        |j                         ||       y )Nra  r;  )r7   r   r-   r#   r   r   )rT   r  r   r;   tolrN  mvts          r>   %test_entropy_vs_numerical_integrationz7TestMultivariateT.test_entropy_vs_numerical_integration
  s7    
 hhuo""3R0s5r@   zdf, dim, ref, tol))r#  r
   gDdVW?r  )r,  r
   gU?r:  )r  r
   g/+?r  )@xDr
   Z_2?r  )}Ô%ITr
   r%  r  )r#  r#  gzg#.@r  )r&  r#  gD:f,@r:  )r$  r#  1>`,@r  )r&  r#  r'  r  )r#  r,  g8d?b@r  )r&  r,  g-YҺa@r  )r$  r,  ZGra@r  )r&  r,  r(  r  c                     t        j                  t        j                  |      |      }t	        |j                         ||       y )Nr  r;  )r-   r#   r7   rO   r   r   )rT   r  r   r;   r!  r"  s         r>   test_extreme_entropyz&TestMultivariateT.test_extreme_entropy
  s1    F ""<s5r@   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?rj  gQ)gQ?g)\(?gQѿg)\(ܿg(\?)g      gGzgq=
ףpg\(\?g)r,  g{Gzg\(\?g{GzԿg(\?r$  r  rz  r  r;  i  i   rg  )r7   r   r   r-   r#   r   r   r   )
rT   _Ar   r  mul_t_entropymul_norm_entropydf1df2	_entropy1	_entropy2s
             r>   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8r@   F),r   r   r   	PDF_TESTSrK   r   r   r  r  r  r  r4   r  r  r  DEFAULT_ARGS_TESTSr  r7   r   ARGS_SHAPES_TESTSr  r  r1  r  r  r  r  r  r  r  r  r  rm  r  r  r_  r  r  r  r  rO   r#  r*  r4  r   r@   r>   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,'$ 45$ 6$&@ 	$ 	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(9r@   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, expectedrG   rc   ra   r#  rd   gr   r  r
   rF   rk   iir  r  re   ic                 N    t        j                  |||      }t        ||d       y )Ngư>r;  )r   r  r   rT   rZ   r  r   r.  valss         r>   r  z%TestMultivariateHypergeom.test_logpmf   s$    6 &,,Q15hT2r@   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 )NrG   r
   r#  ra   rc   )rZ   r  r      )r  r   r   r  r  r;  rd      )r   r  r"   r   r  s      r>   test_reduces_hypergeomz0TestMultivariateHypergeom.test_reduces_hypergeom>  s|     &))QFr1gC}}qB!r2d.%))QFr2h"E}}qB"3d.r@   c                     t        ddgd      }|j                  dd      }t        |j                  d      |j                         d	
       y )NrG   ra   rc   r  r   r&  r  r   r   rO  r;  r   r   r   r   rT   r   r   s      r>   r  z"TestMultivariateHypergeom.test_rvsI  s@     $q!f2ff$Sf1RWWYT:r@   c                     t        ddgddggddg      }|j                  dd	      }t        |j                  d
      |j                         d       y )NrG   ra   r#  rc   r  rD  r&  rF   r  r   r   rO  r;  rE  rF  s      r>   test_rvs_broadcastingz/TestMultivariateHypergeom.test_rvs_broadcastingP  sK    #1v2w&7Aq6Bff)#f6RWWYT:r@   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   r7   r8   r  r   )rT   r  r   r:   res_exs        r>   test_rvs_gh16171z*TestMultivariateHypergeom.test_rvs_gh16171U  sE    
 %((A.JJqMqAvS&!r@   g zl?r  r  gQ?gE|?g
y?r-  r  )ra   rb   rd   rb   gzp?c                 N    t        j                  |||      }t        ||d       y Nrf  r;  r   r  r   r=  s         r>   r  z"TestMultivariateHypergeom.test_pmf`  s$    " &))!Q2hT2r@   r@  g ?r   r   c                 N    t        j                  |||      }t        ||d       y rN  rO  r=  s         r>   r  z/TestMultivariateHypergeom.test_pmf_broadcastingt  s$     &))!Q2hT2r@   c                 h    t        j                  g dd      }g dg dg dg}t        ||d       y )	N)rG   rd   r#  r  rD  )gf_?&BUп疈Cx@ؿ)rR  ggs>d?ZsK)rS  rT  g35?r  r;  r   r   r   )rT   r  r  s      r>   r  z"TestMultivariateHypergeom.test_cov  s2    %))J"=6668 	d.r@   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 )Nrd   r  r#  r@  r  r  rD  g?gg(\?g(\r  r;  rc   ra   r   g333333?g333333rU  r  s          r>   r  z/TestMultivariateHypergeom.test_cov_broadcasting  s    %))aVb"X,>1b'J..0d.%))aS1#J1a&A"d.%))QFq"g>.'"Wf$568d.r@   c                     t        j                  ddgd      }t        j                  ddd      }t        ||d       y )	Nr#  ra   rc   rD  r@  r   r   r  r  r;  )r   r7  r"   r   )rT   var0var1s      r>   test_varz"TestMultivariateHypergeom.test_var  s6    %))RGq9}}rQ"-d.r@   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#  ra   rc   r  rD  r   r  r;  r
   r  g̍3eY?gI{?r   )r   r7  r   )rT   rY  rZ  var2var3var4var5var6s           r>   test_var_broadcastingz/TestMultivariateHypergeom.test_var_broadcasting  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.r@   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#  ra   rc   rD  r@  rX  r   r  r;  r  r  g      @rI  )r   r   r"   r   rT   mean0r  r  mean3s        r>   r  z#TestMultivariateHypergeom.test_mean  sf    &++r1g;qB/a%d3&++r1g<j)u40r@   c                 n    t        j                  ddgddggddg      }ddgd	d
gg}t        ||d       y )NrG   ra   r#  rc   r  rD  r   r   gUUUUUU@gUUUUUU@r  r;  )r   r   r   )rT   re  r  s      r>   r  z0TestMultivariateHypergeom.test_mean_broadcasting  sE    &++1vAw.?Aq6JH%
I'>?u40r@   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 )Nrf   r   rD  r   r   r   r
   r   r   rF   r  )r   r   r   FFg<r;  r-  r   )
r   r   r   r7   rs  r   r   intr   r9   rd  s        r>   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$%r@   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 )Nrf   r   rD  ri  gؗҜ<r;  rj  rF   r  rk  r-  rl  )
r   r7  r   r   r7   rs  r   rm  r   r9   )rT   rY  rZ  r]  r^  s        r>   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#$r@   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 )Nrj  r
   rD  ri  rk  r;  rf   r   r-  rM  )r   r   r   r   r7   r   rm  r  r'  r   r9   )rT   cov0r  r  r  r  r  s          r>   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$%r@   c                 6   t         j                  j                  d       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 )
Nr   r  )rd   r  r     r  r  r   r  r  r-  )r7   r   r   r8   rm  r   r   r  r  r7  r   )rT   r   r  rZ   
mhg_frozens        r>   r_  z%TestMultivariateHypergeom.test_frozen  s    
		tM=<)JJq$+Aq1

q).221a;	=
))!,.55aA>	@
(*@*D*DQ*JK
(*@*D*DQ*JKr@   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 )	Nra   r#  rc   g      @r  r@  g      %@g      /@)r   rL   r   r  	TypeErrorr4  s    r>   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	%r@   N)r   r   r   rK   r   r   r7   r  rs  r  rB  r  rI  rL  r   rm  r  r  r  r  r[  rb  r  r  rn  rp  rs  r_  ry  r   r@   r>   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 	%r@   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)r7   r   r   r4  s    r>   get_rngzTestRandomTable.get_rng  s    yy$$%788r@   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-dimensionalrD   r
   rF   z`col` must be one-dimensionalz*each element of `row` must be non-negativere   z*each element of `col` must be non-negativerh   z'sums over `row` and `col` must be equalr   z(each element of `row` must be an integer @)r
   r
   rF   z(each element of `col` must be an integer)rT  rT  r
   rG   rF   r
   r
   )rK   r	   rL   r&   _process_parametersr   r7   r   )rT   rU   rowcolr&  r  r   s          r>   test_process_parametersz'TestRandomTable.test_process_parameters  s   1]]:W51a&Aq6* 6 2]]:W5!Q1a&* 6 ?]]:W5!R1a&) 6 ?]]:W5!Q!R) 6 <]]:W5!Q!Q( 6 =]]:W5#sY/ 6 =]]:W5!Q/ 6 !f22Aq69E1aS!S!BFF3KA 65 65 65 65 65 65 65sS   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
   rG   r  methodr   )r7   r   r&   r   r   )rT   rI  r  r  r  ctr.  gots           r>   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#r@   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
   rG   r  z$'foo' not recognized, must be one ofrD   foo)r  )rK   r	   rL   r&   r   )rT   r  r  rU   s       r>   $test_process_rvs_method_bad_argumentz4TestRandomTable.test_process_rvs_method_bad_argument7  sC    !f 9]]:W5S#e4 655s   AAr  )TFr   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)#NrF   rb   r
   rG   rc   r&  r  r   r  r   r  r  c                      |       S r6   r   )rZ   r  original_methodr  s    r>   r  z/TestRandomTable.test_pmf_logpmf.<locals>.methodQ  s    &q#s33r@   c                 :    t        j                   |             S r6   )r7   r/  )rZ   r  s    r>   r[   z1TestRandomTable.test_pmf_logpmf.<locals>.<lambda>S  s    q	*r@   r   Tr   return_countsr   r;  )r#  r,  r
   )r   r
   r
   )rF   r
   rG   re   r   r   )r
   rF   rF   rh   z$`x` must be at least two-dimensionalrD   z%`x` must contain only integral valuesrT  z)`x` must contain only non-negative valuesz"shape of `x` must agree with `row`rJ   z"shape of `x` must agree with `col`rG   rc   )r}  r&   r   ro   r7   uniquer   r   r   r   r'  r9   r  r   rK   r	   rL   rs  )rT   r  r   r   r   objr  
unique_rvscountsr  p2rvs_ndr@  rA  pijrvijqijrZ   rU   r  r  r  r  s                      @@@@r>   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 6 :]]:W5#L 6 :]]:W5"&&
O 6 >]]:W5"K 6 7]]:W5 6 7]]:W5!QQ  65) 65 65 65 65 65 65sH   2
L!LL!L-?L90MLL!L*-L69MMr  )r  r  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 )NrF   rb   r  r&  r  r   r>  r  re   r   rH  rh   )r&  rG   )	r}  r&   r   r   r   r7   r   r   broadcast_to)rT   r  r   r  r  r   r   s          r>   test_rvs_meanzTestRandomTable.test_rvs_mean  s     lln!fsCd6,/1  c*RVVD\266#;/T5SWW"W%rsI'FGSWW"W%rsI'FGr@   c                    | j                         }ddg}g d}t        j                  ||dd|      }t        j                  ||dd|      }t        j                  |d	      }t        j                  |d	      }t        ||d
       y )NrF   rb   r  r  r  r  r  r   r   {Gz?r  )r}  r&   r   r7   r7  r   )rT   r   r  r  r  r  r  r  s           r>   test_rvs_covzTestRandomTable.test_rvs_cov  s     lln!fSuX-02Su[-02vvd#vvd#d.r@   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)NrF   rb   r  r  r  r
   r  rJ   r   )r   rF   rG   r  )r  rF   rG   )rc   ra   )rc   ra   rF   rG   rG   r  r;  z/`size` must be a non-negative integer or `None`rD   re   )r&   r   r}  r9   r   r   r'  rK   r	   rL   r7   rs  )
rT   r  r  r  r   rv2rv3rv4rv5rU   s
             r>   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*.,,.: 6 ]]:W5S#BFF6*.,,.: 65	 65 65s   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 )NrF   rb   r  r  r  r   Tr  r  r;  )r&   r   r}  r7   r  r  r   r   )	rT   r  r  r  r  r   r  r  r  s	            r>   test_rvs_methodzTestRandomTable.test_rvs_method  s|     !fffS#F6"&,,.  2  YYs$G
F FF:sC(CHf48r@   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&  r  )r   r   r   r   .r&   r   r}  r7   r   r   r   rT   r  r  r  r  r   r.  s          r>   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"r@   )Nr  r  r  r   r  c                     t        ||      }|j                  d|| j                               }t        j                  dt        |      t        |      f      }t        ||       y )Nr#  r  r  r  s          r>   test_rvs_with_edge_casesz(TestRandomTable.test_rvs_with_edge_cases  sQ     c"UU2f4<<>UB88RS3s845R"r@   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
   rG   r-  r  	rvs_rcont)scipy.stats._rcontr-   _rcontr7   r   int64ro   r   r}  r9   r   )rT   r   r  r  r  r   ntotresults           r>   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~%%%r@   c                    ddg}g d}t        ||| j                               }|j                         }t        j                  ||      }t	        ||j                                t        j
                  |||      }t	        ||j                  |             t        j                  |||      }t	        ||j                  |             y )NrF   rb   r  r   )r&   r}  r   r   r   r  r  )rT   r  r  r  r  r.  s         r>   r_  zTestRandomTable.test_frozen  s    !fc7$$S#.Xqvvx(##FC5XquuV}-&&vsC8Xqxx/0r@   c                     ddg}g d}t        ||| j                               }t        j                  ||d|| j                               }|j                  d|      }t        ||       y )NrF   rb   r  r   r#  r  )r   r  )r&   r}  r   r   )rT   r  r  r  r  r.  r  s          r>   test_rvs_frozenzTestRandomTable.test_rvs_frozen"  sb    !fc7##C2f15AeeFe+Xs#r@   N)r   r   r   r}  r  rK   r   r   r  r  r  r  r  r  r  r  r  r  r_  r  r   r@   r>   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'>?$ @$r@   r{  c                    | j                   }d| _          | j                  |ddi t        j                  |       } | j                  |ddi}t        j                  |      } |j                  |ddi}t        ||       || _         y )Nr   r   r  )r   r   pickledumpsloadsr   )distfnr<   r  r   r0	unpickledr1s          r>   check_picklingr  .  s    
 DFFJJ1VA	T	"	"BQI		%1	%BR Fr@   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 )NrG   rG  r   r  r   r   r#  ra   ri  ra  )r7   rO   r   r   r   r   r   r   r   r   r2   r  )rI  distsr  r<   s       r>   test_random_state_propertyr  B  s    FF1IEE$KE$K	b!	RXXrd^&'	2u+	b%[!	q/*+	d	d#E #FD1vt$ r@   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   )rF   rG   rc   rb   r   r  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 )Nr  r
   r   r~   re   r   r   )r7   r   r   ri  r  r(   r   r   rO   r   r9   r   r   r   )rT   r   r   r   r   vmf_distr  r   r   r  r  s              r>   r/  z TestVonMises_Fisher.test_samplesU  s     ii##$78WWcWan-"2qs3,,t$HHSM266#;c00s0FLL}}...		wR0r"r@   ra   r  kappa)g  4&kCr$  gꌠ9Y>)Fc                     t         j                  j                  d      }t        j                  |fdt        j                  |      z        }t        |||      }|j                  d       y )Nr  r
   r   r#  )r7   r   r   ri  r  r(   r   )rT   r   r  r   r   r  s         r>    test_sampling_high_concentrationz4TestVonMises_Fisher.test_sampling_high_concentrationc  sQ     ii##$78WWcWan-"2u37R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 one-dimensional shape.rD   r
   r7   rN   rK   r	   rL   r(   rT   r   r}  s      r>   test_two_dimensional_muz+TestVonMises_Fisher.test_two_dimensional_mul  s8    WWV_5]]:S1B" 211   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)Nra  z%'mu' must be a unit vector of norm 1.rD   r
   r  r  s      r>   test_wrong_norm_muz&TestVonMises_Fisher.test_wrong_norm_mur  s8    WWU^5]]:S1B" 211r  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.rD   r
   r  r  s      r>   test_one_entry_muz%TestVonMises_Fisher.test_one_entry_mux  s8    WWU^4]]:S1B" 211r  re   )ra   rG   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.rD   r
   r   rK   r	   rL   r(   rT   r  r}  s      r>   test_kappa_validationz)TestVonMises_Fisher.test_kappa_validation~  s/    2]]:S1QFE* 211   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.rD   r
   r   r  r  s      r>   test_kappa_zeroz#TestVonMises_Fisher.test_kappa_zero  s3     ]]:S1QFE* 211r  r  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.rD   r
   r   r7   r   rK   r	   rL   rT   r  rZ   r}  s       r>   test_invalid_shapes_pdf_logpdfz2TestVonMises_Fisher.test_invalid_shapes_pdf_logpdf  sE     HH[! ]]:S11q!fa  211   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)NrG  r   8'x' must be unit vectors of norm 1 along last dimension.rD   r
   r   r  r  s       r>   test_unnormalized_inputz+TestVonMises_Fisher.test_unnormalized_input  sE     HHc2YH]]:S11q!fa  211r  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\(?rh  r   gS-c                 V    t        ||      j                  |      }t        ||d       y )Nr:  r;  )r(   r   r   )rT   rZ   r   r  	referencer   s         r>   test_pdf_accuracyz%TestVonMises_Fisher.test_pdf_accuracy  s'    4 b%(,,Q/YU3r@   g[d6U?g1*?gJ8j#@g=fNXg][,g1VV@g|'@gmF&!gehc                 V    t        ||      j                  |      }t        ||d       y )Nr  r;  )r(   r   r   )rT   rZ   r   r  r  r   s         r>   test_logpdf_accuracyz(TestVonMises_Fisher.test_logpdf_accuracy  s'    4 !U+2215	6r@   zdim, kappa, reference))rG   r  g?@)rG   r,  gp&F)ra   r  gT;ӷ&)r  r
   goZ@c                     t        j                  |fdt        j                  |      z        }t        ||      j	                         }t        ||d       y )Nr
   g+=r;  )r7   ri  r  r(   r   r   )rT   r   r  r  r   r   s         r>   test_entropy_accuracyz)TestVonMises_Fisher.test_entropy_accuracy  sC     WWcWan-!"e,4467r@   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  r  rG   r   r  r
   ra   r   r  r;  )
r7   r   r   r'   r   ri  r  r9   r  r   )rT   r  	testshaper   rZ   r   r  
result_allr@  rA  current_vals              r>   rC  z%TestVonMises_Fisher.test_broadcasting  s     	ii##$78a $$YS$AWWUAbggajL)Ar5)
9,,,y|$A9Q<($Qq!QwZU;Z1-=EJ ) %r@   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 )	Nr  r   r
   r  )rN  r  rF   r#  r   )r7   r   r   r   r  r(   r*   r'   r   r   r   r   r   )	rT   r   r   mu_angler  vmfvonmises_distvectorsr  s	            r>   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Jr@   )rF   rG   rb   zkappa, mu_tol, kappa_tol))r
   r>  r>  )r#  rO  rO  )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
   r  r  r   r   r   r  r;  )r7   ri  r  r(   r   r   r   r  arccosr	  r   )rT   r   r  mu_tol	kappa_tolr   r  r   r  r  mu_fit	kappa_fitangular_errors                r>   test_fit_accuracyz%TestVonMises_Fisher.test_fit_accuracy*  s     WWcWan-"2u-ii##$78	,,ys,;+//8			"&&.1rQ?yy9r@   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.rD   )r7   r   rK   r	   rL   r(   r  rT   rZ   r}  s      r>   #test_fit_error_one_dimensional_dataz7TestVonMises_Fisher.test_fit_error_one_dimensional_data;  s<    HHUO,]]:S1" 21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  rD   )r7   rN   rK   r	   rL   r(   r  r  s      r>    test_fit_error_unnormalized_dataz4TestVonMises_Fisher.test_fit_error_unnormalized_dataA  s<    GGFOH]]:S1" 211r
  c                    t        j                  g d      }d}t        ||      }t        ||d      }|j                  d      }t        j                  ||d      }|j                         }t	        ||       t	        ||       y )N)r   r   r
   ra   r0  r   r   )r7   r   r(   r   r   )rT   r   r  r  rU  r  r  rV  s           r>   r  z,TestVonMises_Fisher.test_frozen_distributionG  ss    XXi  U+%b%c:zzsz+""2u3? T4 T4 r@   N)r   r   r   rK   r   r   r/  r  r  r  r  r  r  r(   r   r   r  r  r7   r   r  r  r  r  rC  r  r  r	  r  r  r   r@   r>   r  r  T  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 /	:##!r@   r  c                   `   e Zd Ze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,  rF   r~   r
   r  re   r   )r7   r   r   r   integersr   )rT   r  r   r  rZ   r   s         r>   
get_paramsz#TestDirichletMultinomial.get_paramsV  sc    ii##$56As+LLBaVL,EErENAua""r@   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#  re   r   )r7   r   r   r   r  r   r)   r   r  r  r   r7  r   )rT   r   r  rZ   r   r  s         r>   r_  z$TestDirichletMultinomial.test_frozen^  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Br@   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 )NrJ   rG   rc   ra   gp.U.?r   r  r   r,  r#  re   r   g+T<)r7   r   r   r)   r  r  r   r   r9   r   r   r   r  )rT   rZ   r   r  r:   logresr;   r   s           r>   test_pmf_logpmf_against_Rz2TestDirichletMultinomial.test_pmf_logpmf_against_Rl  s.   
 HHYFF1I##''5!4&--a:!S!s,yyFLL.B..... ii##$56AsB'LLB#FF12#E1-11!4&--a:"S!s,r@   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~   rG  rF   )
r  r   r)   r  r  r7   r  r   roundr%  )rT   r   r  r  r   rZ   r@  s          r>   test_pmf_logpmf_supportz0TestDirichletMultinomial.test_pmf_logpmf_support  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Nr@   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 )Nrb   r#  r
   r   )
r7   r8   r)   r   r  r  r  r   r7  r   )rT   r   r  rZ   r   s        r>   test_dimensionality_onez0TestDirichletMultinomial.test_dimensionality_one  s    JJsO$UA.TXXa[!$TXXac]A&T[[^Q'T[[1%w/TYY[!$TXXZ#TXXZ#r@   method_namer  r  c                    | j                  d      \  }}}}}t        t        ||      |      }t        t        j                  |g|j
                   |      } ||      }	 ||j
                  d         }
t        |	|
       y Nr,  r   r  ro   r)   r-   	betabinomr   r   rT   r  r   r  r  r   rZ   r  
ref_methodr:   r;   s              r>   test_against_betabinom_pmfz3TestDirichletMultinomial.test_against_betabinom_pmf  sr    "ooc2Qq!.ua8+FU__Q99;G
QiQ S!r@   r   r7  c                     | j                  d      \  }}}}}t        t        ||      |      }t        t        j                  |g|j
                   |      } |       d d df   }	 |       }
t        |	|
       y r   r!  r#  s              r>   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!r@   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  ra   r
   r,  r~   r#  r  r   r   r  r;  rO  r  )r7   r   r   r  r)   r   r   r   r   r7  r9   r   r   r   rn   r%  r   r   r   )
rT   r   r   r   r  r   r  r  rZ   r   s
             r>   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4r@   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)NrJ   r  z,`x` must contain only non-negative integers.rD   )r
   re   rG   )r
   r  rG   z*`alpha` must contain only positive values.)rG   r   rc   )rG   re   rc   z`n` must be a positive integer.ǧH@r   )r
   rF   rG   rc   z&`x` and `alpha` must be broadcastable.)r7   r   r   r   rL   r)   r  )rT   x0n0alpha0textrZ   r  s          r>   rV   z.TestDirichletMultinomial.test_input_validation  s   XXi VVBZ)$=:T2!((VR@ 3:T2!((fbA 3 <:T2!((Y; 3:T2!((Z< 3 1:T2!((VT: 3:T2!((VQ7 3 HH\"#7:T2!((E1557; 32) 3222 3222 3222 32sT   G(
G5?H2H'HH(9&H4(G25G?HHH%(H14H=r  c           	      ^   t        j                  g dg dg dg dg      }t        j                  dgdgdgg      }t        j                  g dg d	g      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  rn  ra   ra   rd   r  r  r#  rb   rd   r  rJ   )rF   rF   rG   )rF   r
   r
   rG   )rF   rG   rc   )
r7   r   r'  ro   r)   r9   r  r   r   r   )rT   r  r  r   rZ   r:   r@  rA  r  res_ijkr;   s              r>   test_broadcasting_pmfz.TestDirichletMultinomial.test_broadcasting_pmf  s    )Y	:FGHHqcA3_%HHi+,44\B.7Qq!yyI%%%s1vA3q6]s5z*A!!Q'lG 1q1A1A1CQqT\\^TC#GS1 + # r@   )r   r7  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  rn  r/  r0  rb   rd   r  r   )rG   rc   rG   )	r7   r   ro   r)   r9   r  r   r   r   )
rT   r  r  r   r  r:   rA  r  r1  r;   s
             r>   test_broadcasting_momentsz2TestDirichletMultinomial.test_broadcasting_moments  s    )Y	:FGHHqcA3_%.<UA)4)=syyI%OO<s1vA3u:&ad)U1X--/1@- ' r@   N)r   r   r   classmethodr  r_  r  r  r  rK   r   r   r%  r'  r,  rV   r2  r4  r   r@   r>   r  r  U  s    # #C->O $ [[]UH,=>" ?" [[]VUO<" ="5,<< [[Xx'892 :2 [[],BC
. D
.r@   r  r5  )Y__doc__r  numpy.testingr   r   r   r   r   r   rK   r	   r   test_continuous_basicr   numpyr7   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.integrater.   r/   r0   scipy.specialr1   common_testsr2   	data._mvtr3   unittest.mockr4   r?   rB   r   r   r   r  r1  r  r  r  r
  r.  rP  ro  r  r  r  r:  r{  r  r  r  r  r   r@   r>   <module>rB     sn   7 7  * 9  C C: : : : : : : : 0  3 3 & 5  ']! ]!@@
) @
)FH* H*VF1 F1R-&i9 i9Vj# j#Xa( a(HC: C:Lo& o&dd# d#N6+ 6+r9# 9#x9 9Da% a%Hh$ h$V	(%$~! ~!By. y.r@   