
    *YHhe                        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,e
jZ                  f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.               ZJejz                  j}                  d/      d0        ZKd1 ZLd2 ZMd3 ZNd4 ZOejz                  j                  d5e,      d6        ZPd7 ZQejz                  j}                  d/      d8        ZRd9 ZSejz                  j                  d:g d;      d<        ZTejz                  j                  d:g d;      d=        ZUd> ZVd? ZWe
jZ                  fd@ZXdA ZYejz                  j                  dBe,      dC        ZZdD Z[dE Z\y)F    N)StringIO)Mock)linalgstats)KMeans)EmpiricalCovariance)make_spd_matrix)ConvergenceWarningNotFittedError)adjusted_rand_score)GaussianMixture)_compute_log_det_cholesky_compute_precision_cholesky#_estimate_gaussian_covariances_diag#_estimate_gaussian_covariances_full(_estimate_gaussian_covariances_spherical#_estimate_gaussian_covariances_tied_estimate_gaussian_parameters)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)fast_logdetfulltieddiag	sphericalc                    t         j                  j                  d      }g }|dk(  rt        t	        |||d               D ]o  \  }	\  }
}}|j                  |j                  ||t        j                  |      z  t        t        j                  |
| z                    j                  |             q |dk(  rt        t	        |||d               D ]l  \  }	\  }
}}|j                  |j                  |t        j                  |      t        t        j                  |
| z                    j                  |             n |dk(  rst        t	        ||            D ][  \  }	\  }
}|j                  |j                  ||d   t        t        j                  |
| z                    j                  |             ] |dk(  rut        t	        |||d               D ]Y  \  }	\  }
}}|j                  |j                  ||t        t        j                  |
| z                    j                  |             [ t        j                  |      }|S )Nr   r   r   r   r   )nprandomRandomState	enumeratezipappendmultivariate_normaleyeintroundastyper   vstack)	n_samples
n_featuresweightsmeans
precisionscovariance_typedtyperngX_wmcs                d/var/www/html/planif/env/lib/python3.12/site-packages/sklearn/mixture/tests/test_gaussian_mixture.pygenerate_datar:   +   s    ))


"C
A+%%c'5*[:Q&RS 	LAy1aHH''q266*--s288A	M3J/K&-	 & %c'5*V:L&MN 	LAy1aHH''rwwqz3rxxI'>#?&-	 & "3w#67 	IAv1HH''z&)3rxxI/F+G&-	 & %c'5*V:L&MN 	LAy1aHH''1c"((1y=2I.JKRR	 			!AH    c                   2    e Zd Zddddej                  fdZy)
RandomData      2   c                    || _         || _        || _        |j                  |      j	                  |      | _        | j
                  j	                  |      | j
                  j                         z  | _        |j                  ||      j	                  |      |z  | _        d|j                  |      j	                  |      z   d|j                  ||      j	                  |      z   dz  t        ||      j	                  |      t        j                  t        |      D cg c]!  }t        ||      j	                  |      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]2  }	t'        ||| j
                  | j                  | j                  |	|
      4 c}	            | _        t        j*                  t-        | j
                        D 
cg c]@  \  }
}t        j.                  t1        t        j2                  ||z              |
t0        
      B c}}
      | _        y c c}w c c}w c c}	w c c}}
w )N      ?r?   )random_stater   r   r   r         ?r   r   r   r   r2   )r,   n_componentsr-   randr*   r.   sumr/   r	   r    arrayrangecovariancesr   invr0   dictr$   COVARIANCE_TYPEr:   r4   hstackr#   r   r(   r)   Y)selfr3   r,   rG   r-   scaler2   r5   
covariance
covar_typekr6   s               r9   __init__zRandomData.__init__S   s\    #($xx-44U;||**51DLL4D4D4FFXXlJ7>>uEM
sxx5<<UCC388L*=DDUKKPQQ#JSAHHOHH #<0 $JSAHHORUU	

 t//<<$**622JJt//78HH:>:J:J6:RSJJ'S	
  '6 # "!"

(("#
"  &dll3Aq BHHQ]34asC
A Ts   &J75J<67K$AK
N)__name__
__module____qualname__r    float64rW    r;   r9   r=   r=   R   s     jj:
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!   )rG   toln_initmax_iter	reg_covarr1   init_params)r    r!   r"   rH   r   fitrG   r1   rb   re   rd   rc   rf   )
r3   r4   rG   rb   rc   rd   re   r1   rf   gmms
             r9    test_gaussian_mixture_attributesri      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|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   rG      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_initrG   )r    r!   r"   r=   rG   r4   r   rH   ro   reescapeshapepytestraises
ValueErrorrg   minmaxrI   r.   r   )
r3   	rand_datarG   r4   gweights_bad_shapemsgweights_bad_rangeweights_bad_normr.   s
             r9   test_check_weightsr~      s   
))


"C3I))LFA\2A q1&AN
))	>&7&=&=%>	@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$   +H(>H5I(H25H>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   rk   rl   z/The parameter 'means' should have the shape of rm   )r    r!   r"   r=   rG   r-   r4   r   rH   
means_initrs   rt   ru   rg   r/   r   )	r3   rx   rG   r-   r4   ry   means_bad_shaper{   r/   s	            r9   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   rl   r   g      )r   r   r   zsymmetric, positive-definitepositiverG   r1   rC   zThe parameter 'z$ precision' should have the shape ofrm   'z precision' should be )r    r!   r"   r=   rG   r-   onesr'   r   rO   r4   r   precisions_initrs   rt   ru   rg   r0   r   )r3   rx   rG   r-   precisions_bad_shapeprecisions_not_posprecisions_not_positivenot_positive_errorsrU   r4   ry   r{   s               r9   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?   rl   T)assume_centered	frobeniusnormspectralr   axis)rl   F)r    r!   r"   rH   sqrtrJ   zerosr   r   rg   r   
error_normr   dotTr   rM   r   r   meanreshape)r3   r,   r-   r4   respX_respnkxkcovars_predecovprecs_chol_predprec
precs_predcov	precs_ests                  r9   test_suffstat_sk_fullr   +  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?   rl   r   r   r   r   r   )r    r!   r"   rH   rI   newaxisr   r   r   r   r   covariance_r   r   r   r   rM   r   )r3   r,   r-   rG   r   r4   r   r   covars_pred_fullcovars_pred_tiedr   r   r   r   s                 r9   test_suffstat_sk_tiedr   U  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   rl   r   r   r   r   r   rE   r?   )r    r!   r"   rH   rI   r   r   r   r   r   r   r$   r   r   r   r   r   )r3   r,   r-   rG   r   r4   r   r   r   covars_pred_diagr   cov_fullcov_diagr   s                 r9   test_suffstat_sk_diagr   s  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Cr;   c                 p   t         j                  j                  d      }d\  }}|j                  ||      j	                  |       }||j                         z
  }t        j                  |df|       }t        j                  |g|       }|j                         }t        ||||d      }t        j                  |j                         j                  |j                               ||z  z  }	t        ||	       |j                  | k(  sJ t        |d      }
t        |d|
dz  z         |
j                  | k(  sJ y )Nr   r   rl   rF   r   rE   r?   )r    r!   r"   rH   r*   r   r   rJ   r   r   flattenr   r   r2   r   )global_dtyper3   r,   r-   r4   r   r   r   covars_pred_sphericalcovars_pred_spherical2r   s              r9   #test_gaussian_suffstat_sk_sphericalr     s    ))


"C"IzJ'..|<A	AFFHA77Iq>6D	9+\	2B	
BDT1bRTVWXVVAIIKMM199;?Y -/EF &&,666 22GUO-s_a5G/GH  L000r;   c           	         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  }|j                  | k(  sJ t        t        ||      ||      }t        |d	t        j                        z         |j                  | k(  rJ  y c c}w c c}w )
Nr?   r   rF   r   r   r   r   )r-   g      )r=   r    r!   r"   rO   rL   rJ   r   detprodr2   r   r   r   log)r   r-   rx   rU   rT   r   predected_detexpected_dets           r9   test_compute_log_det_choleskyr     s%   J299003<HI% 2
**:6
HH%L#fjjo%LMM6!"JJz2M6!HHj%Isbggcl%IJM;&&
2M <///0'
J?!

 	",rvvm7L0LM!!\111)2 &M &Js   E
5E
c                 2   t        j                  t        |       t        |      f      }t        j                  |      }t	        t        ||            D ]@  \  }\  }}t        j                  j                  | ||      j                  d      |d d |f<   B |S )Nrl   r   )
r    emptylenr   r#   r$   r   r   logpdfrI   )r4   r/   covarsr   stdsir   stds           r9   _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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   rE   r   r   r   r   rl   r   )!sklearn.mixture._gaussian_mixturer   r    r!   r"   r=   r-   rG   r/   rH   r   rJ   r   r   r   r   )r   r3   rx   r,   r-   rG   r/   covars_diagr4   log_prob_naivex
precs_fulllog_probprecs_chol_diagcovars_tied
precs_tiedcovars_sphericalprecs_sphericalrV   s                      r9   '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      rS   rG   rC   ro   r   r   r1   rl   r   )r    r!   r"   r=   r,   r-   rG   rH   rO   r.   r/   r0   r   rg   predict_probar   rI   r   r   ro   r   r   )r3   rx   r,   r-   rG   r4   rU   r.   r/   r0   ry   r   s               r9   ,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.rm   rl   r   ffffff?)r    r!   r"   r=   rO   r4   rQ   r   rG   r.   r/   r0   rs   rt   r   predictrg   r   argmaxr   r   )	r3   rx   rU   r4   rQ   ry   r{   Y_predY_pred_probas	            r9   +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>)rl   r?   ra   )r_   ,  r   )   r   ra   c                    t         j                  j                  |       }t        ||      }t        D ]  }|j
                  |   }|j                  }t        |j                  ||j                  |j                  |j                  |   |||      }	t        j                  |	      }
|
j                  |      j                  |      }|	j!                  |      }t#        ||       t%        ||      dkD  sJ |	j&                  j(                  |k(  sJ |	j*                  j(                  |k(  sJ |	j,                  j(                  |k(  rJ  y )NrF   )rG   rC   ro   r   r   r1   rd   rb   r   )r    r!   r"   r=   rO   r4   rQ   r   rG   r.   r/   r0   copydeepcopyrg   r   fit_predictr   r   means_r2   weights_precisions_)seedrd   rb   r   r3   rx   rU   r4   rQ   ry   fY_pred1Y_pred2s                r9   !test_gaussian_mixture_fit_predictr   2  s"    ))


%C3l3I% 3
KK
#KK"//"** %00<&	
 MM!%%(""1%--"7G,"1g.555xx~~---zz<///}}""l222-3r;   c                      t         j                  j                  d      j                  dd      } t	        ddd      }|j                  |       }|j                  |       }t        ||       y )Nr     r   )rG   rc   rC   )r    r!   r"   randnr   r   r   r   )r4   gmy_pred1y_pred2s       r9   (test_gaussian_mixture_fit_predict_n_initr   X  sV    
		a &&tQ/A	a	BBnnQGjjmGw(r;   c           	      r   t         j                  j                  d      }t        ||       }|j                  }|j
                  }t        D ]U  }|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       ; |j                  j6                  | k(  sJ |j8                  j6                  | k(  sJ |j"                  j6                  | k(  rVJ  y c c}w c c}w c c}w c c}w )Nr   rF      rG   rc   re   rC   r1   ra   g{Gz?)rtolatolr   r   r   r   rl   r?   )axis1axis2g333333?)r  )r    r!   r"   r=   r-   rG   rO   r4   r   rg   r   sortr   r.   r   argsortr/   r   r0   rJ   r'   r   tracer$   r   r   r   r2   covariances_)r   r3   rx   r-   rG   rU   r4   ry   arg_idx1arg_idx2	prec_pred	prec_testr8   drV   hr   s                    r9   test_gaussian_mixture_fitr  a  s   
))


"C3l3I%%J))L% /3
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 xx~~---~~##|333}}""l222_/3: "QS "E!Ss   N%
N*
N/
N4
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^   rl   r  )r    r!   r"   r=   rG   rO   r4   r   rK   rg   r%   scorerJ   r   rv   )
r3   rx   rG   rc   rU   r4   ry   llr5   g_bests
             r9   %test_gaussian_mixture_fit_best_paramsr    s    
))


"C3I))LF% 7
KK
#%&
 v 	"AEE!HIIaggaj!	" XXb\ %&
 	

1BFFHfll1o6-7r;   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   rl   r   rG   rc   rd   re   rC   r1   zBest performing initialization did not converge. Try different init parameters, or increase max_iter, tol, or check for degenerate data.rm   )r    r!   r"   r=   rG   rO   r4   r   rs   warnsr
   rg   )r3   rx   rG   rd   rU   r4   ry   r{   s           r9   -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   r@   r   r?   r   r   rG   r1   rC   rc   )r    r!   r"   r   rO   r   rg   r  )r3   r,   r-   rG   r4   cv_typetrain1train2s           r9   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           )   rD   r   )r    r!   r"   r   rO   r   rg   _n_parameters)r3   r,   r-   rG   r4   n_paramsr  ry   s           r9   "test_gaussian_mixture_n_parametersr)    s    
))


"C*2'Iz<		)Z(ARDH" 6%wS

#a& 	
  HW$5555	6r;   c                  H   t         j                  j                  d      } d\  }}}| j                  ||      }t	        |d|       j                  |      j                  |      }dD ]:  }t	        |||       j                  |      j                  |      }t        ||       < y )Nr   )d   rl   rl   r   r   )r   r   r   )r    r!   r"   r   r   rg   bicr   )r3   r,   n_dimrG   r4   bic_fullr1   r,  s           r9   test_bic_1d_1componentr/    s     ))


"C%."Iul		)U#A%vC	
 
Q	Q  9 
+) / 
 SVSV 	 	Hc*
+r;   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   )r@   r_   r?   rB   rl   )biasr?   r>   )rG   r1   rC   rd   )r    r!   r"   r   r   r   r   r   pirO   r   rg   r'  r   aicr,  )r3   r,   r-   rG   r4   sghr  ry   r3  r,  bounds              r9   test_gaussian_mixture_aic_bicr6    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4r;   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   rl   )rG   rc   re   rC   r1   verboser?   )r    r!   r"   r=   rG   rO   r4   r   sysstdoutr   rg   )r3   rx   rG   rU   r4   ry   r  
old_stdouts           r9   test_gaussian_mixture_verboser<  )  s    
))


"C3I))L% $
KK
#%&
 %&
 ZZ
Z
	$EE!HEE!H#CJ1$0 $CJs   "CCr   )r   rl   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   rl   r?   r   F)rG   rc   rd   re   rC   
warm_startTr   ư>)rG   rc   rd   re   rC   r>  rb   r   )r    r!   r"   rH   r   rg   r  r   r   r   r   
converged_rK   )r   rC   r3   r,   r-   rG   r4   ry   r  score1score2r5   s               r9   test_warm_startrC  H  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;   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   )rl   r?   r@   T)rG   r>  rd   rC   r+  )r    r!   r"   r=   rG   r4   r   rK   rg   r@  n_iter_)r3   rx   rG   r4   rd   rh   r5   s          r9   )test_convergence_detected_with_warm_startrF    s     ))


"C3I))LFA '%	
 s 	AGGAJ~~	 ~~~3;;&&&'r;   c                    d}t         j                  j                  d      }t        |d|       }|j                  }|j
                  |   }|j                  | k(  s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                  | k(  sJ |j$                  j                  | k(  sJ |j                  |      }|j'                  |      j)                         }	t+        ||	       |	j                  | k(  sJ 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      rS   r2   rl   r  r   rm   ignorer  )r    r!   r"   r=   rG   r4   r2   r   rs   rt   r   r  warningscatch_warningssimplefilterr
   rg   r   r
  score_samplesr   r   )r   rU   r3   rx   rG   r4   gmm1r{   	gmm_scoregmm_score_probagmm2s              r9   
test_scorerS    s   J
))


"C3a|<I))LJA77l""" !"D	=  
~S	1 

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

1I((+002O	?3  L000 !" 
c!f 	 ::a=4::a=(((1  s   
F48,G4F>G
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   rH  r   rl   r  r   rm   )r    r!   r"   r=   rG   r4   r   rs   rt   r   rN  rg   rr   r,   )rU   r3   rx   rG   r4   rh   r{   gmm_score_sampless           r9   test_score_samplesrV    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   rH  r   Trl   r   )rG   r1   re   r>  rd   rC   rb   rJ  iX  )r    r!   r"   r=   rG   rO   r4   r   infrK  rL  rM  r
   rK   rg   r  r@  )	r3   rx   rG   rU   r4   rh   current_log_likelihoodr5   prev_log_likelihoods	            r9   test_monotonic_likelihoodr[    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?   )rG   re   r1   rC   rJ  zFitting the mixture model failed because some components have ill-defined empirical covariance (for instance caused by singleton or collapsed samples). Try to decrease the number of components, increase reg_covar, or scale the input data.rm   r?  )re   )r    r!   r"   r+   r   r   rO   r   rK  rL  rM  RuntimeWarningrp   rq   rs   rt   ru   rg   
set_params)r3   r,   r-   r4   rU   rh   r{   s          r9   test_regularisationr_    s    ))


"C!Iz
			)q.*-	.)q.*9U0VW	A & 2
"&	
 $$& 	2!!(N;))NC z5 
 NNTN*..q1	2 	22  	2 	2s%   AD5#D)5)D5)D2.D55D>	rU   c                    t         j                  j                  d      }t        |d|      }|j                  }|j
                  |    }t        || |d      }|j                  |       |j                  j                  |k(  sJ |j                  j                  |k(  sJ | dk(  rHt        |j                  |j                        D ]$  \  }}t        t        j                  |      |       & y | dk(  r4t        t        j                  |j                        |j                         y t        |j                  d|j                  z         y )	Nr   rH  rI  r   r  r   r   rE   )r    r!   r"   r=   rG   r4   r   rg   r   r2   r
  r$   r   r   rM   )	rU   r   r3   rx   rG   r4   rh   r   covars	            r9   ,test_fitted_precision_covariance_concistencyrb  0  s   
))


"C3a|<I))LJA
!"	C GGAJ??  L000!!\111Vs0@0@A 	?KD%%fjj&6>	?	v	!&**S__"=s?O?OP!#//39I9I3IJr;   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   rH  r_   )rS   rG   r   z+This GaussianMixture instance is not fittedrm   zInvalid value for 'n_samples'i N  r   rl   )decimalr   r   r+  )r    r!   r"   r=   r-   rG   rO   r4   r   rs   rt   r   samplerg   ru   rK   r   r
  r   r   r   varr   rJ   r   rr   )r3   rx   r-   rG   rU   r4   rh   r{   r,   X_sy_srV   means_ssample_sizer5   s                  r9   test_samplerk  I  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   r@   rl   )r,   rS   r   )rG   rc   rd   rC   r^   )
rK   r=   r    r!   r"   rG   r4   r   rg   lower_bound_)rC   rx   rG   r4   rO  rR  s         r9   	test_initro    s     b	 6II!!,/2Q
	 !--KK%a!,

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

#a& 	   D$5$55556r;   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@)?rs  ?rt  ggfffff?g?r   rl   )r1   re   r   ro   rC   rG   r   rd   )r   r   r
  precisions_cholesky_rE  rn  lower_bounds_N)
r    r!   r"   uniformrJ   r   r   rg   r@  hasattr)rndr,   r4   r   r   ro   rh   attrs           r9   )test_gaussian_mixture_setting_best_paramsr{    s     ))


"CI)Q(A IHIJHG	
	J hh	
	OL #!&'	C GGAJ ~~ 	" sD!!!	"r;   rf   )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   )rG   rf   rC   rd   r?   )r)r    r!   r"   r=   rG   r4   r   rg   r   	itertoolscombinationsallclose)
rf   global_random_seedr3   rx   rG   r4   rh   r/   i_meanj_means
             r9   test_init_means_not_duplicatedr    s    
 ))

 2
3C3a(I))LFA
!{WXC GGAJJJE#00!< /;;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 |j                  j                  |k(  sJ |j                  j                  |k(  sJ |j                   j                  |k(  sJ y )Nr   rI  r   )rG   rf   rC   rl   r   r   )r    r!   r"   r=   rG   r4   r   rg   r   rr   allrv   rw   r@  r2   r
  r   )rf   r  r   r3   rx   rG   r4   rh   s           r9   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-...>>>::|+++!!\11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?  )rG   rC   r   rb   rd   )
r    r!   r"   r=   rG   r4   r   rg   r   r   )r3   rx   rG   r4   r   rh   s         r9   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      j                  |       }d	\  }}}	}
t        j                  |j                  d   |f      j                  |       }t        |d
|
      j                  |      j                  }d
|t        j                  |j                  d         |f<   t        |||	|      \  }}}|j                  | k(  sJ d
|z  }t!        |||	||
      j                  |      }|j"                  j                  | k(  sJ |j$                  j                  | k(  sJ |j&                  j                  | k(  sJ t!        |||	|
      j                  |      }|j"                  j                  | k(  sJ |j$                  j                  | k(  sJ |j&                  j                  | k(  s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   rl   )
n_clustersrc   rC   )re   r1   )rG   r1   re   r   rC   )rG   r1   re   rC   N)r    r!   r"   r   rJ   r   r+   r*   r   rr   r   rg   labels_aranger   r2   r   r   r
  ru  rE  r   )r   r,   r3   shifted_gaussianCstretched_gaussianr4   rG   r1   re   rC   r   labelr5   rT   r   gm_with_initgm_without_inits                     r9   *test_gaussian_mixture_precisions_init_diagr    sh    I
))


"CyyA.2r(1CC
3+Sz*+A		)Q 7;
		#%789@@NA >P:L/9l 88QWWQZ./66|DD,q|L	Q	 

 *+D1771:		%&4	49oAq* |+++*nO"!''! 
c!f  $$444$$**l:::,,22lBBB%!'!	
 
c!f  !!''<777''--===//55EEE""l&:&::::))?+O+Or;   c                 $   t         j                  j                  |       }|j                  ||f      j	                  |      }|j                  ||f      j	                  |      }||j                  d      ddt         j                  f   z  }||fS )z/Randomly generate samples and responsibilities.rl   r   N)r    r!   r"   random_sampler*   rI   r   )r   r,   r-   rG   r2   rsr4   r   s           r9   _generate_datar  `  s    			t	$B
)Z0188?AY56==eDD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?  )rG   r1   )r   r   rr   r   _set_parametersr   ru  )r4   r   r1   re   r.   r/   rL   precisions_choleskyr5   rG   rh   paramss               r9   _calculate_precisionsr  i  s     I"?	4O#GUK 6k?SjjOA|
 |_
UCuk+>?F??C4444r;   r1   c                     t        |ddd|      \  }}t        |||       \  }}|j                  |k(  sJ |j                  |k(  sJ t        | |      }|j	                  ||       |j
                  }t        ||       y)zNon-regression test for #26415.r+  r_   r   )r   r,   r-   rG   r2   )r1   r   N)r  r  r2   r   _initializeru  r   )	r1   r  r   r4   r   r   desired_precisions_choleskyrh   actual_precisions_choleskys	            r9   %test_gaussian_mixture_precisions_initr  ~  s     GAt 4I	440O0   L00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_   rq  rl   rk   N)	r    r!   r"   r&   r   identityr   rg   re  )r3   r4   r   s      r9   -test_gaussian_mixture_single_component_stabler    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   )rG   ro   r   r   rC   N)r   r   setattrsklearnmixture_gaussian_mixturer    r!   r"   r=   r   rG   r.   r/   r0   rg   r4   
call_countrE  )monkeypatchr  mockr3   rx   r   s         r9   Dtest_gaussian_mixture_all_init_does_not_estimate_gaussian_parametersr    s     9:D))+JD ))

 2
3C3I	++&&??!,,V4
B FF9;;v ??bjj(((r;   )]r   r  rp   r9  rK  ior   unittest.mockr   numpyr    rs   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   rO   r[   r:   r=   ri   r~   r   r   r   r   r   r   r   r   r   r   r   markfilterwarningsparametrizer   r   r  r  r  r!  r)  r/  r6  r<  rC  rF  rS  rV  r[  r_  rb  rk  ro  r{  r  r  r  r  r  r  r  r  r  r\   r;   r9   <module>r     s     	 
        " 2 , A 7 +    .7 OQjj$N;
 ;
|*6-0`,.6Pr'5T5<D21026*8`::5< 9:3 ;38)63r7<0 4
6+440$> 9:+@ , ;@F KL' M',-)`=4"D2@ 7K 8K06:r KL6 M6&C"L H//" H..*,(AH EGJJ 5* *O<M =M6)r;   