o
    \ie                     @   s
  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	Z
d dlZd dlmZmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+ g dZ,e
j-fddZ.G dd dZ/dd Z0dd Z1dd Z2dd Z3dd Z4dd Z5dd  Z6d!d" Z7d#d$ Z8d%d& Z9d'd( Z:d)d* Z;d+d, Z<ej=>d-ej=?d.g d/d0d1 Z@d2d3 ZAd4d5 ZBd6d7 ZCd8d9 ZDd:d; ZEd<d= ZFd>d? ZGd@dA ZHdBdC ZIej=>d-ej=?dDdEdFdG ZJej=>dHdIdJ ZKdKdL ZLdMdN ZMdOdP ZNdQdR ZOej=?dSe,dTdU ZPdVdW ZQej=>dHdXdY ZRdZd[ ZSej=?d\g d]d^d_ ZTej=?d\g d]d`da ZUdbdc ZVddde ZWe
j-fdfdgZXdhdi ZYej=?dje,dkdl ZZdmdn Z[dodp Z\dS )q    N)StringIO)Mock)linalgstats)KMeans)EmpiricalCovariance)make_spd_matrix)ConvergenceWarningNotFittedError)adjusted_rand_score)GaussianMixture)_compute_log_det_cholesky_compute_precision_cholesky#_estimate_gaussian_covariances_diag#_estimate_gaussian_covariances_full(_estimate_gaussian_covariances_spherical#_estimate_gaussian_covariances_tied_estimate_gaussian_parameters)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)fast_logdetfulltieddiag	sphericalc                 C   sz  t jd}g }|dkr7tt|||d D ] \}	\}
}}||||t | tt 	|
|  
| q|dkrdtt|||d D ]\}	\}
}}|||t |tt 	|
|  
| qE|dkrtt||D ]\}	\}
}||||d tt 	|
|  
| qo|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roundastyper   vstack)	n_samples
n_featuresweightsmeans
precisionscovariance_typedtyperngX_wmc r7   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/mixture/tests/test_gaussian_mixture.pygenerate_data+   sF   """
r9   c                   @   s"   e Zd ZddddejfddZdS )
RandomData      2   c                    sB  _ |__| _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   r(   ).0r3   )r0   r+   r1   r7   r8   
<listcomp>h   s    z'RandomData.__init__.<locals>.<listcomp>r   r   r   r         ?r   r   r   c                 S      g | ]}t |qS r7   r   inv)rA   
covariancer7   r7   r8   rB   s       r   c                    s(   g | ]}t jjj| d qS r0   )r9   r,   r-   covariances)rA   
covar_type)r0   r+   r*   selfr7   r8   rB   z   s    
c                    s.   g | ]\}}t jtt |  |td qS rJ   )r   r   r&   r'   )rA   kr4   )r*   r7   r8   rB      s    )r*   n_componentsr+   randr(   r,   sumr-   r   r   arrayrangerL   r   rG   r.   dictr"   COVARIANCE_TYPEr2   hstackr!   Y)rN   r1   r*   rP   r+   scaler0   r7   )r0   r+   r*   r1   rN   r8   __init__S   sF   		


zRandomData.__init__N)__name__
__module____qualname__r   float64rZ   r7   r7   r7   r8   r:   R   s    r:   c            
   	   C   s   t jd} | dd}d\}}}}}d\}}t|||||||d|}	|	j|ks,J |	j|ks3J |	j|ks:J |	j	|ksAJ |	j
|ksHJ |	j|ksOJ |	j|ksVJ d S )Nr   
   r<   )r<   g-C6?      皙?)r   r   )rP   toln_initmax_iter	reg_covarr/   init_params)r   r   r    rQ   r   fitrP   r/   rc   rf   re   rd   rg   )
r1   r2   rP   rc   rd   re   rf   r/   rg   gmmr7   r7   r8    test_gaussian_mixture_attributes   s,   
rj   c            
      C   s  t jd} t| }|j}|jd }t|d}| |d}||_t	
d| d|j }tjt|d || W d    n1 sCw   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   rP      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_initrP   )r   r   r    r:   rP   r2   r   rQ   ro   reescapeshapepytestraises
ValueErrorrh   minmaxrR   r,   r   )
r1   	rand_datarP   r2   gweights_bad_shapemsgweights_bad_rangeweights_bad_normr,   r7   r7   r8   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   rk   rl   z/The parameter 'means' should have the shape of rm   )r   r   r    r:   rP   r+   r2   r   rQ   
means_initrs   rt   ru   rh   r-   r   )	r1   rx   rP   r+   r2   ry   means_bad_shaper{   r-   r7   r7   r8   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   rl   r   g      )r   r   r   zsymmetric, positive-definitepositiverP   r/   r@   zThe parameter 'z$ precision' should have the shape ofrm   'z precision' should be )r   r   r    r:   rP   r+   onesr%   r   rV   r2   r   precisions_initrs   rt   ru   rh   r.   r   )r1   rx   rP   r+   precisions_bad_shapeprecisions_not_posprecisions_not_positivenot_positive_errorsrM   r2   ry   r{   r7   r7   r8   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<   rl   T)assume_centered	frobeniusnormspectralr   c                 S      g | ]	}t ||jqS r7   r   dotTrA   precr7   r7   r8   rB   @      z)test_suffstat_sk_full.<locals>.<listcomp>c                 S   rE   r7   rF   rA   covr7   r7   r8   rB   A  rI   axis)rl   Fc                 S   r   r7   r   r   r7   r7   r8   rB   P  r   c                 S   rE   r7   rF   r   r7   r7   r8   rB   Q  rI   )r   r   r    rQ   sqrtrS   zerosr   r   rh   r   
error_normr   r   r   meanreshape)r1   r*   r+   r2   respX_respnkxkcovars_predecovprecs_chol_pred
precs_pred	precs_estr7   r7   r8   test_suffstat_sk_full+  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<   rl   r   r   r   r   r   )r   r   r    rQ   rR   newaxisr   r   r   r   r   covariance_r   r   r   r   rG   r   )r1   r*   r+   rP   r   r2   r   r   covars_pred_fullcovars_pred_tiedr   r   r   r   r7   r7   r8   test_suffstat_sk_tiedU  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   rl   r   r   r   r   r   rD   r<   )r   r   r    rQ   rR   r   r   r   r   r   r   r"   r   r   r   r   r   )r1   r*   r+   rP   r   r2   r   r   r   covars_pred_diagr   cov_fullcov_diagr   r7   r7   r8   test_suffstat_sk_diags  s"   
 

r   c                 C   s   t jd}d\}}|||| }||  }t j|df| d}t j|g| d}| }t||||d}t 	|
 j|
 ||  }	t||	 |j| ksQJ t|d}
t|d|
d   |
j| ksfJ d S )Nr   r   rl   rK   r   rD   r<   )r   r   r    rQ   r(   r   r   rS   r   r   flattenr   r   r0   r   )global_dtyper1   r*   r+   r2   r   r   r   covars_pred_sphericalcovars_pred_spherical2r   r7   r7   r8   #test_gaussian_suffstat_sk_spherical  s    

r   c                 C   s   d}t tjd| d}tD ]Y}|j| }|dkr$tdd |D }n!|dkr.t|}n|dkr=td	d |D }n|d
krE|| }|j	| ksLJ t
t||||d}t|dt|  |j	| ksgJ qd S )Nr<   r   rK   r   c                 S   rE   r7   )r   detr   r7   r7   r8   rB     rI   z1test_compute_log_det_cholesky.<locals>.<listcomp>r   r   c                 S   rE   r7   )r   prodr   r7   r7   r8   rB     rI   r   r+   g      )r:   r   r   r    rV   rL   rS   r   r   r0   r   r   r   log)r   r+   rx   rM   rH   predected_detexpected_detr7   r7   r8   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 )Nrl   r   )
r   emptylenr   r!   r"   r   r   logpdfrR   )r2   r-   covarsr   stdsir   stdr7   r7   r8   _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 )rD   )r   r   r   rA   xr7   r7   r8   rB          z;test_gaussian_mixture_log_probabilities.<locals>.<listcomp>r   rD   r   c                 S   s   g | ]}|qS r7   r7   r   r7   r7   r8   rB     s    r   r   rl   c                    s   g | ]}|g  qS r7   r7   rA   rO   r   r7   r8   rB     rI   r   )!sklearn.mixture._gaussian_mixturer   r   r   r    r:   r+   rP   r-   rQ   r   rS   r   r   r   r   )r   r1   rx   r*   rP   r-   covars_diagr2   log_prob_naive
precs_fulllog_probprecs_chol_diagcovars_tied
precs_tiedcovars_sphericalprecs_sphericalr7   r   r8   '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      rY   rP   r@   ro   r   r   r/   rl   r   )r   r   r    r:   r*   r+   rP   rQ   rV   r,   r-   r.   r   rh   predict_probar   rR   r   r   ro   r   r   )r1   rx   r*   r+   rP   r2   rM   r,   r-   r.   ry   r   r7   r7   r8   ,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.rm   rl   r   ffffff?)r   r   r    r:   rV   r2   rX   r   rP   r,   r-   r.   rs   rt   r
   predictrh   r   argmaxr   r   )	r1   rx   rM   r2   rX   ry   r{   Y_predY_pred_probar7   r7   r8   +test_gaussian_mixture_predict_predict_proba  s0   



r   zignore:.*did not converge.*zseed, max_iter, tol))r   r<   Hz>)rl   r<   rb   )r`   ,  r   )   r   rb   c                 C   s   t j| }t||d}tD ]T}|j| }|j}t|j||j	|j
|j| |||d}	t|	}
|
||}|	|}t|| t||dksJJ |	jj|ksRJ |	jj|ksZJ |	jj|ksbJ qd S )NrK   )rP   r@   ro   r   r   r/   re   rc   r   )r   r   r    r:   rV   r2   rX   r   rP   r,   r-   r.   copydeepcopyrh   r   fit_predictr   r   means_r0   weights_precisions_)seedre   rc   r   r1   rx   rM   r2   rX   ry   fY_pred1Y_pred2r7   r7   r8   !test_gaussian_mixture_fit_predict2  s0   



r   c                  C   sD   t jddd} tdddd}|| }|| }t|| d S )Nr     r   )rP   rd   r@   )r   r   r    randnr   r   r   r   )r2   gmy_pred1y_pred2r7   r7   r8   (test_gaussian_mixture_fit_predict_n_initX  s
   

r   c                    s  t jd}t|| d}|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rj|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 q|jj| ksJ |jj| ksJ |jj| ksJ qd S )Nr   rK      rP   rd   rf   r@   r/   rb   g{Gz?)rtolatolr   r   r   c                       g | ]	}t  | qS r7   r   r%   rA   r6   r   r7   r8   rB     r   z-test_gaussian_mixture_fit.<locals>.<listcomp>c                    r   r7   r  r  r   r7   r8   rB     r   r   c                 S   rE   r7   r   r   rA   dr7   r7   r8   rB     rI   c                 S   rE   r7   r  r  r7   r7   r8   rB     rI   rl   r<   )axis1axis2g333333?)r   )r   r   r    r:   r+   rP   rV   r2   r   rh   r   sortr   r,   r   argsortr-   r   r.   rS   tracer"   r   r   r   r0   covariances_)r   r1   rx   rP   rM   r2   ry   arg_idx1arg_idx2	prec_pred	prec_testrO   hr   r7   r   r8   test_gaussian_mixture_fita  s\   


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_   rl   r   )r   r   r    r:   rP   rV   r2   r   rT   rh   r#   scorerS   r   rv   )
r1   rx   rP   rd   rM   r2   ry   llr3   g_bestr7   r7   r8   %test_gaussian_mixture_fit_best_params  s8   



r  c               	   C   s   t jd} t| dd}|j}d}tD ]/}|j| }t|d|d| |d}d}tj	t
|d || W d    n1 s=w   Y  qd S )Nr   rl   r   rP   rd   re   rf   r@   r/   zBest performing initialization did not converge. Try different init parameters, or increase max_iter, tol, or check for degenerate data.rm   )r   r   r    r:   rP   rV   r2   r   rs   warnsr	   rh   )r1   rx   rP   re   rM   r2   ry   r{   r7   r7   r8   -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   rP   r/   r@   rd   )r   r   r    r   rV   r   rh   r  )r1   r*   r+   rP   r2   cv_typetrain1train2r7   r7   r8   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           )   rC   r   )r   r   r    r   rV   r   rh   _n_parameters)r1   r*   r+   rP   r2   n_paramsr  ry   r7   r7   r8   "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   rl   rl   r   r   )r   r   r   )r   r   r    r   r   rh   bicr   )r1   r*   n_dimrP   r2   bic_fullr/   r'  r7   r7   r8   test_bic_1d_1component  s(   
	r*  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=   r`   r<   r>   rl   )biasr<   r;   )rP   r/   r@   re   )r   r   r    r   r   r   r   r   pirV   r   rh   r#  r   aicr'  )r1   r*   r+   rP   r2   sghr  ry   r-  r'  boundr7   r7   r8   test_gaussian_mixture_aic_bic  s(   
*
r0  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   rl   )rP   rd   rf   r@   r/   verboser<   )r   r   r    r:   rP   rV   r2   r   sysstdoutr   rh   )r1   rx   rP   rM   r2   ry   r  
old_stdoutr7   r7   r8   test_gaussian_mixture_verbose)  s8   

r5  r   )r   rl   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   rl   r<   r   F)rP   rd   re   rf   r@   
warm_startTr   ư>)rP   rd   re   rf   r@   r6  rc   r   )r   r   r    rQ   r   rh   r  r   r   r   r   
converged_rT   )r   r@   r1   r*   r+   rP   r2   ry   r  score1score2r3   r7   r7   r8   test_warm_startH  sl   

		




r;  z-ignore::sklearn.exceptions.ConvergenceWarningc                  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   )rl   r<   r=   T)rP   r6  re   r@   r&  )r   r   r    r:   rP   r2   r   rT   rh   r8  n_iter_)r1   rx   rP   r2   re   ri   r3   r7   r7   r8   )test_convergence_detected_with_warm_start  s&   


r=  c                 C   sN  d}t jd}t|d| d}|j}|j| }|j| ksJ t|ddd||d}d}tj	t
|d || W d    n1 sAw   Y  t  td	t || W d    n1 s`w   Y  |jj| ksmJ |jj| ksuJ ||}|| }	t||	 |	j| ksJ t|dd||d
|}
|
|||ksJ d S )Nr   r      rY   r0   rl   r  r   rm   ignorer   )r   r   r    r:   rP   r2   r0   r   rs   rt   r
   r  warningscatch_warningssimplefilterr	   rh   r   r  score_samplesr   r   )r   rM   r1   rx   rP   r2   gmm1r{   	gmm_scoregmm_score_probagmm2r7   r7   r8   
test_score  sN   
	


rI  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   r>  r   rl   r   r   rm   )r   r   r    r:   rP   r2   r   rs   rt   r
   rD  rh   rr   r*   )rM   r1   rx   rP   r2   ri   r{   gmm_score_samplesr7   r7   r8   test_score_samples  s&   
rK  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   r>  r   Trl   r   )rP   r/   rf   r6  re   r@   rc   r@  iX  )r   r   r    r:   rP   rV   r2   r   infrA  rB  rC  r	   rT   rh   r  r8  )	r1   rx   rP   rM   r2   ri   current_log_likelihoodr3   prev_log_likelihoodr7   r7   r8   test_monotonic_likelihood  s8   
	
rO  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<   )rP   rf   r/   r@   r@  zFitting the mixture model failed because some components have ill-defined empirical covariance (for instance caused by singleton or collapsed samples). Try to decrease the number of components, increase reg_covar, or scale the input data.rm   r7  )rf   )r   r   r    r)   r   r   rV   r   rA  rB  rC  RuntimeWarningrp   rq   rs   rt   ru   rh   
set_params)r1   r*   r+   r2   rM   ri   r{   r7   r7   r8   test_regularisation  s0   "
rR  rM   c           	      C   s   t jd}t|d|d}|j}|j|  }t|| |dd}|| |jj	|ks*J |j
j	|ks2J | dkrLt|j|j
D ]\}}tt|| q=d S | dkr\tt|j|j
 d S t|jd|j
  d S )	Nr   r>  r?  r   r  r   r   rD   )r   r   r    r:   rP   r2   r   rh   r   r0   r  r"   r   r   rG   )	rM   r   r1   rx   rP   r2   ri   r   covarr7   r7   r8   ,test_fitted_precision_covariance_concistency0  s(   

rT  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   r>  r`   )rY   rP   r   z+This GaussianMixture instance is not fittedrm   zInvalid value for 'n_samples'i N  r   rl   )decimalr   r   c                    s    g | ]}t  |k d qS )r   )r   r   r   X_sy_sr7   r8   rB   v  r   ztest_sample.<locals>.<listcomp>r&  )r   r   r    r:   r+   rP   rV   r2   r   rs   rt   r
   samplerh   ru   rT   r   r  r   r   r   varr   rS   rr   )r1   rx   r+   rP   rM   r2   ri   r{   r*   rO   means_ssample_sizer3   r7   rV  r8   test_sampleI  sZ   

"r]  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=   rl   )r*   rY   r   )rP   rd   re   r@   r_   )
rT   r:   r   r   r    rP   r2   r   rh   lower_bound_)r@   rx   rP   r2   rE  rH  r7   r7   r8   	test_init  s$   
r`  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   ra   r`   size)gu?g?gn,?)gqz=|?gdUX'n?g.ba˼?)g8?g?g׏'?)g{?g
 ?g(}I^?)gLh?gtM?g@.?)gY8?gj4}_?g$%?)g(.Ag_S.Ag]IN@gŕ&i@g/@gYa2i]U@)?rc  ?rd  ggfffff?g?r   rl   )r/   rf   r   ro   r@   rP   r   re   )r   r   r  precisions_cholesky_r<  r_  lower_bounds_N)
r   r   r    uniformrS   r   r   rh   r8  hasattr)rndr*   r2   r   r   ro   ri   attrr7   r7   r8   )test_gaussian_mixture_setting_best_params  s>   

	

	rk  rg   )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   )rP   rg   r@   re   r<   )r)r   r   r    r:   rP   r2   r   rh   r   	itertoolscombinationsallclose)
rg   global_random_seedr1   rx   rP   r2   ri   r-   i_meanj_meanr7   r7   r8   test_init_means_not_duplicated  s   

ru  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sJJ |jsOJ |jj|ksWJ |jj|ks_J |jj|ksgJ d S )Nr   r?  r   )rP   rg   r@   rl   r   r   )r   r   r    r:   rP   r2   r   rh   r   rr   allrv   rw   r8  r0   r  r   )rg   rr  r   r1   rx   rP   r2   ri   r7   r7   r8   test_means_for_all_inits  s   


rw  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   ra      r7  )rP   r@   r   rc   re   )
r   r   r    r:   rP   r2   r   rh   r   r   )r1   rx   rP   r2   r   ri   r7   r7   r8   test_max_iter_zero  s   

ry  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\}}}|j| kspJ d
| }t|||	||
d|}|jj| ksJ |jj| ksJ |jj| ksJ t|||	|
d|}|jj| ksJ |jj| ksJ |jj| ksJ |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   r7  r   rl   )
n_clustersrd   r@   )rf   r/   )rP   r/   rf   r   r@   )rP   r/   rf   r@   N)r   r   r    r   rS   r   r)   r(   r   rr   r   rh   labels_aranger   r0   r   r   r  re  r<  r   )r   r*   r1   shifted_gaussianCstretched_gaussianr2   rP   r/   rf   r@   r   labelr3   rH   r   gm_with_initgm_without_initr7   r7   r8   *test_gaussian_mixture_precisions_init_diag  sZ   r  c                 C   sZ   t j| }|||f|}|||f|}||jddddt jf  }||fS )z/Randomly generate samples and responsibilities.rl   r   N)r   r   r    random_sampler(   rR   r   )r   r*   r+   rP   r0   rsr2   r   r7   r7   r8   _generate_data`  s
   r  c                 C   sZ   d}t | |||\}}}t||}|j\}}	t|	|d}
||||f}|
| |
j|
jfS )zfCalculate precision matrix of X and its Cholesky decomposition
    for the given covariance type.
    r7  )rP   r/   )r   r   rr   r   _set_parametersr   re  )r2   r   r/   rf   r,   r-   rL   precisions_choleskyr3   rP   ri   paramsr7   r7   r8   _calculate_precisionsi  s   



r  r/   c           	      C   sn   t |ddd|d\}}t||| \}}|j|ksJ |j|ks!J t| |d}||| |j}t|| dS )zNon-regression test for #26415.r&  r`   r   )r   r*   r+   rP   r0   )r/   r   N)r  r  r0   r   _initializere  r   )	r/   rr  r   r2   r   r   desired_precisions_choleskyri   actual_precisions_choleskyr7   r7   r8   %test_gaussian_mixture_precisions_init~  s$   
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<   r`   ra  rl   rk   N)	r   r   r    r$   r   identityr   rh   rY  )r1   r2   r   r7   r7   r8   -test_gaussian_mixture_single_component_stable  s   
r  c                 C   sr   t td}| tjjd| tj|}t	|}t
|j|j|j|jd |d}||jd  |j|jks7J dS )zWhen all init parameters are provided, the Gaussian parameters
    are not estimated.

    Non-regression test for gh-26015.
    )side_effectr   r   )rP   ro   r   r   r@   N)r   r   setattrsklearnmixture_gaussian_mixturer   r   r    r:   r   rP   r,   r-   r.   rh   r2   
call_countr<  )monkeypatchrr  mockr1   rx   r   r7   r7   r8   Dtest_gaussian_mixture_all_init_does_not_estimate_gaussian_parameters  s   


r  )]r   ro  rp   r2  rA  ior   unittest.mockr   numpyr   rs   scipyr   r   r  sklearn.clusterr   sklearn.covariancer   sklearn.datasetsr   sklearn.exceptionsr	   r
   sklearn.metrics.clusterr   sklearn.mixturer   r   r   r   r   r   r   r   r   sklearn.utils._testingr   r   r   r   sklearn.utils.extmathr   rV   r^   r9   r:   rj   r~   r   r   r   r   r   r   r   r   r   r   r   markfilterwarningsparametrizer   r   r  r  r  r  r%  r*  r0  r5  r;  r=  rI  rK  rO  rR  rT  r]  r`  rk  ru  rw  ry  r  r  r  r  r  r  r7   r7   r7   r8   <module>   s   $	
'>09*0
		9

C
0" 

9
F

D	
