o
    \iB                     @   s.  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m	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZmZ g d	Zd
dgZdd Zdd Zdd Zdd Zdd Zdd Zdd Zejddd Zdd Z ejddd  Z!d!d" Z"ejd#ej#d$g d%d&d' Z$d(d) Z%d*d+ Z&dS ),    N)gammaln)NotFittedError)adjusted_rand_score)BayesianGaussianMixture)_log_dirichlet_norm_log_wishart_norm)
RandomData)assert_almost_equalassert_array_equalfulltieddiag	sphericaldirichlet_processdirichlet_distributionc                  C   sH   t jd} | d}tt |t t| }t|}t|| d S )Nr      )nprandomRandomStaterandr   sumr   r	   )rngweight_concentrationexpected_normpredected_norm r   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pytest_log_dirichlet_norm   s   
r   c            
      C   s   t jd} d\}}t | |d }|t tdd|  }t d}tt	||D ]/\}\}}||d| t d   t 
td|t d|d d t jf   d   ||< q,t|||}	t||	 d S )Nr   )   r         ?r   r   g      ?g       @)r   r   r   absr   lograngeempty	enumeratezipr   r   arangenewaxisitemr   r	   )
r   n_components
n_featuresdegrees_of_freedomlog_det_precisions_cholr   kdegrees_of_freedom_k	log_det_kr   r   r   r   test_log_wishart_norm$   s0   


r1   c                  C   sn   t jd} d\}}}| ||}|  }t|| d|}t||j t|| d|}td| |j d S )Nr   )
   r   r   )weight_concentration_priorrandom_stater*   r4   r    )r   r   r   r   r   fitr	   weight_concentration_prior_)r   	n_samplesr*   r+   Xr3   bgmmr   r   r   2test_bayesian_mixture_weights_prior_initialisation@   s   
r;   c                  C   s   t jd} d\}}}| ||}|  }t|| d|}t||j t| d|}td|j | |}t||| d|}t||j t|| d|}t|j	dd|j d S )	Nr   )r2      r   )mean_precision_priorr4   r4   r    )r*   
mean_priorr4   r5   axis)
r   r   r   r   r   r6   r	   mean_precision_prior_mean_prior_mean)r   r8   r*   r+   r9   r=   r:   r?   r   r   r   /test_bayesian_mixture_mean_prior_initialisationQ   s*   

rE   c               
   C   s  t jd} d\}}| ||}|d }t|| d}d|d  d|dd	}tjt|d
 || W d    n1 s=w   Y  |  | d }t|| d|}t	||j
 |}t|| d|}t	||j
 t j|jddd t j|jddd t t t j|jddd |  d}	t| d}dD ]}
|
|_|	|
 |_|| t	|	|
 |j qt t |jt t |jt j|dddt j|ddd d}tdd}dD ]}
|
|_|| t	||
 |j qd S )Nr   r2   r   r    )degrees_of_freedom_priorr4   z@The parameter 'degrees_of_freedom_prior' should be greater than    z
, but got z.3f.match)biasr2   r   r<   r   r>   )rA   ddof)r   r   r   r   r   pytestraises
ValueErrorr6   r	   degrees_of_freedom_prior_covTr   
atleast_2dcovariance_typecovariance_priorcovariance_prior_varrD   )r   r8   r+   r9   bad_degrees_of_freedom_prior_r:   msgrG    degrees_of_freedom_prior_defaultrV   cov_typecovariance_prior_defaultr   r   r   5test_bayesian_mixture_precisions_prior_initialisationm   sl   




r^   c                  C   sl   t jd} d\}}t| d}| ||}d}tjt|d || W d    d S 1 s/w   Y  d S )Nr   rF   r>   z8This BayesianGaussianMixture instance is not fitted yet.rJ   )	r   r   r   r   r   rN   rO   rP   score)r   r8   r+   r:   r9   rZ   r   r   r   %test_bayesian_mixture_check_is_fitted   s   
"r`   c            	   	   C   s   t jd} d\}}| ||}tdd| d|}|jt |j }t||j	 tt |j	d tdd| d|}|jd |jd  }|jd | }|jd | t 
dt |d d	 f }|t | }t||j	 tt |j	d d S )
Nr   rF   r   r<   )weight_concentration_prior_typer*   r4   r    r   rH   )r   r   r   r   r   r6   weight_concentration_r   r	   weights_hstackcumprod)	r   r8   r+   r9   r:   expected_weightsdpgmmweight_dirichlet_sumtmpr   r   r   test_bayesian_mixture_weights   s@   rk   z-ignore::sklearn.exceptions.ConvergenceWarningc            
      C   s   t jd} t| dd}|j}tD ]<}tD ]7}|j| }t|d| |dd| dd}t j	 }t
d	D ]}|}	||j}||	ksAJ |jrF nq1|jsLJ qqd S )
Nr      scaler   TrH   MbP?)ra   r*   rU   
warm_startmax_iterr4   toliX  )r   r   r   r   r*   
PRIOR_TYPECOVARIANCE_TYPEr9   r   infr#   r6   lower_bound_
converged_)
r   	rand_datar*   
prior_type
covar_typer9   r:   current_lower_bound_prev_lower_boundr   r   r   test_monotonic_likelihood   s4   
	r~   c            
   	   C   s  t jd} t| dd}|jd }|j}tD ]}t|d| ddddd}|| |	|t jd |j
|jd d t jt jf  }t|d| d	dddd}|| |	|t jd |j
|j }t|t |d t|d| d
dddd}|| |	|t jd |j
|jd d t jf  }t|t dd |D  t|d| ddddd}|| |	|t jd |j
|j }	t|	t |d qd S )Nr      rm   r   r   rH   Hz>)ra   r*   rU   rq   r4   rr   r   r   c                 S   s   g | ]}t |qS r   )r   r   ).0rR   r   r   r   
<listcomp>4  s    z+test_compare_covar_type.<locals>.<listcomp>r   )r   r   r   r   r9   r*   rs   r   _check_parameters_initialize_parameterscovariances_degrees_of_freedom_r(   r	   rD   array)
r   rx   r9   r*   ry   r:   full_covariancestied_covariancediag_covariancesspherical_covariancesr   r   r   test_compare_covar_type   sp   




r   c                  C   s   t jd} t| dd}d|j d}}t|d| ddd}tD ]\}||_||j	|  |dkrIt
|j|jD ]\}}tt ||t | q7q|d	kr\tt |j|jt | q|d
krot|j|j t ||f qt|j|j t | qd S )Nr   r   rm   r   d   ro   r*   rq   r4   rr   	reg_covarr   r   r   )r   r   r   r   r*   r   rt   rU   r6   r9   r&   r   precisions_r	   doteyeones)r   rx   r*   r+   r:   rz   covar	precisionr   r   r   test_check_covariance_precisionG  s4   

r   c               
   C   s   t jd} t| dd}d|j }tD ]?}tD ]:}|j| }t||ddddd	|}t||ddddd	|d }t
|j|jd  t
|j|j t
|j|j qqd S )Nr   r   rm   r   ro   )ra   r*   rq   r4   rr   r   )r   r   r   r   r*   rs   rt   r9   r   r6   r	   means_rd   r   )r   rx   r*   ry   rz   r9   bgmm1bgmm2r   r   r   test_invariant_translationk  s>   


	r   zignore:.*did not converge.*zseed, max_iter, tol))r   r   r   )rH   r   皙?)r<   ,  r   )   r   r   c                 C   s   t j| }t|ddd}d|j }tD ]*}t||||dd}||_t	|}|j
| }	||	|	}
||	}t|
| qd S )N2   r   )r8   rn   r   r   r   )r   r   r   r   r*   rt   r   rU   copydeepcopyr9   r6   predictfit_predictr
   )seedrq   rr   r   rx   r*   rz   r   r   r9   Y_pred1Y_pred2r   r   r   !test_bayesian_mixture_fit_predict  s$   



r   c                  C   sD   t jddd} tdddd}|| }|| }t|| d S )Nr   r   r   r2   )r*   n_initr4   )r   r   r   randnr   r   r   r
   )r9   gmy_pred1y_pred2r   r   r   (test_bayesian_mixture_fit_predict_n_init  s
   

r   c            
   
   C   s   t jd} t| }tD ]W}tD ]R}|j| }|j}t|j	| ||d}d}t
jt|d || W d    n1 s<w   Y  || ||}||jdd}	t||	 t||dksbJ qqd S )Nr   )r*   r4   ra   rU   z{This BayesianGaussianMixture instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.rJ   rH   r@   gffffff?)r   r   r   r   rs   rt   r9   Yr   r*   rN   rO   r   r   r6   predict_probaargmaxr
   r   )
r   rx   ry   rz   r9   r   r:   rZ   Y_predY_pred_probar   r   r   +test_bayesian_mixture_predict_predict_proba  s0   
	


r   )'r   numpyr   rN   scipy.specialr   sklearn.exceptionsr   sklearn.metrics.clusterr   sklearn.mixturer   !sklearn.mixture._bayesian_mixturer   r   +sklearn.mixture.tests.test_gaussian_mixturer   sklearn.utils._testingr	   r
   rt   rs   r   r1   r;   rE   r^   r`   rk   markfilterwarningsr~   r   r   r   parametrizer   r   r   r   r   r   r   <module>   sB   ?
%
 
H
#
 		