o
    tBh                     @   s  d dl Z d dlZ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	m
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 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! 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( d dl$m)Z) g dZ*dd Z+G dd dZ,dd Z-dd Z.dd Z/dd Z0dd Z1d d! Z2d"d# Z3d$d% Z4d&d' Z5d(d) Z6d*d+ Z7d,d- Z8d.d/ Z9ej:;d0ej:<d1g d2d3d4 Z=d5d6 Z>d7d8 Z?d9d: Z@d;d< ZAd=d> ZBd?d@ ZCdAdB ZDdCdD ZEdEdF ZFej:;d0ej:<dGdHdIdJ ZGe)e dKdLdM ZHdNdO ZIdPdQ ZJdRdS ZKdTdU ZLdVdW ZMdXdY ZNe)e dKdZd[ ZOd\d] ZPej:<d^g d_d`da ZQej:<d^g d_dbdc ZRddde ZSdfdg ZTdhdi ZUdS )j    N)statslinalg)KMeans)EmpiricalCovariancemake_spd_matrix)StringIO)adjusted_rand_score)GaussianMixture)#_estimate_gaussian_covariances_full#_estimate_gaussian_covariances_tied#_estimate_gaussian_covariances_diag(_estimate_gaussian_covariances_spherical_estimate_gaussian_parameters_compute_precision_cholesky_compute_log_det_cholesky)ConvergenceWarningNotFittedError)fast_logdet)assert_allclose)assert_almost_equal)assert_array_almost_equal)assert_array_equal)ignore_warningsfulltieddiag	sphericalc                 C   sb  t jd}g }|dkr4tt|||d D ]\}\}	}
}|||
|t | tt 	|	|   q|dkr^tt|||d D ]\}\}	}
}|||
t 
|tt 	|	|   qB|dkrtt||D ]\}\}	}
|||
|d tt 	|	|   qi|dkrtt|||d D ]\}\}	}
}|||
|tt 	|	|   qt |}|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c r6   /var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/mixture/tests/test_gaussian_mixture.pygenerate_data*   s4   "" "$
r8   c                   @   s   e Zd ZdddZdS )
RandomData      2   c                    s  _ |_ _|_jj  _| | _d| d|  d t dt	 fddt
|D d_djd  djd	  tjd
 t	dd jd D d_ttt fddtD _tfddtjD _d S )N      ?r;   random_statec                    s   g | ]
}t  d d qS )r>   r=   r   ).0r2   )r+   r0   r6   r7   
<listcomp>W   s    z'RandomData.__init__.<locals>.<listcomp>r   r   r   r         ?r   r   r   c                 S      g | ]}t |qS r6   r   inv)r@   
covariancer6   r6   r7   rA   b       r   c              	      s$   g | ]}t  jjj|qS r6   )r8   r,   r-   covariances)r@   
covar_type)r+   r*   selfr6   r7   rA   i   s    	c                    s.   g | ]\}}t jtt |  |td qS ))dtype)r   r   r'   r(   )r@   kr3   )r*   r6   r7   rA   w   s    )r*   n_componentsr+   randr,   sumr-   r   r   arrayrangerI   r   rF   r.   dictr#   COVARIANCE_TYPEr1   hstackr"   Y)rK   r0   r*   rN   r+   scaler6   )r+   r*   r0   rK   r7   __init__J   sF   
		

zRandomData.__init__N)r:   r;   r;   r<   )__name__
__module____qualname__rX   r6   r6   r6   r7   r9   I   s    r9   c               	   C   s
  t jd} | dd}d}t|d}d| d}tjt|d || W d    n1 s0w   Y  d}t|d	}t	
d
| dd }tjt|d || W d    n1 s^w   Y  d}t|d}d| d}tjt|d || W d    n1 sw   Y  d}t|d}d| d}tjt|d || W d    n1 sw   Y  d}t|d}d| d}tjt|d || W d    n1 sw   Y  d}	t|	d}d|	 d}tjt|d || W d    n	1 sw   Y  d}
t|
d}d|
 d}tjt|d || W d    n	1 s-w   Y  d\}}}}}d\}}t|||||||d|}|j|ksSJ |j|ks[J |j|kscJ |j|kskJ |j|kssJ |j|ks{J |j|ksJ d S )Nr   
   r;   rN   zn_components == z, must be >= 1.matchbad_covariance_type)r/   z%Invalid value for 'covariance_type': z 'covariance_type'z3 should be in ['spherical', 'tied', 'diag', 'full'])tolztol == z, must be >= 0.	reg_covarzreg_covar == )max_iterzmax_iter == )n_initz
n_init == 
bad_method)init_paramsz%Unimplemented initialization method '')r;   g-C6?      皙?)r   r    )rN   rb   rf   re   rd   r/   rh   )r   r    r!   rO   r
   pytestraises
ValueErrorfitreescaperN   r/   rb   rd   re   rf   rh   )r0   r1   n_components_badgmmmsgcovariance_type_badtol_badreg_covar_badmax_iter_bad
n_init_badinit_params_badrN   rb   rf   re   rd   r/   rh   r6   r6   r7    test_gaussian_mixture_attributes~   s   








r|   c            
      C   s  t jd} t| }|j}|jd }t|d}| |d}||_t	
d| dt|j }tjt|d || W d    n1 sEw   Y  | |d }||_t	
dt |d	d
t |d	}tjt|d || W d    n1 s~w   Y  | |}|| d  }||_t	
dt |d	}tjt|d || W d    n1 sw   Y  |j}	t|	|d}|| t|	|j d S )Nr   r   r]      z2The parameter 'weights' should have the shape of (z,), but got r^   zIThe 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_initrN   )r   r    r!   r9   rN   r1   r
   rO   r~   rq   rr   strshaperm   rn   ro   rp   minmaxrP   r,   r   )
r0   	rand_datarN   r1   gweights_bad_shaperu   weights_bad_rangeweights_bad_normr,   r6   r6   r7   test_check_weights   sX   






r   c            	      C   s   t jd} t| }|j|j}}|jd }t|d}| |d |}||_	d}t
jt|d || W d    n1 s?w   Y  |j}||_	|| t||j	 d S )Nr   r   r]   r}   z/The parameter 'means' should have the shape of r^   )r   r    r!   r9   rN   r+   r1   r
   rO   
means_initrm   rn   ro   rp   r-   r   )	r0   r   rN   r+   r1   r   means_bad_shaperu   r-   r6   r6   r7   test_check_means   s   


r   c               	   C   s  t jd} t| }|j|j}}t |d ||ft |d |d ft |d |ft |d d}t |||f}t ||d< d|d< ||d t ||fdt |dd}ddddd}t	D ]v}t| j
| }	t||| d}
|| |
_d	| d
}tjt|d |
|	 W d    n1 sw   Y  || |
_d| d||  }tjt|d |
|	 W d    n1 sw   Y  |j| |
_|
|	 t|j| |
j qdd S )Nr   r}   r   g      )r   r   r   zsymmetric, positive-definitepositiverN   r/   r?   zThe parameter 'z$ precision' should have the shape ofr^   ri   z precision' should be )r   r    r!   r9   rN   r+   onesr&   r   rT   r1   r
   precisions_initrm   rn   ro   rp   r.   r   )r0   r   rN   r+   precisions_bad_shapeprecisions_not_posprecisions_not_positivenot_positive_errorsrJ   r1   r   ru   r6   r6   r7   test_check_precisions  sP   



r   c                  C   s  t jd} d\}}| ||}| |d}t || }t |g}t d|f}t||||d}tdd}	|		| t
|	j|d ddd t
|	j|d ddd t|d	}
t d
d |
D }t dd |D }t|| t |df}t |g}|jddd}t||||d}tdd}	|		| t
|	j|d ddd t
|	j|d ddd t|d	}
t dd |
D }t dd |D }t|| d S )Nr     r;   r}   T)assume_centered	frobeniusnormspectralr   c                 S      g | ]	}t ||jqS r6   r   dotTr@   precr6   r6   r7   rA   \      z)test_suffstat_sk_full.<locals>.<listcomp>c                 S   rD   r6   rE   r@   covr6   r6   r7   rA   ]  rH   axis)r}   ra   Fc                 S   r   r6   r   r   r6   r6   r7   rA   l  r   c                 S   rD   r6   rE   r   r6   r6   r7   rA   m  rH   )r   r    r!   rO   sqrtrQ   zerosr   r   rp   r   
error_normr   r   r   meanreshape)r0   r*   r+   r1   respX_respnkxkcovars_predecovprecs_chol_pred
precs_pred	precs_estr6   r6   r7   test_suffstat_sk_fullG  s8   






r   c                  C   s"  t jd} d\}}}| ||}||jddd d t jf  }| ||}|jdd}t |j||d d t jf  }t||||d}t |d d t jt jf | d| }t	||||d}	t
 }
||
_t|
j|	ddd t|
j|	ddd t|	d}t ||j}t|	}t|| d S )	Nr   r   r;   r;   r}   r   r   r   r   r   )r   r    r!   rO   rP   newaxisr   r   r   r   r   covariance_r   r   r   r   rF   r   )r0   r*   r+   rN   r   r1   r   r   covars_pred_fullcovars_pred_tiedr   r   r   r   r6   r6   r7   test_suffstat_sk_tiedq  s&   
 $

r   c                  C   s  t jd} d\}}}| ||}||jddd d t jf  }| ||}|jdd}t |j||d d t jf  }t||||d}t	||||d}	t
 }
t||	D ]&\}}t t ||
_t |}t|
j|ddd t|
j|ddd qTt|	d}t|	d	|d
   d S )Nr   r   r}   r   r   r   r   r   rC   r;   )r   r    r!   rO   rP   r   r   r   r   r   r   r#   r   r   r   r   r   )r0   r*   r+   rN   r   r1   r   r   r   covars_pred_diagr   cov_fullcov_diagr   r6   r6   r7   test_suffstat_sk_diag  s"   
 

r   c            
      C   s   t jd} d\}}| ||}||  }t |df}t |g}| }t||||d}t |	 j
|	 ||  }t|| t|d}	t|d|	d   d S )Nr   r   r}   r   rC   r;   )r   r    r!   rO   r   r   rQ   r   r   flattenr   r   r   )
r0   r*   r+   r1   r   r   r   covars_pred_sphericalcovars_pred_spherical2r   r6   r6   r7   #test_gaussian_suffstat_sk_spherical  s   

r   c                  C   s   d} t tjd}tD ]K}|j| }|dkr"tdd |D }n!|dkr,t|}n|dkr;tdd |D }n|d	krC||  }t	t
|||| d
}t|dt|  qd S )Nr;   r   r   c                 S   rD   r6   )r   detr   r6   r6   r7   rA     rH   z1test_compute_log_det_cholesky.<locals>.<listcomp>r   r   c                 S   rD   r6   )r   prodr   r6   r6   r7   rA     rH   r   r+   g      )r9   r   r    r!   rT   rI   rQ   r   r   r   r   r   log)r+   r   rJ   rG   predected_detexpected_detr6   r6   r7   test_compute_log_det_cholesky  s&   
r   c                 C   sd   t t| t|f}t |}tt||D ]\}\}}tj| ||j	dd|d d |f< q|S )Nr}   r   )
r   emptylenr   r"   r#   r   r   logpdfrP   )r1   r-   covarsr   stdsir   stdr6   r6   r7   _naive_lmvnpdf_diag  s
   
&r   c                     s^  ddl m}  tjd}t|}d}|j |j}|j}|	| }|	| }t
|||}tdd |D }	| |||	d}
t|
| dt| }| |||d}
t|
| td	d |D jdd
}ttd| }t
|||g| }| |||d}
t|
| |jdd
}dt|jdd
 }t
|| fdd|D }| |||d}
t|
| d S )Nr   )_estimate_log_gaussian_probr   c                 S   s    g | ]}t d t | qS )rC   )r   r   r   r@   xr6   r6   r7   rA          z;test_gaussian_mixture_log_probabilities.<locals>.<listcomp>r   rC   r   c                 S   s   g | ]}|qS r6   r6   r   r6   r6   r7   rA     s    r   r   r}   c                    s   g | ]}|g  qS r6   r6   r@   rM   r   r6   r7   rA     rH   r   )!sklearn.mixture._gaussian_mixturer   r   r    r!   r9   r+   rN   r-   rO   r   rQ   r   r   r   r   )r   r0   r   r*   rN   r-   covars_diagr1   log_prob_naive
precs_fulllog_probprecs_chol_diagcovars_tied
precs_tiedcovars_sphericalprecs_sphericalr6   r   r7   'test_gaussian_mixture_log_probabilities  s8   


r   c               	   C   s   t jd} t| dd}|j}|j}|j}| ||}tD ]?}|j	}|j
}|j| }	t|| |||	|d}
|
| |
|}t|jddt | t|
j| t|
j| t|
j|	 qd S )Nr      rW   rN   r?   r~   r   r   r/   r}   r   )r   r    r!   r9   r*   r+   rN   rO   rT   r,   r-   r.   r
   rp   predict_probar   rP   r   r   r~   r   r   )r0   r   r*   r+   rN   r1   rJ   r,   r-   r.   r   r   r6   r6   r7   ,test_gaussian_mixture_estimate_log_prob_resp  s2   


r   c            	   	   C   s   t jd} t| }tD ]Y}|j| }|j}t|j| |j	|j
|j| |d}d}tjt|d || W d    n1 s?w   Y  || ||}||jdd}t|| t||dkseJ q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!   r9   rT   r1   rV   r
   rN   r,   r-   r.   rm   rn   r   predictrp   r   argmaxr   r	   )	r0   r   rJ   r1   rV   r   ru   Y_predY_pred_probar6   r6   r7   +test_gaussian_mixture_predict_predict_proba,  s0   



r   zignore:.*did not converge.*zseed, max_iter, tol))r   r;   Hz>)r}   r;   rl   )rj   ,  r   )   r   rl   c                 C   s   t j| }t|}tD ]<}|j| }|j}t|j||j	|j
|j| |||d}t|}	|	||}
||}t|
| t||dksHJ qd S )N)rN   r?   r~   r   r   r/   re   rb   r   )r   r    r!   r9   rT   r1   rV   r
   rN   r,   r-   r.   copydeepcopyrp   r   fit_predictr   r	   )seedre   rb   r0   r   rJ   r1   rV   r   fY_pred1Y_pred2r6   r6   r7   !test_gaussian_mixture_fit_predictJ  s*   



r   c                  C   sD   t jddd} tdddd}|| }|| }t|| d S )Nr     r   )rN   rf   r?   )r   r    r!   randnr
   r   r   r   )r1   gmy_pred1y_pred2r6   r6   r7   (test_gaussian_mixture_fit_predict_n_initm  s
   

r   c                     s  t jd} t| }|j |j}tD ]}|j| }t|dd| |d}|	| t
t |jt |jddd |jd d df  }|jd d df  }t
|j| |j| ddd |dkrh|j}|jd }	nV|dkrt |jg| }t |jd g| }	n=|d	krt  fd
d|jD }t  fdd|jd	 D }	n|dkrt dd |jD }t dd |jd D }	t j|ddd }t j|	ddd }t||D ]\}
}t }|	| |_t
|||
 ddd qqd S )Nr      rN   rf   rd   r?   r/   rl   g{Gz?)rtolatolr   r   r   c                       g | ]	}t  | qS r6   r   r&   r@   r5   r   r6   r7   rA     r   z-test_gaussian_mixture_fit.<locals>.<listcomp>c                    r  r6   r  r  r   r6   r7   rA     r   r   c                 S   rD   r6   r   r   r@   dr6   r6   r7   rA     rH   c                 S   rD   r6   r  r  r6   r6   r7   rA     rH   r}   r;   )axis1axis2g333333?)r  )r   r    r!   r9   r+   rN   rT   r1   r
   rp   r   sortweights_r,   means_argsortr-   precisions_r.   rQ   tracer#   r   r   r   )r0   r   rN   rJ   r1   r   arg_idx1arg_idx2	prec_pred	prec_testrM   hr   r6   r   r7   test_gaussian_mixture_fitv  sX   


r  c            
      C   s   t jd} t| }|j}d}tD ]C}|j| }t|dd| |d}g }t|D ]}|	| |
|| q't |}t||d| |d}	|		| t| |	| qd S )Nr   r\   r}   r  )r   r    r!   r9   rN   rT   r1   r
   rR   rp   r$   scorerQ   r   r   )
r0   r   rN   rf   rJ   r1   r   llr2   g_bestr6   r6   r7   %test_gaussian_mixture_fit_best_params  s8   



r  c               	   C   s   t jd} t| dd}|j}d}tD ]3}|j| }t|d|d| |d}d| d}tj	t
|d || W d    n1 sAw   Y  qd S )Nr   r}   r   rN   rf   re   rd   r?   r/   zInitialization zi did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.r^   )r   r    r!   r9   rN   rT   r1   r
   rm   warnsr   rp   )r0   r   rN   re   rJ   r1   r   ru   r6   r6   r7   -test_gaussian_mixture_fit_convergence_warning  s*   

	r  c                  C   sr   t jd} d\}}}| ||}tD ]#}t||dd||}t||ddd||}||ks6J qd S )Nr   r<   r   r;   r   r   rN   r/   r?   rf   )r   r    r!   r   rT   r
   rp   r  )r0   r*   r+   rN   r1   cv_typetrain1train2r6   r6   r7   test_multiple_init  s*   

r$  c                  C   sf   t jd} d\}}}| ||}ddddd}tD ]}t||| d|}| || ks0J qd S )	Nr   r           )   rB   r   )r   r    r!   r   rT   r
   rp   _n_parameters)r0   r*   r+   rN   r1   n_paramsr!  r   r6   r6   r7   "test_gaussian_mixture_n_parameters  s   
r+  c                  C   sn   t jd} d\}}}| ||}t|d| d||}dD ]}t||| d||}t|| q d S )Nr   )d   r}   r}   r   r   )r   r   r   )r   r    r!   r   r
   rp   bicr   )r0   r*   n_dimrN   r1   bic_fullr/   r-  r6   r6   r7   test_bic_1d_1component  s(   
	r0  c                  C   s   t jd} d\}}}| ||}dtt j|jdd|dt dt j     }t	D ]K}t
||| dd}|| d| | d|   }d| | t ||   }	|t | }
||| | |
k siJ |||	 | |
k svJ q+d S )	Nr   )r<   rj   r;   r=   r}   )biasr;   r:   )rN   r/   r?   re   )r   r    r!   r   r   r   r   r   pirT   r
   rp   r)  r   aicr-  )r0   r*   r+   rN   r1   sghr!  r   r3  r-  boundr6   r6   r7   test_gaussian_mixture_aic_bic"  s(   
*
r6  c               	   C   s   t jd} t| }|j}tD ]5}|j| }t|dd| |dd}t|dd| |dd}tj	}t
 t_	z|| || W |t_	q|t_	w d S )Nr   r}   )rN   rf   rd   r?   r/   verboser;   )r   r    r!   r9   rN   rT   r1   r
   sysstdoutr   rp   )r0   r   rN   rJ   r1   r   r  
old_stdoutr6   r6   r7   test_gaussian_mixture_verbose:  s8   

r;  r   )r   r}   r;   c              	   C   s(  | }t j|}d\}}}|||}t|ddd|dd}t|ddd|dd}|| |||}	|||}
t|j|j t|j	|j	 t|j
|j
 |
|	ksWJ t|ddd|dd	d
}t|ddd|dd	d
}|| |jrwJ || tdD ]}|| |jr nq|jsJ d S )Nr   r}   r;   r   F)rN   rf   re   rd   r?   
warm_startTr   ư>)rN   rf   re   rd   r?   r<  rb   r   )r   r    r!   rO   r
   rp   r  r   r  r  r  
converged_rR   )r   r?   r0   r*   r+   rN   r1   r   r  score1score2r2   r6   r6   r7   test_warm_startY  sl   

		




rA  )categoryc                  C   s|   t jd} t| }|j}|jd }dD ]'}t|d|| d}tdD ]}|| |j	r. nq"|j	s4J ||j
ks;J qd S )Nr   r   )r}   r;   r<   T)rN   r<  re   r?   r,  )r   r    r!   r9   rN   r1   r
   rR   rp   r>  n_iter_)r0   r   rN   r1   re   rt   r2   r6   r6   r7   )test_convergence_detected_with_warm_start  s&   


rD  c            
      C   s  d} t jd}t|dd}|j}|j|  }t|ddd|| d}d}tjt	|d |
| W d    n1 s9w   Y  t  td	t || W d    n1 sXw   Y  |
|}|| }t|| t|dd|| d
|}	|	
||
|ksJ d S )Nr   r      r   r}   r  r   r^   ignorer  )r   r    r!   r9   rN   r1   r
   rm   rn   r   r  warningscatch_warningssimplefilterr   rp   score_samplesr   r   )
rJ   r0   r   rN   r1   gmm1ru   	gmm_scoregmm_score_probagmm2r6   r6   r7   
test_score  sF   
	


rO  c                  C   s   d} t jd}t|dd}|j}|j|  }t|dd|| d}d}tjt	|d |
| W d    n1 s8w   Y  ||
|}|jd |jksOJ d S )	Nr   r   rE  r   r}   r  r   r^   )r   r    r!   r9   rN   r1   r
   rm   rn   r   rJ  rp   r   r*   )rJ   r0   r   rN   r1   rt   ru   gmm_score_samplesr6   r6   r7   test_score_samples  s&   
rQ  c            	   
   C   s   t jd} t| dd}|j}tD ]Q}|j| }t||ddd| dd}t j }t	
 / t	dt td	D ]}|}|||}||ksHJ |jrM nq6|jsSJ W d    n1 s]w   Y  qd S )
Nr   rE  r   Tr}   r   )rN   r/   rd   r<  re   r?   rb   rF  iX  )r   r    r!   r9   rN   rT   r1   r
   inftyrG  rH  rI  r   rR   rp   r  r>  )	r0   r   rN   rJ   r1   rt   current_log_likelihoodr2   prev_log_likelihoodr6   r6   r7   test_monotonic_likelihood  s8   
	
rU  c               
   C   s   t jd} d\}}t t |d |ft |d |ff}tD ]N}t|d|| d}t	 8 t
dt td}tjt|d || W d    n1 sRw   Y  |jdd	| W d    n1 sjw   Y  q!d S )
Nr   )r\   r   r;   )rN   rd   r/   r?   rF  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.r^   r=  rc   )r   r    r!   r)   r   r   rT   r
   rG  rH  rI  RuntimeWarningrq   rr   rm   rn   ro   rp   
set_params)r0   r*   r+   r1   rJ   rt   ru   r6   r6   r7   test_regularisation  s0   "
rX  c                  C   s   t jd} t| dd}|j}tD ]E}|j| }t||| dd}|| |dkr>t	|j
|jD ]\}}tt|| q0q|dkrMtt|j
|j qt|j
d|j  qd S )	Nr   rE  r   r   r   r   r   rC   )r   r    r!   r9   rN   rT   r1   r
   rp   r#   r  covariances_r   r   rF   )r0   r   rN   rJ   r1   rt   r   covarr6   r6   r7   test_property;  s(   

r[  c                     s  t jd} t| ddd}|j|j}}tD ]}|j| }t||| d}d}t	j
t|d |d W d    n1 s=w   Y  || d}t	j
t|d |d W d    n1 s`w   Y  d	}||\ t|D ]^}	|d
krt|j|	 t  |	k jdd qr|dkrt|jt  |	k jdd qr|dkrt|j|	 t t  |	k jdd qrt|j|	 t  |	k |j|	  dd qrt  fddt|D }
t|j|
dd  j||fksJ tddD ]}||\ } j||fks	J qqd S )Nr   rE  rj   )rW   rN   r   z+This GaussianMixture instance is not fittedr^   zInvalid value for 'n_samples'i N  r   r}   )decimalr   r   c                    s    g | ]}t  |k d qS )r   )r   r   r   X_sy_sr6   r7   rA     r   ztest_sample.<locals>.<listcomp>r,  )r   r    r!   r9   r+   rN   rT   r1   r
   rm   rn   r   samplerp   ro   rR   r   rY  r   r   r   varr  rQ   r   )r0   r   r+   rN   rJ   r1   rt   ru   r*   rM   means_ssample_sizer2   r6   r]  r7   test_sampleS  sZ   

"rd  c                  C   st   t dD ]3} ttj| ddd}|j}|jd }t|dd| d|}t|dd| d|}|j	|j	ks7J qd S )N   r<   r}   )r*   rW   r   )rN   rf   re   r?   r\   )
rR   r9   r   r    r!   rN   r1   r
   rp   lower_bound_)r?   r   rN   r1   rK  rN  r6   r6   r7   	test_init  s$   
rg  c               
   C   s   t jd} d}| j|dfd}t g dg dg dg dg d	g d
g}t g d}g d}tdd||| t||dd}|| |jrJJ dD ]	}t	||sUJ qLd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   rk   rj   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@)?rj  ?rk  ggfffff?g?r   r}   )r/   rd   r   r~   r?   rN   r   re   )r  r  rY  precisions_cholesky_rC  rf  N)
r   r    r!   uniformrQ   r
   r   rp   r>  hasattr)rndr*   r1   r   r   r~   rt   attrr6   r6   r7   )test_gaussian_mixture_setting_best_params  s>   

	

rq  rh   )r    random_from_dataz	k-means++kmeansc           
      C   st   t j|}t|dd}|j}|jd }t|| |dd}|| |j}t	j
|ddD ]\}}	t ||	r7J q+d S )Nr   r   r   r   )rN   rh   r?   re   r;   )r)r   r    r!   r9   rN   r1   r
   rp   r  	itertoolscombinationsallclose)
rh   global_random_seedr0   r   rN   r1   rt   r-   i_meanj_meanr6   r6   r7   test_init_means_not_duplicated  s   

r{  c                 C   s   t j|}t|dd}|j}|jd }t|| |d}|| |jj	||j	d fks-J t 
|jdd|jks;J t 
|j|jddksIJ |jsNJ d S )Nr   r   r   )rN   rh   r?   r}   r   r   )r   r    r!   r9   rN   r1   r
   rp   r  r   allr   r   r>  )rh   rx  r0   r   rN   r1   rt   r6   r6   r7   test_means_for_all_inits  s   

r}  c                  C   sd   t jd} t| dd}|j}|jd }ddgddgg}t|| |ddd	}|| t|j	| d S )
Nr   r   r   r   r   rk      r=  )rN   r?   r   rb   re   )
r   r    r!   r9   rN   r1   r
   rp   r   r  )r0   r   rN   r1   r   rt   r6   r6   r7   test_max_iter_zero  s   

r  c                  C   s  d} t jd}|| dt ddg }t ddgddgg}t || d|}t ||g}d	\}}}}	t |jd |f}
t	|d
|	d
|j}d
|
t |jd |f< t||
||d\}}}d
| }t|||||	d
|}t||||	d
|}|j|jksJ 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   r}   )
n_clustersrf   r?   )rd   r/   )rN   r/   rd   r   r?   )rN   r/   rd   r?   N)r   r    r!   r   rQ   r   r)   r   r   r   rp   labels_aranger   r
   rC  r   rl  )r*   r0   shifted_gaussianCstretched_gaussianr1   rN   r/   rd   r?   r   labelr2   rG   r   gm_with_initgm_without_initr6   r6   r7   *test_gaussian_mixture_precisions_init_diag"  sL   r  c                  C   sD   t jd} | jt dt ddd}tdd}||  dS )za
    Non-regression test for #23032 ensuring 1-component GM works on only a
    few samples.
    r   r;   rj   rh  r}   r]   N)	r   r    r!   r%   r   identityr
   rp   r`  )r0   r1   r   r6   r6   r7   -test_gaussian_mixture_single_component_stable_  s   
r  )Vru  rq   r8  r   rG  rm   numpyr   scipyr   r   sklearn.clusterr   sklearn.covariancer   sklearn.datasetsr   ior   sklearn.metrics.clusterr	   sklearn.mixturer
   r   r   r   r   r   r   r   r   sklearn.exceptionsr   r   sklearn.utils.extmathr   sklearn.utils._testingr   r   r   r   r   rT   r8   r9   r|   r   r   r   r   r   r   r   r   r   r   r   r   markfilterwarningsparametrizer   r   r  r  r  r$  r+  r0  r6  r;  rA  rD  rO  rQ  rU  rX  r[  rd  rg  rq  r{  r}  r  r  r  r6   r6   r6   r7   <module>   s   $	5I09*0
		5
C
*" 9
E

=