
    _nd6C                        d dl Z d dlZd dl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 d dlmZ d d	lmZ d d
lmZmZ d dlmZ g dZddgZd Zd Zd Zd Zd Zd Zd Z ee          d             Zd Z  ee          d             Z! ee          d             Z"ej#        $                    d          ej#        %                    dg d          d                         Z&d Z'd  Z(dS )!    N)gammaln)assert_almost_equal)assert_array_equal)adjusted_rand_score)_log_dirichlet_norm)_log_wishart_norm)BayesianGaussianMixture)
RandomData)ConvergenceWarningNotFittedError)ignore_warningsfulltieddiag	sphericaldirichlet_processdirichlet_distributionc                  2   t           j                            d          } |                     d          }t	          t          j        |                    t          j        t	          |                    z
  }t          |          }t          ||           d S )Nr      )nprandomRandomStaterandr   sumr   r   )rngweight_concentrationexpected_normpredected_norms       Klib/python3.11/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pytest_log_dirichlet_normr!      s    
)


"
"C88A;;BF#78899BF$%%= = M ))=>>N~66666    c                     t           j                            d          } d\  }}t          j        |                     |                    dz   }|t          j        t          dd|z                       z  }t          j        d          }t          t          ||                    D ]|\  }\  }}||d|z  t          j        d          z  z   z  t          j
        t          d|t          j        d|          d d t           j        f         z
  z            d          z    ||<   }t          |||          }	t          ||	           d S )Nr   )   r         ?r   r$   g      ?g       @)r   r   r   absr   lograngeempty	enumeratezipr   r   arangenewaxisr   r   )
r   n_components
n_featuresdegrees_of_freedomlog_det_precisions_cholr   kdegrees_of_freedom_k	log_det_kr   s
             r    test_log_wishart_normr5   )   sY   
)


"
"C#L* 6 677#=(26%1|;K2L2L+M+MMHQKKM09 7881 1 
 
,, ) !Ij0@26#;;0N$NOf+bi:.F.Fqqq"*}.UUW   	
a '3Z N ~66666r"   c                     t           j                            d          } d\  }}}|                     ||          }|                                 }t	          ||                               |          }t          ||j                   t	          ||                               |          }t          d|z  |j                   d S )Nr   )
   r$   r   )weight_concentration_priorrandom_stater.   r9   r%   )r   r   r   r   r	   fitr   weight_concentration_prior_)r   	n_samplesr.   r/   Xr8   bgmms          r    2test_bayesian_mixture_weights_prior_initialisationr@   E   s    
)


"
"C*2'I|ZJ''A "%"#=C  	c!ff 	 2D4TUUU #3OOOSSTUVVDl*D,LMMMMMr"   c                     t           j                            d          } d\  }}}|                     ||          }|                                 }t	          ||                               |          }t          ||j                   t	          |                               |          }t          d|j                   |                     |          }t	          |||                               |          }t          ||j                   t	          ||                               |          }t          |	                    d          |j                   d S )	Nr   )r7      r   )mean_precision_priorr9   r9   r%   )r.   
mean_priorr9   r:   axis)
r   r   r   r   r	   r;   r   mean_precision_prior_mean_prior_mean)r   r=   r.   r/   r>   rC   r?   rE   s           r    /test_bayesian_mixture_mean_prior_initialisationrK   V   sO   
)


"
"C*2'I|ZJ''A 88::"1  	c!ff 	 ,d.HIII #44488;;DT7888 *%%J"!js  	c!ff 	 
D$4555 #3OOOSSTUVVDA(899999r"   c            
         t           j                            d          } d\  }}|                     ||          }|dz
  }t	          ||           }d|dz
   d|dd	}t          j        t          |
          5  |                    |           d d d            n# 1 swxY w Y   |                                 |z   dz
  }t	          ||                               |          }t          ||j
                   |}t	          ||                               |          }t          ||j
                   t          j        |j        d          dz   t          j        |j        d          dz   t          j        t          j        t          j        |j        d                              dz   |                                 d}	t	          |           }dD ]F}
|
|_        |	|
         |_        |                    |           t          |	|
         |j                   Gt          j        t          j        |j                            t          j        t          j        |j                            t          j        |dd          t          j        |dd                                          d}t	          d          }dD ]9}
|
|_        |                    |           t          ||
         |j                   :d S )Nr   r7   r   r%   )degrees_of_freedom_priorr9   z@The parameter 'degrees_of_freedom_prior' should be greater than    z
, but got z.3f.match)biasr7   r$   rB   r   rD   )rG   ddof)r   r   r   r   r	   pytestraises
ValueErrorr;   r   degrees_of_freedom_prior_covTr   
atleast_2dcovariance_typecovariance_priorcovariance_prior_varrJ   )r   r=   r/   r>   bad_degrees_of_freedom_prior_r?   msgrN    degrees_of_freedom_prior_defaultr]   cov_typecovariance_prior_defaults               r    5test_bayesian_mixture_precisions_prior_initialisationre   r   s]   
)


"
"C!IzJ''A %/$4!"!>S  D	JM	J 	J%BI	J 	J 	J  
z	-	-	-                  #xxzzJ6<"!9  	c!ff 	 0$2PQQQ (2$"!APS  	c!ff 	 ($*H   qs###b(qs###a'bfQSq&9&9&9::;;a?XXZZ	  #444D9 P P' 0 :,X68NOOOO bfQSkk**bfQSkk**qqq)))VAAA...3355	    #222D9 X X'4X>@VWWWWX Xs   9BB"Bc                  0   t           j                            d          } d\  }}t          |           }|                     ||          }d}t          j        t          |          5  |                    |           d d d            d S # 1 swxY w Y   d S )Nr   rM   rD   z8This BayesianGaussianMixture instance is not fitted yet.rQ   )	r   r   r   r	   r   rU   rV   rW   score)r   r=   r/   r?   r>   ra   s         r    %test_bayesian_mixture_check_is_fittedrh      s    
)


"
"C!Iz #444DJ''A
DC	z	-	-	-  

1                 s   (BBBc            	      F   t           j                            d          } d\  }}|                     ||          }t	          dd|                               |          }|j        t          j        |j                  z  }t          ||j	                   t          t          j        |j	                  d           t	          dd|                               |          }|j        d         |j        d         z   }|j        d         |z  }|j        d         |z  t          j
        dt          j        |d d	                   f          z  }|t          j        |          z  }t          ||j	                   t          t          j        |j	                  d           d S )
Nr   rM   r   rB   )weight_concentration_prior_typer.   r9   r%   r   rO   )r   r   r   r   r	   r;   weight_concentration_r   r   weights_hstackcumprod)	r   r=   r/   r>   r?   expected_weightsdpgmmweight_dirichlet_sumtmps	            r    test_bayesian_mixture_weightsrt      s   
)


"
"C!IzJ''A #(@   
c!ff	 	 1BF4;U4V4VV($-888t}--s333 $(;   
c!ff	 
 	#A&)DQ)GG  
%a
(+?
?C#A&
	
)Q
3ss8,,-
.
.	/ 
 /000(%.999u~..44444r"   )categoryc                     t           j                            d          } t          | d          }|j        }t
          D ]}t          D ]}}|j        |         }t          |d|z  |dd| d          }t           j	         }t          d	          D ]/}|}	|                    |          j        }||	k    sJ |j        r n0|j        sJ ~d S )
Nr      scaler   TrO   MbP?)rj   r.   r\   
warm_startmax_iterr9   toliX  )r   r   r   r
   r.   
PRIOR_TYPECOVARIANCE_TYPEr>   r	   inftyr(   r;   lower_bound_
converged_)
r   	rand_datar.   
prior_type
covar_typer>   r?   current_lower_bound_prev_lower_bounds
             r    test_monotonic_likelihoodr      s    )


"
"C3b)))I)L  # #
) 	# 	#JJ'A*0:- *   D $&8) 3ZZ  #6 &*hhqkk&>#*.>>>>>? E?""""+	## #r"   c            	      h   t           j                            d          } t          | d          }|j        d         }|j        }t          D ]d}t          |d|z  dddd          }|                    |           |	                    |t           j                            d                     |j
        |j        d d t           j        t           j        f         z  }t          |d|z  d	ddd          }|                    |           |	                    |t           j                            d                     |j
        |j        z  }t          |t          j        |d                     t          |d|z  d
ddd          }|                    |           |	                    |t           j                            d                     |j
        |j        d d t           j        f         z  }t          |t          j        d |D                                  t          |d|z  dddd          }|                    |           |	                    |t           j                            d                     |j
        |j        z  }	t          |	t          j        |d                     fd S )Nr      rx   r   r   rO   Hz>)rj   r.   r\   r|   r9   r}   r   r   c                 6    g | ]}t          j        |          S  )r   r   ).0rY   s     r    
<listcomp>z+test_compare_covar_type.<locals>.<listcomp>9  s     'Q'Q'Q'Q'Q'Qr"   r   )r   r   r   r
   r>   r.   r~   r	   _check_parameters_initialize_parameterscovariances_degrees_of_freedom_r-   r   rJ   array)
r   r   r>   r.   r   r?   full_covariancestied_covariancediag_covariancesspherical_covariancess
             r    test_compare_covar_typer     s    )


"
"C3a(((IFA)L  =Q =Q
&,6\)"
 
 
 	q!!!##Ary'<'<Q'?'?@@@ 8BJ
9R SS 	
 ',6\)"
 
 
 	q!!!##Ary'<'<Q'?'?@@@+d.FFORW5Eq-I-IJJJ ',6\)"
 
 
 	q!!!##Ary'<'<Q'?'?@@@,t/G2:/VVbh'Q'Q@P'Q'Q'QRR	
 	
 	

 ',6\)'
 
 
 	q!!!##Ary'<'<Q'?'?@@@ $ 1D4L L127;KQ3O3OPPPP{=Q =Qr"   c                      t           j                            d          } t          | d          }d|j        z  d}}t          |d| dd          }t          D ]4}||_        |                    |j	        |                    |dk    rVt          |j        |j                  D ]:\  }}t          t          j        ||          t          j        |                     ;|d	k    r@t          t          j        |j        |j                  t          j        |                     |d
k    r3t          |j        |j        z  t          j        ||f                     t          |j        |j        z  t          j        |                     6d S )Nr   r   rx   r   d   rz   r.   r|   r9   r}   	reg_covarr   r   r   )r   r   r   r
   r.   r	   r   r\   r;   r>   r+   r   precisions_r   doteyeones)r   r   r.   r/   r?   r   covar	precisions           r    test_check_covariance_precisionr   L  s    )


"
"C3a(((I 9#991*L #!CctWX  D &  
)Z()))$'(94;K$L$L R R y#BF5)$<$<bfZ>P>PQQQQR6!!t($*:;;RVJ=O=O    6!!!D$44z233     !D$44bgl6K6K   ' r"   c            
         t           j                            d          } t          | d          }d|j        z  }t
          D ]}t          D ]}|j        |         }t          ||dddd          	                    |          }t          ||dddd          	                    |dz             }t          |j        |j        dz
             t          |j        |j                   t          |j        |j                   d S )Nr   r   rx   r   rz   )rj   r.   r|   r9   r}   r   )r   r   r   r
   r.   r~   r   r>   r	   r;   r   means_rm   r   )r   r   r.   r   r   r>   bgmm1bgmm2s           r    test_invariant_translationr   p  s2    )


"
"C3c***Iy--L  H H
) 	H 	HJJ'A+0:)   c!ff  ,0:)   c!c'll   elS.@AAA??? 2E4FGGGG+	HH Hr"   zignore:.*did not converge.*zseed, max_iter, tol))r   r   r   )rO   r   皙?)rB   ,  r   )   r   r   c                    t           j                            |           }t          |dd          }d|j        z  }t
          D ]}t          ||||d          }||_        t          j	        |          }|j
        |         }	|                    |	                              |	          }
|                    |	          }t          |
|           d S )N2   r   )r=   ry   r   r   r   )r   r   r   r
   r.   r   r	   r\   copydeepcopyr>   r;   predictfit_predictr   )seedr|   r}   r   r   r.   r   r   r   r>   Y_pred1Y_pred2s               r    !test_bayesian_mixture_fit_predictr     s     )


%
%C3"A666Iy--L% - -
'%
 
 
 !+e$$K
#))A,,&&q))##A&&7G,,,,- -r"   c                     t           j                            d                              dd          } t	          ddd          }|                    |           }|                    |           }t          ||           d S )Nr   r   r$   r7   )r.   n_initr9   )r   r   r   randnr	   r   r   r   )r>   gmy_pred1y_pred2s       r    (test_bayesian_mixture_fit_predict_n_initr     sq    
	a  &&r1--A	 a	K	K	KBnnQGjjmmGw(((((r"   c                  h   t           j                            d          } t          |           }t          D ]}t
          D ]}|j        |         }|j        }t          |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.   r9   rj   r\   z{This BayesianGaussianMixture instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.rQ   rO   rF   gffffff?)r   r   r   r
   r~   r   r>   Yr	   r.   rU   rV   r   r   r;   predict_probaargmaxr   r   )
r   r   r   r   r>   r   r?   ra   Y_predY_pred_probas
             r    +test_bayesian_mixture_predict_predict_probar     s|   
)


"
"C3I  : :
) 	: 	:JJ'AA*&3 0: *	  D 
 ~S999    Q                              HHQKKK\\!__F--a0077Q7??Lv|444&q&11T99999/	:: :s   
B,,B03B0))r   numpyr   scipy.specialr   rU   sklearn.utils._testingr   r   sklearn.metrics.clusterr   !sklearn.mixture._bayesian_mixturer   r   sklearn.mixturer	   +sklearn.mixture.tests.test_gaussian_mixturer
   sklearn.exceptionsr   r   r   r   r~   r!   r5   r@   rK   re   rh   rt   r   r   r   r   markfilterwarningsparametrizer   r   r   r   r"   r    <module>r      s        ! ! ! ! ! !  6 6 6 6 6 6 5 5 5 5 5 5 7 7 7 7 7 7 A A A A A A ? ? ? ? ? ? 3 3 3 3 3 3 B B B B B B A A A A A A A A 2 2 2 2 2 2 877!#;<
	7 	7 	77 7 78N N N": : :8<X <X <X~
 
 
"5 "5 "5J ,---# # .-#@EQ EQ EQP ,---    .- F ,---H H .-H@ 9::   - -  ;:-,) ) ): : : : :r"   