ó
‡ˆ\c           @   s¡  d  Z  d d l Z d d l j Z d d l Z d d l m Z m	 Z	 d d l
 m Z d d l m Z m Z m Z m Z m Z m Z d! Z e \ Z Z e d ƒ Z e j d	 d
 e j e ƒ ƒ j e ƒ Z e j e j e d ƒ d e j ƒZ d e j e j ƒ e j (e j  Z! d „  Z" d „  Z# e j$ j% d d" ƒ d „  ƒ Z& e j$ j% d d# ƒ d „  ƒ Z' e j$ j% d d$ ƒ d „  ƒ Z( d „  Z) d „  Z* d „  Z+ d  „  Z, d S(%   s   Test truncated SVD transformer.iÿÿÿÿN(   t   TruncatedSVDt   PCA(   t   check_random_state(   t   assert_array_almost_equalt   assert_equalt   assert_raisest   assert_greatert   assert_array_lesst   assert_allclosei<   i7   i*   iœÿÿÿi   i    t   dtypei   c          C   sß   t  d d d ƒ}  t  d d d d d ƒ} |  j t ƒ d  d  … d  d … f } | j t ƒ d  d  … d  d … f } t | | d d	 ƒt j |  j ƒ } t j | j ƒ } t | d
  | d
  ƒ t | d
 | d
 d d ƒd  S(   Ni   t	   algorithmt   arpackt
   randomizedt   random_statei*   i   t   decimali   i	   i   (   R    t   fit_transformt   XR   t   npt   abst   components_(   t   svd_at   svd_rt   Xat   Xrt   comp_at   comp_r(    (    sM   lib/python2.7/site-packages/sklearn/decomposition/tests/test_truncated_svd.pyt   test_algorithms   s    %%c          C   sS   xL d D]D }  t  |  ƒ j t ƒ } t | j |  ƒ t | j j |  t f ƒ q Wd  S(   Ni
   i   i)   (   i
   i   i)   (   R    t   fitR   R   t   n_componentsR   t   shapet
   n_features(   R   t   tsvd(    (    sM   lib/python2.7/site-packages/sklearn/decomposition/tests/test_truncated_svd.pyt   test_attributes)   s    R
   R   R   c         C   sG   x@ t  t  d f D]. } t d | d |  ƒ } t t | j t ƒ q Wd  S(   Ni   R   R
   (   R   R    R   t
   ValueErrorR   R   (   R
   R   R   (    (    sM   lib/python2.7/site-packages/sklearn/decomposition/tests/test_truncated_svd.pyt   test_too_many_components0   s    t   fmtt   arrayt   csrt   csct   coot   lilc         C   s…   |  d k r t  n t t d |  ƒ ƒ  } t d d ƒ } | j | ƒ } t | j t d f ƒ | j | ƒ } t | j t d f ƒ d  S(   Nt   denset   toR   i   (	   t   Xdenset   getattrR   R    R   R   R   t	   n_samplest	   transform(   R#   t   XfmtR   t   Xtrans(    (    sM   lib/python2.7/site-packages/sklearn/decomposition/tests/test_truncated_svd.pyt   test_sparse_formats7   s    (t   algoc         C   sP   t  d d d d d |  ƒ } | j t ƒ } | j | ƒ } t | t d d ƒd  S(   NR   i4   R   i*   R
   R   i   (   R    R   R   t   inverse_transformR   R+   (   R2   R   t   Xtt   Xinv(    (    sM   lib/python2.7/site-packages/sklearn/decomposition/tests/test_truncated_svd.pyt   test_inverse_transformA   s    c          C   sM   t  j t j ƒ }  t d d ƒ } | j |  ƒ } t | j t | j	 f ƒ d  S(   NR   i   (
   R   t   astypeR   t   int64R    R   R   R   R-   R   (   t   XintR   R0   (    (    sM   lib/python2.7/site-packages/sklearn/decomposition/tests/test_truncated_svd.pyt   test_integersK   s    c       	   C   s?  t  d d d ƒ}  t  d d d d d ƒ} t  d d d ƒ} t  d d d d d ƒ} |  j t ƒ } | j t ƒ } | j t ƒ } | j t ƒ } t  d d d ƒ} t  d d d d d ƒ}	 t  d d d ƒ}
 t  d d d d d ƒ} | j t j ƒ  ƒ } |	 j t j ƒ  ƒ } |
 j t j ƒ  ƒ } | j t j ƒ  ƒ } |  | | | | |	 |
 | f } |  | f | | f | | f | | f | | f |	 | f |
 | f | | f f } |  | f | | f | |
 f |	 | f f } |  | f | |
 f | |	 f | | f f } x1 | D]) \ } } t | j | j d  d d	 ƒqÿWx3 | D]+ \ } } t | j j ƒ  | j j ƒ  ƒ q3Wx | D] } t d
 | j ƒ qiWx$ | D] } t | j j ƒ  d ƒ qŠWx' | D] \ } } t | j | j ƒ q±Wxd | D]\ \ } } t	 j
 t j ƒ  d d ƒj ƒ  } t	 j
 | d d ƒ} | | } t | j | ƒ qÛWd  S(   Ni
   R
   R   R   R   i*   i   R   i   g        g      ð?t   axisi    (   R    R   R   t   toarrayR   t   explained_variance_ratio_R   t   sumR   R   t   var(   t   svd_a_10_spt   svd_r_10_spt   svd_a_20_spt   svd_r_20_spt   X_trans_a_10_spt   X_trans_r_10_spt   X_trans_a_20_spt   X_trans_r_20_spt   svd_a_10_det   svd_r_10_det   svd_a_20_det   svd_r_20_det   X_trans_a_10_det   X_trans_r_10_det   X_trans_a_20_det   X_trans_r_20_det   svdst
   svds_transt   svds_10_v_20t   svds_sparse_v_denset   svd_10t   svd_20t   svdt
   svd_sparset	   svd_denset   transformedt   total_variancet	   variancest   true_explained_variance_ratio(    (    sM   lib/python2.7/site-packages/sklearn/decomposition/tests/test_truncated_svd.pyt   test_explained_varianceR   sr    														!
c    
      C   s0  t  j j d ƒ }  d } d } |  j | | ƒ } t d d d d d |  ƒ j | ƒ } t d d d d d |  ƒ j | ƒ } t | j | j d	 ƒ | j | ƒ } | j | ƒ } t t  j	 | j d
 ƒ t  j
 j | d ƒ d
 d	 ƒ t t  j	 | j d
 ƒ t  j
 j | d ƒ d
 d	 ƒ t | j t  j t  j	 | d
 d d ƒƒ d	 ƒ t | j t  j t  j	 | d
 d d ƒƒ d	 ƒ t  j j d ƒ }  d } d } |  j | | ƒ } t d d d d d |  ƒ } t d d d d d |  ƒ } | j | ƒ } | j | ƒ } | t  j t  j	 | d
 d d ƒƒ :} | t  j t  j	 | d
 d d ƒƒ :} | d  d  … d f c d 9<| d  d  … d f c d 9<| d  d  … d f c d 9<| d  d  … d f c d 9<t  j | | j ƒ } t  j | | j ƒ }	 | j | ƒ | j |	 ƒ t | j d d d g d ƒ t | j d d d g d ƒ d  S(   Ni    id   iP   R   i   R
   R   R   i   g       @t   froR;   in   i   R   g‰A`åÐ"	@i   gX9´Èv¾@g      ð?i   (   R   t   randomt   RandomStatet   randnR    R   R   t   singular_values_R.   R>   t   linalgt   normt   sqrtR   t   dotR   (
   t   rngR-   R   R   t   apcat   rpcat   X_apcat   X_rpcat
   X_hat_apcat
   X_hat_rpca(    (    sM   lib/python2.7/site-packages/sklearn/decomposition/tests/test_truncated_svd.pyt   test_singular_values©   sR    	&	&		&&c          C   s­   t  t  j d d ƒ }  t d d d d ƒ } t d d |  } t d	 d |  } | j |  ƒ } | j |  ƒ } t | | d
 d ƒt | j d d d ƒt | j | j ƒ d  S(   NR;   i    R   i
   R   i*   R
   R   t
   svd_solvert   rtolg•Ö&è.>t   atol(	   R   t   meant   dictR    R   R   R   t   mean_R   (   t   X_ct   paramsRV   t   pcat   Xt_svdt   Xt_pca(    (    sM   lib/python2.7/site-packages/sklearn/decomposition/tests/test_truncated_svd.pyt   test_truncated_svd_eq_pcaã   s    (   i<   i7   (   R   R   (   R$   R%   R&   R'   R(   (   R   R   (-   t   __doc__t   numpyR   t   scipy.sparset   sparset   spt   pytestt   sklearn.decompositionR    R   t   sklearn.utilsR   t   sklearn.utils.testingR   R   R   R   R   R   R   R-   R   Rg   t   randintt   productt   reshapeR   t
   csr_matrixt   maximumt   float64t   logt   datat   AR+   R   R    t   markt   parametrizeR"   R1   R6   R:   R]   Rn   Rz   (    (    (    sM   lib/python2.7/site-packages/sklearn/decomposition/tests/test_truncated_svd.pyt   <module>   s,   .'$			

		W	: