ó
‡ˆ\c        	   @   sé  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 d  d l m Z m Z d  d l m Z m Z d d d d g Z d d g Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" e d e ƒ d „  ƒ Z# d „  Z$ e d e ƒ d „  ƒ Z% e d e ƒ d  „  ƒ Z& e j' j( d! ƒ e j' j) d" d- d. d/ d0 g ƒ d+ „  ƒ ƒ Z* d, „  Z+ d S(1   iÿÿÿÿN(   t   gammaln(   t   assert_raise_message(   t   assert_almost_equal(   t   assert_array_equal(   t   adjusted_rand_score(   t   _log_dirichlet_norm(   t   _log_wishart_norm(   t   BayesianGaussianMixture(   t
   RandomData(   t   ConvergenceWarningt   NotFittedError(   t   assert_greater_equalt   ignore_warningst   fullt   tiedt   diagt	   sphericalt   dirichlet_processt   dirichlet_distributionc          C   sf   t  j j d ƒ }  |  j d ƒ } t t  j | ƒ ƒ t  j t | ƒ ƒ } t | ƒ } t | | ƒ d  S(   Ni    i   (   t   npt   randomt   RandomStatet   randR    t   sumR   R   (   t   rngt   weight_concentrationt   expected_normt   predected_norm(    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt   test_log_dirichlet_norm   s    c    
   	   C   s  t  j j d ƒ }  d \ } } t  j |  j | ƒ ƒ d } | t  j t d d | ƒ ƒ } t  j d ƒ } xŠ t t	 | | ƒ ƒ D]s \ } \ } } | | d | t  j d ƒ t  j
 t d | t  j d | ƒ d  d  … t  j f ƒ d ƒ | | <q Wt | | | ƒ }	 t | |	 ƒ d  S(   Ni    i   i   g      ð?g      à?g       @(   i   i   (   R   R   R   t   absR   t   logt   ranget   emptyt	   enumeratet   zipR   R    t   aranget   newaxisR   R   (
   R   t   n_componentst
   n_featurest   degrees_of_freedomt   log_det_precisions_cholR   t   kt   degrees_of_freedom_kt	   log_det_kR   (    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt   test_log_wishart_norm)   s     ":c          C   si   t  j j d ƒ }  d \ } } |  j | | ƒ } d } t d | d |  ƒ } t t d | | j | ƒ d  S(	   Ni    i
   i   t   bad_covariance_typet   covariance_typet   random_statesl   Invalid value for 'covariance_type': %s 'covariance_type' should be in ['spherical', 'tied', 'diag', 'full'](   i
   i   (   R   R   R   R   R   R   t
   ValueErrort   fit(   R   t	   n_samplesR&   t   XR.   t   bgmm(    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt%   test_bayesian_mixture_covariance_type=   s    	c          C   si   t  j j d ƒ }  d \ } } |  j | | ƒ } d } t d | d |  ƒ } t t d | | j | ƒ d  S(	   Ni    i
   i   t   bad_prior_typet   weight_concentration_prior_typeR/   s–   Invalid value for 'weight_concentration_prior_type': %s 'weight_concentration_prior_type' should be in ['dirichlet_process', 'dirichlet_distribution'](   i
   i   (   R   R   R   R   R   R   R0   R1   (   R   R2   R&   R3   R6   R4   (    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt5   test_bayesian_mixture_weight_concentration_prior_typeL   s    c          C   sØ   t  j j d ƒ }  d \ } } } |  j | | ƒ } d } t d | d d ƒ } t t d | | j | ƒ |  j ƒ  } t d | d |  ƒ j | ƒ } t | | j	 ƒ t d	 | d |  ƒ j | ƒ } t d
 | | j	 ƒ d  S(   Ni    i
   i   i   g        t   weight_concentration_priorR/   sS   The parameter 'weight_concentration_prior' should be greater than 0., but got %.3f.R%   g      ð?(   i
   i   i   (
   R   R   R   R   R   R   R0   R1   R   t   weight_concentration_prior_(   R   R2   R%   R&   R3   t   bad_weight_concentration_prior_R4   R9   (    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt2   test_bayesian_mixture_weights_prior_initialisation[   s(    	
c    	      C   s  t  j j d ƒ }  d \ } } } |  j | | ƒ } d } t d | d |  ƒ } t t d | | j | ƒ |  j ƒ  } t d | d |  ƒ j | ƒ } t | | j	 ƒ t d |  ƒ j | ƒ } t d	 | j	 ƒ |  j | d
 ƒ } t d | d | d |  ƒ } t t d | j | ƒ |  j | ƒ } t d | d | d |  ƒ j | ƒ } t | | j
 ƒ t d | d |  ƒ j | ƒ } t | j d d ƒ | j
 ƒ d  S(   Ni    i
   i   i   g        t   mean_precision_priorR/   sM   The parameter 'mean_precision_prior' should be greater than 0., but got %.3f.g      ð?i   R%   t
   mean_priors/   The parameter 'means' should have the shape of t   axis(   i
   i   i   (   R   R   R   R   R   R   R0   R1   R   t   mean_precision_prior_t   mean_prior_t   mean(	   R   R2   R%   R&   R3   t   bad_mean_precision_prior_R4   R=   R>   (    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt/   test_bayesian_mixture_mean_prior_initialisationy   sB    		c          C   sÙ  t  j j d ƒ }  d \ } } |  j | | ƒ } | d } t d | d |  ƒ } t t d | d | f | j | ƒ |  j ƒ  | d } t d | d |  ƒ j | ƒ } t | | j	 ƒ | } t d | d |  ƒ j | ƒ } t | | j	 ƒ i t  j
 | j d	 d ƒd d
 6t  j
 | j d	 d ƒd d 6t  j t  j t  j
 | j d	 d ƒƒ ƒ d d 6|  j ƒ  d 6} t d |  ƒ } xQ d
 d d d g D]= }	 |	 | _ | |	 | _ | j | ƒ t | |	 | j ƒ q‡Wd }
 t d d d |
 d |  ƒ } t t d |
 | j | ƒ i t  j t  j
 | j ƒ ƒ d
 6t  j t  j
 | j ƒ ƒ d 6t  j | d d d d ƒd 6t  j | d d d d ƒj ƒ  d 6} t d d ƒ } xD d
 d d d g D]0 }	 |	 | _ | j | ƒ t | |	 | j ƒ q¡Wd  S(   Ni    i
   i   g      ð?t   degrees_of_freedom_priorR/   sQ   The parameter 'degrees_of_freedom_prior' should be greater than %d, but got %.3f.i   t   biasR   i   R   i   R   R   g      ð¿R.   t   covariance_priorsS   The parameter 'spherical covariance_prior' should be greater than 0., but got %.3f.R?   t   ddof(   i
   i   (   R   R   R   R   R   R   R0   R1   R   t   degrees_of_freedom_prior_t   covt   TR   t
   atleast_2dR.   RG   t   covariance_prior_t   varRB   (   R   R2   R&   R3   t   bad_degrees_of_freedom_prior_R4   RE   t    degrees_of_freedom_prior_defaultRG   t   cov_typet   bad_covariance_prior_t   covariance_prior_default(    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt5   test_bayesian_mixture_precisions_prior_initialisationª   sl    
	

/	
	%	
c          C   sY   t  j j d ƒ }  d \ } } t d |  ƒ } |  j | | ƒ } t t d | j | ƒ d  S(   Ni    i
   i   R/   s8   This BayesianGaussianMixture instance is not fitted yet.(   i
   i   (   R   R   R   R   R   R   R0   t   score(   R   R2   R&   R4   R3   (    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt%   test_bayesian_mixture_check_is_fittedó   s    c    	      C   sT  t  j j d ƒ }  d \ } } |  j | | ƒ } t d d d d d |  ƒ j | ƒ } | j t  j | j ƒ } t | | j	 ƒ t t  j | j	 ƒ d	 ƒ t d d
 d d d |  ƒ j | ƒ } | j d | j d } | j d | } | j d | t  j
 d t  j | d  ƒ f ƒ } | t  j | ƒ :} t | | j	 ƒ t t  j | j	 ƒ d	 ƒ d  S(   Ni    i
   i   R7   R   R%   i   R/   g      ð?R   i   iÿÿÿÿ(   i
   i   (   R   R   R   R   R   R1   t   weight_concentration_R   R   t   weights_t   hstackt   cumprod(	   R   R2   R&   R3   R4   t   expected_weightst   dpgmmt   weight_dirichlet_sumt   tmp(    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt   test_bayesian_mixture_weightsÿ   s*    
#t   categoryc    
      C   sù   t  j j d ƒ }  t |  d d ƒ} | j } xÅ t D]½ } x´ t D]¬ } | j | } t d | d d | d | d t	 d	 d
 d |  d d ƒ } t  j
 } xF t d ƒ D]8 } | }	 | j | ƒ j } t | |	 ƒ | j r¢ Pq¢ q¢ W| j sA t ‚ qA Wq4 Wd  S(   Ni    t   scalei   R7   R%   i   R.   t
   warm_startt   max_iteri   R/   t   tolg-Cëâ6?iX  (   R   R   R   R   R%   t
   PRIOR_TYPEt   COVARIANCE_TYPER3   R   t   Truet   inftyR   R1   t   lower_bound_R   t
   converged_t   AssertionError(
   R   t	   rand_dataR%   t
   prior_typet
   covar_typeR3   R4   t   current_lower_boundt   _t   prev_lower_bound(    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt   test_monotonic_likelihood  s$    	
	c          C   s‡  t  j j d ƒ }  t |  d d ƒ} | j d } | j } xFt D]>} t d | d d | d d d	 d
 d d d d ƒ } | j | ƒ | j	 | t  j j d ƒ ƒ | j
 | j d  d  … t  j t  j f } t d | d d | d d d	 d
 d d d d ƒ } | j | ƒ | j	 | t  j j d ƒ ƒ | j
 | j } t | t  j | d ƒ ƒ t d | d d | d d d	 d
 d d d d ƒ } | j | ƒ | j	 | t  j j d ƒ ƒ | j
 | j d  d  … t  j f } t | t  j g  | D] }	 t  j |	 ƒ ^ qÝƒ ƒ t d | d d | d d d	 d
 d d d d ƒ } | j | ƒ | j	 | t  j j d ƒ ƒ | j
 | j }
 t |
 t  j | d
 ƒ ƒ qA Wd  S(   Ni    Ra   i   R   R7   R%   i   R.   Rc   i   R/   Rd   gH¯¼šò×z>R   R   R   (   R   R   R   R   R3   R%   Re   R   t   _check_initial_parameterst   _initialize_parameterst   covariances_t   degrees_of_freedom_R$   R   RB   t   arrayR   (   R   Rl   R3   R%   Rm   R4   t   full_covariancest   tied_covariancet   diag_covariancesRJ   t   spherical_covariances(    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt   test_compare_covar_type9  sR    	#	#c          C   st  t  j j d ƒ }  t |  d d ƒ} d | j d } } t d | d d d |  d	 d
 d d ƒ } xt D]} | | _ | j | j	 | ƒ | d k rà xÔ t
 | j | j ƒ D]. \ } } t t  j | | ƒ t  j | ƒ ƒ q« Wqf | d k rt t  j | j | j ƒ t  j | ƒ ƒ qf | d k rLt | j | j t  j | | f ƒ ƒ qf t | j | j t  j | ƒ ƒ qf Wd  S(   Ni    Ra   i   i   R%   Rc   id   R/   Rd   gü©ñÒMbP?t	   reg_covarR   R   R   (   R   R   R   R   R%   R   Rf   R.   R1   R3   R"   Ru   t   precisions_R   t   dott   eyet   ones(   R   Rl   R%   R&   R4   Rn   t   covart	   precision(    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt   test_check_covariance_precisions  s*    		"c          C   s  t  j j d ƒ }  t |  d d ƒ} d | j } xÙ t D]Ñ } xÈ t D]À } | j | } t d | d | d d d d d	 d
 d d ƒ j	 | ƒ } t d | d | d d d d d	 d
 d d ƒ j	 | d ƒ } t
 | j | j d ƒ t
 | j | j ƒ t
 | j | j ƒ qE Wq8 Wd  S(   Ni    Ra   id   i   R7   R%   Rc   R/   Rd   gü©ñÒMbP?R}   (   R   R   R   R   R%   Re   Rf   R3   R   R1   R   t   means_RX   Ru   (   R   Rl   R%   Rm   Rn   R3   t   bgmm1t   bgmm2(    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt   test_invariant_translation”  s"    s   ignore:.*did not converge.*s   seed, max_iter, toli    i   gH¯¼šò×z>i   gš™™™™™¹?i   i,  i   c         C   sÆ   t  j j |  ƒ } t | d d ƒ} d | j } xŽ t D]† } t d | d | d | d | d d	 ƒ } | | _ t j	 | ƒ } | j
 | }	 | j |	 ƒ j |	 ƒ }
 | j |	 ƒ } t |
 | ƒ q8 Wd  S(
   NRa   i   i   R%   Rc   R/   Rd   R}   i    (   R   R   R   R   R%   Rf   R   R.   t   copyt   deepcopyR3   R1   t   predictt   fit_predictR   (   t   seedRc   Rd   R   Rl   R%   Rn   R†   R‡   R3   t   Y_pred1t   Y_pred2(    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt!   test_bayesian_mixture_fit_predict­  s    	c    	      C   sî   t  j j d ƒ }  t |  ƒ } xÉ t D]Á } x¸ t D]° } | j | } | j } t d | j	 d |  d | d | ƒ } t
 t d | j | ƒ | j | ƒ | j | ƒ } | j | ƒ j d d ƒ } t | | ƒ t t | | ƒ d	 ƒ q2 Wq% Wd  S(
   Ni    R%   R/   R7   R.   sx   This BayesianGaussianMixture instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.R?   i   gffffffî?(   R   R   R   R   Re   Rf   R3   t   YR   R%   R   R
   R‹   R1   t   predict_probat   argmaxR   R   R   (	   R   Rl   Rm   Rn   R3   R‘   R4   t   Y_predt   Y_pred_proba(    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt+   test_bayesian_mixture_predict_predict_probaÆ  s&    			(   i    i   gH¯¼šò×z>(   i   i   gš™™™™™¹?(   i   i,  gH¯¼šò×z>(   i   i,  gš™™™™™¹?(,   R‰   t   numpyR   t   scipy.specialR    t   pytestt   sklearn.utils.testingR   R   R   t   sklearn.metrics.clusterR   t    sklearn.mixture.bayesian_mixtureR   R   t   sklearn.mixtureR   t+   sklearn.mixture.tests.test_gaussian_mixtureR   t   sklearn.exceptionsR	   R
   R   R   Rf   Re   R   R,   R5   R8   R<   RD   RT   RV   R_   Rr   R|   R„   Rˆ   t   markt   filterwarningst   parametrizeR   R–   (    (    (    sJ   lib/python2.7/site-packages/sklearn/mixture/tests/test_bayesian_mixture.pyt   <module>   sF   						1	I			:!