
    0Phh                     |   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j<        =                    d          ej<        >                    d g d!          d"                         Z?d# Z@d$ ZAd% ZBd& ZCd' ZDd( ZEd) ZFd* ZGd+ ZHej<        =                    d          ej<        >                    d,d-          d.                         ZIej<        =                    d/          d0             ZJd1 ZKd2 ZLd3 ZMd4 ZNd5 ZOd6 ZPej<        =                    d/          d7             ZQd8 ZRej<        >                    d9g d:          d;             ZSej<        >                    d9g d:          d<             ZTd= ZUd> ZVd? ZWd@ ZXej<        >                    dAe,          dB             ZYdC ZZdD Z[dS )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                            d          }g }|dk    rt          t	          |||d                             D ]j\  }\  }	}
}|                    |                    |
|t          j        |          z  t          t          j	        |	| z                                           k|dk    rt          t	          |||d                             D ]g\  }\  }	}
}|                    |                    |
t          j
        |          t          t          j	        |	| z                                           h|dk    rxt          t	          ||                    D ]Z\  }\  }	}
|                    |                    |
|d         t          t          j	        |	| z                                           [|dk    rzt          t	          |||d                             D ]U\  }\  }	}
}|                    |                    |
|t          t          j	        |	| z                                           Vt          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               k/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/mixture/tests/test_gaussian_mixture.pygenerate_datar9   +   sV   
)


"
"C
A+%%%c'5*[:Q&R&RSS 	 	LAy1aHH''q26*---s28A	M3J3J/K/K    
 &  %c'5*V:L&M&MNN 	 	LAy1aHH''271::s28A	M;R;R7S7STT    &  "3w#6#677 	 	IAv1HH''z&)3rxI/F/F+G+G    
 &  %c'5*V:L&M&MNN 	R 	RLAy1aHHS,,Q3rxI7N7N3O3OPPQQQQ
	!AH    c                       e Zd ZddZdS )
RandomData      2   c           	           _         | _         _                            |           _         j         j                                        z   _                            |          |z   _        d                    |          z   d                    |          z   dz  t                    t          j	        fdt          |          D                       d _        d j        d         z  d j        d         z  t          j         j        d	                   t          j	        d
  j        d         D                       d _        t          t!          t"           fdt"          D                                  _        t          j        fdt)           j                  D                        _        d S )N      ?r>   random_statec                 8    g | ]}t                     dz  S )rB   rA   r	   ).0r4   r-   r2   s     r8   
<listcomp>z'RandomData.__init__.<locals>.<listcomp>X   s;        $JSAAACG  r:   r   r   r   r         ?r   r   r   c                 6    g | ]}t          j        |          S  r   inv)rE   
covariances     r8   rF   z'RandomData.__init__.<locals>.<listcomp>c   s"    SSSJJ''SSSr:   r   c           
      V    g | ]%}t          j        j        j        |          &S rJ   )r9   r.   r/   covariances)rE   
covar_typer-   r,   selfs     r8   rF   z'RandomData.__init__.<locals>.<listcomp>j   sN     
 
 
 # "!"
(" 
 
 
r:   c           
          g | ]C\  }}t          j        t          t          j        |z                      |t                     DS ))dtype)r!   r   r)   r*   )rE   kr5   r,   s      r8   rF   z'RandomData.__init__.<locals>.<listcomp>x   sT       Aq BHQ]3344asCCC  r:   )r,   n_componentsr-   randr.   sumr/   r
   r!   arrayrangerO   r   rL   r0   dictr%   COVARIANCE_TYPEr3   hstackr$   Y)rQ   r2   r,   rU   r-   scales   ``` ` r8   __init__zRandomData.__init__K   s    "($xx--|dl&6&6&8&88XXlJ77%?
sxx555388L*===!C#JSAAAH    "<00   	

 

 t/<<$*622Jt/788HSS$:J6:RSSS 	
 
 
 
 
 
 
 
 '6
 
 
 
 
     %dl33  
 
r:   N)r=   r>   r>   r?   )__name__
__module____qualname__r_   rJ   r:   r8   r<   r<   J   s(        1
 1
 1
 1
 1
 1
r:   r<   c            	         t           j                            d          } |                     dd          }d\  }}}}}d\  }}t	          |||||||                              |          }	|	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 d S )Nr   
   r>   )r>   g-C6?      皙?)r   r"   )rU   toln_initmax_iter	reg_covarr1   init_params)r!   r"   r#   rV   r   fitrU   r1   rh   rk   rj   ri   rl   )
r2   r3   rU   rh   ri   rj   rk   r1   rl   gmms
             r8    test_gaussian_mixture_attributesro      s	   
)


"
"CQA 6J2L#vx#3 O[
!'   
c!ff  |++++/11117c>>>>=I%%%%<8####:?k))))))r:   c                     t           j                            d          } t          |           }|j        }|j        d         }t          |          }|                     |d          }||_        t          j
        d| dt          |j                             }t          j        t          |          5  |                    |           d d d            n# 1 swxY w Y   |                     |          dz   }||_        t          j
        dt          j        |          d	d
t          j        |          d	          }t          j        t          |          5  |                    |           d d d            n# 1 swxY w Y   |                     |          }||                                dz   z  }||_        t          j
        dt          j        |          d	          }t          j        t          |          5  |                    |           d d d            n# 1 swxY w Y   |j        }	t          |	|          }|                    |           t+          |	|j                   d S )Nr   r   rU      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_initrU   )r!   r"   r#   r<   rU   r3   r   rV   ru   reescapestrshapepytestraises
ValueErrorrm   minmaxrW   r.   r   )
r2   	rand_datarU   r3   gweights_bad_shapemsgweights_bad_rangeweights_bad_normr.   s
             r8   test_check_weightsr      s0   
)


"
"C3I)LFA\222A q11&AN
)	E	E 	E&)*;*A&B&B	E 	E C 
z	-	-	-  	a               ..2&AN
)	5f.//7	5 	5V-..4	5 	5 C
 
z	-	-	-  	a               xx--'+;+?+?+A+AA+EF%AN
)	A"$&)9":":@	A 	A C 
z	-	-	-  	a               GW<HHHAEE!HHHw/////s6   7CC CF  FFH((H,/H,c                     t           j                            d          } t          |           }|j        |j        }}|j        d         }t          |          }|                     |dz   |          }||_	        d}t          j        t          |          5  |                    |           d d d            n# 1 swxY w Y   |j        }||_	        |                    |           t          ||j	                   d S )Nr   r   rq   rr   z/The parameter 'means' should have the shape of rs   )r!   r"   r#   r<   rU   r-   r3   r   rV   
means_initrz   r{   r|   rm   r/   r   )	r2   r   rU   r-   r3   r   means_bad_shaper   r/   s	            r8   test_check_meansr      s#   
)


"
"C3I(5y7K*LFA\222A hh|a/<<O"AL
;C	z	-	-	-  	a               OEALEE!HHHual+++++s   B99B= B=c                     t           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 ]4}t          |           j
        |         }	t          |||           }
||         |
_        d	| d
}t          j        t          |          5  |
                    |	           d d d            n# 1 swxY w Y   ||         |
_        d| d||          }t          j        t          |          5  |
                    |	           d d d            n# 1 swxY w Y   |j        |         |
_        |
                    |	           t%          |j        |         |
j                   6d S )Nr   rr   r   g      )r   r   r   zsymmetric, positive-definitepositiverU   r1   rC   zThe parameter 'z$ precision' should have the shape ofrs   'z precision' should be )r!   r"   r#   r<   rU   r-   onesr(   r   r[   r3   r   precisions_initrz   r{   r|   rm   r0   r   )r2   r   rU   r-   precisions_bad_shapeprecisions_not_posprecisions_not_positivenot_positive_errorsrP   r3   r   r   s               r8   test_check_precisionsr      s   
)


"
"C3I(5y7K*L ):zBCCaa899):677WlQ.00	  ,
J!GHHF:..q"&w #"1%z2D99W\400	  /.	  & P P
sOOj)%zPS
 
 

 1<P
PPP]:S111 	 	EE!HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 4J?U*UU4G
4SUU]:S111 	 	EE!HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 &0<	a9/
;Q=NOOOO+P Ps$   5FF	F	G::G>	G>	c                  z   t           j                            d          } d\  }}|                     ||          }|                     |d          }t          j        |          |z  }t          j        |g          }t          j        d|f          }t          ||||d          }t          d          }	|		                    |           t          |	                    |d         d          d           t          |	                    |d         d          d           t          |d	          }
t          j        d
 |
D                       }t          j        d |D                       }t          ||           t          j        |df          }t          j        |g          }|                    d                              d          }t          ||||d          }t          d          }	|		                    |           t          |	                    |d         d          d           t          |	                    |d         d          d           t          |d	          }
t          j        d |
D                       }t          j        d |D                       }t          ||           d S )Nr     r>   rr   T)assume_centered	frobeniusnormspectralr   c                 B    g | ]}t          j        ||j                  S rJ   r!   dotTrE   precs     r8   rF   z)test_suffstat_sk_full.<locals>.<listcomp>/  &    LLLD26$//LLLr:   c                 6    g | ]}t          j        |          S rJ   rK   rE   covs     r8   rF   z)test_suffstat_sk_full.<locals>.<listcomp>0       AAAc&*S//AAAr:   axis)rr   Fc                 B    g | ]}t          j        ||j                  S rJ   r   r   s     r8   rF   z)test_suffstat_sk_full.<locals>.<listcomp>?  r   r:   c                 6    g | ]}t          j        |          S rJ   rK   r   s     r8   rF   z)test_suffstat_sk_full.<locals>.<listcomp>@  r   r:   )r!   r"   r#   rV   sqrtrX   zerosr   r   rm   r   
error_normr   r   r   meanreshape)r2   r,   r-   r3   respX_respnkxkcovars_predecovprecs_chol_pred
precs_pred	precs_ests                r8   test_suffstat_sk_fullr     s    )


"
"C"Iz 	J''A88Iq!!DWT]]QF	9+		B	1j/	"	"B5dAr2qIIKt444DHHVA[II1MMMAZHH!LLL 2+vFFOLLOLLLMMJAA[AAABBIi444 7Iq>""D	9+		B	
Q			(	(B5dAr2qIIKu555DHHQKKKA[II1MMMAZHH!LLL 2+vFFOLLOLLLMMJAA[AAABBIi44444r:   c                     t           j                            d          } d\  }}}|                     ||          }||                    d          d d t           j        f         z  }|                     ||          }|                    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          |
                    |	d          d           t          |
                    |	d          d           t          |	d          }t          j        ||j                  }t          j        |	          }t#          ||           d S )	Nr   r   r>   r>   rr   r   r   r   r   r   )r!   r"   r#   rV   rW   newaxisr   r   r   r   r   covariance_r   r   r   r   rL   r   )r2   r,   r-   rU   r   r3   r   r   covars_pred_fullcovars_pred_tiedr   r   r   r   s                 r8   test_suffstat_sk_tiedr   D  s   
)


"
"C*3'Iz<88I|,,D$(((""111bj=11DJ''A	q		B			R2:.	.B:4BANN
r!!!RZ+,/??CCiO  ;4BANN  D'D(8{KKQOOO(8zJJANNN 22BFKKO):;;J
+,,Ii44444r:   c                     t           j                            d          } d\  }}}|                     ||          }||                    d          d d t           j        f         z  }|                     ||          }|                    d          }t          j        |j        |          |d d t           j        f         z  }t          ||||d          }t          ||||d          }	t                      }
t          ||	          D ]\  }}t          j        t          j        |                    |
_        t          j        |          }t          |
                    |d          d           t          |
                    |d          d           t!          |	d          }t          |	d	|d
z  z             d S )Nr   r   rr   r   r   r   r   r   rH   r>   )r!   r"   r#   rV   rW   r   r   r   r   r   r   r%   r   r   r   r   r   )r2   r,   r-   rU   r   r3   r   r   r   covars_pred_diagr   cov_fullcov_diagr   s                 r8   test_suffstat_sk_diagr   b  s   
)


"
"C*3'Iz<88I|,,D$(((""111bj=11DJ''A	q		B			R2:.	.B:4BANN:4BANN  D!"24DEE K K(7278#4#45578$$DOOH;OGGKKKDOOH:OFFJJJJ 22BFKKO(#0B*BCCCCCr:   c                  @   t           j                            d          } d\  }}|                     ||          }||                                z
  }t          j        |df          }t          j        |g          }|                                }t          ||||d          }t          j        |	                                j
        |	                                          ||z  z  }t          ||           t          |d          }	t          |d|	dz  z             d S )Nr   r   rr   r   rH   r>   )r!   r"   r#   rV   r   r   rX   r   r   flattenr   r   r   )
r2   r,   r-   r3   r   r   r   covars_pred_sphericalcovars_pred_spherical2r   s
             r8   #test_gaussian_suffstat_sk_sphericalr   {  s    )


"
"C"IzJ''A	AFFHHA7Iq>""D	9+		B	
BDT1bRTVWXXVAIIKKM199;;??Y -/EFFF 22GUUO-s_a5G/GHHHHHr:   c                     d} t          t          j                            d                    }t          D ]}|j        |         }|dk    rt          j        d |D                       }nK|dk    rt          j        |          }n0|dk    rt          j        d |D                       }n|dk    r|| z  }t          t          ||          || 	          }t          |d
t          j        |          z             d S )Nr>   r   r   c                 6    g | ]}t          j        |          S rJ   )r   detr   s     r8   rF   z1test_compute_log_det_cholesky.<locals>.<listcomp>  s     %L%L%L#fjoo%L%L%Lr:   r   r   c                 6    g | ]}t          j        |          S rJ   )r!   prodr   s     r8   rF   z1test_compute_log_det_cholesky.<locals>.<listcomp>  s     %I%I%Isbgcll%I%I%Ir:   r   )r-   g      )r<   r!   r"   r#   r[   rO   rX   r   r   r   r   r   log)r-   r   rP   rM   predected_detexpected_dets         r8   test_compute_log_det_choleskyr     s"   J29003344I% N N
*:6
H%L%L%L%L%LMMMM6!!"Jz22MM6!!H%I%Ij%I%I%IJJMM;&&&
2M 1'
J??!
 
 

 	",rvm7L7L0LMMMM%N Nr:   c                 R   t          j        t          |           t          |          f          }t          j        |          }t	          t          ||                    D ]D\  }\  }}t          j                            | ||          	                    d          |d d |f<   E|S )Nrr   r   )
r!   emptylenr   r$   r%   r   r   logpdfrW   )r3   r/   covarsr   stdsir   stds           r8   _naive_lmvnpdf_diagr     s    8SVVSZZ())D76??D#Ct$4$455 A A;D#Z&&q$4488a8@@QQQT

Kr:   c                     ddl m}  t          j                            d          }t          |          }d}|j        |j        }|j        }|	                    |          }|	                    |          }t          |||          }t          j        d |D                       }	 | |||	d          }
t          |
|           dt          j        |          z  } | |||d          }
t          |
|           t          j        d |D                                           d	          }t          j        t          j        d|z                      }t          |||g|z            } | |||d
          }
t          |
|           |                    d	          }dt          j        |                    d	                    z  }t          ||fd|D                       } | |||d          }
t          |
|           d S )Nr   )_estimate_log_gaussian_probr   c                 `    g | ]+}t          j        d t          j        |          z            ,S )rH   )r!   r   r   rE   xs     r8   rF   z;test_gaussian_mixture_log_probabilities.<locals>.<listcomp>  s/    JJJ273#344JJJr:   r   rH   r   c                     g | ]}|S rJ   rJ   r   s     r8   rF   z;test_gaussian_mixture_log_probabilities.<locals>.<listcomp>  s    333!A333r:   r   r   rr   c                     g | ]}|gz  	S rJ   rJ   )rE   rT   r-   s     r8   rF   z;test_gaussian_mixture_log_probabilities.<locals>.<listcomp>  s     >>>A3#>>>r:   r   )!sklearn.mixture._gaussian_mixturer   r!   r"   r#   r<   r-   rU   r/   rV   r   rX   r   r   r   r   )r   r2   r   r,   rU   r/   covars_diagr3   log_prob_naive
precs_fulllog_probprecs_chol_diagcovars_tied
precs_tiedcovars_sphericalprecs_sphericalr-   s                   @r8   'test_gaussian_mixture_log_probabilitiesr     s1   MMMMMM )


"
"C3II%J)LOE((<44KJ''A(E;??N JJkJJJKKJ**1eZHHHh777 BGK000O**1e_fMMHh777 (33{3334499q9AAK{!23344J(EK=<3OPPN**1eZHHHh777 #''Q'//BGK$4$4!$4$<$<===O(	5>>>>-=>>> N +*1e_kRRHh77777r:   c            	      n   t           j                            d          } t          | d          }|j        }|j        }|j        }|                     ||          }t          D ]}|j	        }|j
        }|j        |         }	t          || |||	|          }
|
                    |           |
                    |          }t          |                    d          t          j        |                     t%          |
j        |           t%          |
j        |           t%          |
j        |	           d S )Nr      r^   rU   rC   ru   r   r   r1   rr   r   )r!   r"   r#   r<   r,   r-   rU   rV   r[   r.   r/   r0   r   rm   predict_probar   rW   r   r   ru   r   r   )r2   r   r,   r-   rU   r3   rP   r.   r/   r0   r   r   s               r8   ,test_gaussian_mixture_estimate_log_prob_respr     s3   
)


"
"C3a(((I#I%J)LJ''A% : :
#)*5
% &&
 
 
 	
aq!!!$((("2"2BGI4F4FGGG1>73331<///1,j9999#: :r:   c            	         t           j                            d          } t          |           }t          D ]	}|j        |         }|j        }t          |j        | |j	        |j
        |j        |         |          }d}t          j        t          |          5  |                    |           d d d            n# 1 swxY w Y   |                    |           |                    |          }|                    |                              d          }t'          ||           t)          ||          dk    sJ d S )Nr   r   sThis GaussianMixture instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.rs   rr   r   ffffff?)r!   r"   r#   r<   r[   r3   r]   r   rU   r.   r/   r0   rz   r{   r   predictrm   r   argmaxr   r   )	r2   r   rP   r3   r]   r   r   Y_predY_pred_probas	            r8   +test_gaussian_mixture_predict_predict_probar     sz   
)


"
"C3I% 5 5
K
#K"/"* %0<&
 
 
F 	 ]>555 	 	IIaLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
a1q))00a0886<000"1f--4444415 5s   B;;B?	B?	zignore:.*did not converge.*zseed, max_iter, tol))r   r>   Hz>)rr   r>   rg   )re   ,  r   )   r   rg   c                    t           j                            |           }t          |          }t          D ]}|j        |         }|j        }t          |j        ||j	        |j
        |j        |         |||          }t          j        |          }	|	                    |                              |          }
|                    |          }t#          |
|           t%          ||          dk    sJ d S )N)rU   rC   ru   r   r   r1   rj   rh   r   )r!   r"   r#   r<   r[   r3   r]   r   rU   r.   r/   r0   copydeepcopyrm   r   fit_predictr   r   )seedrj   rh   r2   r   rP   r3   r]   r   fY_pred1Y_pred2s               r8   !test_gaussian_mixture_fit_predictr
    s     )


%
%C3I% 6 6
K
#K"/"* %0<&	
 	
 	
 M!%%((""1%%--""7G,,,"1g..55555'6 6r:   c                     t           j                            d                              dd          } t	          ddd          }|                    |           }|                    |           }t          ||           d S )Nr     r   )rU   ri   rC   )r!   r"   r#   randnr   r  r   r   )r3   gmy_pred1y_pred2s       r8   (test_gaussian_mixture_fit_predict_n_initr  @  sq    
	a  &&tQ//A	a	B	B	BBnnQGjjmmGw(((((r:   c                     t           j                            d          } t          |           }|j        |j        }t          D ]}|j        |         }t          |dd| |          }|	                    |           t          t          j        |j                  t          j        |j                  dd           |j        d d df                                         }|j        d d df                                         }t          |j        |         |j        |         dd           |dk    r|j        }|j        d         }	n|dk    rAt          j        |j        g|z            }t          j        |j        d         g|z            }	n|d	k    rQt          j        fd
|j        D                       }t          j        fd|j        d	         D                       }	nR|dk    rLt          j        d |j        D                       }t          j        d |j        d         D                       }	t          j        |dd                                          }t          j        |	dd                                          }t+          ||          D ]K\  }
}t-                      }|	|         |_        t          |                    ||
                   dd           Ld S )Nr      rU   ri   rk   rC   r1   rg   g{Gz?)rtolatolr   r   r   c                 >    g | ]}t          j                  |z  S rJ   r!   r(   rE   r7   r-   s     r8   rF   z-test_gaussian_mixture_fit.<locals>.<listcomp>m  s(    !P!P!PQ"&"4"4q"8!P!P!Pr:   c                 >    g | ]}t          j                  |z  S rJ   r  r  s     r8   rF   z-test_gaussian_mixture_fit.<locals>.<listcomp>o  s(    SSSA
##a'SSSr:   r   c                 6    g | ]}t          j        |          S rJ   r!   r   rE   ds     r8   rF   z-test_gaussian_mixture_fit.<locals>.<listcomp>r  s     !D!D!D"'!**!D!D!Dr:   c                 6    g | ]}t          j        |          S rJ   r  r  s     r8   rF   z-test_gaussian_mixture_fit.<locals>.<listcomp>s  s     !S!S!S"'!**!S!S!Sr:   rr   r>   )axis1axis2g333333?)r  )r!   r"   r#   r<   r-   rU   r[   r3   r   rm   r   sortweights_r.   means_argsortr/   precisions_r0   rX   tracer%   r   r   r   )r2   r   rU   rP   r3   r   arg_idx1arg_idx2	prec_pred	prec_testrT   hr   r-   s                @r8   test_gaussian_mixture_fitr-  I  s    
)


"
"C3I%J)L% +I +I
K
#%&
 
 
 	
a 	GAJ):!;!;#D	
 	
 	
 	
 8AAAqD>))++?111a4(0022HX	 9$	
 	
 	
 	
 I!,V4II6!!!-<!?@@I)"6v">!?,!NOOII;&&!P!P!P!P!-!P!P!PQQISSSS1Ek1RSSS II 6!!!D!Dam!D!D!DEEI!S!Si6J66R!S!S!STTI8IQa888@@BB8IQa888@@BB(++ 	I 	IDAq&((D(|DDOOIaL9914HHHHH		IO+I +Ir:   c                  P   t           j                            d          } t          |           }|j        }d}t
          D ]}|j        |         }t          |dd| |          }g }t          |          D ]?}|	                    |           |
                    |                    |                     @t          j        |          }t          ||d| |          }	|		                    |           t          |                                |	                    |                     d S )Nr   rd   rr   r  )r!   r"   r#   r<   rU   r[   r3   r   rY   rm   r&   scorerX   r   r}   )
r2   r   rU   ri   rP   r3   r   llr4   g_bests
             r8   %test_gaussian_mixture_fit_best_paramsr2  ~  s'   
)


"
"C3I)LF% 7 7
K
#%&
 
 
 v 	" 	"AEE!HHHIIaggajj!!!!Xb\\ %&
 
 
 	

1BFFHHfll1oo6666-7 7r:   c            	      d   t           j                            d          } t          | d          }|j        }d}t
          D ]n}|j        |         }t          |d|d| |          }d}t          j	        t          |          5  |                    |           d d d            n# 1 swxY w Y   od S )Nr   rr   r   rU   ri   rj   rk   rC   r1   zBest performing initialization did not converge. Try different init parameters, or increase max_iter, tol, or check for degenerate data.rs   )r!   r"   r#   r<   rU   r[   r3   r   rz   warnsr   rm   )r2   r   rU   rj   rP   r3   r   r   s           r8   -test_gaussian_mixture_fit_convergence_warningr6    s   
)


"
"C3a(((I)LH%  
K
#%&
 
 
1 	
 \,C888 	 	EE!HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   B$$B(	+B(	c                     t           j                            d          } d\  }}}|                     ||          }t          D ]{}t          ||d                              |                              |          }t          ||dd                              |                              |          }||k    sJ |d S )Nr   r?   r   r>   r   r   rU   r1   rC   ri   )r!   r"   r#   r  r[   r   rm   r/  )r2   r,   r-   rU   r3   cv_typetrain1train2s           r8   test_multiple_initr=    s    
)


"
"C*2'Iz<		)Z((A"    )7QR   SVVU1XX 	 ) '	   SVVU1XX 	 %   r:   c                  (   t           j                            d          } d\  }}}|                     ||          }ddddd}t          D ]G}t          |||                               |          }|                                ||         k    sJ Hd S )	Nr   r8           )   rG   r   )r!   r"   r#   r  r[   r   rm   _n_parameters)r2   r,   r-   rU   r3   n_paramsr:  r   s           r8   "test_gaussian_mixture_n_parametersrE    s    
)


"
"C*2'Iz<		)Z((ARDDH" 6 6%wS
 
 

#a&& 	
   HW$555555	6 6r:   c                     t           j                            d          } d\  }}}|                     ||          }t	          |d|                               |                              |          }dD ]J}t	          |||                               |                              |          }t          ||           Kd S )Nr   )d   rr   rr   r   r   )r   r   r   )r!   r"   r#   r  r   rm   bicr   )r2   r,   n_dimrU   r3   bic_fullr1   rH  s           r8   test_bic_1d_1componentrK    s     )


"
"C%."Iul		)U##A%vC	
 	
 	
 
Q	Q  9 
+ 
+) /   
 SVVSVV 	 	Hc****
+ 
+r:   c                     t           j                            d          } d\  }}}|                     ||          }dt	          t          j        |j        d                    |dt          j        dt           j        z            z   z  z   z  }t          D ]}t          ||| d          }|                    |           d|z  |z  d|                                z  z   }d|z  |z  t          j        |          |                                z  z   }	|t          j        |          z  }
|                    |          |z
  |z  |
k     sJ |                    |          |	z
  |z  |
k     sJ d S )	Nr   )r?   re   r>   rA   rr   )biasr>   r=   )rU   r1   rC   rj   )r!   r"   r#   r  r   r   r   r   pir[   r   rm   rC  r   aicrH  )r2   r,   r-   rU   r3   sghr:  r   rO  rH  bounds              r8   test_gaussian_mixture_aic_bicrR    st   
)


"
"C*2'Iz<		)Z((A
BF13Q'''((:RVAI=N=N9N+OOC # 4 4%#	
 
 
 	
a)mc!A(9(9$99)mc!BF9$5$58I8I$IIRWY///a3)+e3333a3)+e333334 4r:   c            	         t           j                            d          } t          |           }|j        }t
          D ]}|j        |         }t          |dd| |d          }t          |dd| |d          }t          j	        }t                      t          _	        	 |                    |           |                    |           |t          _	        # |t          _	        w xY wd S )Nr   rr   )rU   ri   rk   rC   r1   verboser>   )r!   r"   r#   r<   rU   r[   r3   r   sysstdoutr   rm   )r2   r   rU   rP   r3   r   r,  
old_stdouts           r8   test_gaussian_mixture_verboserX    s    
)


"
"C3I)L% $ $
K
#%&
 
 
 %&
 
 
 Z
ZZ
	$EE!HHHEE!HHH#CJJCJ####1$ $s   *CC r  )r   rr   r>   c           	      z   | }t           j                            |          }d\  }}}|                    ||          }t	          |ddd|d          }t	          |ddd|d          }|                    |           |                    |                              |          }	|                    |                              |          }
t          |j        |j                   t          |j	        |j	                   t          |j
        |j
                   |
|	k    sJ t	          |ddd|dd	
          }t	          |ddd|dd	
          }|                    |           |j        rJ |                    |           t          d          D ] }|                    |           |j        r n!|j        sJ d S )Nr   rr   r>   r   F)rU   ri   rj   rk   rC   
warm_startTr   ư>)rU   ri   rj   rk   rC   rZ  rh   r  )r!   r"   r#   rV   r   rm   r/  r   r#  r$  r&  
converged_rY   )r  rC   r2   r,   r-   rU   r3   r   r,  score1score2r4   s               r8   test_warm_startr_  ,  s    L
)


-
-C*3'Iz<J''A 	!!	 	 	A 	!!	 	 	A EE!HHHUU1XX^^AFUU1XX^^AF
AJ///!(+++q}555F???? 	!!	 	 	A 	!!	 	 	A EE!HHH|EE!HHH 4[[  	a< 	E	<r:   z-ignore::sklearn.exceptions.ConvergenceWarningc                  F   t           j                            d          } t          |           }|j        }|j        d         }dD ][}t          |d||           }t          d          D ] }|                    |           |j	        r n!|j	        sJ ||j
        k    sJ \d S )Nr   r   )rr   r>   r?   T)rU   rZ  rj   rC   rG  )r!   r"   r#   r<   rU   r3   r   rY   rm   r\  n_iter_)r2   r   rU   r3   rj   rn   r4   s          r8   )test_convergence_detected_with_warm_startrb  q  s     )


"
"C3I)LFA ' '%	
 
 
 s 	 	AGGAJJJ~ ~3;&&&&&' 'r:   c                  F   d} t           j                            d          }t          |d          }|j        }|j        |          }t          |ddd||           }d}t          j        t          |          5  |
                    |           d d d            n# 1 swxY w Y   t          j                    5  t          j        d	t                     |                    |           d d d            n# 1 swxY w Y   |
                    |          }|                    |                                          }t%          ||           t          |dd|| 
                              |          }	|	
                    |          |
                    |          k    sJ d S )Nr   r      r   rr   r4  r   rs   ignorer  )r!   r"   r#   r<   rU   r3   r   rz   r{   r   r/  warningscatch_warningssimplefilterr   rm   score_samplesr   r   )
rP   r2   r   rU   r3   gmm1r   	gmm_scoregmm_score_probagmm2s
             r8   
test_scorern    s   J
)


"
"C3a(((I)LJA !"  D	=  
~S	1	1	1  

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

1I((++0022O	?333 !"   
c!ff 	 ::a==4::a==((((((s$   9BB"B90C55C9<C9c                     d} t           j                            d          }t          |d          }|j        }|j        |          }t          |dd||           }d}t          j        t          |          5  |
                    |           d d d            n# 1 swxY w Y   |                    |          
                    |          }|j        d         |j        k    sJ d S )	Nr   r   rd  r   rr   r  r   rs   )r!   r"   r#   r<   rU   r3   r   rz   r{   r   ri  rm   ry   r,   )rP   r2   r   rU   r3   rn   r   gmm_score_sampless           r8   test_score_samplesrq    s3   J
)


"
"C3a(((I)LJA !"  C	=  
~S	1	1	1  !               

0033"1%)<<<<<<<s   8BB!Bc            
          t           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 ]=}|}|                    |                              |          }||k    sJ |j        r n>|j        sJ 	 d d d            n# 1 swxY w Y   d S )
Nr   rd  r   Trr   r   )rU   r1   rk   rZ  rj   rC   rh   re  iX  )r!   r"   r#   r<   rU   r[   r3   r   infrf  rg  rh  r   rY   rm   r/  r\  )	r2   r   rU   rP   r3   rn   current_log_likelihoodr4   prev_log_likelihoods	            r8   test_monotonic_likelihoodrv    sz    )


"
"C3a(((I)L% " "
K
#%&
 
 
 #%&$&& 	" 	"!(,>??? 3ZZ  &<#),)9)9!)<)<&-1DDDDD> E >!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"" "s   A1DD		D	c                     t           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  |                    |           d d d            n# 1 swxY w Y   |                    d	                              |           d d d            n# 1 swxY w Y   d S )
Nr   )rd   r   r>   )rU   rk   r1   rC   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.rs   r[  )rk   )r!   r"   r#   r+   r   r   r[   r   rf  rg  rh  RuntimeWarningrv   rw   rz   r{   r|   rm   
set_params)r2   r,   r-   r3   rP   rn   r   s          r8   test_regularisationrz    s    )


"
"C!Iz
		)q.*-	.	.)q.*9U0V0VW	 	A & 2 2
"&	
 
 
 $&& 	2 	2!(N;;;)8 C z555  


               NNTN**..q111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	22 2s7   A
E"D8EDED,EE	E	c                  $   t           j                            d          } t          | d          }|j        }t
          D ]}|j        |         }t          ||| d          }|                    |           |dk    rCt          |j
        |j                  D ]'\  }}t          t          j        |          |           (|dk    r-t          t          j        |j
                  |j                   t          |j
        d|j        z             d S )	Nr   rd  r   r   r9  r   r   rH   )r!   r"   r#   r<   rU   r[   r3   r   rm   r%   r&  covariances_r   r   rL   )r2   r   rU   rP   r3   rn   r   covars           r8   test_propertyr~    s'   
)


"
"C3a(((I)L% O O
K
#%&	
 
 
 	


"3?C4DEE C Ce)&*T*:*:EBBBBC6!!%fj&A&A3CSTTTT%cosS=M7MNNNNO Or:   c                     t           j                            d          } t          | dd          }|j        |j        }}t          D ]}|j        |         }t          |||           }d}t          j
        t          |          5  |                    d           d d d            n# 1 swxY w Y   |                    |           d}t          j
        t          |          5  |                    d           d d d            n# 1 swxY w Y   d	}|                    |          \  t          |          D ]%}	|d
k    r?t!          |j        |	         t          j        |	k             j                  d           H|dk    r9t!          |j        t          j        |	k             j                  d           |dk    rQt!          |j        |	         t          j        t          j        |	k             j                            d           t!          |j        |	         t          j        |	k             |j        |	         z
            d           't          j        fdt          |          D                       }
t!          |j        |
d           j        ||fk    sJ t          dd          D ])}|                    |          \  }j        ||fk    sJ *d S )Nr   rd  re   )r^   rU   r   z+This GaussianMixture instance is not fittedrs   zInvalid value for 'n_samples'i N  r   rr   )decimalr   r   c                 N    g | ]!}t          j        |k             d           "S )r   )r!   r   )rE   rT   X_sy_ss     r8   rF   ztest_sample.<locals>.<listcomp>R  s-    SSS!BGCqM155SSSr:   rG  )r!   r"   r#   r<   r-   rU   r[   r3   r   rz   r{   r   samplerm   r|   rY   r   r|  r   r   r   varr$  rX   ry   )r2   r   r-   rU   rP   r3   rn   r   r,   rT   means_ssample_sizer4   r  r  s                @@r8   test_sampler  %  s   
)


"
"C3aa888I(3Y5KJ% 1: 1:
K
#%zPS
 
 
 <]>555 	 	JJqMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	


-]:S111 	 	JJqMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	::i((S|$$ 	 	AV##)$Q'C1H)@)@!     v%%)$bfS]_&=&=q     v%%)$Q'C1H1H1H)I)IST     *$Q'F3sax=3:a=899     (SSSSSu\?R?RSSSTT!#*gqAAAA yY
33333 C== 	: 	:KZZ,,FC9j 999999	:_1: 1:s$   B**B.	1B.	'D		D	D	c                  l   t          d          D ]} t          t          j                            |           dd          }|j        }|j        d         }t          |dd|                               |          }t          |dd|                               |          }|j	        |j	        k    sJ d S )N   r?   rr   )r,   r^   r   )rU   ri   rj   rC   rd   )
rY   r<   r!   r"   r#   rU   r3   r   rm   lower_bound_)rC   r   rU   r3   rj  rm  s         r8   	test_initr  ^  s     b		 6 6I!!,//2Q
 
 
	 !-K%a!,
 
 

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

#a&& 	  D$5555556 6r:   c            
         t           j                            d          } d}|                     |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        rJ dD ]}t          ||          sJ dS )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   rf   re   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@)?r  ?r  ggfffff?g?r   rr   )r1   rk   r   ru   rC   rU   r   rj   )r#  r$  r|  precisions_cholesky_ra  r  N)
r!   r"   r#   uniformrX   r   r   rm   r\  hasattr)rndr,   r3   r   r   ru   rn   attrs           r8   )test_gaussian_mixture_setting_best_paramsr  r  sC    )


"
"CI)Q((A IIIHHHIIIJJJHHHGGG	
	 	J h	
 	
 	
	 	O  L #!&&'	 	 	C GGAJJJ ~ " " sD!!!!!!" "r:   rl   )r"   random_from_dataz	k-means++kmeansc                 R   t           j                            |          }t          |d          }|j        }|j        d         }t          || |d          }|                    |           |j        }t          j
        |d          D ]\  }}	t          j        ||	          rJ d S )Nr   r   r   r   )rU   rl   rC   rj   r>   )r)r!   r"   r#   r<   rU   r3   r   rm   r$  	itertoolscombinationsallclose)
rl   global_random_seedr2   r   rU   r3   rn   r/   i_meanj_means
             r8   test_init_means_not_duplicatedr    s    
 )

 2
3
3C3a(((I)LFA
!{WX  C GGAJJJJE#0!<<< / /;vv....../ /r:   c                    t           j                            |          }t          |d          }|j        }|j        d         }t          || |          }|                    |           |j        j	        ||j	        d         fk    sJ t          j
        |                    d          |j        k              sJ t          j
        |j        |                    d          k              sJ |j        sJ d S )Nr   r   r   )rU   rl   rC   rr   r   r   )r!   r"   r#   r<   rU   r3   r   rm   r$  ry   allr}   r~   r\  )rl   r  r2   r   rU   r3   rn   s          r8   test_means_for_all_initsr    s    
 )

 2
3
3C3a(((I)LFA
!{  C GGAJJJ:agaj999996!%%Q%--3:-.....6#*1-.....>r:   c                     t           j                            d          } t          | d          }|j        }|j        d         }ddgddgg}t          || |dd	          }|                    |           t          |j	        |           d S )
Nr   r   r   r   r  rf      r[  )rU   rC   r   rh   rj   )
r!   r"   r#   r<   rU   r3   r   rm   r   r$  )r2   r   rU   r3   r   rn   s         r8   test_max_iter_zeror    s     )


"
"C3a(((I)LFAr(RH%J
!  C GGAJJJCJ
+++++r:   c                  j   d} t           j                            d          }|                    | d          t          j        ddg          z   }t          j        ddgddgg          }t          j        |                    | d          |          }t          j        ||g          }d	\  }}}}	t          j        |j        d         |f          }
t          |d
|	          
                    |          j        }d
|
t          j        |j        d                   |f<   t          ||
||          \  }}}d
|z  }t          |||||	          
                    |          }t          ||||	          
                    |          }|j        |j        k    sJ t!          |j        |j                   dS )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   rr   )
n_clustersri   rC   )rk   r1   )rU   r1   rk   r   rC   )rU   r1   rk   rC   N)r!   r"   r#   r  rX   r   r+   r   ry   r   rm   labels_aranger   r   ra  r   r  )r,   r2   shifted_gaussianCstretched_gaussianr3   rU   r1   rk   rC   r   labelr4   rM   r   gm_with_initgm_without_inits                    r8   *test_gaussian_mixture_precisions_init_diagr    s    I
)


"
"CyyA..2r(1C1CC
3+Sz*++A		)Q 7 7;;
	#%7899A >P:L/9l 8QWQZ.//D,q|LLL	Q	 

 *+D171:			%&4	49o  Aq* *nO"!''!   
c!ff  &!'!	  
 
c!ff  "l&:::::)?+O    r:   c                     t           j                            |           }|                    ||f          }|                    ||f          }||                    d          ddt           j        f         z  }||fS )z/Randomly generate samples and responsibilities.rr   r   N)r!   r"   r#   random_samplerW   r   )r  r,   r-   rU   rsr3   r   s          r8   _generate_datar  1  sw    			t	$	$B
)Z011AY566DDHH!HQQQ
]++Dd7Nr:   c                     d}t          | |||          \  }}}t          ||          }|j        \  }}	t          |	|          }
||||f}|
                    |           |
j        |
j        fS )zfCalculate precision matrix of X and its Cholesky decomposition
    for the given covariance type.
    r[  )rU   r1   )r   r   ry   r   _set_parametersr&  r  )r3   r   r1   rk   r.   r/   rO   precisions_choleskyr4   rU   rn   paramss               r8   _calculate_precisionsr  :  s     I"?	4O# #GUK 6k?SSjOA|
 |_
U
U
UCuk+>?F?C444r:   r1   c                     t          |ddd          \  }}t          |||           \  }}t          | |          }|                    ||           |j        }t          ||           dS )zNon-regression test for #26415.rG  re   r  )r  r,   r-   rU   )r1   r   N)r  r  r   _initializer  r   )r1   r  r3   r   r   desired_precisions_choleskyrn   actual_precisions_choleskys           r8   %test_gaussian_mixture_precisions_initr  O  s     	  GAt 4I	44 40O0 '  C OOAt!$!9.0KLLLLLr:   c                  *   t           j                            d          } |                     t          j        d          t          j        d          d          }t          d          }|                    |                                           dS )za
    Non-regression test for #23032 ensuring 1-component GM works on only a
    few samples.
    r   r>   re   r  rr   rq   N)	r!   r"   r#   r'   r   identityr   rm   r  )r2   r3   r  s      r8   -test_gaussian_mixture_single_component_stabler  e  su    
 )


"
"CR[^^!DDA	a	(	(	(BFF1IIr:   c                    t          t                    }|                     t          j        j        d|           t          j                            |          }t          |          }t          |j        |j        |j        |j        d         |          }|                    |j        d                    |j        |j        k    sJ dS )zWhen all init parameters are provided, the Gaussian parameters
    are not estimated.

    Non-regression test for gh-26015.
    )side_effectr   r   )rU   ru   r   r   rC   N)r   r   setattrsklearnmixture_gaussian_mixturer!   r"   r#   r<   r   rU   r.   r/   r0   rm   r3   
call_countra  )monkeypatchr  mockr2   r   r  s         r8   Dtest_gaussian_mixture_all_init_does_not_estimate_gaussian_parametersr  p  s     9:::D)+JD   )

 2
3
3C3I	+&?!,V4
 
 
B FF9;v ?bj((((((r:   )\r  r  rv   rU  rf  ior   unittest.mockr   numpyr!   rz   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   r[   r9   r<   ro   r   r   r   r   r   r   r   r   r   r   r   r   markfilterwarningsparametrizer
  r  r-  r2  r6  r=  rE  rK  rR  rX  r_  rb  rn  rq  rv  rz  r~  r  r  r  r  r  r  r  r  r  r  r  r  rJ   r:   r8   <module>r     s        				 



                            " " " " " " 2 2 2 2 2 2 , , , , , , A A A A A A A A 7 7 7 7 7 7 + + + + + +                             . - - - - -777  >2
 2
 2
 2
 2
 2
 2
 2
j* * *6-0 -0 -0`, , ,.6P 6P 6Pr'5 '5 '5T5 5 5<D D D2I I I,N N N2  *8 *8 *8`: : ::5 5 5< 9::   6 6  ;:62) ) )2I 2I 2Ij7 7 7<  0     4
6 
6 
6+ + +44 4 40$ $ $> 9::++@ @ ,+ ;:@F KLL' ' ML',') ') ')T= = =4" " "D2 2 2@O O O.6: 6: 6:r KLL6 6 ML6&B" B" B"J HHH / / /" HHH   $, , ,(: : :z  5 5 5* *O<<M M =<M*  ) ) ) ) )r:   