
    -ie                        S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJr  S SK	r
S SKrS SKJrJr  S SKrS SKJr  S SKJr  S SKJr  S SKJrJr  S S	KJr  S S
KJr  S SKJrJrJ r J!r!J"r"J#r#J$r$  S SK%J&r&J'r'J(r(J)r)  S SK*J+r+  / SQr,\
RZ                  4S jr. " S S5      r/S r0S r1S r2S r3S r4S r5S r6S r7S r8S r9S r:S r;S r<\Rz                  R}                  S5      \Rz                  R                  S / S!Q5      S" 5       5       r@S# rAS$ rBS% rCS& rDS' rES( rFS) rGS* rHS+ rI\Rz                  R}                  S5      \Rz                  R                  S,S-5      S. 5       5       rJ\Rz                  R}                  S/5      S0 5       rKS1 rLS2 rMS3 rNS4 rO\Rz                  R                  S5\,5      S6 5       rPS7 rQ\Rz                  R}                  S/5      S8 5       rRS9 rS\Rz                  R                  S:/ S;Q5      S< 5       rT\Rz                  R                  S:/ S;Q5      S= 5       rUS> rVS? rW\
RZ                  4S@ jrXSA rY\Rz                  R                  SB\,5      SC 5       rZSD r[SE r\g)F    N)StringIO)Mock)linalgstats)KMeans)EmpiricalCovariance)make_spd_matrix)ConvergenceWarningNotFittedError)adjusted_rand_score)GaussianMixture)_compute_log_det_cholesky_compute_precision_cholesky#_estimate_gaussian_covariances_diag#_estimate_gaussian_covariances_full(_estimate_gaussian_covariances_spherical#_estimate_gaussian_covariances_tied_estimate_gaussian_parameters)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)fast_logdetfulltieddiag	sphericalc                    [         R                  R                  S5      n/ nUS:X  a  [        [	        X#US   5      5       Ho  u  n	u  pnUR                  UR                  X[         R                  " U5      -  [        [         R                  " X-  5      5      5      R                  U5      5        Mq     US:X  a  [        [	        X#US   5      5       Hm  u  n	u  pnUR                  UR                  U[         R                  " U5      [        [         R                  " X-  5      5      5      R                  U5      5        Mo     US:X  ar  [        [	        X#5      5       HZ  u  n	u  pUR                  UR                  XS   [        [         R                  " X-  5      5      5      R                  U5      5        M\     US:X  at  [        [	        X#US   5      5       HX  u  n	u  pnUR                  UR                  X[        [         R                  " X-  5      5      5      R                  U5      5        MZ     [         R                  " U5      nU$ )Nr   r   r   r   r   )nprandomRandomState	enumeratezipappendmultivariate_normaleyeintroundastyper   vstack)	n_samples
n_featuresweightsmeans
precisionscovariance_typedtyperngX_wmcs                ^/var/www/html/venv/lib/python3.13/site-packages/sklearn/mixture/tests/test_gaussian_mixture.pygenerate_datar:   +   s    ))


"C
A+%%c'*[:Q&RSLAyaHH''266*--s288AM3J/K&- T & %c'*V:L&MNLAyaHH''rwwqz3rxx'>#?&- O & "3w#67IAvHH''&)3rxx/F+G&- 8 & %c'*V:L&MNLAyaHH''c"((1=2I.JKRR O 			!AH    c                   <    \ rS rSrSSSS\R
                  4S jrSrg)
RandomDataR         2   c                    X l         X0l        X@l        UR                  U5      R	                  U5      U l        U R
                  R	                  U5      U R
                  R                  5       -  U l        UR                  X45      R	                  U5      U-  U l        SUR                  U5      R	                  U5      -   SUR                  X45      R	                  U5      -   S-  [        XAS9R	                  U5      [        R                  " [        U5       Vs/ s H  n[        XAS9R	                  U5      S-  PM      sn5      S.U l        SU R                  S   -  SU R                  S   -  [        R                  " U R                  S   5      [        R                  " U R                  S	    Vs/ s H  n[        R                  " U5      PM     sn5      S.U l        [!        [#        [$        [$         V	s/ s H0  n	['        UUU R
                  U R                  U R                  U	US
9PM2     sn	5      5      U l        [        R*                  " [-        U R
                  5       V
Vs/ s H>  u  p[        R.                  " [1        [        R2                  " X-  5      5      U
[0        S
9PM@     snn
5      U l        g s  snf s  snf s  sn	f s  snn
f )N      ?r@   )random_stater   r   r   r         ?r   r   r   r   r2   )r,   n_componentsr-   randr*   r.   sumr/   r	   r    arrayrangecovariancesr   invr0   dictr$   COVARIANCE_TYPEr:   r4   hstackr#   r   r(   r)   Y)selfr3   r,   rH   r-   scaler2   r5   
covariance
covar_typekr6   s               r9   __init__RandomData.__init__S   sa    #($xx-44U;||**51DLL4D4D4FFXXl7>>uEM
sxx5<<UCC388L=DDUKKPQQ#JAHHOHH #<00 $JAHHORUU0	

 t//<<$**622JJt//78HH:>:J:J6:RS:RJJ':RS	
  '6 '6
 "!"

(("# '6
"  &dll33DA BHHQ]34asC3
A Ts   %J5. J:37J?"AK
)	r4   rR   rM   r/   rH   r-   r,   r0   r.   N)__name__
__module____qualname____firstlineno__r    float64rX   __static_attributes__ r;   r9   r=   r=   R   s     jj:
r;   r=   c            
         [         R                  R                  S5      n U R                  SS5      nSu  p#pEnSu  px[	        UUUUUUUS9R                  U5      n	U	R                  U:X  d   eU	R                  U:X  d   eU	R                  U:X  d   eU	R                  U:X  d   eU	R                  U:X  d   eU	R                  U:X  d   eU	R                  U:X  d   eg )Nr   
   r@   )r@   g-C6?      皙?)r   r!   )rH   toln_initmax_iter	reg_covarr1   init_params)r    r!   r"   rI   r   fitrH   r1   rf   ri   rh   rg   rj   )
r3   r4   rH   rf   rg   rh   ri   r1   rj   gmms
             r9    test_gaussian_mixture_attributesrm      s    
))


"CQA 6J2Lv#3 O
!' 
c!f  |+++/11177c>>==I%%%<<8###::??k)))r;   c                     [         R                  R                  S5      n [        U 5      nUR                  nUR
                  S   n[        US9nU R                  US5      nXTl        [        R                  " SU SUR                   35      n[        R                  " [        US9   UR                  U5        S S S 5        U R                  U5      S-   nXtl        [        R                  " S[         R                   " U5      S	 S
[         R"                  " U5      S	 35      n[        R                  " [        US9   UR                  U5        S S S 5        U R                  U5      nXR%                  5       S-   -  nXl        [        R                  " S[         R$                  " U5      S	 35      n[        R                  " [        US9   UR                  U5        S S S 5        UR&                  n	[        XS9nUR                  U5        [)        XR                  5        g ! , (       d  f       GNk= f! , (       d  f       N= f! , (       d  f       Nm= f)Nr   r   rH      z2The parameter 'weights' should have the shape of (z,), but got matchzIThe parameter 'weights' should be in the range [0, 1], but got max value z.5fz, min value zEThe parameter 'weights' should be normalized, but got sum(weights) = )weights_initrH   )r    r!   r"   r=   rH   r4   r   rI   rs   reescapeshapepytestraises
ValueErrorrk   minmaxrJ   r.   r   )
r3   	rand_datarH   r4   gweights_bad_shapemsgweights_bad_rangeweights_bad_normr.   s
             r9   test_check_weightsr      s   
))


"C3I))LFA\2A q1&N
))	>&7&=&=%>	@C 
z	-	a 
. .2&N
))	ff./4 5VV-.s3	5C
 
z	-	a 
. xx-'+?+?+AA+EF%N
))	""$&&)9":3!?	AC 
z	-	a 
. GWHAEE!Hw/; 
.	- 
.	- 
.	-s$   &H9H.H?
H+.
H<?
Ic                     [         R                  R                  S5      n [        U 5      nUR                  UR
                  p2UR                  S   n[        US9nU R                  US-   U5      nXel	        Sn[        R                  " [        US9   UR                  U5        S S S 5        UR                  nXl	        UR                  U5        [        XR                  5        g ! , (       d  f       NG= f)Nr   r   ro   rp   z/The parameter 'means' should have the shape of rq   )r    r!   r"   r=   rH   r-   r4   r   rI   
means_initrw   rx   ry   rk   r/   r   )	r3   r|   rH   r-   r4   r}   means_bad_shaper   r/   s	            r9   test_check_meansr      s    
))


"C3I(55y7K7K*FA\2A hh|a/<O"L
;C	z	-	a 
. OOELEE!Hull+ 
.	-s   C##
C1c                     [         R                  R                  S5      n [        U 5      nUR                  UR
                  p2[         R                  " US-   X345      [         R                  " US-   US-   45      [         R                  " US-   U45      [         R                  " US-   5      S.n[         R                  " X#U45      n[         R                  " U5      US'   SUS'   UUS   [         R                  " X#4S5      [         R                  " US5      S.nSSSSS.n[         H  n[        U 5      R                  U   n	[        X(U S9n
XH   U
l        S	U S
3n[        R                  " [        US9   U
R!                  U	5        S S S 5        Xh   U
l        SU SXx    3n[        R                  " [        US9   U
R!                  U	5        S S S 5        UR"                  U   U
l        U
R!                  U	5        [%        UR"                  U   U
R                  5        M     g ! , (       d  f       N= f! , (       d  f       Nl= f)Nr   rp   r   g      )r   r   r   zsymmetric, positive-definitepositiverH   r1   rD   zThe parameter 'z$ precision' should have the shape ofrq   'z precision' should be )r    r!   r"   r=   rH   r-   onesr'   r   rP   r4   r   precisions_initrw   rx   ry   rk   r0   r   )r3   r|   rH   r-   precisions_bad_shapeprecisions_not_posprecisions_not_positivenot_positive_errorsrV   r4   r}   r   s               r9   test_check_precisionsr      s   
))


"C3I(55y7K7K* ):BCaa89):67WWlQ.0	 ,J!GHFF:.q"&w #"1%2D9WW\40	 /.	 &
sOj)%PS

 1<
|+OP]]:S1EE!H 2 4?*34G4S3TU]]:S1EE!H 2 &00<	a9//
;Q=N=NO+ & 21 21s   3H 9H1 
H.	1
H?	c            	         [         R                  R                  S5      n Su  pU R                  X5      nU R                  US5      n[         R                  " U5      U-  n[         R
                  " U/5      n[         R                  " SU45      n[        XCXgS5      n[        SS9n	U	R                  U5        [        U	R                  US   SS9S5        [        U	R                  US   SS9S5        [        US	5      n
[         R
                  " U
 Vs/ s H#  n[         R                  " XR                  5      PM%     sn5      n[         R
                  " U Vs/ s H  n[        R                   " U5      PM     sn5      n[#        X5        [         R$                  " US45      n[         R
                  " U/5      nUR'                  SS
9R)                  S5      n[        XCXgS5      n[        SS9n	U	R                  U5        [        U	R                  US   SS9S5        [        U	R                  US   SS9S5        [        US	5      n
[         R
                  " U
 Vs/ s H#  n[         R                  " XR                  5      PM%     sn5      n[         R
                  " U Vs/ s H  n[        R                   " U5      PM     sn5      n[#        X5        g s  snf s  snf s  snf s  snf )Nr     r@   rp   T)assume_centered	frobeniusnormspectralr   axis)rp   F)r    r!   r"   rI   sqrtrK   zerosr   r   rk   r   
error_normr   dotTr   rN   r   r   meanreshape)r3   r,   r-   r4   respX_respnkxkcovars_predecovprecs_chol_predprec
precs_predcov	precs_ests                  r9   test_suffstat_sk_fullr   +  sA    ))


"C"I 	'A88Iq!DWWT]QF	9+	B	1j/	"B5drqIKt4DHHVA[I1MAZH!L 2+vFOOLOD266$/OLMJ[A[c&**S/[ABIi4 77Iq>"D	9+	B	
Q			(B5drqIKu5DHHQKA[I1MAZH!L 2+vFOOLOD266$/OLMJ[A[c&**S/[ABIi4% MA MAs   *K K*K Kc                  D   [         R                  R                  S5      n Su  pnU R                  X5      nXDR	                  SS9S S 2[         R
                  4   -  nU R                  X5      nUR	                  SS9n[         R                  " UR                  U5      US S 2[         R
                  4   -  n[        XEXgS5      n[         R                  " US S 2[         R
                  [         R
                  4   U-  S5      U-  n[        XEXgS5      n	[        5       n
Xl        [        U
R                  U	SS9S5        [        U
R                  U	SS9S5        [        U	S5      n[         R                  " XR                  5      n[        R                   " U	5      n[#        X5        g )	Nr   r   r@   r@   rp   r   r   r   r   r   )r    r!   r"   rI   rJ   newaxisr   r   r   r   r   covariance_r   r   r   r   rN   r   )r3   r,   r-   rH   r   r4   r   r   covars_pred_fullcovars_pred_tiedr   r   r   r   s                 r9   test_suffstat_sk_tiedr   U  s\   
))


"C*3'I<88I,D((("1bjj=11D'A	q	B		R2::.	.B:4BAN
r!RZZ+,/??CiO  ;4BAN D'(8{KQO(8zJAN 22BFKO):):;J

+,Ii4r;   c                  
   [         R                  R                  S5      n Su  pnU R                  X5      nXDR	                  SS9S S 2[         R
                  4   -  nU R                  X5      nUR	                  SS9n[         R                  " UR                  U5      US S 2[         R
                  4   -  n[        XEXgS5      n[        XEXgS5      n	[        5       n
[        X5       H~  u  p[         R                  " [         R                  " U5      5      U
l        [         R                  " U5      n[        U
R                  USS9S5        [        U
R                  USS9S5        M     [!        U	S5      n[        U	S	US
-  -  5        g )Nr   r   rp   r   r   r   r   r   rF   r@   )r    r!   r"   rI   rJ   r   r   r   r   r   r   r$   r   r   r   r   r   )r3   r,   r-   rH   r   r4   r   r   r   covars_pred_diagr   cov_fullcov_diagr   s                 r9   test_suffstat_sk_diagr   s  sF   
))


"C*3'I<88I,D((("1bjj=11D'A	q	B		R2::.	.B:4BAN:4BAN D!"2E772778#45778$DOOH;OGKDOOH:OFJ	 F 22BFKO(#0B*BCr;   c                 `   [         R                  R                  S5      nSu  p#UR                  X#5      R	                  U 5      nXDR                  5       -
  n[         R                  " US4U S9n[         R                  " U/U S9nUR                  5       n[        XTXgS5      n[         R                  " UR                  5       R                  UR                  5       5      X2-  -  n	[        X5        UR                  U :X  d   e[        US5      n
[        USU
S-  -  5        U
R                  U :X  d   eg )Nr   r   rp   rG   r   rF   r@   )r    r!   r"   rI   r*   r   r   rK   r   r   flattenr   r   r2   r   )global_dtyper3   r,   r-   r4   r   r   r   covars_pred_sphericalcovars_pred_spherical2r   s              r9   #test_gaussian_suffstat_sk_sphericalr     s
    ))


"C"I'..|<A	FFHA77Iq>6D	9+\	2B	
BDTbVWXVVAIIKMM199;? -F &&,666 22GUO-s_a5G/GH  L000r;   c           	         Sn[        [        R                  R                  S5      U S9n[         GH  nUR
                  U   nUS:X  a<  [        R                  " U Vs/ s H  n[        R                  " U5      PM     sn5      nOiUS:X  a  [        R                  " U5      nOLUS:X  a<  [        R                  " U Vs/ s H  n[        R                  " U5      PM     sn5      nO
US:X  a  XA-  nUR                  U :X  d   e[        [        XC5      UUS9n[        US	[        R                  " W5      -  5        UR                  U :X  a  GM   e   g s  snf s  snf )
Nr@   r   rG   r   r   r   r   )r-   g      )r=   r    r!   r"   rP   rM   rK   r   detprodr2   r   r   r   log)r   r-   r|   rV   rU   r   predected_detexpected_dets           r9   test_compute_log_det_choleskyr     s&   J299003<HI%o
**:6
HH%L#fjjo%LMM6!"JJz2M6!HHj%Ijsbggclj%IJM;&&2M <///0'
?!

 	",rvvm7L0LM!!\111) & &M &Js    E
< E
c                 .   [         R                  " [        U 5      [        U5      45      n[         R                  " U5      n[	        [        X5      5       H<  u  nu  pg[        R                  R                  XU5      R                  SS9US S 2U4'   M>     U$ )Nrp   r   )
r    emptylenr   r#   r$   r   r   logpdfrJ   )r4   r/   covarsr   stdsir   stds           r9   _naive_lmvnpdf_diagr     su    88SVSZ()D776?D#C$45;DZZ&&q488a8@QT
 6Kr;   c                  4   SSK Jn   [        R                  R	                  S5      n[        U5      nSnUR                  nUR                  nUR                  nUR                  XT5      nUR                  X45      n[        XU5      n	[        R                  " U V
s/ s H0  n
[        R                  " S[        R                  " U
5      -  5      PM2     sn
5      nU " XUS5      n[        X5        S[        R                  " U5      -  nU " XUS5      n[        X5        [        R                  " U V
s/ s H  oPM     sn
5      R                  SS9n[        R                  " [        R                  " SU-  5      5      n[        XU/U-  5      n	U " XUS5      n[        X5        UR                  S	S9nS[        R                  " UR                  S	S95      -  n[        XU Vs/ s H	  nU/U-  PM     sn5      n	U " XUS
5      n[        X5        g s  sn
f s  sn
f s  snf )Nr   )_estimate_log_gaussian_probr   rF   r   r   r   r   rp   r   )!sklearn.mixture._gaussian_mixturer   r    r!   r"   r=   r-   rH   r/   rI   r   rK   r   r   r   r   )r   r3   r|   r,   r-   rH   r/   covars_diagr4   log_prob_naivex
precs_fulllog_probprecs_chol_diagcovars_tied
precs_tiedcovars_sphericalprecs_sphericalrW   s                      r9   'test_gaussian_mixture_log_probabilitiesr     s   M ))


"C3II%%J))LOOE((<4K'A(;?N kJk2773#34kJKJ*1ZHHh7 BGGK00O*1_fMHh7 (({3{!A{3499q9AK{!234J(K=<3OPN*1ZHHh7 #''Q'/BGGK$4$4!$4$<==O(	-=>-=A3#-=>N +1_kRHh75 K 4 ?s   7H.HHc            
      f   [         R                  R                  S5      n [        U SS9nUR                  nUR
                  nUR                  nU R                  X#5      n[         H  nUR                  nUR                  nUR                  U   n	[        UU UUU	US9n
U
R                  U5        U
R                  U5      n[        UR!                  SS9[         R"                  " U5      5        [%        U
R&                  U5        [%        U
R(                  U5        [%        U
R*                  U	5        M     g )Nr      rT   rH   rD   rs   r   r   r1   rp   r   )r    r!   r"   r=   r,   r-   rH   rI   rP   r.   r/   r0   r   rk   predict_probar   rJ   r   r   rs   r   r   )r3   r|   r,   r-   rH   r4   rV   r.   r/   r0   r}   r   s               r9   ,test_gaussian_mixture_estimate_log_prob_respr     s    
))


"C3a(I##I%%J))L'A%
##))*5
% &&
 	
aq!!$((("2BGGI4FG1>>731<</1,,j9# &r;   c            
      ^   [         R                  R                  S5      n [        U 5      n[         H  nUR
                  U   nUR                  n[        UR                  U UR                  UR                  UR                  U   US9nSn[        R                  " [        US9   UR                  U5        S S S 5        UR!                  U5        UR                  U5      nUR#                  U5      R%                  SS9n['        Xx5        [)        XG5      S:  a  M   e   g ! , (       d  f       No= f)Nr   r   sThis GaussianMixture instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.rq   rp   r   ffffff?)r    r!   r"   r=   rP   r4   rR   r   rH   r.   r/   r0   rw   rx   r   predictrk   r   argmaxr   r   )	r3   r|   rV   r4   rR   r}   r   Y_predY_pred_probas	            r9   +test_gaussian_mixture_predict_predict_probar     s    
))


"C3I%
KK
#KK"//"** %00<&
F 	 ]]>5IIaL 6 	
a1q)00a0860"1-4441 &" 65s   #D
D,	zignore:.*did not converge.*zseed, max_iter, tol))r   r@   Hz>)rp   r@   re   )rc   ,  r   )   r   re   c                    [         R                  R                  U 5      n[        XCS9n[         GH  nUR
                  U   nUR                  n[        UR                  UUR                  UR                  UR                  U   UUUS9n	[        R                  " U	5      n
U
R                  U5      R                  U5      nU	R!                  U5      n[#        X5        [%        X5      S:  d   eU	R&                  R(                  U:X  d   eU	R*                  R(                  U:X  d   eU	R,                  R(                  U:X  a  GM   e   g )NrG   )rH   rD   rs   r   r   r1   rh   rf   r   )r    r!   r"   r=   rP   r4   rR   r   rH   r.   r/   r0   copydeepcopyrk   r   fit_predictr   r   means_r2   weights_precisions_)seedrh   rf   r   r3   r|   rV   r4   rR   r}   fY_pred1Y_pred2s                r9   !test_gaussian_mixture_fit_predictr   2  s    ))


%C33I%o
KK
#KK"//"** %00<&	
 MM!%%(""1%--"7,"1.555xx~~---zz<///}}""l222- &r;   c                      [         R                  R                  S5      R                  SS5      n [	        SSSS9nUR                  U 5      nUR                  U 5      n[        X#5        g )Nr     r   )rH   rg   rD   )r    r!   r"   randnr   r   r   r   )r4   gmy_pred1y_pred2s       r9   (test_gaussian_mixture_fit_predict_n_initr  X  sT    
		a &&tQ/A	a	BBnnQGjjmGw(r;   c           	         [         R                  R                  S5      n[        XS9nUR                  nUR
                  n[         GHc  nUR                  U   n[        USSUUS9nUR                  U5        [        [         R                  " UR                  5      [         R                  " UR                  5      SSS9  UR                  S S 2S4   R                  5       nUR                   S S 2S4   R                  5       n	[        UR                  U   UR                   U	   SSS9  US:X  a  UR"                  n
UR$                  S   nGOUS	:X  aM  [         R&                  " UR"                  /U-  5      n
[         R&                  " UR$                  S	   /U-  5      nGO-US
:X  a  [         R&                  " UR"                   Vs/ s H  n[         R(                  " U5      U-  PM     sn5      n
[         R&                  " UR$                  S
    Vs/ s H  n[         R(                  " U5      U-  PM     sn5      nOUS:X  a  [         R&                  " UR"                   Vs/ s H  n[         R*                  " U5      PM     sn5      n
[         R&                  " UR$                  S    Vs/ s H  n[         R*                  " U5      PM     sn5      n[         R,                  " W
SSS9R                  5       n[         R,                  " WSSS9R                  5       n	[/        X5       H4  u  p[1        5       nX   Ul        [        UR5                  X   5      SSS9  M6     UR                  R6                  U :X  d   eUR8                  R6                  U :X  d   eUR"                  R6                  U :X  a  GMd   e   g s  snf s  snf s  snf s  snf )Nr   rG      rH   rg   ri   rD   r1   re   g{Gz?)rtolatolr   r   r   r   rp   r@   )axis1axis2g333333?)r  )r    r!   r"   r=   r-   rH   rP   r4   r   rk   r   sortr   r.   r   argsortr/   r   r0   rK   r'   r   tracer$   r   r   r   r2   covariances_)r   r3   r|   r-   rH   rV   r4   r}   arg_idx1arg_idx2	prec_pred	prec_testr8   drW   hr   s                    r9   test_gaussian_mixture_fitr  a  s   
))


"C33I%%J))L%o
KK
#%&
 	
a 	GGAJJ):):!;#D	
 88AqD>))+??1a4(002HHX	 9$	
 I!,,V4I6!!--<!?@I)"6"6v">!?,!NOI;&!--!P-Q"&&"4q"8-!PQI1:1E1Ek1RS1RA
#a'1RSI 6!amm!Dm"''!*m!DEIi6J6J66R!S6R"''!*6R!STI88IQa8@@B88IQa8@@B+DA&(D(|DDOOIL914H	 , xx~~---~~##|333}}""l222_ &: "QS "E!Ss   #N0
#N5
 N:
$ N?
c            	      
   [         R                  R                  S5      n [        U 5      nUR                  nSn[
         H  nUR                  U   n[        USSU US9n/ n[        U5       H4  nUR                  U5        UR                  UR                  U5      5        M6     [         R                  " U5      n[        UUSU US9n	U	R                  U5        [        UR                  5       U	R                  U5      5        M     g )Nr   rb   rp   r  )r    r!   r"   r=   rH   rP   r4   r   rL   rk   r%   scorerK   r   rz   )
r3   r|   rH   rg   rV   r4   r}   llr5   g_bests
             r9   %test_gaussian_mixture_fit_best_paramsr    s    
))


"C3I))LF%
KK
#%&
 vAEE!HIIaggaj!  XXb\ %&
 	

1BFFHfll1o6- &r;   c            
      T   [         R                  R                  S5      n [        U SS9nUR                  nSn[
         HU  nUR                  U   n[        USUSU US9nSn[        R                  " [        US9   UR                  U5        S S S 5        MW     g ! , (       d  f       Mi  = f)Nr   rp   r   rH   rg   rh   ri   rD   r1   zBest performing initialization did not converge. Try different init parameters, or increase max_iter, tol, or check for degenerate data.rq   )r    r!   r"   r=   rH   rP   r4   r   rw   warnsr
   rk   )r3   r|   rH   rh   rV   r4   r}   r   s           r9   -test_gaussian_mixture_fit_convergence_warningr    s    
))


"C3a(I))LH%
KK
#%&
1 	
 \\,C8EE!H 98 & 98s   9B
B'	c                  :   [         R                  R                  S5      n Su  pnU R                  X5      n[         H\  n[        X5SS9R                  U5      R                  U5      n[        UUSSS9R                  U5      R                  U5      nXv:  a  M\   e   g )Nr   rA   r   r@   r   r   rH   r1   rD   rg   )r    r!   r"   r   rP   r   rk   r  )r3   r,   r-   rH   r4   cv_typetrain1train2s           r9   test_multiple_initr%    s    
))


"C*2'I<		)(A")QR SVU1X 	 ) '	 SVU1X 	 % #r;   c                      [         R                  R                  S5      n Su  pnU R                  X5      nSSSSS.n[         H4  n[        X6U S9R                  U5      nUR                  5       XV   :X  a  M4   e   g )	Nr   r            )   rE   r   )r    r!   r"   r   rP   r   rk   _n_parameters)r3   r,   r-   rH   r4   n_paramsr"  r}   s           r9   "test_gaussian_mixture_n_parametersr-    s{    
))


"C*2'I<		)(ARDH"%S

#a& 	
  H$5555	 #r;   c                  :   [         R                  R                  S5      n Su  pnU R                  X5      n[	        USU S9R                  U5      R                  U5      nS H7  n[	        UUU S9R                  U5      R                  U5      n[        XW5        M9     g )Nr   )d   rp   rp   r   r   )r   r   r   )r    r!   r"   r   r   rk   bicr   )r3   r,   n_dimrH   r4   bic_fullr1   r0  s           r9   test_bic_1d_1componentr3    s     ))


"C%."Il		)#A%vC	
 
Q	Q  9) / 
 SVSV 	 	H* 9r;   c                     [         R                  R                  S5      n Su  pnU R                  X5      nS[	        [         R
                  " UR                  SS95      US[         R                  " S[         R                  -  5      -   -  -   -  n[         H  n[        UUU SS9nUR                  U5        SU-  U-  SUR                  5       -  -   nSU-  U-  [         R                  " U5      UR                  5       -  -   n	U[         R                  " U5      -  n
UR                  U5      U-
  U-  U
:  d   eUR                  U5      U	-
  U-  U
:  a  M   e   g )	Nr   )rA   rc   r@   rC   rp   )biasr@   r?   )rH   r1   rD   rh   )r    r!   r"   r   r   r   r   r   pirP   r   rk   r+  r   aicr0  )r3   r,   r-   rH   r4   sghr"  r}   r7  r0  bounds              r9   test_gaussian_mixture_aic_bicr:    s6   
))


"C*2'I<		)(A
BFF133Q'(:RVVAI=N9N+OOC #%#	
 	
a)mc!A(9$99)mc!BFF9$58I$IIRWWY//a3)+e333a3)+e333 #r;   c            
         [         R                  R                  S5      n [        U 5      nUR                  n[
         H  nUR                  U   n[        USSU USS9n[        USSU USS9n[        R                  n[        5       [        l	         UR                  U5        UR                  U5        U[        l	        M     g ! U[        l	        f = f)Nr   rp   )rH   rg   ri   rD   r1   verboser@   )r    r!   r"   r=   rH   rP   r4   r   sysstdoutr   rk   )r3   r|   rH   rV   r4   r}   r  
old_stdouts           r9   test_gaussian_mixture_verboser@  )  s    
))


"C3I))L%
KK
#%&
 %&
 ZZ
Z
	$EE!HEE!H#CJ1 &0 $CJs   "CCr   )r   rp   r@   c           
      R   U n[         R                  R                  U5      nSu  p4nUR                  X45      n[	        USSSUSS9n[	        USSSUSS9nUR                  U5        UR                  U5      R                  U5      n	UR                  U5      R                  U5      n
[        UR                  UR                  5        [        UR                  UR                  5        [        UR                  UR                  5        X:  d   e[	        USSSUSS	S
9n[	        USSSUSS	S
9nUR                  U5        UR                  (       a   eUR                  U5        [        S5       H'  nUR                  U5        UR                  (       d  M'    O   UR                  (       d   eg )Nr   rp   r@   r   F)rH   rg   rh   ri   rD   
warm_startTr   ư>)rH   rg   rh   ri   rD   rB  rf   r   )r    r!   r"   rI   r   rk   r  r   r   r   r   
converged_rL   )r   rD   r3   r,   r-   rH   r4   r}   r  score1score2r5   s               r9   test_warm_startrG  H  s    L
))


-C*3'I<'A 	!!	A 	!!	A EE!HUU1X^^AFUU1X^^AF

AJJ/!((+q}}5?? 	!!	A 	!!	A EE!H||EE!H 4[	a<<<  <<<r;   z-ignore::sklearn.exceptions.ConvergenceWarningc                  l   [         R                  R                  S5      n [        U 5      nUR                  nUR
                  S   nS Hi  n[        USUU S9n[        S5       H'  nUR                  U5        UR                  (       d  M'    O   UR                  (       d   eXER                  :  a  Mi   e   g )Nr   r   )rp   r@   rA   T)rH   rB  rh   rD   r/  )r    r!   r"   r=   rH   r4   r   rL   rk   rD  n_iter_)r3   r|   rH   r4   rh   rl   r5   s          r9   )test_convergence_detected_with_warm_startrJ    s     ))


"C3I))LFA%	
 sAGGAJ~~~  ~~~;;&&& r;   c           	         Sn[         R                  R                  S5      n[        USU S9nUR                  nUR
                  U   nUR                  U :X  d   e[        USSSUUS9nSn[        R                  " [        US9   UR                  U5        S S S 5        [        R                  " 5          [        R                  " S	[        5        UR!                  U5        S S S 5        UR"                  R                  U :X  d   eUR$                  R                  U :X  d   eUR                  U5      nUR'                  U5      R)                  5       n	[+        X5        U	R                  U :X  d   e[        USSUUS
9R!                  U5      n
U
R                  U5      UR                  U5      :  d   eg ! , (       d  f       GN!= f! , (       d  f       N= f)Nr   r      rT   r2   rp   r  r   rq   ignorer  )r    r!   r"   r=   rH   r4   r2   r   rw   rx   r   r  warningscatch_warningssimplefilterr
   rk   r   r  score_samplesr   r   )r   rV   r3   r|   rH   r4   gmm1r   	gmm_scoregmm_score_probagmm2s              r9   
test_scorerW    s   J
))


"C3a|<I))LJA77l""" !"D	=  
~S	1

1 
2 
	 	 	"h(:; 
# ;;,,,""l222

1I((+002O	3  L000 !" 
c!f 	 ::a=4::a=(((1 
2	1 
#	"s   F/2-G/
F>
Gc                     Sn [         R                  R                  S5      n[        USS9nUR                  nUR
                  U    n[        USSUU S9nSn[        R                  " [        US9   UR                  U5        S S S 5        UR                  U5      R                  U5      nUR                  S   UR                  :X  d   eg ! , (       d  f       NN= f)	Nr   r   rL  r   rp   r  r   rq   )r    r!   r"   r=   rH   r4   r   rw   rx   r   rR  rk   rv   r,   )rV   r3   r|   rH   r4   rl   r   gmm_score_sampless           r9   test_score_samplesrZ    s    J
))


"C3a(I))LJA !"C	=  
~S	1! 
2 
003""1%)<)<<<<	 
2	1s   /C		
Cc                  @   [         R                  R                  S5      n [        U SS9nUR                  n[
         H  nUR                  U   n[        UUSSSU SS9n[         R                  * n[        R                  " 5          [        R                  " S[        5        [        S	5       H?  nUnUR                  U5      R                  U5      nXh:  d   eUR                   (       d  M?    O   UR                   (       d   e S S S 5        M     g ! , (       d  f       M  = f)
Nr   rL  r   Trp   r   )rH   r1   ri   rB  rh   rD   rf   rN  iX  )r    r!   r"   r=   rH   rP   r4   r   infrO  rP  rQ  r
   rL   rk   r  rD  )	r3   r|   rH   rV   r4   rl   current_log_likelihoodr5   prev_log_likelihoods	            r9   test_monotonic_likelihoodr_    s     ))


"C3a(I))L%
KK
#%&
 #%&&$$&!!(,>? 3Z&<#),)9)9!)<&-DDD>>>   >>!> '& & '&s   A"D)D
D	c                     [         R                  R                  S5      n Su  p[         R                  " [         R                  " US-  U45      [         R
                  " US-  U45      45      n[         H  n[        USUU S9n[        R                  " 5          [        R                  " S[        5        [        R                  " S5      n[        R                  " [         US9   UR#                  U5        S S S 5        UR%                  SS	9R#                  U5        S S S 5        M     g ! , (       d  f       N9= f! , (       d  f       M  = f)
Nr   )rb   r   r@   )rH   ri   r1   rD   rN  zFitting the mixture model failed because some components have ill-defined empirical covariance (for instance caused by singleton or collapsed samples). Try to decrease the number of components, increase reg_covar, or scale the input data.rq   rC  )ri   )r    r!   r"   r+   r   r   rP   r   rO  rP  rQ  RuntimeWarningrt   ru   rw   rx   ry   rk   
set_params)r3   r,   r-   r4   rV   rl   r   s          r9   test_regularisationrc    s    ))


"C!I
			)q.*-	.)q.*9U0VW	A &
"&	
 $$&!!(N;))NC z5
 6 NNTN*..q1 '& &  65 '&s%   AD9#D(5&D9(
D62D99
E	rV   c                    [         R                  R                  S5      n[        USUS9nUR                  nUR
                  U    n[        UU USS9nUR                  U5        UR                  R                  U:X  d   eUR                  R                  U:X  d   eU S:X  aJ  [        UR                  UR                  5       H%  u  px[        [        R                  " U5      U5        M'     g U S:X  a5  [        [        R                  " UR                  5      UR                  5        g [        UR                  SUR                  -  5        g )	Nr   rL  rM  r   r!  r   r   rF   )r    r!   r"   r=   rH   r4   r   rk   r   r2   r  r$   r   r   rN   )	rV   r   r3   r|   rH   r4   rl   r   covars	            r9   ,test_fitted_precision_covariance_concistencyrf  0  s	   
))


"C3a|<I))LJA
!"	C GGAJ??  L000!!\111Vs0@0@AKD%fjj&6> B	v	!&**S__"=s?O?OP!#//39I9I3IJr;   c                     [         R                  R                  S5      n [        U SSS9nUR                  UR
                  p2[         GH  nUR                  U   n[        X4U S9nSn[        R                  " [        US9   UR                  S5        S S S 5        UR                  U5        Sn[        R                  " [        US9   UR                  S5        S S S 5        S	nUR                  U5      u  p[        U5       GH  nUS
:X  a=  [!        UR"                  U   [         R$                  " XU:H     R&                  5      SS9  MG  US:X  a:  [!        UR"                  [         R$                  " XU:H     R&                  5      SS9  M  US:X  aQ  [!        UR"                  U   [         R(                  " [         R$                  " XU:H     R&                  5      5      SS9  M  [!        UR"                  U   [         R*                  " XU:H     UR,                  U   -
  5      SS9  GM"     [         R.                  " [        U5       Vs/ s H  n[         R0                  " XU:H     S5      PM!     sn5      n[!        UR,                  USS9  U	R2                  X4:X  d   e[        SS5       H)  nUR                  U5      u  pU	R2                  X4:X  a  M)   e   GM     g ! , (       d  f       GNJ= f! , (       d  f       GN= fs  snf )Nr   rL  rc   )rT   rH   r   z+This GaussianMixture instance is not fittedrq   zInvalid value for 'n_samples'i N  r   rp   )decimalr   r   r/  )r    r!   r"   r=   r-   rH   rP   r4   r   rw   rx   r   samplerk   ry   rL   r   r  r   r   r   varr   rK   r   rv   )r3   r|   r-   rH   rV   r4   rl   r   r,   X_sy_srW   means_ssample_sizer5   s                  r9   test_samplero  I  sg   
))


"C3aa8I(33Y5K5K%o
KK
#%PS
 <]]>5JJqM 6
-]]:S1JJqM 2 	::i(|$AV#)$$Q'1H)@! v%)$$bffS]__&=q v%)$$Q'1H1H)IST *$$Q'FF3ax=3::a=89 %( ((u\?RS?R!BGGCqM15?RST!#**gqA yyY3333 C=KZZ,FC99 9999 )_ & 65
 216 Ts    KK'&K9

K$	'
K6	c                  R   [        S5       H  n [        [        R                  R	                  U 5      SSS9nUR
                  nUR                  S   n[        USSU S9R                  U5      n[        USSU S9R                  U5      nUR                  UR                  :  a  M   e   g )N   rA   rp   )r,   rT   r   )rH   rg   rh   rD   rb   )
rL   r=   r    r!   r"   rH   r4   r   rk   lower_bound_)rD   r|   rH   r4   rS  rV  s         r9   	test_initrs    s     b	II!!,/2Q
	 !--KK%a!,

#a& 	 %b1<

#a& 	   D$5$5555 "r;   c                     [         R                  R                  S5      n SnU R                  US4S9n[         R                  " / SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/5      n[         R                  " / SQ5      n/ SQn[        SSUUU [        U5      USS9nUR                  U5        UR                  (       a   eS H  n[        Xg5      (       a  M   e   g)z`GaussianMixture`'s best_parameters, `n_iter_` and `lower_bound_`
must be set appropriately in the case of divergence.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/18216
r   rd   rc   size)gu?g?gn,?)gqz=|?gdUX'n?g.ba˼?)g8?g?g׏'?)g{?g
 ?g(}I^?)gLh?gtM?g@.?)gY8?gj4}_?g$%?)g(.Ag_S.Ag]IN@gŕ&i@g/@gYa2i]U@)?rw  ?rx  ggfffff?g?r   rp   )r1   ri   r   rs   rD   rH   r   rh   )r   r   r  precisions_cholesky_rI  rr  lower_bounds_N)
r    r!   r"   uniformrK   r   r   rk   rD  hasattr)rndr,   r4   r   r   rs   rl   attrs           r9   )test_gaussian_mixture_setting_best_paramsr    s     ))


"CI)Q(A IHIJHG	
	J hh	
	OL #!&'	C GGAJ ~~ s!!!!r;   rj   )r!   random_from_dataz	k-means++kmeansc                 R   [         R                  R                  U5      n[        USS9nUR                  nUR
                  S   n[        X@USS9nUR                  U5        UR                  n[        R                  " USS9 H"  u  p[         R                  " X5      (       d  M"   e   g )Nr   r   r   r   )rH   rj   rD   rh   r@   )r)r    r!   r"   r=   rH   r4   r   rk   r   	itertoolscombinationsallclose)
rj   global_random_seedr3   r|   rH   r4   rl   r/   i_meanj_means
             r9   test_init_means_not_duplicatedr    s    
 ))

 2
3C3a(I))LFA
!WXC GGAJJJE#00!<;;v.... =r;   c                    [         R                  R                  U5      n[        USUS9nUR                  nUR
                  S   n[        XPUS9nUR                  U5        UR                  R                  XVR                  S   4:X  d   e[         R                  " UR                  SS9UR                  :*  5      (       d   e[         R                  " UR                  UR                  SS9:*  5      (       d   eUR                  (       d   eUR                  R                  U:X  d   eUR                  R                  U:X  d   eUR                   R                  U:X  d   eg )Nr   rM  r   )rH   rj   rD   rp   r   r   )r    r!   r"   r=   rH   r4   r   rk   r   rv   allrz   r{   rD  r2   r  r   )rj   r  r   r3   r|   rH   r4   rl   s           r9   test_means_for_all_initsr    s%   
 ))

 2
3C3a|<I))LFA
!C GGAJ::ggaj999966!%%Q%-3::-....66#**1-....>>>::|+++!!\111<<---r;   c                     [         R                  R                  S5      n [        U SS9nUR                  nUR
                  S   nSS/SS//n[        UU USSS	9nUR                  U5        [        UR                  U5        g )
Nr   r   r   r   r  rd      rC  )rH   rD   r   rf   rh   )
r    r!   r"   r=   rH   r4   r   rk   r   r   )r3   r|   rH   r4   r   rl   s         r9   test_max_iter_zeror    s     ))


"C3a(I))LFAr(RH%J
!C GGAJCJJ
+r;   c                    Sn[         R                  R                  S5      nUR                  US5      [         R                  " SS/5      -   n[         R                  " SS/SS//5      n[         R
                  " UR                  US5      U5      n[         R                  " X5/5      R                  U 5      nS	u  pxp[         R                  " UR                  S   U45      R                  U 5      n[        US
U
S9R                  U5      R                  nS
U[         R                  " UR                  S   5      U4'   [        XkXS9u    pUR                  U :X  d   eS
U-  n[!        UUU	UU
S9R                  U5      nUR"                  R                  U :X  d   eUR$                  R                  U :X  d   eUR&                  R                  U :X  d   e[!        UUU	U
S9R                  U5      nUR"                  R                  U :X  d   eUR$                  R                  U :X  d   eUR&                  R                  U :X  d   eUR(                  UR(                  :X  d   e[+        UR&                  UR&                  5        g)a  Check that we properly initialize `precision_cholesky_` when we manually
provide the precision matrix.

In this regard, we check the consistency between estimating the precision
matrix and providing the same precision matrix as initialization. It should
lead to the same results with the same number of iterations.

If the initialization is wrong then the number of iterations will increase.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/16944
r   r   r@   r  g        gffffffg      @gffffff?)r@   r   rC  r   rp   )
n_clustersrg   rD   )ri   r1   )rH   r1   ri   r   rD   )rH   r1   ri   rD   N)r    r!   r"   r   rK   r   r+   r*   r   rv   r   rk   labels_aranger   r2   r   r   r  ry  rI  r   )r   r,   r3   shifted_gaussianCstretched_gaussianr4   rH   r1   ri   rD   r   labelr5   rU   r   gm_with_initgm_without_inits                     r9   *test_gaussian_mixture_precisions_init_diagr    s[    I
))


"CyyA.2r(1CC
3+Sz*+A		)Q 7;
		#89@@NA >P:L9 88QWWQZ./66|DD,q|L	Q	 

 *+D1771:		%&4	9Aq |+++*nO"!''! 
c!f  $$444$$**l:::,,22lBBB%!'!	
 
c!f  !!''<777''--===//55EEE""l&:&::::))?+O+Or;   c                    [         R                  R                  U 5      nUR                  X45      R	                  U5      nUR                  X45      R	                  U5      nXwR                  SS9SS2[         R                  4   -  nXg4$ )z/Randomly generate samples and responsibilities.rp   r   N)r    r!   r"   random_sampler*   rJ   r   )r   r,   r-   rH   r2   rsr4   r   s           r9   _generate_datar  `  sy    			t	$B
)0188?AY56==eDDHH!HQ

]++D7Nr;   c                     Sn[        XX25      u  pEn[        Xb5      nUR                  u  p[        XS9n
XEXg4nU
R	                  U5        U
R
                  U
R                  4$ )z^Calculate precision matrix of X and its Cholesky decomposition
for the given covariance type.
rC  )rH   r1   )r   r   rv   r   _set_parametersr   ry  )r4   r   r1   ri   r.   r/   rM   precisions_choleskyr5   rH   rl   paramss               r9   _calculate_precisionsr  i  sn     I"?	#GK 6kSjjOA
 |
UCk?F??C4444r;   r1   c                     [        USSSUS9u  p4[        X4U 5      u  pVUR                  U:X  d   eUR                  U:X  d   e[        XS9nUR	                  X45        UR
                  n[        X5        g)zNon-regression test for #26415.r/  rc   r   )r   r,   r-   rH   r2   )r1   r   N)r  r  r2   r   _initializery  r   )	r1   r  r   r4   r   r   desired_precisions_choleskyrl   actual_precisions_choleskys	            r9   %test_gaussian_mixture_precisions_initr  ~  s     GA 4I	40O   L000&,,<<<
'C OOA!$!9!9.Lr;   c                     [         R                  R                  S5      n U R                  [         R                  " S5      [         R
                  " S5      SS9n[        SS9nUR                  U5      R                  5         g)zU
Non-regression test for #23032 ensuring 1-component GM works on only a
few samples.
r   r@   rc   ru  rp   ro   N)	r    r!   r"   r&   r   identityr   rk   ri  )r3   r4   r   s      r9   -test_gaussian_mixture_single_component_stabler    s]    
 ))


"CR[[^!DA	a	(BFF1Ir;   c                    [        [        S9nU R                  [        R                  R
                  SU5        [        R                  R                  U5      n[        U5      n[        UR                  UR                  UR                  UR                  S   US9nUR                  UR                   S   5        UR"                  UR$                  :X  d   eg)zuWhen all init parameters are provided, the Gaussian parameters
are not estimated.

Non-regression test for gh-26015.
)side_effectr   r   )rH   rs   r   r   rD   N)r   r   setattrsklearnmixture_gaussian_mixturer    r!   r"   r=   r   rH   r.   r/   r0   rk   r4   
call_countrI  )monkeypatchr  mockr3   r|   r   s         r9   Dtest_gaussian_mixture_all_init_does_not_estimate_gaussian_parametersr    s     9:D))+JD ))

 2
3C3I	++&&??!,,V4
B FF9;;v ??bjj(((r;   )]r   r  rt   r=  rO  ior   unittest.mockr   numpyr    rw   scipyr   r   r  sklearn.clusterr   sklearn.covariancer   sklearn.datasetsr	   sklearn.exceptionsr
   r   sklearn.metrics.clusterr   sklearn.mixturer   r   r   r   r   r   r   r   r   sklearn.utils._testingr   r   r   r   sklearn.utils.extmathr   rP   r^   r:   r=   rm   r   r   r   r   r   r   r   r   r   r   r   r   markfilterwarningsparametrizer   r  r  r  r  r%  r-  r3  r:  r@  rG  rJ  rW  rZ  r_  rc  rf  ro  rs  r  r  r  r  r  r  r  r  r  r  r`   r;   r9   <module>r     s     	 
        " 2 , A 7 +    .7 OQjj$N;
 ;
|*6-0`,.6Pr'5T5<D21026*8`::5< 9:3 ;38)63r7<0 4
6+440$> 9:+@ , ;@F KL' M',-)`=4"D2@ 7K 8K06:r KL6 M6&C"L H//" H..*,(AH EGJJ 5* *O<M =M6)r;   