
    Pic                        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 d d	lmZmZ d d
lmZ d dlmZ d dlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 g dZ6e
j7        fdZ8 G d d          Z9d Z:d Z;d Z<d Z=d Z>d Z?d Z@d ZAd ZBd ZCd ZDd ZEd  ZFejG        H                    d!          ejG        I                    d"g d#          d$                         ZJd% ZKd& ZLd' ZMd( ZNd) ZOd* ZPd+ ZQd, ZRd- ZSejG        H                    d!          ejG        I                    d.d/          d0                         ZTejG        H                    d1          d2             ZUd3 ZVd4 ZWd5 ZXd6 ZYejG        I                    d7e6          d8             ZZd9 Z[ejG        H                    d1          d:             Z\d; Z]ejG        I                    d<g d=          d>             Z^ejG        I                    d<g d=          d?             Z_d@ Z`dA Zae
j7        fdBZbdC ZcejG        I                    dDe6          dE             ZddF ZedG ZfejG        I                    d<dHdIg          ejG        I                    dDg d          ejG        I                    dJ e,            e)K          ejG        I                    dLdMdNg          dO                                                 Zge3ejG        I                    d<dPdQg          ejG        I                    dJ e,            e)K          dR                                     ZhdS )S    N)StringIO)Mock)linalgstats)KMeans)EmpiricalCovariance)make_spd_matrix)
make_blobs)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)_convert_to_numpy_get_namespace_device_dtype_idsdeviceget_namespace)yield_namespace_device_dtype_combinations)_array_api_for_testsassert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal'skip_if_array_api_compat_not_configured)fast_logdetfulltieddiag	sphericalc                 R   t           j                            d          }g }|dk    rt          t	          |||d                             D ]}\  }	\  }
}}|                    |                    ||t          j        |          z  t          t          j	        |
| z                                
                    |                     ~|dk    rt          t	          |||d                             D ]z\  }	\  }
}}|                    |                    |t          j        |          t          t          j	        |
| z                                
                    |                     {|dk    rt          t	          ||                    D ]m\  }	\  }
}|                    |                    ||d         t          t          j	        |
| z                                
                    |                     n|dk    rt          t	          |||d                             D ]h\  }	\  }
}}|                    |                    ||t          t          j	        |
| z                                
                    |                     it          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                /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sklearn/mixture/tests/test_gaussian_mixture.pygenerate_datarB   5   s    )


"
"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''rwqzz3rxI'>'>#?#? &--   
 &  "3w#6#677 	 	IAv1HH''z&)3rxI/F/F+G+G &--   
 &  %c'5*V:L&M&MNN 	 	LAy1aHH''1c"(1y=2I2I.J.JKKRR     		!AH    c                   *    e Zd Zddddej        f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      ?rG   random_statec                 ^    g | ])}t                                                   dz  *S )rK   rJ   )r	   r2   ).0r=   r:   r5   r;   s     rA   
<listcomp>z'RandomData.__init__.<locals>.<listcomp>r   sJ        $JSAAAHHOORUU  rC   r&   r%   r$   r#         ?r&   r%   r$   c                 6    g | ]}t          j        |          S  r   inv)rN   
covariances     rA   rO   z'RandomData.__init__.<locals>.<listcomp>}   s"    SSSJJ''SSSrC   r#   c                 Z    g | ]'}t          j        j        j        |           (S r:   )rB   r6   r7   covariances)rN   
covar_typer:   r5   r4   selfs     rA   rO   z'RandomData.__init__.<locals>.<listcomp>   sV        # "!"
("#    rC   c           
          g | ]C\  }}t          j        t          t          j        |z                      |t                     DS rX   )r(   r#   r0   r1   )rN   kr>   r4   s      rA   rO   z'RandomData.__init__.<locals>.<listcomp>   sT       Aq BHQ]3344asCCC  rC   )r4   n_componentsr5   randr2   r6   sumr7   r	   r(   arrayrangerZ   r   rU   r8   dictr,   COVARIANCE_TYPEr<   hstackr+   Y)r\   r;   r4   r_   r5   scaler:   s   ``` ` `rA   __init__zRandomData.__init__]   sb    #($xx--44U;;|**511DL4D4D4F4FFXXlJ77>>uEEM
sxx55<<UCCC388L*==DDUKKKPQQ#JSAAAHHOOH     "<00   	

 

 t/<<$*622Jt/788HSS$:J6:RSSS 	
 
        '6   
 
"    %dl33  
 
rC   N)__name__
__module____qualname__r(   float64ri   rS   rC   rA   rE   rE   \   s;         j:
 :
 :
 :
 :
 :
rC   rE   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   
   rG   )rG   -C6?      皙?)r#   r)   )r_   toln_initmax_iter	reg_covarr9   init_params)r(   r)   r*   r`   r   fitr_   r9   rt   rw   rv   ru   rx   )
r;   r<   r_   rt   ru   rv   rw   r9   rx   gmms
             rA    test_gaussian_mixture_attributesr{      s	   
)


"
"CQA 6J2L#vx#3 O[
!'   
c!ff  |++++/11117c>>>>=I%%%%<8####:?k))))))rC   c                     t           j                            d          } t          |           }|j        }|j        d         }t          |          }|                     |d          }||_        t          j
        d| d|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#   r_      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_initr_   )r(   r)   r*   rE   r_   r<   r   r`   r   reescapeshapepytestraises
ValueErrorry   minmaxra   r6   r   )
r;   	rand_datar_   r<   gweights_bad_shapemsgweights_bad_rangeweights_bad_normr6   s
             rA   test_check_weightsr      s'   
)


"
"C3I)LFA\222A q11&AN
)	@	@ 	@&7&=	@ 	@ 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   *CCCE33E7:E79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#   r}   r~   z/The parameter 'means' should have the shape of r   )r(   r)   r*   rE   r_   r5   r<   r   r`   
means_initr   r   r   ry   r7   r   )	r;   r   r_   r5   r<   r   means_bad_shaper   r7   s	            rA   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   r~   r"   g      )r   r   r   zsymmetric, positive-definitepositiver_   r9   rL   zThe parameter 'z$ precision' should have the shape ofr   'z precision' should be )r(   r)   r*   rE   r_   r5   onesr/   r#   re   r<   r   precisions_initr   r   r   ry   r8   r   )r;   r   r_   r5   precisions_bad_shapeprecisions_not_posprecisions_not_positivenot_positive_errorsr[   r<   r   r   s               rA   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     rG   r~   T)assume_centered	frobeniusnormspectralr#   c                 B    g | ]}t          j        ||j                  S rS   r(   dotTrN   precs     rA   rO   z)test_suffstat_sk_full.<locals>.<listcomp>J  &    LLLD26$//LLLrC   c                 6    g | ]}t          j        |          S rS   rT   rN   covs     rA   rO   z)test_suffstat_sk_full.<locals>.<listcomp>K       AAAc&*S//AAArC   axis)r~   Fc                 B    g | ]}t          j        ||j                  S rS   r   r   s     rA   rO   z)test_suffstat_sk_full.<locals>.<listcomp>Z  r   rC   c                 6    g | ]}t          j        |          S rS   rT   r   s     rA   rO   z)test_suffstat_sk_full.<locals>.<listcomp>[  r   rC   )r(   r)   r*   r`   sqrtrb   zerosr   r   ry   r   
error_normr   r   r   meanreshape)r;   r4   r5   r<   respX_respnkxkcovars_predecovprecs_chol_pred
precs_pred	precs_ests                rA   test_suffstat_sk_fullr   5  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4rC   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   rG   rG   r~   r   r   r   r   r$   )r(   r)   r*   r`   ra   newaxisr   r   r   r   r   covariance_r   r   r   r   rU   r   )r;   r4   r5   r_   r   r<   r   r   covars_pred_fullcovars_pred_tiedr   r   r   r   s                 rA   test_suffstat_sk_tiedr   _  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4rC   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   r~   r   r   r   r   r%   rQ   rG   )r(   r)   r*   r`   ra   r   r   r   r   r   r   r,   r%   r   r   r   r   )r;   r4   r5   r_   r   r<   r   r   r   covars_pred_diagr   cov_fullcov_diagr   s                 rA   test_suffstat_sk_diagr   }  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CrC   c                    t           j                            d          }d\  }}|                    ||                              |           }||                                z
  }t          j        |df|           }t          j        |g|           }|                                }t          ||||d          }t          j	        |
                                j        |
                                          ||z  z  }	t          ||	           |j        | k    sJ t          |d          }
t          |d|
dz  z             |
j        | k    sJ d S )Nr   r   r~   rY   r&   rQ   rG   )r(   r)   r*   r`   r2   r   r   rb   r   r   flattenr   r   r:   r   )global_dtyper;   r4   r5   r<   r   r   r   covars_pred_sphericalcovars_pred_spherical2r   s              rA   #test_gaussian_suffstat_sk_sphericalr     sH    )


"
"C"IzJ''..|<<A	AFFHHA7Iq>666D	9+\	2	2	2B	
BDT1bRTVWXXVAIIKKM199;;??Y -/EFFF &,6666 22GUUO-s_a5G/GHHH L000000rC   c                 2   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  }|j	        | k    sJ t          t          ||          ||
          }t          |dt          j        |          z             |j	        | k    sJ d S )NrG   r   rY   r#   c                 6    g | ]}t          j        |          S rS   )r   detr   s     rA   rO   z1test_compute_log_det_cholesky.<locals>.<listcomp>  s     %L%L%L#fjoo%L%L%LrC   r$   r%   c                 6    g | ]}t          j        |          S rS   )r(   prodr   s     rA   rO   z1test_compute_log_det_cholesky.<locals>.<listcomp>  s     %I%I%Isbgcll%I%I%IrC   r&   )r5   g      )rE   r(   r)   r*   re   rZ   rb   r   r   r:   r   r   r   log)r   r5   r   r[   rV   predected_detexpected_dets          rA   test_compute_log_det_choleskyr     sK   J290033<HHHI% 2 2
*:6
H%L%L%L%L%LMMMM6!!"Jz22MM6!!H%I%Ij%I%I%IJJMM;&&&
2M <////0'
J??!
 
 

 	",rvm7L7L0LMMM!\11111)2 2rC   c                 R   t          j        t          |           t          |          f          }t          j        |          }t	          t          ||                    D ]D\  }\  }}t          j                            | ||          	                    d          |d d |f<   E|S )Nr~   r   )
r(   emptylenr   r+   r,   r   r   logpdfra   )r<   r7   covarsr   stdsir   stds           rA   _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

KrC   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 )rQ   )r(   r%   r   rN   xs     rA   rO   z;test_gaussian_mixture_log_probabilities.<locals>.<listcomp>  s/    JJJ273#344JJJrC   r#   rQ   r%   c                     g | ]}|S rS   rS   r   s     rA   rO   z;test_gaussian_mixture_log_probabilities.<locals>.<listcomp>  s    333!A333rC   r   r$   r~   c                     g | ]}|gz  	S rS   rS   )rN   r^   r5   s     rA   rO   z;test_gaussian_mixture_log_probabilities.<locals>.<listcomp>  s     >>>A3#>>>rC   r&   )!sklearn.mixture._gaussian_mixturer   r(   r)   r*   rE   r5   r_   r7   r`   r   rb   r   r   r   r%   )r   r;   r   r4   r_   r7   covars_diagr<   log_prob_naive
precs_fulllog_probprecs_chol_diagcovars_tied
precs_tiedcovars_sphericalprecs_sphericalr5   s                   @rA   '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7rC   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      rh   r_   rL   r   r   r   r9   r~   r   )r(   r)   r*   rE   r4   r5   r_   r`   re   r6   r7   r8   r   ry   predict_probar   ra   r   r   r   r   r   )r;   r   r4   r5   r_   r<   r[   r6   r7   r8   r   r   s               rA   ,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#: :rC   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.r   r~   r   ffffff?)r(   r)   r*   rE   re   r<   rg   r   r_   r6   r7   r8   r   r   r   predictry   r  argmaxr   r   )	r;   r   r[   r<   rg   r   r   Y_predY_pred_probas	            rA   +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   rG   Hz>)r~   rG   rs   )rq   ,  r  )   r  rs   c                 ^   t           j                            |           }t          ||          }t          D ]}|j        |         }|j        }t          |j        ||j	        |j
        |j        |         |||          }	t          j        |	          }
|
                    |                              |          }|	                    |          }t#          ||           t%          ||          dk    sJ |	j        j        |k    sJ |	j        j        |k    sJ |	j        j        |k    sJ d S )NrY   )r_   rL   r   r   r   r9   rv   rt   r  )r(   r)   r*   rE   re   r<   rg   r   r_   r6   r7   r8   copydeepcopyry   r  fit_predictr   r   means_r:   weights_precisions_)seedrv   rt   r   r;   r   r[   r<   rg   r   fY_pred1Y_pred2s                rA   !test_gaussian_mixture_fit_predictr  <  sA    )


%
%C3l333I% 3 3
K
#K"/"* %0<&	
 	
 	
 M!%%((""1%%--""7G,,,"1g..5555x~----z<////}"l22222-3 3rC   c                     t           j                            d                              dd          } t	          ddd          }|                    |           }|                    |           }t          ||           d S )Nr     r   )r_   ru   rL   )r(   r)   r*   randnr   r  r  r   )r<   gmy_pred1y_pred2s       rA   (test_gaussian_mixture_fit_predict_n_initr   b  sq    
	a  &&tQ//A	a	B	B	BBnnQGjjmmGw(((((rC   c                 F   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|j        j        | k    sJ |j        j        | k    sJ |j        j        | k    sJ d S )Nr   rY      r_   ru   rw   rL   r9   rs   g{Gz?rtolatolr#   r$   r&   c                 >    g | ]}t          j                  |z  S rS   r(   r/   rN   r@   r5   s     rA   rO   z-test_gaussian_mixture_fit.<locals>.<listcomp>  s(    !P!P!PQ"&"4"4q"8!P!P!PrC   c                 >    g | ]}t          j                  |z  S rS   r(  r)  s     rA   rO   z-test_gaussian_mixture_fit.<locals>.<listcomp>  s(    SSSA
##a'SSSrC   r%   c                 6    g | ]}t          j        |          S rS   r(   r%   rN   ds     rA   rO   z-test_gaussian_mixture_fit.<locals>.<listcomp>  s     !D!D!D"'!**!D!D!DrC   c                 6    g | ]}t          j        |          S rS   r,  r-  s     rA   rO   z-test_gaussian_mixture_fit.<locals>.<listcomp>  s     !S!S!S"'!**!S!S!SrC   r~   rG   )axis1axis2g333333?)r&  )r(   r)   r*   rE   r5   r_   re   r<   r   ry   r   sortr  r6   r  argsortr7   r  r8   rb   tracer,   r   r   r   r:   covariances_)r   r;   r   r_   r[   r<   r   arg_idx1arg_idx2	prec_pred	prec_testr^   hr   r5   s                 @rA   test_gaussian_mixture_fitr;  k  sA   
)


"
"C3l333I%J)L% /3 /3
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x~----~#|3333}"l22222_/3 /3rC   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   ro   r~   r#  )r(   r)   r*   rE   r_   re   r<   r   rc   ry   r-   scorerb   r   r   )
r;   r   r_   ru   r[   r<   r   llr=   g_bests
             rA   %test_gaussian_mixture_fit_best_paramsr@    s'   
)


"
"C3I)LF% 7 7
K
#%&
 
 
 v 	" 	"AEE!HHHIIaggajj!!!!Xb\\ %&
 
 
 	

1BFFHHfll1oo6666-7 7rC   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   r~   r   r_   ru   rv   rw   rL   r9   zBest performing initialization did not converge. Try different init parameters, or increase max_iter, tol, or check for degenerate data.r   )r(   r)   r*   rE   r_   re   r<   r   r   warnsr   ry   )r;   r   r_   rv   r[   r<   r   r   s           rA   -test_gaussian_mixture_fit_convergence_warningrD    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   rH   r   rG   r   r   r_   r9   rL   ru   )r(   r)   r*   r  re   r   ry   r=  )r;   r4   r5   r_   r<   cv_typetrain1train2s           rA   test_multiple_initrK    s    
)


"
"C*2'Iz<		)Z((A"    )7QR   SVVU1XX 	 ) '	   SVVU1XX 	 %   rC   c                  (   t           j                            d          } d\  }}}|                     ||          }ddddd}t          D ]G}t          |||                               |          }|                                ||         k    sJ Hd S )	Nr   rF           )   rP   r   )r(   r)   r*   r  re   r   ry   _n_parameters)r;   r4   r5   r_   r<   n_paramsrH  r   s           rA   "test_gaussian_mixture_n_parametersrS    s    
)


"
"C*2'Iz<		)Z((ARDDH" 6 6%wS
 
 

#a&& 	
   HW$555555	6 6rC   c                     t           j                            d          } d\  }}}|                     ||          }t	          |d|                               |                              |          }dD ]J}t	          |||                               |                              |          }t          ||           Kd S )Nr   )d   r~   r~   r#   r   )r$   r%   r&   )r(   r)   r*   r  r   ry   bicr   )r;   r4   n_dimr_   r<   bic_fullr9   rV  s           rA   test_bic_1d_1componentrY    s     )


"
"C%."Iul		)U##A%vC	
 	
 	
 
Q	Q  9 
+ 
+) /   
 SVVSVV 	 	Hc****
+ 
+rC   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   )rH   rq   rG   rJ   r~   )biasrG   rF   )r_   r9   rL   rv   )r(   r)   r*   r  r!   r   r   r   pire   r   ry   rQ  r   aicrV  )r;   r4   r5   r_   r<   sghrH  r   r]  rV  bounds              rA   test_gaussian_mixture_aic_bicr`    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 4rC   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   r~   )r_   ru   rw   rL   r9   verboserG   )r(   r)   r*   rE   r_   re   r<   r   sysstdoutr   ry   )r;   r   r_   r[   r<   r   r:  
old_stdouts           rA   test_gaussian_mixture_verboserf  3  s    
)


"
"C3I)L% $ $
K
#%&
 
 
 %&
 
 
 Z
ZZ
	$EE!HHHEE!HHH#CJJCJ####1$ $s   *CC r  )r   r~   rG   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   r~   rG   r   F)r_   ru   rv   rw   rL   
warm_startTr   ư>)r_   ru   rv   rw   rL   rh  rt   r  )r(   r)   r*   r`   r   ry   r=  r   r  r  r  
converged_rc   )r  rL   r;   r4   r5   r_   r<   r   r:  score1score2r=   s               rA   test_warm_startrm  R  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	<<rC   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#   )r~   rG   rH   T)r_   rh  rv   rL   rU  )r(   r)   r*   rE   r_   r<   r   rc   ry   rj  n_iter_)r;   r   r_   r<   rv   rz   r=   s          rA   )test_convergence_detected_with_warm_startrp    s     )


"
"C3I)LFA ' '%	
 
 
 s 	 	AGGAJJJ~ ~~3;&&&&&' 'rC   c                    d}t           j                            d          }t          |d|           }|j        }|j        |         }|j        | k    s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   |j        j        | k    sJ |j        j        | k    sJ |                    |          }|                    |                                          }	t+          ||	           |	j        | k    sJ t          |dd||
                              |          }
|
                    |          |                    |          k    sJ d S )Nr#   r      rh   r:   r~   rB  r  r   ignorer#  )r(   r)   r*   rE   r_   r<   r:   r   r   r   r   r=  warningscatch_warningssimplefilterr   ry   r  r5  score_samplesr   r   )r   r[   r;   r   r_   r<   gmm1r   	gmm_scoregmm_score_probagmm2s              rA   
test_scorer}    sp   J
)


"
"C3a|<<<I)LJA7l"""" !"  D	=  
~S	1	1	1  

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

1I((++0022O	?333 L0000 !"   
c!ff 	 ::a==4::a==((((((s$   B))B-0B-0DD
D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   rr  r   r~   r#  r  r   )r(   r)   r*   rE   r_   r<   r   r   r   r   rx  ry   r   r4   )r[   r;   r   r_   r<   rz   r   gmm_score_sampless           rA   test_score_samplesr    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   rr  r   Tr~   r  )r_   r9   rw   rh  rv   rL   rt   rt  iX  )r(   r)   r*   rE   r_   re   r<   r   infru  rv  rw  r   rc   ry   r=  rj  )	r;   r   r_   r[   r<   rz   current_log_likelihoodr=   prev_log_likelihoods	            rA   test_monotonic_likelihoodr    sy    )


"
"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   )ro   r   rG   )r_   rw   r9   rL   rt  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.r   ri  )rw   )r(   r)   r*   r3   r   r   re   r   ru  rv  rw  RuntimeWarningr   r   r   r   r   ry   
set_params)r;   r4   r5   r<   r[   rz   r   s          rA   test_regularisationr    s    )


"
"C!Iz
		)q.*-	.	.)q.*9U0V0VW	 	A & 2 2
"&	
 
 
 $&& 	2 	2!(N;;;)N 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	r[   c                 ^   t           j                            d          }t          |d|          }|j        }|j        |          }t          || |d          }|                    |           |j        j	        |k    sJ |j
        j	        |k    sJ | dk    rDt          |j        |j
                  D ]'\  }}t          t          j        |          |           (d S | dk    r.t          t          j        |j                  |j
                   d S t          |j        d|j
        z             d S )	Nr   rr  rs  r   rG  r#   r$   rQ   )r(   r)   r*   rE   r_   r<   r   ry   r  r:   r5  r,   r   r   rU   )	r[   r   r;   r   r_   r<   rz   r   covars	            rA   ,test_fitted_precision_covariance_concistencyr  :  sA   
)


"
"C3a|<<<I)LJA
!"	  C GGAJJJ? L0000!\1111Vs0@AA 	? 	?KD%%fj&6&6>>>>	? 	?	v		!&*S_"="=s?OPPPPP!#/39I3IJJJJJrC   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   rr  rq   )rh   r_   r   z+This GaussianMixture instance is not fittedr   zInvalid value for 'n_samples'i N  r#   r~   )decimalr$   r%   c                 N    g | ]!}t          j        |k             d           "S )r   )r(   r   )rN   r^   X_sy_ss     rA   rO   ztest_sample.<locals>.<listcomp>  s-    SSS!BGCqM155SSSrC   rU  )r(   r)   r*   rE   r5   r_   re   r<   r   r   r   r   samplery   r   rc   r   r5  r   r   r%   varr  rb   r   )r;   r   r5   r_   r[   r<   rz   r   r4   r^   means_ssample_sizer=   r  r  s                @@rA   test_sampler  S  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   rH   r~   )r4   rh   r#   )r_   ru   rv   rL   ro   )
rc   rE   r(   r)   r*   r_   r<   r   ry   lower_bound_)rL   r   r_   r<   ry  r|  s         rA   	test_initr    s     b		 6 6I!!,//2Q
 
 
	 !-K%a!,
 
 

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

#a&& 	  D$5555556 6rC   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   rr   rq   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&   r~   )r9   rw   r   r   rL   r_   r   rv   )r  r  r5  precisions_cholesky_ro  r  lower_bounds_N)
r(   r)   r*   uniformrb   r   r   ry   rj  hasattr)rndr4   r<   r   r   r   rz   attrs           rA   )test_gaussian_mixture_setting_best_paramsr    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!!!!!!	" 	"rC   rx   )r)   random_from_data	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   )r_   rx   rL   rv   rG   )r)r(   r)   r*   rE   r_   r<   r   ry   r  	itertoolscombinationsallclose)
rx   global_random_seedr;   r   r_   r<   rz   r7   i_meanj_means
             rA   test_init_means_not_duplicatedr    s    
 )

 2
3
3C3a(((I)LFA
!{WX  C GGAJJJJE#0!<<< / /;vv....../ /rC   c                 f   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 |j        j        |k    sJ |j        j        |k    sJ |j        j        |k    sJ d S )Nr   rs  r#   )r_   rx   rL   r~   r   r   )r(   r)   r*   rE   r_   r<   r   ry   r  r   allr   r   rj  r:   r5  r  )rx   r  r   r;   r   r_   r<   rz   s           rA   test_means_for_all_initsr    s7   
 )

 2
3
3C3a|<<<I)LFA
!{  C GGAJJJ:agaj999996!%%Q%--3:-.....6#*1-.....>>:|++++!\1111<------rC   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"  rr      ri  )r_   rL   r   rt   rv   )
r(   r)   r*   rE   r_   r<   r   ry   r   r  )r;   r   r_   r<   r   rz   s         rA   test_max_iter_zeror    s     )


"
"C3a(((I)LFAr(RH%J
!  C GGAJJJCJ
+++++rC   c                    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          |||	|          \  }}}|j        | k    sJ d
|z  }t!          |||	||
                              |          }|j        j        | k    sJ |j        j        | k    sJ |j        j        | k    sJ t!          |||	|
                              |          }|j        j        | k    sJ |j        j        | k    sJ |j        j        | k    sJ |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   rG   r"  g        gffffffg      @gffffff?)rG   r%   ri  r   r~   )
n_clustersru   rL   )rw   r9   )r_   r9   rw   r   rL   )r_   r9   rw   rL   N)r(   r)   r*   r  rb   r   r3   r2   r   r   r   ry   labels_aranger   r:   r   r  r5  r  ro  r   )r   r4   r;   shifted_gaussianCstretched_gaussianr<   r_   r9   rw   rL   r   labelr=   rV   r   gm_with_initgm_without_inits                     rA   *test_gaussian_mixture_precisions_init_diagr  &  s    I
)


"
"CyyA..2r(1C1CC
3+Sz*++A		)Q 7 7;;
	#%7899@@NNA >P:L/9l 8QWQZ.//66|DDD,q|LLL	Q	 

 *+D171:			%&4	49o  Aq* |++++*nO"!''!   
c!ff  $4444$*l::::,2lBBBB%!'!	  
 
c!ff  !'<7777'-====/5EEEE"l&:::::)?+O    rC   c                 J   t           j                            |           }|                    ||f                              |          }|                    ||f                              |          }||                    d          ddt           j        f         z  }||fS )z/Randomly generate samples and responsibilities.r~   r   N)r(   r)   r*   random_sampler2   ra   r   )r  r4   r5   r_   r:   rsr<   r   s           rA   _generate_datar  j  s    			t	$	$B
)Z01188??AY566==eDDDDHH!HQQQ
]++Dd7NrC   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.
    ri  )r_   r9   )r   r   r   r   _set_parametersr  r  )r<   r   r9   rw   r6   r7   rZ   precisions_choleskyr=   r_   rz   paramss               rA   _calculate_precisionsr  s  s     I"?	4O# #GUK 6k?SSjOA|
 |_
U
U
UCuk+>?F?C444rC   r9   c                    t          |ddd|          \  }}t          |||           \  }}|j        |k    sJ |j        |k    sJ t          | |          }|                    ||           |j        }t          ||           dS )zNon-regression test for #26415.rU  rq   r  )r  r4   r5   r_   r:   )r9   r   N)r  r  r:   r   _initializer  r   )	r9   r  r   r<   r   r   desired_precisions_choleskyrz   actual_precisions_choleskys	            rA   %test_gaussian_mixture_precisions_initr    s       GAt 4I	44 40O0  L0000&,<<<<
'  C OOAt!$!9.0KLLLLLrC   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   rG   rq   r  r~   r}   N)	r(   r)   r*   r.   r   identityr   ry   r  )r;   r<   r  s      rA   -test_gaussian_mixture_single_component_stabler    su    
 )


"
"CR[^^!DDA	a	(	(	(BFF1IIrC   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#   )r_   r   r   r   rL   N)r   r   setattrsklearnmixture_gaussian_mixturer(   r)   r*   rE   r   r_   r6   r7   r8   ry   r<   
call_countro  )monkeypatchr  mockr;   r   r  s         rA   Dtest_gaussian_mixture_all_init_does_not_estimate_gaussian_parametersr    s     9:::D)+JD   )

 2
3
3C3I	+&?!,V4
 
 
B FF9;v ?bj((((((rC   r)   r  zarray_namespace, device_, dtype)ids#use_gmm_array_constructor_argumentsFTc                 
   t          ||          }t          j                            d          }t	          |          }|j        |         }	|	                    |          }	|rU|j                            |          |j        |                             |          |j	                            |          d}
ni }
t          d|j        |d| d|
}|                    |	           |                    |	|          }t          j        d          5  t          j        |          }|
                                D ]-\  }}|                    ||          }t%          |||           .|                    |           t'          |j                  d         |k    sJ t'          |j                  d         |k    sJ t-          |j                  t-          |          k    sJ t-          |j                  t-          |          k    sJ |                    |          }|                    |          }|                    |          }|                    |          }|                    |          }|                    |          }|                    d          \  }}|||||g}|D ]?}t'          |          d         |k    sJ t-          |          t-          |          k    sJ @|||fD ]}t=          |t>                    sJ 	 ddd           n# 1 swxY w Y   |d	k    rd
nd}|d	k    rdnd}|d	k    rdnd}tA          |j        tC          |j        |                     tA          |j"        tC          |j"        |                     tA          |j        tC          |j        |          ||           tA          |j#        tC          |j#        |          ||           tA          |j$        tC          |j$        |          ||           tK          |                    |	          tC          ||                    dk    sJ tA          |                    |	          tC          ||          ||           tA          |                    |	          tC          ||          |           tA          |                    |	          ||           tA          |                    |	          ||           tA          |                    |	          ||           |                    d          \  }} tA          |tC          ||          |           tA          | tC          ||                     dS )z3Test that array api works in GaussianMixture.fit().r   )r   r   r   )r_   r9   rL   rx   )r   Tarray_api_dispatchro   Nfloat32rp   r  gMb@?gMbP?)xp)r&  r%  r  r$  )r%  rS   )&r   r(   r)   r*   rE   r<   r2   r7   r8   r6   r   r_   ry   asarrayr  config_contextcloneitemsr  r   r  r5  r   r  r  rx  r=  r]  rV  r  
isinstancefloatr   r   r  r  r  r   )!rx   r9   array_namespacedevice_r:   r  r  r;   r   r<   additional_kwargsrz   X_xpgmm_xp
param_nameparam_valuearg_xp
predict_xppredict_proba_xpscore_samples_xpscore_xpaic_xpbic_xpsample_X_xpsample_y_xpresultsresultr=  default_rtolincreased_atolincreased_rtolsample_Xsample_ys!                                    rA   *test_gaussian_mixture_array_api_compliancer    s   " 
ow	7	7B
)


"
"C3IO$A	A* #/0077(3ODKKERR%-44U;;
 
 
 +'	 
  C GGAJJJ::a:((D		4	8	8	8 !, !,s##'8'>'>'@'@ 	0 	0#JZZGZ<<FFJ////

4V]++A."4444V011!4::::fm$$t4444f)**fTll::::^^D))
!//55!//55<<%%D!!D!!#)==#4#4 [ 
  	2 	2F ((+r1111&>>VD\\11111/ 	, 	,EeU++++++	,A!, !, !, !, !, !, !, !, !, !, !, !, !, !, !,H !I--444L"i//TTQN"i//TTTN CJ 1&-B G G GHHHCL"3FO"K"K"KLLL&-"555	     &5"===	    &,444	    	CKKNN,=jR,P,P,PQQTXXXXX!*r222	    !*r222    CIIaLL(>>>>CGGAJJ\::::CGGAJJ\::::BHhH/CCC,WWWWH/CCCDDDDDs   G8LLLr  r  c                 @   t          ddd          \  }}t          dd|           }t          j        d          5  t	          j        t          d	
          5  |                    |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrU  rG   rq   )r4   r5   centersr%   )r_   r9   rx   Tr  z9Allowed `init_params`.+if 'array_api_dispatch' is enabledr   )r
   r   r  r  r   r   NotImplementedErrorry   )rx   r  r  r:   r<   r=   rz   s          rA   <test_gaussian_mixture_raises_where_array_api_not_implementedr  Q  s?      DAq
 K  C 
	4	8	8	8  ]M
 
 
 	 	 GGAJJJ		 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s5   BA;/B;A?	?BA?	BBB)ir  r  r   rc  ru  ior   unittest.mockr   numpyr(   r   scipyr   r   r  sklearn.clusterr   sklearn.covariancer   sklearn.datasetsr	   #sklearn.datasets._samples_generatorr
   sklearn.exceptionsr   r   sklearn.metrics.clusterr   sklearn.mixturer   r   r   r   r   r   r   r   r   sklearn.utils._array_apir   r   r   r   r   sklearn.utils._testingr   r   r   r   r   r    sklearn.utils.extmathr!   re   rm   rB   rE   r{   r   r   r   r   r   r   r   r   r   r   r  r
  markfilterwarningsparametrizer  r   r;  r@  rD  rK  rS  rY  r`  rf  rm  rp  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rS   rC   rA   <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 OQj$ $ $ $N;
 ;
 ;
 ;
 ;
 ;
 ;
 ;
|* * *6-0 -0 -0`, , ,.6P 6P 6Pr'5 '5 '5T5 5 5<D D D21 1 102 2 26  *8 *8 *8`: : ::5 5 5< 9::   3 3  ;:38) ) )63 63 63r7 7 7<  0     4
6 
6 
6+ + +44 4 40$ $ $> 9::++@ @ ,+ ;:@F KLL' ' ML',-) -) -)`= = =4" " "D2 2 2@ 77K K 87K06: 6: 6:r KLL6 6 ML6&C" C" C"L HHH / / /" HHH . . .*, , ,(A A AH EGJ    5 5 5* *O<<M M =<M6  ) ) )> 3E(FGG*,Q,Q,QRR%--//'   
 >NNxE xE ON  SR HGxEv );(?@@%--//'   
   A@ )(  rC   