
    {Kgn                        d dl Z d dlZd dlZd dl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 d dlZd dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z, g dZ-d Z. G d d      Z/d Z0d Z1d Z2d Z3d Z4d Z5d Z6d Z7d Z8d Z9d Z:d Z;d Z<ejz                  j}                  d      ejz                  j                  d g d!      d"               Z@d# ZAd$ ZBd% ZCd& ZDd' ZEd( ZFd) ZGd* ZHd+ ZIejz                  j}                  d      ejz                  j                  d,d-      d.               ZJ e*e/      d0        ZKd1 ZLd2 ZMd3 ZNd4 ZOd5 ZPd6 ZQ e*e/      d7        ZRd8 ZSejz                  j                  d9g d:      d;        ZTejz                  j                  d9g d:      d<        ZUd= ZVd> ZWd? ZXd@ ZYejz                  j                  dAe-      dB        ZZdC Z[dD Z\y)E    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ignore_warnings)fast_logdetfulltieddiag	sphericalc                    t         j                  j                  d      }g }|dk(  r|t        t	        |||d               D ]`  \  }\  }	}
}|j                  |j                  |
|t        j                  |      z  t        t        j                  |	| z                           b |dk(  ryt        t	        |||d               D ]]  \  }\  }	}
}|j                  |j                  |
t        j                  |      t        t        j                  |	| z                           _ |dk(  rdt        t	        ||            D ]L  \  }\  }	}
|j                  |j                  |
|d   t        t        j                  |	| z                           N |dk(  rft        t	        |||d               D ]J  \  }\  }	}
}|j                  |j                  |
|t        t        j                  |	| z                           L t        j                  |      }|S )Nr   r   r   r   r   )nprandomRandomState	enumeratezipappendmultivariate_normaleyeintroundr   vstack)	n_samples
n_featuresweightsmeans
precisionscovariance_typerngX_wmcs               o/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/mixture/tests/test_gaussian_mixture.pygenerate_datar9   -   s   
))


"C
A+%%c'5*[:Q&RSLAy1aHH''q266*--s288A	M3J/K T & %c'5*V:L&MNLAy1aHH''2771:s288A	M;R7ST O & "3w#67IAv1HH''z&)3rxxI/F+G 8 & %c'5*V:L&MNLAy1aHHS,,Q3rxxI7N3OPQ O 			!AH    c                       e Zd ZddZy)
RandomDatac                    || _         || _        || _        |j                  |      | _        | j                  | j                  j                         z  | _        |j                  ||      |z  | _        d|j                  |      z   d|j                  ||      z   dz  t        ||      t        j                  t        |      D cg c]  }t        ||      dz   c}      d| _        d| j                  d   z  d| j                  d   z  t        j                  | j                  d         t        j                  | j                  d	   D cg c]  }t        j                  |       c}      d| _        t        t!        t"        t"        D cg c]0  }t%        ||| j                  | j                  | j                  |      2 c}            | _        t        j(                  t+        | j                        D 	
cg c]@  \  }	}
t        j,                  t/        t        j0                  |
|z              |	t.        
      B c}
}	      | _        y c c}w c c}w c c}w c c}
}	w )N      ?   )random_stater   r   r   r         ?r   r   r   r   )dtype)r,   n_componentsr-   randr.   sumr/   r	   r!   arrayrangecovariancesr   invr0   dictr%   COVARIANCE_TYPEr9   r3   hstackr$   r   r)   r*   Y)selfr2   r,   rD   r-   scaler4   
covariance
covar_typekr5   s              r8   __init__zRandomData.__init__M   s   "($xx-||dll&6&6&88XXlJ7%?
sxx55388L*==!C#JSAHH #<00 $JSACG0	

 t//<<$**622JJt//78HH:>:J:J6:RS:RJJ':RS	
  '6
 '6
 "!"

((" '6

   &dll33DAq BHHQ]34asC3
? T
s   II5I9AI
N)   r?   r?   2   )__name__
__module____qualname__rT    r:   r8   r<   r<   L   s    1
r:   r<   c            	         t         j                  j                  d      } | j                  dd      }d\  }}}}}d\  }}t	        |||||||      j                  |      }	|	j                  |k(  sJ |	j                  |k(  sJ |	j                  |k(  sJ |	j                  |k(  sJ |	j                  |k(  sJ |	j                  |k(  sJ |	j                  |k(  sJ y )Nr   
   r?   )r?   g-C6?      皙?)r   r"   )rD   toln_initmax_iter	reg_covarr1   init_params)r!   r"   r#   rE   r   fitrD   r1   r`   rc   rb   ra   rd   )
r2   r3   rD   r`   ra   rb   rc   r1   rd   gmms
             r8    test_gaussian_mixture_attributesrg      s    
))


"CQA 6J2L#vx#3 O[
!' 
c!f  |+++/11177c>>==I%%%<<8###::??k)))r:   c                     t         j                  j                  d      } t        |       }|j                  }|j
                  d   }t        |      }| j                  |d      }||_        t        j                  d| dt        |j                               }t        j                  t        |      5  |j!                  |       d d d        | j                  |      dz   }||_        t        j                  dt        j"                  |      d	d
t        j$                  |      d	      }t        j                  t        |      5  |j!                  |       d d d        | j                  |      }||j'                         dz   z  }||_        t        j                  dt        j&                  |      d	      }t        j                  t        |      5  |j!                  |       d d d        |j(                  }	t        |	|      }|j!                  |       t+        |	|j                         y # 1 sw Y   mxY w# 1 sw Y   xY w# 1 sw Y   cxY w)Nr   r   rD      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_initrD   )r!   r"   r#   r<   rD   r3   r   rE   rm   reescapestrshapepytestraises
ValueErrorre   minmaxrF   r.   r   )
r2   	rand_datarD   r3   gweights_bad_shapemsgweights_bad_rangeweights_bad_normr.   s
             r8   test_check_weightsr}      s   
))


"C3I))LFA\2A q1&AN
))	>c*;*A*A&B%C	EC 
z	-	a 
. .2&AN
))	ff./4 5VV-.s3	5C
 
z	-	a 
. xx-'+;+?+?+AA+EF%AN
))	""$&&)9":3!?	AC 
z	-	a 
. GW<HAEE!Hw/; 
.	- 
.	- 
.	-s$   4H1H>I
1H;>I
Ic                     t         j                  j                  d      } t        |       }|j                  |j
                  }}|j                  d   }t        |      }| j                  |dz   |      }||_	        d}t        j                  t        |      5  |j                  |       d d d        |j                  }||_	        |j                  |       t        ||j                         y # 1 sw Y   DxY w)Nr   r   ri   rj   z/The parameter 'means' should have the shape of rk   )r!   r"   r#   r<   rD   r-   r3   r   rE   
means_initrr   rs   rt   re   r/   r   )	r2   rw   rD   r-   r3   rx   means_bad_shaperz   r/   s	            r8   test_check_meansr      s    
))


"C3I(55y7K7K*LFA\2A hh|a/<O"AL
;C	z	-	a 
. OOEALEE!Huall+ 
.	-s   C,,C5c                  ~   t         j                  j                  d      } t        |       }|j                  |j
                  }}t        j                  |dz   ||f      t        j                  |dz   |dz   f      t        j                  |dz   |f      t        j                  |dz         d}t        j                  |||f      }t        j                  |      |d<   d|d<   ||d   t        j                  ||fd      t        j                  |d      d}ddddd}t        D ]   }t        |       j                  |   }	t        |||       }
||   |
_        d	| d
}t        j                  t        |      5  |
j!                  |	       d d d        ||   |
_        d| d||    }t        j                  t        |      5  |
j!                  |	       d d d        |j"                  |   |
_        |
j!                  |	       t%        |j"                  |   |
j                          y # 1 sw Y   xY w# 1 sw Y   axY w)Nr   rj   r   g      )r   r   r   zsymmetric, positive-definitepositiverD   r1   r@   zThe parameter 'z$ precision' should have the shape ofrk   'z precision' should be )r!   r"   r#   r<   rD   r-   onesr(   r   rL   r3   r   precisions_initrr   rs   rt   re   r0   r   )r2   rw   rD   r-   precisions_bad_shapeprecisions_not_posprecisions_not_positivenot_positive_errorsrR   r3   rx   rz   s               r8   test_check_precisionsr      s   
))


"C3I(55y7K7K*L ):zBCaa89):67WWlQ.0	 ,
J!GHFF:.q"&w #"1%z2D9WW\40	 /.	 &o
sOj)%zPS

 1<
|+OP]]:S1EE!H 2 4J?*34G
4S3TU]]:S1EE!H 2 &00<	a9//
;Q=N=NO+ & 21 21s   7H'H3'H0	3H<	c            	         t         j                  j                  d      } d\  }}| j                  ||      }| j                  |d      }t        j                  |      |z  }t        j
                  |g      }t        j                  d|f      }t        ||||d      }t        d      }	|	j                  |       t        |	j                  |d   d      d       t        |	j                  |d   d      d       t        |d	      }
t        j
                  |
D cg c]"  }t        j                  ||j                        $ c}      }t        j
                  |D cg c]  }t        j                   |       c}      }t#        ||       t        j$                  |df      }t        j
                  |g      }|j'                  d
      j)                  d      }t        ||||d      }t        d      }	|	j                  |       t        |	j                  |d   d      d       t        |	j                  |d   d      d       t        |d	      }
t        j
                  |
D cg c]"  }t        j                  ||j                        $ c}      }t        j
                  |D cg c]  }t        j                   |       c}      }t#        ||       y c c}w c c}w c c}w c c}w )Nr     r?   rj   T)assume_centered	frobeniusnormspectralr   axis)rj   F)r!   r"   r#   rE   sqrtrG   zerosr   r   re   r   
error_normr   dotTr   rJ   r   r   meanreshape)r2   r,   r-   r3   respX_respnkxkcovars_predecovprecs_chol_predprec
precs_predcov	precs_ests                  r8   test_suffstat_sk_fullr     sU    ))


"C"Iz 	J'A88Iq!DWWT]QF	9+	B	1j/	"B5dAr2q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5dAr2q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                  j   t         j                  j                  d      } d\  }}}| j                  ||      }||j	                  d      d d t         j
                  f   z  }| j                  ||      }|j	                  d      }t        j                  |j                  |      |d d t         j
                  f   z  }t        ||||d      }t        j                  |d d t         j
                  t         j
                  f   |z  d      |z  }t        ||||d      }	t               }
||
_        t        |
j                  |	d      d       t        |
j                  |	d      d       t        |	d      }t        j                  ||j                        }t        j                   |	      }t#        ||       y )	Nr   r   r?   r?   rj   r   r   r   r   r   )r!   r"   r#   rE   rF   newaxisr   r   r   r   r   covariance_r   r   r   r   rJ   r   )r2   r,   r-   rD   r   r3   r   r   covars_pred_fullcovars_pred_tiedr   r   r   r   s                 r8   test_suffstat_sk_tiedr   F  sr   
))


"C*3'Iz<88I|,D$((("1bjj=11DJ'A	q	B		R2::.	.B:4BAN
r!RZZ+,/??CiO  ;4BAN D'D(8{KQO(8zJAN 22BFKO):):;J

+,Ii4r:   c                  *   t         j                  j                  d      } d\  }}}| j                  ||      }||j	                  d      d d t         j
                  f   z  }| j                  ||      }|j	                  d      }t        j                  |j                  |      |d d t         j
                  f   z  }t        ||||d      }t        ||||d      }	t               }
t        ||	      D ]  \  }}t        j                  t        j                  |            |
_        t        j                  |      }t        |
j                  |d      d       t        |
j                  |d      d        t!        |	d      }t        |	d	|d
z  z         y )Nr   r   rj   r   r   r   r   r   rB   r?   )r!   r"   r#   rE   rF   r   r   r   r   r   r   r%   r   r   r   r   r   )r2   r,   r-   rD   r   r3   r   r   r   covars_pred_diagr   cov_fullcov_diagr   s                 r8   test_suffstat_sk_diagr   d  s[   
))


"C*3'Iz<88I|,D$((("1bjj=11DJ'A	q	B		R2::.	.B:4BAN:4BAN D!"24DE(772778#45778$DOOH;OGKDOOH:OFJ	 F 22BFKO(#0B*BCr:   c                     t         j                  j                  d      } d\  }}| j                  ||      }||j	                         z
  }t        j
                  |df      }t        j                  |g      }|j	                         }t        ||||d      }t        j                  |j                         j                  |j                               ||z  z  }t        ||       t        |d      }	t        |d|	dz  z         y )Nr   r   rj   r   rB   r?   )r!   r"   r#   rE   r   r   rG   r   r   flattenr   r   r   )
r2   r,   r-   r3   r   r   r   covars_pred_sphericalcovars_pred_spherical2r   s
             r8   #test_gaussian_suffstat_sk_sphericalr   }  s     ))


"C"IzJ'A	AFFHA77Iq>"D	9+	B	
BDT1bRTVWXVVAIIKMM199;?Y -/EF 22GUO-s_a5G/GHr:   c            	      N   d} t        t        j                  j                  d            }t        D ]  }|j
                  |   }|dk(  r7t        j                  |D cg c]  }t        j                  |       c}      }na|dk(  rt        j                  |      }nF|dk(  r7t        j                  |D cg c]  }t        j                  |       c}      }n
|dk(  r|| z  }t        t        ||      ||       }t        |dt        j                        z          y c c}w c c}w )	Nr?   r   r   r   r   r   )r-   g      )r<   r!   r"   r#   rL   rI   rG   r   detprodr   r   r   log)r-   rw   rR   rQ   r   predected_detexpected_dets          r8   test_compute_log_det_choleskyr     s    J2990034I%
**:6
HH%L#fjjo%LMM6!"JJz2M6!HHj%Ijsbggclj%IJM;&&
2M 1'
J?!

 	",rvvm7L0LM% & &M &Js   D
2D"
c                 2   t        j                  t        |       t        |      f      }t        j                  |      }t	        t        ||            D ]@  \  }\  }}t        j                  j                  | ||      j                  d      |d d |f<   B |S )Nrj   r   )
r!   emptylenr   r$   r%   r   r   logpdfrF   )r3   r/   covarsr   stdsir   stds           r8   _naive_lmvnpdf_diagr     s{    88SVSZ()D776?D#Ct$45;D#ZZ&&q$488a8@QT
 6Kr:   c                  @   ddl m}  t        j                  j	                  d      }t        |      }d}|j                  }|j                  }|j                  }|j                  ||      }|j                  ||      }t        |||      }	t        j                  |D 
cg c]-  }
t        j                  dt        j                  |
      z        / c}
      } | |||d      }t        ||	       dt        j                  |      z  } | |||d      }t        ||	       t        j                  |D 
cg c]  }
|
 c}
      j                  d      }t        j                  t        j                  d|z              }t        |||g|z        }	 | |||d      }t        ||	       |j                  d	      }dt        j                  |j                  d	            z  }t        |||D cg c]  }|g|z  
 c}      }	 | |||d
      }t        ||	       y c c}
w c c}
w c c}w )Nr   )_estimate_log_gaussian_probr   rB   r   r   r   r   rj   r   )!sklearn.mixture._gaussian_mixturer   r!   r"   r#   r<   r-   rD   r/   rE   r   rG   r   r   r   r   )r   r2   rw   r,   r-   rD   r/   covars_diagr3   log_prob_naivex
precs_fulllog_probprecs_chol_diagcovars_tied
precs_tiedcovars_sphericalprecs_sphericalrS   s                      r8   'test_gaussian_mixture_log_probabilitiesr     s   M ))


"C3II%%J))LOOE((<4KJ'A(E;?N kJk2773#34kJKJ*1eZHHh7 BGGK00O*1e_fMHh7 (({3{!A{3499q9AK{!234J(EK=<3OPN*1eZHHh7 #''Q'/BGGK$4$4!$4$<==O(	5-=>-=A3#-=>N +1e_kRHh75 K 4 ?s   2H-	H%Hc            	      t   t         j                  j                  d      } t        | d      }|j                  }|j
                  }|j                  }| j                  ||      }t        D ]  }|j                  }|j                  }|j                  |   }	t        || |||	|      }
|
j                  |       |
j                  |      }t        |j!                  d      t        j"                  |             t%        |
j&                  |       t%        |
j(                  |       t%        |
j*                  |	        y )Nr      rP   rD   r@   rm   r   r   r1   rj   r   )r!   r"   r#   r<   r,   r-   rD   rE   rL   r.   r/   r0   r   re   predict_probar   rF   r   r   rm   r   r   )r2   rw   r,   r-   rD   r3   rR   r.   r/   r0   rx   r   s               r8   ,test_gaussian_mixture_estimate_log_prob_respr     s   
))


"C3a(I##I%%J))LJ'A%
##))*5
% &&
 	
aq!!$((("2BGGI4FG1>>731<</1,,j9# &r:   c            	      b   t         j                  j                  d      } t        |       }t        D ]  }|j
                  |   }|j                  }t        |j                  | |j                  |j                  |j                  |   |      }d}t        j                  t        |      5  |j                  |       d d d        |j!                  |       |j                  |      }|j#                  |      j%                  d      }t'        ||       t)        ||      dkD  rJ  y # 1 sw Y   lxY w)Nr   r   sThis GaussianMixture instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.rk   rj   r   ffffff?)r!   r"   r#   r<   rL   r3   rN   r   rD   r.   r/   r0   rr   rs   r   predictre   r   argmaxr   r   )	r2   rw   rR   r3   rN   rx   rz   Y_predY_pred_probas	            r8   +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"1f-4441 &" 65s   (D%%D.	zignore:.*did not converge.*zseed, max_iter, tol))r   r?   Hz>)rj   r?   r_   )r]   ,  r   )   r   r_   c                    t         j                  j                  |       }t        |      }t        D ]  }|j
                  |   }|j                  }t        |j                  ||j                  |j                  |j                  |   |||      }t        j                  |      }	|	j                  |      j                  |      }
|j!                  |      }t#        |
|       t%        ||      dkD  rJ  y )N)rD   r@   rm   r   r   r1   rb   r`   r   )r!   r"   r#   r<   rL   r3   rN   r   rD   r.   r/   r0   copydeepcopyre   r   fit_predictr   r   )seedrb   r`   r2   rw   rR   r3   rN   rx   fY_pred1Y_pred2s               r8   !test_gaussian_mixture_fit_predictr     s     ))


%C3I%
KK
#KK"//"** %00<&	
 MM!%%(""1%--"7G,"1g.555' &r:   c                      t         j                  j                  d      j                  dd      } t	        ddd      }|j                  |       }|j                  |       }t        ||       y )Nr     r   )rD   ra   r@   )r!   r"   r#   randnr   r   r   r   )r3   gmy_pred1y_pred2s       r8   (test_gaussian_mixture_fit_predict_n_initr   B  sV    
		a &&tQ/A	a	BBnnQGjjmGw(r:   c            	         t         j                  j                  d      } t        |       }|j                  }|j
                  }t        D ]  }|j                  |   }t        |dd| |      }|j                  |       t        t        j                  |j                        t        j                  |j                        dd       |j                  d d df   j                         }|j                   d d df   j                         }t        |j                  |   |j                   |   dd       |dk(  r|j"                  }	|j$                  d   }
ng|dk(  rKt        j&                  |j"                  g|z        }	t        j&                  |j$                  d   g|z        }
n|d	k(  rt        j&                  |j"                  D cg c]  }t        j(                  |      |z   c}      }	t        j&                  |j$                  d	   D cg c]  }t        j(                  |      |z   c}      }
n|d
k(  rt        j&                  |j"                  D cg c]  }t        j*                  |       c}      }	t        j&                  |j$                  d
   D cg c]  }t        j*                  |       c}      }
t        j,                  	dd      j                         }t        j,                  
dd      j                         }t/        ||      D ]9  \  }}t1               }|
|   |_        t        |j5                  |	|         dd       ;  y c c}w c c}w c c}w c c}w )Nr      rD   ra   rc   r@   r1   r_   g{Gz?)rtolatolr   r   r   r   rj   r?   )axis1axis2g333333?)r   )r!   r"   r#   r<   r-   rD   rL   r3   r   re   r   sortweights_r.   means_argsortr/   precisions_r0   rG   r(   r   tracer%   r   r   r   )r2   rw   r-   rD   rR   r3   rx   arg_idx1arg_idx2	prec_pred	prec_testr7   drS   hr   s                   r8   test_gaussian_mixture_fitr  K  s   
))


"C3I%%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(+DAq&(D(|DDOOIaL914H	 ,O &: "QS "E!Ss   M
M
M
M!
c                     t         j                  j                  d      } t        |       }|j                  }d}t
        D ]  }|j                  |   }t        |dd| |      }g }t        |      D ]3  }|j                  |       |j                  |j                  |             5 t        j                  |      }t        ||d| |      }	|	j                  |       t        |j                         |	j                  |              y )Nr   r\   rj   r   )r!   r"   r#   r<   rD   rL   r3   r   rH   re   r&   scorerG   r   ru   )
r2   rw   rD   ra   rR   r3   rx   llr4   g_bests
             r8   %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   t         j                  j                  d      } t        | d      }|j                  }d}t
        D ]Y  }|j                  |   }t        |d|d| |      }d}t        j                  t        |      5  |j                  |       d d d        [ y # 1 sw Y   fxY w)Nr   rj   r   rD   ra   rb   rc   r@   r1   zBest performing initialization did not converge. Try different init parameters, or increase max_iter, tol, or check for degenerate data.rk   )r!   r"   r#   r<   rD   rL   r3   r   rr   warnsr
   re   )r2   rw   rD   rb   rR   r3   rx   rz   s           r8   -test_gaussian_mixture_fit_convergence_warningr    s    
))


"C3a(I))LH%
KK
#%&
1 	
 \\,C8EE!H 98 & 98s   BB'	c                  H   t         j                  j                  d      } d\  }}}| j                  ||      }t        D ]b  }t        ||d      j                  |      j                  |      }t        ||dd      j                  |      j                  |      }||k\  rbJ  y )Nr   rV   r   r?   r   r   rD   r1   r@   ra   )r!   r"   r#   r   rL   r   re   r  )r2   r,   r-   rD   r3   cv_typetrain1train2s           r8   test_multiple_initr    s    
))


"C*2'Iz<		)Z(A")7QR SVU1X 	 ) '	 SVU1X 	 % #r:   c                      t         j                  j                  d      } d\  }}}| j                  ||      }ddddd}t        D ]7  }t        |||       j                  |      }|j                         ||   k(  r7J  y )	Nr   r           )   rA   r   )r!   r"   r#   r   rL   r   re   _n_parameters)r2   r,   r-   rD   r3   n_paramsr  rx   s           r8   "test_gaussian_mixture_n_parametersr&    s    
))


"C*2'Iz<		)Z(ARDH"%wS

#a& 	
  HW$5555	 #r:   c                  H   t         j                  j                  d      } d\  }}}| j                  ||      }t	        |d|       j                  |      j                  |      }dD ]:  }t	        |||       j                  |      j                  |      }t        ||       < y )Nr   )d   rj   rj   r   r   )r   r   r   )r!   r"   r#   r   r   re   bicr   )r2   r,   n_dimrD   r3   bic_fullr1   r)  s           r8   test_bic_1d_1componentr,    s     ))


"C%."Iul		)U#A%vC	
 
Q	Q  9) / 
 SVSV 	 	Hc* 9r:   c                     t         j                  j                  d      } d\  }}}| j                  ||      }dt	        t        j
                  |j                  d            |dt        j                  dt         j                  z        z   z  z   z  }t        D ]  }t        ||| d      }|j                  |       d|z  |z  d|j                         z  z   }d|z  |z  t        j                  |      |j                         z  z   }	|t        j                  |      z  }
|j                  |      |z
  |z  |
k  sJ |j                  |      |	z
  |z  |
k  rJ  y )	Nr   )rV   r]   r?   r>   rj   )biasr?   rU   )rD   r1   r@   rb   )r!   r"   r#   r   r   r   r   r   pirL   r   re   r$  r   aicr)  )r2   r,   r-   rD   r3   sghr  rx   r0  r)  bounds              r8   test_gaussian_mixture_aic_bicr3    s:   
))


"C*2'Iz<		)Z(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            	         t         j                  j                  d      } t        |       }|j                  }t
        D ]  }|j                  |   }t        |dd| |d      }t        |dd| |d      }t        j                  }t               t        _	        	 |j                  |       |j                  |       |t        _	         y # |t        _	        w xY w)Nr   rj   )rD   ra   rc   r@   r1   verboser?   )r!   r"   r#   r<   rD   rL   r3   r   sysstdoutr   re   )r2   rw   rD   rR   r3   rx   r  
old_stdouts           r8   test_gaussian_mixture_verboser9    s    
))


"C3I))L%
KK
#%&
 %&
 ZZ
Z
	$EE!HEE!H#CJ1 &0 $CJs   "CCr   )r   rj   r?   c           	      L   | }t         j                  j                  |      }d\  }}}|j                  ||      }t	        |ddd|d      }t	        |ddd|d      }|j                  |       |j                  |      j                  |      }	|j                  |      j                  |      }
t        |j                  |j                         t        |j                  |j                         t        |j                  |j                         |
|	kD  sJ t	        |ddd|dd	
      }t	        |ddd|dd	
      }|j                  |       |j                  rJ |j                  |       t        d      D ]!  }|j                  |       |j                  s! n |j                  sJ y )Nr   rj   r?   r   F)rD   ra   rb   rc   r@   
warm_startTr   ư>)rD   ra   rb   rc   r@   r;  r`   r   )r!   r"   r#   rE   r   re   r  r   r  r  r  
converged_rH   )r   r@   r2   r,   r-   rD   r3   rx   r  score1score2r4   s               r8   test_warm_startr@  .  s    L
))


-C*3'Iz<J'A 	!!	A 	!!	A EE!HUU1X^^AFUU1X^^AF

AJJ/!((+q}}5F?? 	!!	A 	!!	A EE!H||EE!H 4[	a<<  <<<r:   )categoryc                  V   t         j                  j                  d      } t        |       }|j                  }|j
                  d   }dD ]_  }t        |d||       }t        d      D ]!  }|j                  |       |j                  s! n |j                  sJ ||j                  k\  r_J  y )Nr   r   )rj   r?   rV   T)rD   r;  rb   r@   r(  )r!   r"   r#   r<   rD   r3   r   rH   re   r=  n_iter_)r2   rw   rD   r3   rb   rf   r4   s          r8   )test_convergence_detected_with_warm_startrD  s  s     ))


"C3I))LFA%	
 sAGGAJ~~  ~~~3;;&&& r:   c                     d} t         j                  j                  d      }t        |d      }|j                  }|j
                  |    }t        |ddd||       }d}t        j                  t        |      5  |j                  |       d d d        t        j                         5  t        j                  d	t               |j                  |       d d d        |j                  |      }|j!                  |      j#                         }t%        ||       t        |dd|| 
      j                  |      }	|	j                  |      |j                  |      kD  sJ y # 1 sw Y   xY w# 1 sw Y   xY w)Nr   r      r   rj   r  r   rk   ignorer   )r!   r"   r#   r<   rD   r3   r   rr   rs   r   r  warningscatch_warningssimplefilterr
   re   score_samplesr   r   )
rR   r2   rw   rD   r3   gmm1rz   	gmm_scoregmm_score_probagmm2s
             r8   
test_scorerP    sD   J
))


"C3a(I))LJA !"D	=  
~S	1

1 
2 
	 	 	"h(:; 
# 

1I((+002O	?3 !" 
c!f 	 ::a=4::a=(((' 
2	1 
#	"s   8E&,E'E$'E0c                     d} t         j                  j                  d      }t        |d      }|j                  }|j
                  |    }t        |dd||       }d}t        j                  t        |      5  |j                  |       d d d        |j                  |      j                  |      }|j                  d   |j                  k(  sJ y # 1 sw Y   HxY w)	Nr   r   rF  r   rj   r   r   rk   )r!   r"   r#   r<   rD   r3   r   rr   rs   r   rK  re   rq   r,   )rR   r2   rw   rD   r3   rf   rz   gmm_score_sampless           r8   test_score_samplesrS    s    J
))


"C3a(I))LJA !"C	=  
~S	1! 
2 
003""1%)<)<<<<	 
2	1s   7CCc            
          t         j                  j                  d      } t        | d      }|j                  }t
        D ]  }|j                  |   }t        ||ddd| d      }t         j                   }t        j                         5  t        j                  dt               t        d	      D ]9  }|}|j                  |      j                  |      }||k\  sJ |j                   s9 n |j                   sJ 	 d d d         y # 1 sw Y   xY w)
Nr   rF  r   Trj   r   )rD   r1   rc   r;  rb   r@   r`   rG  iX  )r!   r"   r#   r<   rD   rL   r3   r   infrH  rI  rJ  r
   rH   re   r  r=  )	r2   rw   rD   rR   r3   rf   current_log_likelihoodr4   prev_log_likelihoods	            r8   test_monotonic_likelihoodrX    s     ))


"C3a(I))L%
KK
#%&
 #%&&$$&!!(,>? 3Z&<#),)9)9!)<&-1DDDD>>   >>!> '& & '&s   AD'DD	c                     t         j                  j                  d      } d\  }}t        j                  t        j                  |dz  |f      t        j
                  |dz  |f      f      }t        D ]  }t        |d||       }t        j                         5  t        j                  dt               t        j                  d      }t        j                  t         |      5  |j#                  |       d d d        |j%                  d	      j#                  |       d d d         y # 1 sw Y   5xY w# 1 sw Y   xY w)
Nr   )r\   r   r?   )rD   rc   r1   r@   rG  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, or increase reg_covar.rk   r<  )rc   )r!   r"   r#   r+   r   r   rL   r   rH  rI  rJ  RuntimeWarningrn   ro   rr   rs   rt   re   
set_params)r2   r,   r-   r3   rR   rf   rz   s          r8   test_regularisationr\    s    ))


"C!Iz
			)q.*-	.)q.*9U0VW	A &
"&	
 $$&!!(N;))8C z5
 6 NNTN*..q1 '& &  65 '&s%   AD5#D)5)D5)D2.D55D>	c                  :   t         j                  j                  d      } t        | d      }|j                  }t
        D ]  }|j                  |   }t        ||| d      }|j                  |       |dk(  rHt        |j                  |j                        D ]$  \  }}t        t        j                  |      |       & |dk(  r4t        t        j                  |j                        |j                         t        |j                  d|j                  z          y )	Nr   rF  r   r   r  r   r   rB   )r!   r"   r#   r<   rD   rL   r3   r   re   r%   r  covariances_r   r   rJ   )r2   rw   rD   rR   r3   rf   r   covars           r8   test_propertyr`    s    
))


"C3a(I))L%
KK
#%&	
 	
"3??C4D4DEe)&**T*:EB  F6!%fjj&A3CSCST%coosS=M=M7MN &r:   c                      t         j                  j                  d      } t        | dd      }|j                  |j
                  }}t        D ]  }|j                  |   }t        |||       }d}t        j                  t        |      5  |j                  d       d d d        |j                  |       d}t        j                  t        |      5  |j                  d       d d d        d	}|j                  |      \  }	}
t        |      D ]#  }|d
k(  r?t!        |j"                  |   t        j$                  |	|
|k(     j&                        d       H|dk(  r<t!        |j"                  t        j$                  |	|
|k(     j&                        d       |dk(  rRt!        |j"                  |   t        j(                  t        j$                  |	|
|k(     j&                              d       t!        |j"                  |   t        j*                  |	|
|k(     |j,                  |   z
        d       & t        j.                  t        |      D cg c]  }t        j0                  |	|
|k(     d        c}      }t!        |j,                  |d       |	j2                  ||fk(  sJ t        dd      D ])  }|j                  |      \  }	}|	j2                  ||fk(  r)J   y # 1 sw Y   GxY w# 1 sw Y   xY wc c}w )Nr   rF  r]   )rP   rD   r   z+This GaussianMixture instance is not fittedrk   zInvalid value for 'n_samples'i N  r   rj   )decimalr   r   r(  )r!   r"   r#   r<   r-   rD   rL   r3   r   rr   rs   r   samplere   rt   rH   r   r^  r   r   r   varr  rG   r   rq   )r2   rw   r-   rD   rR   r3   rf   rz   r,   X_sy_srS   means_ssample_sizer4   s                  r8   test_sampleri  '  s}   
))


"C3aa8I(33Y5K5KJ%o
KK
#%zPS
 <]]>5JJqM 6
-]]:S1JJqM 2 	::i(S|$AV#)$$Q'C1H)@! v%)$$bffS]__&=q v%)$$Q'C1H1H)IST *$$Q'FF3sax=3::a=89 %( ((u\?RS?R!BGGCqM15?RST!#**gqA yyY
3333 C=KZZ,FC99j 9999 )_ & 65
 216 Ts   
K!K.#K;
!K+	.K8	c                  ^   t        d      D ]  } t        t        j                  j	                  |       dd      }|j
                  }|j                  d   }t        |dd|       j                  |      }t        |dd|       j                  |      }|j                  |j                  k\  rJ  y )N   rV   rj   )r,   rP   r   )rD   ra   rb   r@   r\   )
rH   r<   r!   r"   r#   rD   r3   r   re   lower_bound_)r@   rw   rD   r3   rL  rO  s         r8   	test_initrm  `  s     b	II!!,/2Q
	 !--KK%a!,

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

#a& 	   D$5$5555 "r:   c            
         t         j                  j                  d      } d}| j                  |df      }t        j                  g dg dg dg dg d	g d
g      }t        j                  g d      }g d}t        dd||| t        |      |d      }|j                  |       |j                  rJ dD ]  }t        ||      rJ  y)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   r^   r]   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@)?rq  ?rr  ggfffff?g?r   rj   )r1   rc   r   rm   r@   rD   r   rb   )r  r  r^  precisions_cholesky_rC  rl  N)
r!   r"   r#   uniformrG   r   r   re   r=  hasattr)rndr,   r3   r   r   rm   rf   attrs           r8   )test_gaussian_mixture_setting_best_paramsrx  t  s     ))


"CI)Q(A IHIJHG	
	J hh	
	OL #!&'	C GGAJ ~~ sD!!!r:   rd   )r"   random_from_dataz	k-means++kmeansc                 X   t         j                  j                  |      }t        |d      }|j                  }|j
                  d   }t        || |d      }|j                  |       |j                  }t        j                  |d      D ]  \  }}	t        j                  ||	      sJ  y )Nr   r   r   r   )rD   rd   r@   rb   r?   )r)r!   r"   r#   r<   rD   r3   r   re   r  	itertoolscombinationsallclose)
rd   global_random_seedr2   rw   rD   r3   rf   r/   i_meanj_means
             r8   test_init_means_not_duplicatedr    s    
 ))

 2
3C3a(I))LFA
!{WXC GGAJJJE#00!<;;vv... =r:   c                    t         j                  j                  |      }t        |d      }|j                  }|j
                  d   }t        || |      }|j                  |       |j                  j                  ||j                  d   fk(  sJ t        j                  |j                  d      |j                  k        sJ t        j                  |j                  |j                  d      k        sJ |j                  sJ y )Nr   r   r   )rD   rd   r@   rj   r   r   )r!   r"   r#   r<   rD   r3   r   re   r  rq   allru   rv   r=  )rd   r  r2   rw   rD   r3   rf   s          r8   test_means_for_all_initsr    s    
 ))

 2
3C3a(I))LFA
!{C GGAJ::aggaj999966!%%Q%-3::-...66#**1-...>>>r:   c                     t         j                  j                  d      } t        | d      }|j                  }|j
                  d   }ddgddgg}t        || |dd	      }|j                  |       t        |j                  |       y )
Nr   r   r   r   r   r^      r<  )rD   r@   r   r`   rb   )
r!   r"   r#   r<   rD   r3   r   re   r   r  )r2   rw   rD   r3   r   rf   s         r8   test_max_iter_zeror    s     ))


"C3a(I))LFAr(RH%J
!C GGAJCJJ
+r:   c                  \   d} t         j                  j                  d      }|j                  | d      t        j                  ddg      z   }t        j                  ddgddgg      }t        j
                  |j                  | d      |      }t        j                  ||g      }d	\  }}}}	t        j                  |j                  d   |f      }
t        |d
|	      j                  |      j                  }d
|
t        j                  |j                  d         |f<   t        ||
||      \  }}}d
|z  }t        |||||	      j                  |      }t        ||||	      j                  |      }|j                  |j                  k(  sJ t!        |j"                  |j"                         y)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   r<  r   rj   )
n_clustersra   r@   )rc   r1   )rD   r1   rc   r   r@   )rD   r1   rc   r@   N)r!   r"   r#   r   rG   r   r+   r   rq   r   re   labels_aranger   r   rC  r   rs  )r,   r2   shifted_gaussianCstretched_gaussianr3   rD   r1   rc   r@   r   labelr4   rQ   r   gm_with_initgm_without_inits                    r8   *test_gaussian_mixture_precisions_init_diagr    s    I
))


"CyyA.2r(1CC
3+Sz*+A		)Q 7;
		#%789A >P:L/9l 88QWWQZ./D,q|L	Q	 

 *+D1771:		%&4	49oAq* *nO"!''! 
c!f  &!'!	
 
c!f  ""l&:&::::))?+O+Or:   c                     t         j                  j                  |       }|j                  ||f      }|j                  ||f      }||j	                  d      ddt         j
                  f   z  }||fS )z/Randomly generate samples and responsibilities.rj   r   N)r!   r"   r#   random_samplerF   r   )r   r,   r-   rD   rsr3   r   s          r8   _generate_datar  3  sk    			t	$B
)Z01AY56DDHH!HQ

]++Dd7Nr:   c                     d}t        | |||      \  }}}t        ||      }|j                  \  }}	t        |	|      }
||||f}|
j	                  |       |
j
                  |
j                  fS )zfCalculate precision matrix of X and its Cholesky decomposition
    for the given covariance type.
    r<  )rD   r1   )r   r   rq   r   _set_parametersr  rs  )r3   r   r1   rc   r.   r/   rI   precisions_choleskyr4   rD   rf   paramss               r8   _calculate_precisionsr  <  s     I"?	4O#GUK 6k?SjjOA|
 |_
UCuk+>?F??C4444r:   r1   c                     t        |ddd      \  }}t        |||       \  }}t        | |      }|j                  ||       |j                  }t        ||       y)zNon-regression test for #26415.r(  r]   r   )r   r,   r-   rD   )r1   r   N)r  r  r   _initializers  r   )r1   r  r3   r   r   desired_precisions_choleskyrf   actual_precisions_choleskys           r8   %test_gaussian_mixture_precisions_initr  Q  sq     	GAt 4I	440O0 'C OOAt!$!9!9.0KLr:   c                     t         j                  j                  d      } | j                  t        j                  d      t        j
                  d      d      }t        d      }|j                  |      j                          y)za
    Non-regression test for #23032 ensuring 1-component GM works on only a
    few samples.
    r   r?   r]   ro  rj   ri   N)	r!   r"   r#   r'   r   identityr   re   rc  )r2   r3   r   s      r8   -test_gaussian_mixture_single_component_stabler  g  s]    
 ))


"CR[[^!DA	a	(BFF1Ir:   c                    t        t              }| j                  t        j                  j
                  d|       t        j                  j                  |      }t        |      }t        |j                  |j                  |j                  |j                  d   |      }|j                  |j                   d          |j"                  |j$                  k(  sJ y)zWhen all init parameters are provided, the Gaussian parameters
    are not estimated.

    Non-regression test for gh-26015.
    )side_effectr   r   )rD   rm   r   r   r@   N)r   r   setattrsklearnmixture_gaussian_mixturer!   r"   r#   r<   r   rD   r.   r/   r0   re   r3   
call_countrC  )monkeypatchr  mockr2   rw   r   s         r8   Dtest_gaussian_mixture_all_init_does_not_estimate_gaussian_parametersr  r  s     9:D))+JD ))

 2
3C3I	++&&??!,,V4
B FF9;;v ??bjj(((r:   )]r   r}  rn   r6  rH  ior   unittest.mockr   numpyr!   rr   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   r   sklearn.utils.extmathr   rL   r9   r<   rg   r}   r   r   r   r   r   r   r   r   r   r   r   markfilterwarningsparametrizer   r   r  r  r  r  r&  r,  r3  r9  r@  rD  rP  rS  rX  r\  r`  ri  rm  rx  r  r  r  r  r  r  r  r  r  rZ   r:   r8   <module>r     s_  
   	 
        " 2 , A 7 +    .7>2
 2
j*6-0`,.6Pr'5T5<D2I,N2*8`::5< 9:6 ;62)2Ij7<0 4
6+440$> 9:+@ , ;@F ,-' .',')T=4"D2@O.6:r ,-6 .6&B"J H//" H$,(:z5* *O<M =M*)r:   