U
    -eB                     @   sD  d dl Z d dlZd dl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 d dlmZ d dlmZmZmZ d	d
ddg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eddd Zd d! Z eedd"d# Z!eedd$d% Z"ej#$d&ej#%d'd(d)d*d+gd,d- Z&d.d/ Z'd0d1 Z(dS )2    N)gammaln)ConvergenceWarningNotFittedError)adjusted_rand_score)BayesianGaussianMixture)_log_dirichlet_norm_log_wishart_norm)
RandomData)assert_almost_equalassert_array_equalignore_warnings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
   )rngZweight_concentrationexpected_normpredected_norm r   l/var/www/html/Darija-Ai-Train/env/lib/python3.8/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   ||< qXt|||}	t||	 d S )Nr   )   r         ?r   r   g      ?g       @)r   r   r   absr   lograngeempty	enumeratezipr   r   Zarangenewaxisitemr   r
   )
r   n_components
n_featuresZdegrees_of_freedomZlog_det_precisions_cholr   kZdegrees_of_freedom_kZ	log_det_kr   r   r   r   test_log_wishart_norm%   s2    

  r,   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)   r/   r    )r   r   r   r   r   fitr
   Zweight_concentration_prior_)r   	n_samplesr)   r*   Xr.   bgmmr   r   r   2test_bayesian_mixture_weights_prior_initialisationA   s    
 r5   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   )r-      r   )mean_precision_priorr/   r/   r    )r)   
mean_priorr/   r0   axis)
r   r   r   r   r   r1   r
   Zmean_precision_prior_Zmean_prior_mean)r   r2   r)   r*   r3   r7   r4   r9   r   r   r   /test_bayesian_mixture_mean_prior_initialisationR   s0    
 
  r=   c               
   C   s  t jd} d\}}| ||}|d }t|| d}d|d  d|dd	}tjt|d
 || W 5 Q R X |  | 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 ]0}
|
|_|	|
 |_|| t	|	|
 |j qt 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   r-   r   r    )degrees_of_freedom_priorr/   z@The parameter 'degrees_of_freedom_prior' should be greater than    z
, but got z.3f.match)Zbiasr-   r   r6   )r   r   r   r   r8   )r;   Zddof)r   r   r   r   r   pytestraises
ValueErrorr1   r
   Zdegrees_of_freedom_prior_covTr   Z
atleast_2dcovariance_typecovariance_priorZcovariance_prior_varr<   )r   r2   r*   r3   Zbad_degrees_of_freedom_prior_r4   msgr?   Z degrees_of_freedom_prior_defaultrJ   Zcov_typeZcovariance_prior_defaultr   r   r   5test_bayesian_mixture_precisions_prior_initialisationn   sh        




rM   c               	   C   sV   t jd} d\}}t| d}| ||}d}tjt|d || W 5 Q R X d S )Nr   r>   r8   z8This BayesianGaussianMixture instance is not fitted yet.rB   )	r   r   r   r   r   rD   rE   rF   Zscore)r   r2   r*   r4   r3   rL   r   r   r   %test_bayesian_mixture_check_is_fitted   s    
rN   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   r>   r   r6   )weight_concentration_prior_typer)   r/   r    r   r@   )r   r   r   r   r   r1   Zweight_concentration_r   r
   weights_ZhstackZcumprod)	r   r2   r*   r3   r4   Zexpected_weightsZdpgmmZweight_dirichlet_sumtmpr   r   r   test_bayesian_mixture_weights   s@    rS   )categoryc            
      C   s   t jd} t| dd}|j}tD ]x}tD ]n}|j| }t|d| |dd| dd}t j	 }t
d	D ]*}|}	||j}||	kst|jrb qqb|js*tq*q"d S )
Nr      scaler   Tr@   MbP?)rO   r)   rI   Z
warm_startmax_iterr/   toliX  )r   r   r   r	   r)   
PRIOR_TYPECOVARIANCE_TYPEr3   r   infr#   r1   Zlower_bound_AssertionErrorZ
converged_)
r   	rand_datar)   
prior_type
covar_typer3   r4   Zcurrent_lower_bound_Zprev_lower_boundr   r   r   test_monotonic_likelihood   s.    
	rc   c            
   	   C   s  t jd} t| dd}|jd }|j}tD ]j}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      rV   r   r   r@   Hz>)rO   r)   rI   rY   r/   rZ   r   r   c                 S   s   g | ]}t |qS r   )r   r   ).0rG   r   r   r   
<listcomp>5  s     z+test_compare_covar_type.<locals>.<listcomp>r   )r   r   r   r	   r3   r)   r[   r   Z_check_parametersZ_initialize_parameterscovariances_Zdegrees_of_freedom_r'   r
   r<   array)
r   r_   r3   r)   r`   r4   Zfull_covariancesZtied_covarianceZdiag_covariancesZspherical_covariancesr   r   r   test_compare_covar_type   sp    




 
rj   c                  C   s   t jd} t| dd}d|j d }}t|d| ddd}tD ]}||_||j	|  |dkrt
|j|jD ] \}}tt ||t | qnq>|d	krtt |j|jt | q>|d
krt|j|j t ||f q>t|j|j t | q>d S )Nr   rd   rV   r   d   rX   r)   rY   r/   rZ   	reg_covarr   r   r   )r   r   r   r	   r)   r   r\   rI   r1   r3   r&   rh   Zprecisions_r
   doteyeZones)r   r_   r)   r*   r4   ra   Zcovar	precisionr   r   r   test_check_covariance_precisionH  s<         

 rq   c               
   C   s   t jd} t| dd}d|j }tD ]~}tD ]t}|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   rk   rV   r   rX   )rO   r)   rY   r/   rZ   rm   )r   r   r   r	   r)   r[   r\   r3   r   r1   r
   Zmeans_rQ   rh   )r   r_   r)   r`   ra   r3   bgmm1bgmm2r   r   r   test_invariant_translationl  s:    

	rt   zignore:.*did not converge.*zseed, max_iter, tol)r   r   re   )r@   r   皙?)r6   ,  re   )   rv   ru   c                 C   s   t j| }t|ddd}d|j }tD ]T}t||||dd}||_t	|}|j
| }	||	|	}
||	}t|
| q(d S )N2   rd   )r2   rW   r   r   rl   )r   r   r   r	   r)   r\   r   rI   copydeepcopyr3   r1   predictfit_predictr   )seedrY   rZ   r   r_   r)   ra   rr   rs   r3   ZY_pred1Z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   rx   r   r-   )r)   Zn_initr/   )r   r   r   Zrandnr   r|   r{   r   )r3   ZgmZy_pred1Zy_pred2r   r   r   (test_bayesian_mixture_fit_predict_n_init  s
    

r   c            
      C   s   t jd} t| }tD ]}tD ]}|j| }|j}t|j	| ||d}d}t
jt|d || W 5 Q R X || ||}||jdd}	t||	 t||dks tq qd S )Nr   )r)   r/   rO   rI   z{This BayesianGaussianMixture instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.rB   r@   r:   gffffff?)r   r   r   r	   r[   r\   r3   Yr   r)   rD   rE   r   r{   r1   Zpredict_probaZargmaxr   r   r^   )
r   r_   r`   ra   r3   r   r4   rL   ZY_predZY_pred_probar   r   r   +test_bayesian_mixture_predict_predict_proba  s*    
	


r   ))ry   numpyr   rD   Zscipy.specialr   Zsklearn.exceptionsr   r   Zsklearn.metrics.clusterr   Zsklearn.mixturer   Z!sklearn.mixture._bayesian_mixturer   r   Z+sklearn.mixture.tests.test_gaussian_mixturer	   Zsklearn.utils._testingr
   r   r   r\   r[   r   r,   r5   r=   rM   rN   rS   rc   rj   rq   rt   markfilterwarningsZparametrizer~   r   r   r   r   r   r   <module>   sJ   ?%
 H
#
 
		