
    e!hh                     P   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) d dl*m+Z+ g dZ,d Z- G d d      Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d Z6d Z7d Z8d Z9d Z:d Z;ejx                  j{                  d      ejx                  j}                  d g d!      d"               Z?d# Z@d$ ZAd% ZBd& ZCd' ZDd( ZEd) ZFd* ZGd+ ZHejx                  j{                  d      ejx                  j}                  d,d-      d.               ZIejx                  j{                  d/      d0        ZJd1 ZKd2 ZLd3 ZMd4 ZNd5 ZOd6 ZPejx                  j{                  d/      d7        ZQd8 ZRejx                  j}                  d9g d:      d;        ZSejx                  j}                  d9g d:      d<        ZTd= ZUd> ZVd? ZWd@ ZXejx                  j}                  dAe,      dB        ZYdC ZZdD 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)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               s/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/sklearn/mixture/tests/test_gaussian_mixture.pygenerate_datar8   +   s   
))


"C
A+%%c'5*[:Q&RS 	LAy1aHH''q266*--s288A	M3J/K	 & %c'5*V:L&MN 	LAy1aHH''2771:s288A	M;R7ST	 & "3w#67 	IAv1HH''z&)3rxxI/F+G	 & %c'5*V:L&MN 	RLAy1aHHS,,Q3rxxI7N3OPQ	R 			!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   invr/   dictr$   COVARIANCE_TYPEr8   r2   hstackr#   r   r(   r)   Y)selfr1   r+   rC   r,   scaler3   
covariance
covar_typekr4   s              r7   __init__zRandomData.__init__K   s   "($xx-||dll&6&6&88XXlJ7%?
sxx55388L*==!C#JSAHH #<0 $JSACG	

 t//<<$**622JJt//78HH:>:J:J6:RSJJ'S	
  '6
 # "!"

(("

   &dll3Aq BHHQ]34asC
? T
s   II5I9AI
N)   r>   r>   2   )__name__
__module____qualname__rS    r9   r7   r;   r;   J   s    1
r9   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!   )rC   toln_initmax_iter	reg_covarr0   init_params)r    r!   r"   rD   r   fitrC   r0   r_   rb   ra   r`   rc   )
r1   r2   rC   r_   r`   ra   rb   r0   rc   gmms
             r7    test_gaussian_mixture_attributesrf      s    
))


"CQA 6J2L#vx#3 O[
!' 
c!f  |+++/11177c>>==I%%%<<8###::??k)))r9   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   rC      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_initrC   )r    r!   r"   r;   rC   r2   r   rD   rl   reescapestrshapepytestraises
ValueErrorrd   minmaxrE   r-   r   )
r1   	rand_datarC   r2   gweights_bad_shapemsgweights_bad_rangeweights_bad_normr-   s
             r7   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   rh   ri   z/The parameter 'means' should have the shape of rj   )r    r!   r"   r;   rC   r,   r2   r   rD   
means_initrq   rr   rs   rd   r.   r   )	r1   rv   rC   r,   r2   rw   means_bad_shapery   r.   s	            r7   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   ri   r   g      )r   r   r   zsymmetric, positive-definitepositiverC   r0   r?   zThe parameter 'z$ precision' should have the shape ofrj   'z precision' should be )r    r!   r"   r;   rC   r,   onesr'   r   rK   r2   r   precisions_initrq   rr   rs   rd   r/   r   )r1   rv   rC   r,   precisions_bad_shapeprecisions_not_posprecisions_not_positivenot_positive_errorsrQ   r2   rw   ry   s               r7   test_check_precisionsr      s0   
))


"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	 /.	 & P
sOj)%zPS

 1<
|+OP]]:S1 	EE!H	 4J?*34G
4S3TU]]:S1 	EE!H	 &00<	a9//
;Q=N=NO+P	 		 	s   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>   ri   T)assume_centered	frobeniusnormspectralr   axis)ri   F)r    r!   r"   rD   sqrtrF   zerosr   r   rd   r   
error_normr   dotTr   rI   r   r   meanreshape)r1   r+   r,   r2   respX_respnkxkcovars_predecovprecs_chol_predprec
precs_predcov	precs_ests                  r7   test_suffstat_sk_fullr     sE    ))


"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LD266$/LMJ[Ac&**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LD266$/LMJ[Ac&**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>   ri   r   r   r   r   r   )r    r!   r"   rD   rE   newaxisr   r   r   r   r   covariance_r   r   r   r   rI   r   )r1   r+   r,   rC   r   r2   r   r   covars_pred_fullcovars_pred_tiedr   r   r   r   s                 r7   test_suffstat_sk_tiedr   D  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4r9   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   ri   r   r   r   r   r   rA   r>   )r    r!   r"   rD   rE   r   r   r   r   r   r   r$   r   r   r   r   r   )r1   r+   r,   rC   r   r2   r   r   r   covars_pred_diagr   cov_fullcov_diagr   s                 r7   test_suffstat_sk_diagr   b  sa   
))


"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 K(772778#45778$DOOH;OGKDOOH:OFJ	K 22BFKO(#0B*BCr9   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   ri   r   rA   r>   )r    r!   r"   rD   r   r   rF   r   r   flattenr   r   r   )
r1   r+   r,   r2   r   r   r   covars_pred_sphericalcovars_pred_spherical2r   s
             r7   #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Hr9   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"   rK   rH   rF   r   detprodr   r   r   log)r,   rv   rQ   rP   r   predected_detexpected_dets          r7   test_compute_log_det_choleskyr     s    J2990034I% N
**:6
HH%L#fjjo%LMM6!"JJz2M6!HHj%Isbggcl%IJM;&&
2M 1'
J?!

 	",rvvm7L0LM%N &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 )Nri   r   )
r    emptylenr   r#   r$   r   r   logpdfrE   )r2   r.   covarsr   stdsir   stds           r7   _naive_lmvnpdf_diagr     s    88SVSZ()D776?D#Ct$45 A;D#ZZ&&q$488a8@QT
AKr9   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   rA   r   r   r   r   ri   r   )!sklearn.mixture._gaussian_mixturer   r    r!   r"   r;   r,   rC   r.   rD   r   rF   r   r   r   r   )r   r1   rv   r+   r,   rC   r.   covars_diagr2   log_prob_naivex
precs_fulllog_probprecs_chol_diagcovars_tied
precs_tiedcovars_sphericalprecs_sphericalrR   s                      r7   'test_gaussian_mixture_log_probabilitiesr     s   M ))


"C3II%%J))LOOE((<4KJ'A(E;?N kJ2773#34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      rO   rC   r?   rl   r~   r   r0   ri   r   )r    r!   r"   r;   r+   r,   rC   rD   rK   r-   r.   r/   r   rd   predict_probar   rE   r   r   rl   r~   r   )r1   rv   r+   r,   rC   r2   rQ   r-   r.   r/   rw   r   s               r7   ,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#:r9   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.rj   ri   r   ffffff?)r    r!   r"   r;   rK   r2   rM   r   rC   r-   r.   r/   rq   rr   r   predictrd   r   argmaxr   r   )	r1   rv   rQ   r2   rM   rw   ry   Y_predY_pred_probas	            r7   +test_gaussian_mixture_predict_predict_probar     s   
))


"C3I% 5
KK
#KK"//"** %00<&
F 	 ]]>5 	IIaL	 	
a1q)00a086<0"1f-44415"	 	s   (D%%D.	zignore:.*did not converge.*zseed, max_iter, tol))r   r>   Hz>)ri   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)rC   r?   rl   r~   r   r0   ra   r_   r   )r    r!   r"   r;   rK   r2   rM   r   rC   r-   r.   r/   copydeepcopyrd   r   fit_predictr   r   )seedra   r_   r1   rv   rQ   r2   rM   rw   fY_pred1Y_pred2s               r7   !test_gaussian_mixture_fit_predictr     s     ))


%C3I% 6
KK
#KK"//"** %00<&	
 MM!%%(""1%--"7G,"1g.555'6r9   c                      t         j                  j                  d      j                  dd      } t	        ddd      }|j                  |       }|j                  |       }t        ||       y )Nr     r   )rC   r`   r?   )r    r!   r"   randnr   r   r   r   )r2   gmy_pred1y_pred2s       r7   (test_gaussian_mixture_fit_predict_n_initr   @  sV    
		a &&tQ/A	a	BBnnQGjjmGw(r9   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      rC   r`   rb   r?   r0   r^   g{Gz?)rtolatolr   r   r   r   ri   r>   )axis1axis2g333333?)r   )r    r!   r"   r;   r,   rC   rK   r2   r   rd   r   sortweights_r-   means_argsortr.   precisions_r/   rF   r'   r   tracer$   r   r   r   )r1   rv   r,   rC   rQ   r2   rw   arg_idx1arg_idx2	prec_pred	prec_testr6   drR   hr   s                   r7   test_gaussian_mixture_fitr  I  s   
))


"C3I%%J))L% +I
KK
#%&
 	
a 	GGAJJ):):!;#D	
 88AqD>))+??1a4(002HHX	 9$	
 I!,,V4I6!!--<!?@I)"6"6v">!?,!NOI;&!--!PQ"&&"4q"8!PQI1:1E1Ek1RSA
#a'SI 6!amm!D"''!*!DEIi6J6J66R!S"''!*!STI88IQa8@@B88IQa8@@B(+ 	IDAq&(D(|DDOOIaL914H		IO+I: "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[   ri   r   )r    r!   r"   r;   rC   rK   r2   r   rG   rd   r%   scorerF   r   rt   )
r1   rv   rC   r`   rQ   r2   rw   llr3   g_bests
             r7   %test_gaussian_mixture_fit_best_paramsr  ~  s    
))


"C3I))LF% 7
KK
#%&
 v 	"AEE!HIIaggaj!	" XXb\ %&
 	

1BFFHfll1o6-7r9   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   ri   r   rC   r`   ra   rb   r?   r0   zBest performing initialization did not converge. Try different init parameters, or increase max_iter, tol, or check for degenerate data.rj   )r    r!   r"   r;   rC   rK   r2   r   rq   warnsr
   rd   )r1   rv   rC   ra   rQ   r2   rw   ry   s           r7   -test_gaussian_mixture_fit_convergence_warningr    s    
))


"C3a(I))LH% 
KK
#%&
1 	
 \\,C8 	EE!H	 		 	s   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   rU   r   r>   r   r   rC   r0   r?   r`   )r    r!   r"   r   rK   r   rd   r  )r1   r+   r,   rC   r2   cv_typetrain1train2s           r7   test_multiple_initr    s    
))


"C*2'Iz<		)Z(A"  )7QR SVU1X 	 ) '	 SVU1X 	 % r9   c                      t         j                  j                  d      } d\  }}}| j                  ||      }ddddd}t        D ]7  }t        |||       j                  |      }|j                         ||   k(  r7J  y )	Nr   r           )   r@   r   )r    r!   r"   r   rK   r   rd   _n_parameters)r1   r+   r,   rC   r2   n_paramsr  rw   s           r7   "test_gaussian_mixture_n_parametersr%    s    
))


"C*2'Iz<		)Z(ARDH" 6%wS

#a& 	
  HW$5555	6r9   c                  H   t         j                  j                  d      } d\  }}}| j                  ||      }t	        |d|       j                  |      j                  |      }dD ]:  }t	        |||       j                  |      j                  |      }t        ||       < y )Nr   )d   ri   ri   r   r   )r   r   r   )r    r!   r"   r   r   rd   bicr   )r1   r+   n_dimrC   r2   bic_fullr0   r(  s           r7   test_bic_1d_1componentr+    s     ))


"C%."Iul		)U#A%vC	
 
Q	Q  9 
+) / 
 SVSV 	 	Hc*
+r9   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   )rU   r\   r>   r=   ri   )biasr>   rT   )rC   r0   r?   ra   )r    r!   r"   r   r   r   r   r   pirK   r   rd   r#  r   aicr(  )r1   r+   r,   rC   r2   sghr  rw   r/  r(  bounds              r7   test_gaussian_mixture_aic_bicr2    s?   
))


"C*2'Iz<		)Z(A
BFF133Q'(:RVVAI=N9N+OOC # 4%#	
 	
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4r9   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   ri   )rC   r`   rb   r?   r0   verboser>   )r    r!   r"   r;   rC   rK   r2   r   sysstdoutr   rd   )r1   rv   rC   rQ   r2   rw   r  
old_stdouts           r7   test_gaussian_mixture_verboser8    s    
))


"C3I))L% $
KK
#%&
 %&
 ZZ
Z
	$EE!HEE!H#CJ1$0 $CJs   "CCr   )r   ri   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   ri   r>   r   F)rC   r`   ra   rb   r?   
warm_startTr   ư>)rC   r`   ra   rb   r?   r:  r_   r   )r    r!   r"   rD   r   rd   r  r   r  r  r  
converged_rG   )r   r?   r1   r+   r,   rC   r2   rw   r  score1score2r3   s               r7   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<< <<<r9   z-ignore::sklearn.exceptions.ConvergenceWarningc                  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   )ri   r>   rU   T)rC   r:  ra   r?   r'  )r    r!   r"   r;   rC   r2   r   rG   rd   r<  n_iter_)r1   rv   rC   r2   ra   re   r3   s          r7   )test_convergence_detected_with_warm_startrB  q  s     ))


"C3I))LFA '%	
 s 	AGGAJ~~	 ~~~3;;&&&'r9   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   ri   r  r   rj   ignorer   )r    r!   r"   r;   rC   r2   r   rq   rr   r   r  warningscatch_warningssimplefilterr
   rd   score_samplesr   r   )
rQ   r1   rv   rC   r2   gmm1ry   	gmm_scoregmm_score_probagmm2s
             r7   
test_scorerN    sR   J
))


"C3a(I))LJA !"D	=  
~S	1 

1 
	 	 	" h(:; 

1I((+002O	?3 !" 
c!f 	 ::a=4::a=((('  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   rD  r   ri   r   r   rj   )r    r!   r"   r;   rC   r2   r   rq   rr   r   rI  rd   rp   r+   )rQ   r1   rv   rC   r2   re   ry   gmm_score_sampless           r7   test_score_samplesrQ    s    J
))


"C3a(I))LJA !"C	=  
~S	1 ! 
003""1%)<)<<<<	 s   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   rD  r   Tri   r   )rC   r0   rb   r:  ra   r?   r_   rE  iX  )r    r!   r"   r;   rC   rK   r2   r   infrF  rG  rH  r
   rG   rd   r  r<  )	r1   rv   rC   rQ   r2   re   current_log_likelihoodr3   prev_log_likelihoods	            r7   test_monotonic_likelihoodrV    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>   )rC   rb   r0   r?   rE  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.rj   r;  )rb   )r    r!   r"   r*   r   r   rK   r   rF  rG  rH  RuntimeWarningrm   rn   rq   rr   rs   rd   
set_params)r1   r+   r,   r2   rQ   re   ry   s          r7   test_regularisationrZ    s    ))


"C!Iz
			)q.*-	.)q.*9U0VW	A & 2
"&	
 $$& 	2!!(N;))8C z5 
 NNTN*..q1	2 	22  	2 	2s%   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   rD  r   r   r  r   r   rA   )r    r!   r"   r;   rC   rK   r2   r   rd   r$   r  covariances_r   r   rI   )r1   rv   rC   rQ   r2   re   r   covars           r7   test_propertyr^    s    
))


"C3a(I))L% O
KK
#%&	
 	
"3??C4D4DE Ce)&**T*:EBC6!%fjj&A3CSCST%coosS=M=M7MNOr9   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   rD  r\   )rO   rC   r   z+This GaussianMixture instance is not fittedrj   zInvalid value for 'n_samples'i N  r   ri   )decimalr   r   r'  )r    r!   r"   r;   r,   rC   rK   r2   r   rq   rr   r   samplerd   rs   rG   r   r\  r   r   r   varr  rF   r   rp   )r1   rv   r,   rC   rQ   r2   re   ry   r+   X_sy_srR   means_ssample_sizer3   s                  r7   test_samplerg  %  s   
))


"C3aa8I(33Y5K5KJ% 1:
KK
#%zPS
 <]]>5 	JJqM	
-]]:S1 	JJqM	 	::i(S|$ 	AV#)$$Q'C1H)@! v%)$$bffS]__&=q v%)$$Q'C1H1H)IST *$$Q'FF3sax=3::a=89	( ((u\?RS!BGGCqM15ST!#**gqA yyY
3333 C= 	:KZZ,FC99j 9999	:_1:	 	
	 	6 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   rU   ri   )r+   rO   r   )rC   r`   ra   r?   r[   )
rG   r;   r    r!   r"   rC   r2   r   rd   lower_bound_)r?   rv   rC   r2   rJ  rM  s         r7   	test_initrk  ^  s     b	 6II!!,/2Q
	 !--KK%a!,

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

#a& 	   D$5$55556r9   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@)?ro  ?rp  ggfffff?g?r   ri   )r0   rb   r~   rl   r?   rC   r   ra   )r  r  r\  precisions_cholesky_rA  rj  N)
r    r!   r"   uniformrF   r   r   rd   r<  hasattr)rndr+   r2   r~   r   rl   re   attrs           r7   )test_gaussian_mixture_setting_best_paramsrv  r  s     ))


"CI)Q(A IHIJHG	
	J hh	
	OL #!&'	C GGAJ ~~ " sD!!!"r9   rc   )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   )rC   rc   r?   ra   r>   )r)r    r!   r"   r;   rC   r2   r   rd   r  	itertoolscombinationsallclose)
rc   global_random_seedr1   rv   rC   r2   re   r.   i_meanj_means
             r7   test_init_means_not_duplicatedr    s    
 ))

 2
3C3a(I))LFA
!{WXC GGAJJJE#00!< /;;vv.../r9   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   )rC   rc   r?   ri   r   r   )r    r!   r"   r;   rC   r2   r   rd   r  rp   allrt   ru   r<  )rc   r~  r1   rv   rC   r2   re   s          r7   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-...>>>r9   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;  )rC   r?   r~   r_   ra   )
r    r!   r"   r;   rC   r2   r   rd   r   r  )r1   rv   rC   r2   r~   re   s         r7   test_max_iter_zeror    s     ))


"C3a(I))LFAr(RH%J
!C GGAJCJJ
+r9   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   ri   )
n_clustersr`   r?   )rb   r0   )rC   r0   rb   r   r?   )rC   r0   rb   r?   N)r    r!   r"   r   rF   r   r*   r   rp   r   rd   labels_aranger   r   rA  r   rq  )r+   r1   shifted_gaussianCstretched_gaussianr2   rC   r0   rb   r?   r   labelr3   rP   r   gm_with_initgm_without_inits                    r7   *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r9   c                     t         j                  j                  |       }|j                  ||f      }|j                  ||f      }||j	                  d      ddt         j
                  f   z  }||fS )z/Randomly generate samples and responsibilities.ri   r   N)r    r!   r"   random_samplerE   r   )r   r+   r,   rC   rsr2   r   s          r7   _generate_datar  1  sk    			t	$B
)Z01AY56DDHH!HQ

]++Dd7Nr9   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;  )rC   r0   )r   r   rp   r   _set_parametersr  rq  )r2   r   r0   rb   r-   r.   rH   precisions_choleskyr3   rC   re   paramss               r7   _calculate_precisionsr  :  s     I"?	4O#GUK 6k?SjjOA|
 |_
UCuk+>?F??C4444r9   r0   c                     t        |ddd      \  }}t        |||       \  }}t        | |      }|j                  ||       |j                  }t        ||       y)zNon-regression test for #26415.r'  r\   r   )r   r+   r,   rC   )r0   r   N)r  r  r   _initializerq  r   )r0   r~  r2   r   r   desired_precisions_choleskyre   actual_precisions_choleskys           r7   %test_gaussian_mixture_precisions_initr  O  sq     	GAt 4I	440O0 'C OOAt!$!9!9.0KLr9   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\   rm  ri   rh   N)	r    r!   r"   r&   r   identityr   rd   ra  )r1   r2   r   s      r7   -test_gaussian_mixture_single_component_stabler  e  s]    
 ))


"CR[[^!DA	a	(BFF1Ir9   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   )rC   rl   r~   r   r?   N)r   r   setattrsklearnmixture_gaussian_mixturer    r!   r"   r;   r   rC   r-   r.   r/   rd   r2   
call_countrA  )monkeypatchr~  mockr1   rv   r   s         r7   Dtest_gaussian_mixture_all_init_does_not_estimate_gaussian_parametersr  p  s     9:D))+JD ))

 2
3C3I	++&&??!,,V4
B FF9;;v ??bjj(((r9   )\r   r{  rm   r5  rF  ior   unittest.mockr   numpyr    rq   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   rK   r8   r;   rf   r|   r   r   r   r   r   r   r   r   r   r   r   markfilterwarningsparametrizer   r   r  r  r  r  r%  r+  r2  r8  r?  rB  rN  rQ  rV  rZ  r^  rg  rk  rv  r  r  r  r  r  r  r  r  r  rY   r9   r7   <module>r     su     	 
        " 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 KL' M',')T=4"D2@O.6:r KL6 M6&B"J H//" H$,(:z5* *O<M =M*)r9   