ó
‡ˆ\c           @   sª  d  d l  m Z d  d l Z d  d l Z d  d l j 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 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 e g Z e g Z e e e ƒ Z  e g Z! e g Z" e e! e" ƒ Z# d „  Z$ d „  Z% d, \ Z& Z' e( e& e' d ƒ Z) e$ e& e' e) ƒ \ Z* Z+ d „  Z, d „  Z- d „  Z. d „  Z/ d „  Z0 d „  Z1 e j2 j3 d e  ƒ d „  ƒ Z4 e j2 j3 d e ƒ d  „  ƒ Z5 d! „  Z6 d" „  Z7 d# „  Z8 d$ „  Z9 d% „  Z: d& „  Z; d' „  Z< d( „  Z= d) „  Z> d* „  Z? d+ „  Z@ d S(-   iÿÿÿÿ(   t   divisionN(   t   euclidean_distances(   t   johnson_lindenstrauss_min_dim(   t   gaussian_random_matrix(   t   sparse_random_matrix(   t   SparseRandomProjection(   t   GaussianRandomProjection(   t   assert_less(   t   assert_raises(   t   assert_raise_message(   t   assert_array_equal(   t   assert_equal(   t   assert_almost_equal(   t	   assert_in(   t   assert_array_almost_equal(   t   assert_warns(   t   DataDimensionalityWarningc         C   sv   t  j j d ƒ } t j | j | ƒ | j |  d | ƒ| j | d | ƒf f d |  | f ƒ} | j ƒ  | j ƒ  f S(   Ni    t   sizet   shape(	   t   npt   randomt   RandomStatet   spt
   coo_matrixt   randnt   randintt   toarrayt   tocsr(   t	   n_samplest
   n_featurest
   n_nonzerost   rngt   data_coo(    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt   make_sparse_random_data(   s    c         C   s!   t  j |  ƒ s |  S|  j ƒ  Sd  S(   N(   R   t   issparseR   (   t   matrix(    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt   densify2   s    i
   iè  g      Y@c           C   sP   t  t t d d ƒ t  t t d d ƒ t  t t d d ƒ t  t t d d ƒ d  S(   Nid   gš™™™™™ñ?g        gš™™™™™¹¿i    g      à?(   R   t
   ValueErrorR   (    (    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt   test_invalid_jl_domainA   s    c           C   st   t  t t d d g d d g ƒ t  t t d d g d d g ƒ t t j j d d d d	 ƒt j d
 d ƒ ƒ d  S(   Ni   id   i   gÍÌÌÌÌÌì?i   i
   R   g      à?(   i
   i
   (   i
   i
   (   R   R%   R   R   R   R   t   full(    (    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt   test_input_size_jl_min_dimH   s    	c         C   sc   t  t |  d d ƒ t  t |  d d ƒ t  t |  d d ƒ t  t |  d d ƒ t  t |  d d ƒ d  S(   Ni    iÿÿÿÿi   (   R   R%   (   t   random_matrix(    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt   check_input_size_random_matrixV   s
    c         C   sh   t  |  d d ƒ j d ƒ t  |  d d ƒ j d ƒ t  |  d d ƒ j d ƒ t  |  d d ƒ j d ƒ d  S(   Ni   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R   R   (   R)   (    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt   check_size_generated^   s    c         C   sT   t  |  d d d d ƒƒ } t d t j | ƒ d ƒ t d t j j | ƒ d ƒ d  S(   Ni'  i   t   random_statei    i   g      ð?(   R$   R   R   t   meant   linalgt   norm(   R)   t   A(    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt   check_zero_mean_and_unit_norme   s    c         C   sC   d \ } } x0 d d d g D] } t  t |  | | d | ƒq Wd  S(   Ni   i
   g      ð¿g        gš™™™™™ñ?t   density(   i   i
   (   R   R%   (   R)   t   n_componentsR   R2   (    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt%   check_input_with_sparse_random_matrixo   s    R)   c         C   s"   t  |  ƒ t |  ƒ t |  ƒ d  S(   N(   R*   R+   R1   (   R)   (    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt$   test_basic_property_of_random_matrixw   s    

c         C   s-   t  |  ƒ t j |  d d ƒ} t | ƒ d  S(   NR2   g      ð?(   R4   t	   functoolst   partialR1   (   R)   t   random_matrix_dense(    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt+   test_basic_property_of_sparse_random_matrix   s    
c          C   sa   d }  d } t  |  | d d ƒ} t d t j | ƒ d ƒ t t j | d d ƒd |  d ƒ d  S(	   Nid   iè  R,   i    g        i   t   ddofi   (   R   R   R   R-   t   var(   R3   R   R0   (    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt   test_gaussian_random_matrixˆ   s
    c          C   s†  d }  d } xsd d g D]e} d | } t  |  | d | d d ƒ} t | ƒ } t j | ƒ } t t j | ƒ t j |  ƒ | ƒ t t j | ƒ t j |  ƒ | ƒ | d k rË t t j | ƒ d	 ƒ n# t d
 | ƒ t t j | ƒ d ƒ t t j	 | d
 k ƒ d d | d d	 ƒt t j	 | t j | ƒ t j |  ƒ k ƒ d d	 | d d	 ƒt t j	 | t j | ƒ t j |  ƒ k ƒ d d	 | d d	 ƒt t j
 | d
 k d d ƒd d | d | d d	 ƒt t j
 | t j | ƒ t j |  ƒ k d d ƒd d d	 | d d	 | d d	 ƒt t j
 | t j | ƒ t j |  ƒ k d d ƒd d d	 | d d	 | d d	 ƒq Wd  S(   Nid   iô  g333333Ó?g      ð?i   R2   R,   i    i   g        i   t   decimalR:   (   R   R$   R   t   uniqueR   t   sqrtR   R   R   R-   R;   (   R3   R   R2   t   sR0   t   values(    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt   test_sparse_random_matrix–   s<    
	#$	+,+%,c          C   si   xb t  D]Z }  t t |  d d ƒ j t ƒ t t |  d d ƒ j t ƒ t t |  d d ƒ j t ƒ q Wd  S(   NR2   gš™™™™™ñ?i    gš™™™™™¹¿(   t   all_SparseRandomProjectionR   R%   t   fitt   data(   t   RandomProjection(    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt9   test_sparse_random_projection_transformer_invalid_densityÊ   s    c          C   sY   xR t  D]J }  t t |  d d ƒ j d d d g g ƒ t t |  d d ƒ j t ƒ q Wd  S(   NR3   t   autoi    i   i   iöÿÿÿ(   t   all_RandomProjectionR   R%   RD   RE   (   RF   (    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt0   test_random_projection_transformer_invalid_inputÖ   s
    "c          C   s1   x* t  D]" }  t t |  d d ƒ j t ƒ q Wd  S(   NR3   RH   (   RI   R   R%   t	   transformRE   (   RF   (    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt    test_try_to_transform_before_fitß   s    c          C   s^   t  d d d ƒ \ }  } x? t D]7 } | d d d d ƒ } d } t t | | j |  ƒ q Wd  S(   Niè  id   R3   RH   t   epsgš™™™™™¹?s~   eps=0.100000 and n_samples=1000 lead to a target dimension of 5920 which is larger than the original space with n_features=100(   R!   RI   R	   R%   RD   (   RE   t   _RF   t   rpt   expected_msg(    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt.   test_too_many_samples_to_find_a_safe_embeddingå   s
    c    
      C   sñ   t  d d d ƒ \ }  } d } t |  d t ƒ} | j ƒ  } | d k } | | } x˜ t D] } | d d d	 | d
 d ƒ } | j |  ƒ } t | d t ƒ} | j ƒ  } | | } | | }	 t |	 j ƒ  d | ƒ t d | |	 j ƒ  ƒ qY Wd  S(   Ni   iˆ  i˜:  gš™™™™™É?t   squaredg        R3   RH   RM   R,   i    i   (	   R!   R   t   Truet   ravelRI   t   fit_transformR   t   maxt   min(
   RE   RN   RM   t   original_distancest   non_identicalRF   RO   t	   projectedt   projected_distancest   distances_ratio(    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt(   test_random_projection_embedding_qualityñ   s    


c          C   s÷   xð t  D]è }  |  d d d t d d ƒ } | j t ƒ t | j t ƒ t j ƒ sV t ‚ t	 j
 t ƒ } t | j | ƒ t j ƒ s† t ‚ |  d d d t d d ƒ } | j t ƒ } t | j t ƒ t j ƒ sÑ t ‚ t	 j | j | ƒ ƒ s t ‚ q Wd  S(   NR3   i
   t   dense_outputR,   i    (   RC   RS   RD   RE   t
   isinstanceRK   R   t   ndarrayt   AssertionErrorR   t
   csr_matrixt   FalseR"   (   R   RO   t   sparse_data(    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt1   test_SparseRandomProjection_output_representation  s    	!!	!c          C   sÍ  xÆt  D]¾}  |  d d d d d d ƒ j t ƒ } t | j d ƒ t | j d ƒ |  t k rƒ t | j d ƒ t | j	 d d	 ƒ n  t | j
 j d t f ƒ | j t ƒ } t | j t d f ƒ | j t ƒ } t | | ƒ |  d d d d ƒ } | j t ƒ } t | | ƒ t t | j t d  d  … d
 d … f ƒ |  t k r |  d d d d d d ƒ } | j t ƒ } t | j t d f ƒ t | j
 j d t f ƒ t | j
 j d ƒ t d | j
 j ƒ q q Wd  S(   NR3   RH   R,   i    RM   g      à?in   g¸…ëQ¸ž?i   i   i   id   R2   gü©ñÒMbP?is   iU   (   RI   RD   RE   R   R3   t   n_components_RC   R2   R   t   density_t   components_R   R   RK   R   R
   RU   R   R%   R   t   nnz(   RF   RO   t   projected_1t   projected_2t   rp2t   projected_3RZ   (    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt2   test_correct_RandomProjection_dimensions_embedding&  s4    )	c          C   s]   d }  t  d |  t |  d ƒ ƒ \ } } x. t D]& } t t | d |  d ƒ j | ƒ q/ Wd  S(   Ni   i   i   R3   i   (   R!   t   intRI   R   R   RD   (   R   RE   RN   RF   (    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt1   test_warning_n_components_greater_than_n_featuresR  s
    "c          C   s¡   d }  t  d |  t |  d ƒ ƒ \ } } xr t D]j } | d d d d ƒ j | ƒ } | d d d d ƒ j t j | ƒ ƒ } t t | j ƒ t | j ƒ ƒ q/ Wd  S(   Ni   i   i   R3   i   R,   i   (	   R!   Ro   RI   RD   R   Rb   R   R$   Rh   (   R   RE   RN   RF   t   rp_denset	   rp_sparse(    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt   test_works_with_sparse_data[  s    "(   i
   iè  (A   t
   __future__R    R6   t   numpyR   t   scipy.sparset   sparseR   t   pytestt   sklearn.metricsR   t   sklearn.random_projectionR   R   R   R   R   t   sklearn.utils.testingR   R   R	   R
   R   R   R   R   R   t   sklearn.exceptionsR   t   all_sparse_random_matrixt   all_dense_random_matrixt   sett   all_random_matrixRC   t   all_DenseRandomProjectionRI   R!   R$   R   R   Ro   R   RE   t   data_csrR&   R(   R*   R+   R1   R4   t   markt   parametrizeR5   R9   R<   RB   RG   RJ   RL   RQ   R]   Re   Rn   Rp   Rs   (    (    (    sC   lib/python2.7/site-packages/sklearn/tests/test_random_projection.pyt   <module>   sf   				
	
						
				4								,		