ó
‡ˆ\c        
   @   sá  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	 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 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 „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ e	 j% j& d d5 ƒ d „  ƒ Z' d „  Z( d „  Z) d „  Z* d  „  Z+ d! „  Z, e e	 j% j& d d6 ƒ d" „  ƒ ƒ Z- e d# „  ƒ Z. d$ „  Z/ e	 j% j& d d7 ƒ d% „  ƒ Z0 e	 j% j& d d8 ƒ d& „  ƒ Z1 d' „  Z2 d( „  Z3 d) „  Z4 d* „  Z5 d+ „  Z6 d, „  Z7 d- „  Z8 e	 j% j& d. e9 d/ d0 d0 f e9 d0 d0 d0 f e: d0 d1 d0 f e: d/ d1 d1 f e: d2 d1 d/ f g ƒ d3 „  ƒ Z; d4 „  Z< d S(9   iÿÿÿÿN(   t
   block_diag(   t
   csr_matrix(   t   psi(   t   LatentDirichletAllocation(   t   _dirichlet_expectation_1dt   _dirichlet_expectation_2d(   t   assert_allclose(   t   assert_equal(   t   assert_array_almost_equal(   t   assert_almost_equal(   t   assert_greater_equal(   t   assert_raises_regexp(   t!   if_safe_multiprocessing_with_blas(   t   assert_warns(   t   NotFittedError(   t   xrange(   t   StringIOc          C   sP   d }  t  j d |  d t  j ƒ} | g |  } t | Œ  } t | ƒ } |  | f S(   Ni   t   dtype(   i   i   (   t   npt   fullt   intR    R   (   t   n_componentst   blockt   blockst   X(    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   _build_sparse_mtx   s    c       	   C   s~   t  ƒ  \ }  } d |  } t d |  d | d | d d ƒ } t d |  d d ƒ } | j | ƒ } | j | ƒ } t | | ƒ d  S(   Ng      ð?R   t   doc_topic_priort   topic_word_priort   random_statei    (   R   R   t   fit_transformR	   (   R   R   t   priort   lda_1t   lda_2t   topic_distr_1t   topic_distr_2(    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_default_prior_params'   s    
	c       	   C   s·   t  j j d ƒ }  t ƒ  \ } } t d | d d d d d |  ƒ } | j | ƒ d d d g } xR | j D]G } t | j ƒ  d d  d  d … ƒ } t	 t
 | ƒ ƒ | k sh t ‚ qh Wd  S(   Ni    R   t   evaluate_everyi   t   learning_methodt   batchR   i   i   i   i   i   i   i   iýÿÿÿiÿÿÿÿ(   i    i   i   (   i   i   i   (   i   i   i   (   R   t   randomt   RandomStateR   R   t   fitt   components_t   sett   argsortt   tuplet   sortedt   AssertionError(   t   rngR   R   t   ldat   correct_idx_grpst	   componentt   top_idx(    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_fit_batch6   s    	#c          C   s½   t  j j d ƒ }  t ƒ  \ } } t d | d d d d d d d	 |  ƒ } | j | ƒ d d d g } xR | j D]G } t | j ƒ  d d  d  d … ƒ } t	 t
 | ƒ ƒ | k sn t ‚ qn Wd  S(   Ni    R   t   learning_offsetg      $@R$   i   R%   t   onlineR   i   i   i   i   i   i   i   iýÿÿÿiÿÿÿÿ(   i    i   i   (   i   i   i   (   i   i   i   (   R   R'   R(   R   R   R)   R*   R+   R,   R-   R.   R/   (   R0   R   R   R1   R2   R3   R4   (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_fit_onlineF   s    #c       	   C   sÎ   t  j j d ƒ }  t ƒ  \ } } t d | d d d d d |  ƒ } x! t d ƒ D] } | j | ƒ qO Wd d d g } xR | j D]G } t | j	 ƒ  d d  d  d … ƒ } t
 t | ƒ ƒ | k s t ‚ q Wd  S(   Ni    R   R6   g      $@t   total_samplesid   R   i   i   i   i   i   i   i   i   iýÿÿÿiÿÿÿÿ(   i    i   i   (   i   i   i   (   i   i   i   (   R   R'   R(   R   R   R   t   partial_fitR*   R+   R,   R-   R.   R/   (   R0   R   R   R1   t   iR2   t   cR4   (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_partial_fitV   s    	#c          C   s·   t  j j d ƒ }  t ƒ  \ } } t d | d d d |  ƒ } | j | j ƒ  ƒ d d d g } xR | j D]G } t | j	 ƒ  d d  d  d … ƒ } t
 t | ƒ ƒ | k sh t ‚ qh Wd  S(   Ni    R   R%   R&   R   i   i   i   i   i   i   i   i   iýÿÿÿiÿÿÿÿ(   i    i   i   (   i   i   i   (   i   i   i   (   R   R'   R(   R   R   R)   t   toarrayR*   R+   R,   R-   R.   R/   (   R0   R   R   R1   R2   R3   R4   (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_dense_inputg   s    #c          C   s™   t  j j d ƒ }  |  j d d d ƒ} d } t d | d |  ƒ } | j | ƒ } | d	 k j ƒ  si t ‚ t t  j	 | d
 d ƒt  j
 | j d ƒ ƒ d  S(   Ni    i   t   sizei   i
   i   R   R   g        t   axisi   (   i   i
   (   R   R'   R(   t   randintR   R   t   anyR/   R   t   sumt   onest   shape(   R0   R   R   R1   t   X_trans(    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_transformv   s    	t   methodR7   R&   c         C   st   t  j j d ƒ } | j d d d ƒ} t d d d |  d	 | ƒ } | j | ƒ } | j | ƒ } t | | d
 ƒ d  S(   Ni    i
   R@   i2   i   R   i   R%   R   i   (   i2   i   (   R   R'   R(   RB   R   R   t	   transformR   (   RI   R0   R   R1   t   X_fitRG   (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_fit_transform„   s    	c       	   C   s¾   t  j j d ƒ }  |  j d d ƒ } |  j d d ƒ } t  j j d d d | f ƒ} t  j j d d d | d f ƒ} t d | d	 d
 d d d |  ƒ } | j | ƒ t t d | j | ƒ d  S(   Ni    i   i   i
   i   R@   i   R   R6   g      @R9   i   R   s   ^The provided data has(   R   R'   R(   RB   R   R:   R   t
   ValueError(   R0   R   t   n_colt   X_1t   X_2R1   (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt!   test_lda_partial_fit_dim_mismatch‘   s    "		c          C   s˜   t  j d ƒ }  d t d d ƒ f d t d d ƒ f d t d d ƒ f d t d d	 ƒ f f } x4 | D], \ } } d
 | } t t | | j |  ƒ qd Wd  S(   Ni   i
   R   i    R%   t   unknownR9   R6   iÿÿÿÿs   ^Invalid %r parameter(   i   i
   (   R   RE   R   R   RM   R)   (   R   t   invalid_modelst   paramt   modelt   regex(    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_invalid_params    s    
c          C   s;   t  j d d ƒ }  t ƒ  } d } t t | | j |  ƒ d  S(   Ni   i
   g      ð¿s   ^Negative values in data passed(   i   i
   (   R   R   R   R   RM   R)   (   R   R1   RV   (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_negative_input°   s    	c          C   sf   t  j j d ƒ }  |  j d d d ƒ} t ƒ  } d } t t | | j | ƒ t t | | j | ƒ d  S(   Ni    i   R@   i   i
   s   ^no 'components_' attribute(   i   i
   (	   R   R'   R(   RB   R   R   R   RJ   t
   perplexity(   R0   R   R1   RV   (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_no_component_error¸   s    	c          C   sŠ   t  j j d ƒ }  |  j d d d ƒ} |  j d d d ƒ} |  j d d ƒ } t d	 | d
 |  ƒ } | j | ƒ t t d | j | ƒ d  S(   Ni    i   R@   i   i
   i   i   i   R   R   s   ^The provided data has(   i   i
   (   i
   i   (   R   R'   R(   RB   R   R:   R   RM   (   R0   R   RP   R   R1   (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_transform_mismatchÂ   s    		c         C   s½   t  ƒ  \ } } t j j d ƒ } t d | d d d |  d d d | ƒ } | j | ƒ d d d g } xR | j D]G } t | j ƒ  d d  d  d … ƒ } t	 t
 | ƒ ƒ | k sn t ‚ qn Wd  S(   Ni    R   t   n_jobsi   R%   R$   i   R   i   i   i   i   i   i   iýÿÿÿiÿÿÿÿ(   i    i   i   (   i   i   i   (   i   i   i   (   R   R   R'   R(   R   R)   R*   R+   R,   R-   R.   R/   (   RI   R   R   R0   R1   R2   R<   R4   (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_multi_jobsÐ   s    #c          C   sÔ   t  j j d ƒ }  t ƒ  \ } } t d | d d d d d d d	 |  ƒ } x! t d ƒ D] } | j | ƒ qU Wd d d g } xR | j D]G } t | j	 ƒ  d d  d  d … ƒ } t
 t | ƒ ƒ | k s… t ‚ q… Wd  S(   Ni    R   R\   i   R6   g      @R9   i   R   i   i   i   i   i   i   i   iýÿÿÿiÿÿÿÿ(   i    i   i   (   i   i   i   (   i   i   i   (   R   R'   R(   R   R   t   rangeR:   R*   R+   R,   R-   R.   R/   (   R0   R   R   R1   R;   R2   R<   R4   (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_partial_fit_multi_jobsá   s    	#c       	   C   sö   t  j j d ƒ }  |  j d d ƒ } |  j d d ƒ } t  j j d d | d f ƒ} t d | d d	 d
 d d |  ƒ } | j | ƒ |  j d d | d | f ƒ} t t d | j | | ƒ |  j d d | | d f ƒ} t t d | j | | ƒ d  S(   Ni    i   i   i
   i   R@   R   R6   g      @R9   i   R   i   s   Number of sampless   Number of topics(	   R   R'   R(   RB   R   R)   R   RM   t   _perplexity_precomp_distr(   R0   R   t	   n_samplesR   R1   t   invalid_n_samplest   invalid_n_components(    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_preplexity_mismatchò   s    				c   	      C   sé   t  ƒ  \ } } t d | d d d |  d d d d ƒ } t d | d d	 d |  d d d d ƒ } | j | ƒ | j | d
 t ƒ} | j | ƒ | j | d
 t ƒ} t | | ƒ | j | d
 t ƒ} | j | d
 t ƒ} t | | ƒ d  S(   NR   t   max_iteri   R%   R9   id   R   i    i
   t   sub_sampling(   R   R   R)   RY   t   FalseR
   t   True(	   RI   R   R   R   R    t   perp_1t   perp_2t   perp_1_subsamplingt   perp_2_subsampling(    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_perplexity  s    c         C   s¦   t  ƒ  \ } } t d | d d d |  d d d d ƒ } t d | d d	 d |  d d d d ƒ } | j | ƒ | j | ƒ } | j | ƒ | j | ƒ } t | | ƒ d  S(
   NR   Re   i   R%   R9   id   R   i    i
   (   R   R   R   t   scoreR
   (   RI   R   R   R   R    t   score_1t   score_2(    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_score  s    c          C   sx   t  ƒ  \ }  } t d |  d d d d d d d d	 ƒ } | j | ƒ | j | ƒ } | j | j ƒ  ƒ } t | | ƒ d  S(
   NR   Re   i   R%   R&   R9   id   R   i    (   R   R   R)   RY   R>   R	   (   R   R   R1   Ri   Rj   (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_perplexity_input_format1  s    c          C   s   t  ƒ  \ }  } t d |  d d d d ƒ } | j | ƒ | j | d t ƒ} | j | ƒ } t j d | t j | j	 ƒ ƒ } t
 | | ƒ d  S(   NR   Re   i
   R   i    Rf   g      ð¿(   R   R   R)   RY   Rg   Rn   R   t   expRD   t   dataR	   (   R   R   R1   t   perplexity_1Rn   t   perplexity_2(    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_score_perplexity>  s    	#c          C   sl   t  ƒ  \ }  } t d |  d d d d d d d d ƒ } | j | ƒ | j } | j | ƒ } t | | ƒ d  S(	   NR   Re   i   R%   R&   R   i    R$   (   R   R   R)   t   bound_RY   R	   (   R   R   R1   t   perplexity1t   perplexity2(    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_fit_perplexityK  s    		c          C   s{   t  ƒ  \ }  } t d |  d d d d d d d d	 ƒ } | j | ƒ } d  } t t | j | | ƒ t t | j | | ƒ d  S(
   NR   Re   i   R%   R&   R9   id   R   i    (   R   R   R   t   NoneR   t   DeprecationWarningRY   (   R   R   R1   t   distr1t   distr2(    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt    test_doc_topic_distr_deprecation]  s    c          C   sw   t  j d	 ƒ }  xa |  t |  ƒ g D]M } t d d ƒ j | ƒ } t | j j d d ƒ t  j | j j	 d ƒ ƒ q" Wd S(
   s+   Test LDA on empty document (all-zero rows).i   i   Re   iî  RA   i    i   N(   i   i   (
   R   t   zerosR   R   R)   R	   R*   RD   RE   RF   (   t   ZR   R1   (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_empty_docsj  s
    c          C   sÐ   t  j d d d ƒ }  t  j |  ƒ } t |  d | ƒ t | t  j t |  ƒ t t  j |  ƒ ƒ ƒ d d ƒ|  j d d ƒ }  t t	 |  ƒ t |  ƒ t t  j |  d d	 ƒd
 d
 … t  j
 f ƒ d d d d ƒd
 S(   s9   Test Cython version of Dirichlet expectation calculation.iœÿÿÿi
   i'  i    t   atolg¬Ò¶OÉƒý;id   RA   i   Nt   rtolg•dyáý¥=gßA:ÜÅ)>(   R   t   logspacet
   empty_likeR   R   Rs   R   RD   t   reshapeR   t   newaxis(   t   xt   expectation(    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_dirichlet_expectations  s    .8c         C   s¾   t  ƒ  \ } } t d | d d d d d |  d | d d	 ƒ } t ƒ  } t j | } t _ z | j | ƒ Wd  | t _ X| j ƒ  j d
 ƒ }	 | j ƒ  j d ƒ }
 t | |	 ƒ t | |
 ƒ d  S(   NR   Re   i   R%   R&   t   verboseR$   R   i    s   
RY   (	   R   R   R   t   syst   stdoutR)   t   getvaluet   countR   (   R   R$   t   expected_linest   expected_perplexitiesR   R   R1   t   outt   old_outt   n_linest   n_perplexity(    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   check_verbosity  s    		
s;   verbose,evaluate_every,expected_lines,expected_perplexitiesi   i    i   i   c         C   s   t  |  | | | ƒ d  S(   N(   R˜   (   R   R$   R’   R“   (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_verbosity–  s    	c          C   s;   t  ƒ  \ }  } t d d d d ƒ } t t | j | ƒ d  S(   Nt   n_topicsi
   R%   R&   (   R   R   R   R}   R)   (   R   R   R1   (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   test_lda_n_topics_deprecation£  s    (   R7   R&   (   R7   R&   (   R7   R&   (   R7   R&   (=   RŽ   t   numpyR   t   scipy.linalgR    t   scipy.sparseR   t   scipy.specialR   t   pytestt   sklearn.decompositionR   t!   sklearn.decomposition._online_ldaR   R   t   sklearn.utils.testingR   R   R   R	   R
   R   R   R   t   sklearn.exceptionsR   t   sklearn.externals.six.movesR   t   sklearn.externals.sixR   R   R#   R5   R8   R=   R?   RH   t   markt   parametrizeRL   RQ   RW   RX   RZ   R[   R]   R_   Rd   Rm   Rq   Rr   Rw   R{   R€   Rƒ   RŒ   R˜   Rg   Rh   R™   R›   (    (    (    sJ   lib/python2.7/site-packages/sklearn/decomposition/tests/test_online_lda.pyt   <module>   sh   											
	!										!