
\c           @   s  d  d l  Z  d  d l m 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 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/ m0 Z0 d  d  l/ m1 Z1 d  d! l/ m2 Z2 e j3 d" d# d$  Z4 e j5 e4 e4  \ Z6 Z7 e j8 e6 j9   j: d  d#  e7 j9   j: d  d#  g  Z; d%   Z< d&   Z= d'   Z> d(   Z? d)   Z@ d*   ZA d+   ZB d,   ZC d-   ZD d.   ZE d/   ZF d0   ZG d1   ZH d2   ZI d3   ZJ d4   ZK d5   ZL d6   ZM d7   ZN d8   ZO d9   ZP d:   ZQ d;   ZR d<   ZS d=   ZT d>   ZU d?   ZV d@   ZW dA   ZX dB   ZY eZ dC d" dD  Z[ dE   Z\ dF   Z] dG   Z^ dH   Z_ e	 j` ja dI dJ dK g  e	 j` ja dL e jb e jc g  dM     Zd e	 j` ja dI dJ dK g  dN    Ze dO   Zf e dP    Zg dQ   Zh dR   Zi d" d# dS g dT dU  Zj d dV  Zl e	 j` ja dI dJ dK g  dW    Zm dX   Zn dY   Zo d S(Z   iN(   t	   cStringIO(   t   BallTree(   t   NearestNeighbors(   t   assert_less_equal(   t   assert_equal(   t   assert_almost_equal(   t   assert_array_equal(   t   assert_array_almost_equal(   t   assert_less(   t   assert_greater(   t   assert_raises_regexp(   t	   assert_in(   t   assert_warns(   t   assert_raises(   t   skip_if_32bit(   t   check_random_state(   t   _joint_probabilities(   t   _joint_probabilities_nn(   t   _kl_divergence(   t   _kl_divergence_bh(   t   _gradient_descent(   t   trustworthiness(   t   TSNE(   t   _barnes_hut_tsne(   t   _binary_search_perplexity(   t
   make_blobs(   t
   check_grad(   t   pdist(   t
   squareform(   t   pairwise_distances(   t   manhattan_distances(   t   cosine_distancesi    i   i
   c          C   s]  d d d     Y}  t  d  } t j } t   t _ zU t |    t j d  d d d d d d	 d
 d d
 d d
 d d d d \ } } } Wd  t j j   } t j j   | t _ Xt	 | d  t	 | d  d | k s t
  t j } t   t _ zR t | t j d  d d d d d d	 d
 d d
 d d
 d d
 d d \ } } } Wd  t j j   } t j j   | t _ Xt	 | d
  t	 | d  d | k st
  t j } t   t _ zU t |    t j d  d d d d d d	 d
 d d
 d d
 d d
 d d \ } } } Wd  t j j   } t j j   | t _ Xt	 | d
  t	 | d  d | k sYt
  d  S(   Nt   ObjectiveSmallGradientc           B   s   e  Z d    Z e d  Z RS(   c         S   s   d |  _  d  S(   Ni(   t   it(   t   self(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   __init__4   s    c         S   s0   |  j  d 7_  d |  j  d t j d g  f S(   Ni   i
   g      $@gh㈵>(   R!   t   npt   array(   R"   t   _t   compute_error(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   __call__7   s    (   t   __name__t
   __module__R#   t   TrueR(   (    (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyR    3   s   	c         S   s   d t  j d  f S(   Ng        i   (   R$   t   ones(   R&   R'   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   flat_function;   s    i   i    t   n_iterid   t   n_iter_without_progresst   momentumg        t   learning_ratet   min_gaint   min_grad_normgh㈵>t   verbosei   g      ?s   gradient normi
   i   s   did not make any progresss   Iteration 10(    (   R+   t   syst   stdoutt   StringIOR   R$   t   zerost   getvaluet   closeR   t   AssertionError(   R    R-   t
   old_stdoutR&   t   errorR!   t   out(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_gradient_descent_stops1   sR    	"
	"
	"
c       	   C   s  t  d  }  |  j d d  j t j  } t j | j | j   } t j | d  d } t	 | d  | d d } t j | t j t j  j  } t j g  t | j d  D]4 } t j t j | | t j | |    ^ q  } t | | d d d  S(	   Ni    i2   i   g        g      9@R4   t   decimali   (   R   t   randnt   astypeR$   t   float32t   abst   dott   Tt   fill_diagonalR   t   Nonet   maximumt   finfot   doublet   epst   meant   ranget   shapet   expt   sumt   logR   (   t   random_statet	   distancest   desired_perplexityt   Pt   it   mean_perplexity(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_binary_searcho   s    	!	Nc          C   s  d }  d } t  d  } | j |  d  j t j  } t j | j | j   } t j | d  t	 | d  | d d } |  } t j | d d d  d   d |  f j t j  } t j g  t |   D] } | | | | f ^ q  } t	 | | | d d } t j g  t |   D] } | | | | f ^ q }	 t |	 | d	 d
 x7t j d |  d  D] } t |  } | d }
 t j | d d d  d   d  |  f j t j  } t j g  t |   D] } | | | | f ^ q } t	 | | | d d } t j | j    d  d  d  } | j   | |
  } t j | j    d  d  d  } | j   | |
  } t | | d	 d qcWd  S(   Ni  g      9@i    i   g        R4   t   axisi   R@   i   iP   i   i
   i(   R   RA   RB   R$   RC   RD   RE   RF   RG   R   RH   t   argsortt   int64R%   RN   R   t   linspacet   intt   ravel(   t	   n_samplesRU   RS   RT   t   P1t   kt   neighbors_nnt   distances_nnt   P2t   P_nnt   topnt   P2kt   idxt   P1topt   P2top(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_binary_search_neighbors   s:    	7	-	6
7	-	""c    
      C   sB  d }  d } t  d  } | j | d  j t j  } t j | j | j   } t j | d  d  } t j
 | d d d  d   d  |   f j t j  } x t d  D] } t | j   | j   d d	 d } t | | d d	 d } | j   } | d  k r| } | }	 q t | | d
 d t | |	 d
 d q Wd  S(   Ni
   id   i    i   g        RZ   i   i   R4   R@   i   (   R   RA   RB   R$   RC   RD   RE   RF   RG   RH   R[   R\   RN   R   t   copyR   t   toarrayR   (
   Rb   R`   RS   RT   t   last_PRc   R&   RV   Ra   t   last_P1(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt    test_binary_perplexity_stability   s$    7	c             s   t  d  }  d  d } d  d  |  j  |  j t j  } t j | j | j   } t j | d  |  j    j t j  } t	 | d d d d        f d	   }      f d
   } t
 t | | | j    d d d d  S(   Ni    i2   i   g      ?g        RU   g      9@R4   c            s   t  |        d S(   Ni    (   R   (   t   params(   RV   t   alphat   n_componentsR`   (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   fun   s    c            s   t  |        d S(   Ni   (   R   (   Rr   (   RV   Rs   Rt   R`   (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   grad   s    R@   i   (   R   RA   RB   R$   RC   RD   RE   RF   RG   R   R   R   R_   (   RS   t
   n_featuresRT   t
   X_embeddedRu   Rv   (    (   RV   Rs   Rt   R`   s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_gradient   s    	c          C   s   t  d  }  |  j d d  } t t | d | d  d  t j d  j d d  } | j   } |  j |  t	 t | |  d	  t j d
  j d d  } t j
 d g d g d g d g d g g  } t t | | d d d  d  S(   Ni    id   i   g      @g      $@g      ?ii   g333333?i   i   i   t   n_neighborsg?(   R   RA   R   R   R$   t   aranget   reshapeRm   t   shuffleR   R%   R   (   RS   t   XRx   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_trustworthiness   s    -c    	      C   s   t  d  }  d } d d g } |  j d |  j t j  } x d D]~ } xu | D]m } t d | d	 | d
 d d |  } | j |  } t | | d d } t | d d d j	 | | |  qP WqC Wd  S(   Ni    i   t   exactt
   barnes_huti2   t   randomt   pcaRt   t   initRS   t   methodRz   i   g333333?t   msgs8   Trustworthiness={:0.3f} < 0.85 for method={} and init={}(   R   R   (
   R   RA   RB   R$   RC   R   t   fit_transformR   R	   t   format(	   RS   Rt   t   methodsR~   R   R   t   tsneRx   t   t(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt+   test_preserve_trustworthiness_approximately   s    	c          C   s   t  d  }  t d d d |   \ } } g  } x[ d d d g D]J } t d d	 d
 d d d d | d d  } | j |  | j | j  q= Wt | d | d  t | d	 | d  d S(   s=   t-SNE should give a lower KL divergence with more iterations.i    Rw   i   RS   i   i,  i^  Rt   i   t
   perplexityi
   R1   g      Y@R.   i   N(   R   R   R   R   t   appendt   kl_divergence_R   (   RS   R~   R&   t   kl_divergencesR.   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt)   test_optimization_minimizes_kl_divergence  s    c          C   s   t  d  }  |  j d d  } d | t j j d d d  t j j d d d  f <t j |  } t d d d d d	 d
 d d d d  } | j |  } t	 t
 | | d d d d d d  S(   Ni    id   i   g        i2   Rt   R   i
   R1   g      Y@RS   R   R   Rz   i   g      ?R@   (   R   RA   R$   R   t   randintt   spt
   csr_matrixR   R   R   R   (   RS   R~   t   X_csrR   Rx   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_fit_csr_matrix  s    4c          C   s   t  d  }  x t d  D] } |  j d d  } t t |  d  } t d d d d d d	 d
 d d d d | d d  } | j |  } t | | d d d d } | d k s t  q Wd  S(   Ni    i   id   i   t   sqeuclideanRt   R   R1   g      Y@t   early_exaggerationg       @t   metrict   precomputedRS   R4   Rz   i   gffffff?(	   R   RN   RA   R   R   R   R   R   R;   (   RS   RW   R~   t   DR   Rx   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pytF   test_preserve_trustworthiness_approximately_with_precomputed_distances  s    c          C   s   t  d  }  |  j d d  } t t t t t |  | d t d  t t t t t |  | d d d t d  t t	 t t t | | d d d t t t t t t |  | d d d t d  d  S(   Ni    id   i   R   g      ?R   t	   euclidean(
   R   RA   R   R   t   DeprecationWarningR   R   R+   R   t
   ValueError(   RS   R~   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt,   test_trustworthiness_precomputed_deprecation+  s    c          C   sY   t  d  }  |  j d d  } t t | | d d t t | d d | d d  d  S(   Ni    id   i   R   t   cosineR   (   R   RA   R   R   R   (   RS   R~   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt)   test_trustworthiness_not_euclidean_metric>  s
    c          C   s>   t  d d  }  t t d |  j t j d g d g g   d  S(   NR   gGz?s   early_exaggeration .*g        (   R   R
   R   R   R$   R%   (   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt!   test_early_exaggeration_too_smallH  s    	c          C   s>   t  d d  }  t t d |  j t j d g d g g   d  S(   NR.   i   s	   n_iter .*g        (   R   R
   R   R   R$   R%   (   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_too_few_iterationsO  s    c          C   s>   t  d d  }  t t d |  j t j d g d g g   d  S(   NR   R   s   .* square distance matrixg        g      ?(   R   R
   R   R   R$   R%   (   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt%   test_non_square_precomputed_distancesV  s    	c          C   sg   t  j d d g d d g g  }  x? d d g D]1 } t d d d |  } t t d	 | j |   q. Wd  S(
   Ng        g      g      ?R   R   R   R   R   s   All distances .*precomputed.*(   R$   R%   R   R
   R   R   (   t   bad_distR   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt'   test_non_positive_precomputed_distances]  s
    !	c          C   sY   d   }  t  d |  d d  } t j d d g d d g g  } t t d | j |  d  S(   Nc         S   s   d S(   Ni(    (   t   xt   y(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyR   h  s    R   R   R   g        g      ?s   All distances .*metric given.*(   R   R$   R%   R
   R   R   (   R   R   R~   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt$   test_non_positive_computed_distancesf  s
    	!	c          C   sD   t  d d  }  d } t t | |  j t j d g d g g   d  S(   NR   s   not availables0   'init' must be 'pca', 'random', or a numpy arrayg        g      ?(   R   R
   R   R   R$   R%   (   R   t   m(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_init_not_availableq  s    c          C   sJ   t  d t j d   }  |  j t j d   } t t j d  |  d  S(   NR   id   i   i   (   id   i   (   id   i   (   id   i   (   R   R$   R8   R   R,   R   (   R   Rx   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_init_ndarrayy  s    c          C   s8   t  d t j d  d d  }  |  j t j d   d  S(   NR   id   i   R   R   (   id   i   (   id   id   (   R   R$   R8   t   fit(   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_init_ndarray_precomputed  s    c          C   s   t  d d d d  }  t t d |  j t j d g d g g   t  d d d d  }  t t d	 |  j t j d g d g g   d  S(
   NR   s   not availableR   R   s   Unknown metric not available.*g        g      ?R   s"   Metric 'not available' not valid.*(   R   R
   R   R   R$   R%   (   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_distance_not_available  s    	"	c          C   s>   t  d d  }  t t d |  j t j d g d g g   d  S(   NR   s   not availables!   'method' must be 'barnes_hut' or g        g      ?(   R   R
   R   R   R$   R%   (   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_method_not_available  s    	c          C   s[   xT d d d
 d g D]@ }  t  d |   } t t d | j t j d g d	 g g   q Wd  S(   Nigưi   gư>i   t   angles!   'angle' must be between 0.0 - 1.0g        g      ?gzo ?(   R   R
   R   R   R$   R%   (   R   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_angle_out_of_range_checks  s    	c          C   sD   t  d d d d  }  t t d |  j t j d g d g g   d  S(   NR   R   R   R   sB   The parameter init="pca" cannot be used with metric="precomputed".g        g      ?(   R   R
   R   R   R$   R%   (   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt>   test_pca_initialization_not_compatible_with_precomputed_kernel  s    	c          C   sD   t  d d d d  }  t t d |  j t j d g d g g   d  S(   NRt   i   R   R   s   'n_components' should be .*g        g      ?(   R   R
   R   R   R$   R%   (   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_n_components_range  s    	c          C   s   t  d  }  d } d d g } |  j d |  j t j  } x | D] } t d | d d d	 d
 d d d d d | d d  } | j |  } t d | d d d	 d
 d d d d d | d d  } | j |  } t j | |  sC t  qC Wd  S(   Ni    i   R   R   i   Rt   R   i   R1   g      Y@R   R   RS   R   R   g      ?g      $@(	   R   RA   RB   R$   RC   R   R   t   allcloseR;   (   RS   Rt   R   R~   R   R   t   X_embedded1t   X_embedded2(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_early_exaggeration_used  s    c          C   s   t  d  }  d } d d g } |  j d |  j t j  } x | D]| } xs d d g D]e } t d | d	 d
 d d d d d d d | d d d |  } | j |  | j | d
 k sV t  qV WqC Wd  S(   Ni    i   R   R   i   i   i  Rt   R   i   R1   g      ?R   R   RS   R   R   g      ?R.   (	   R   RA   RB   R$   RC   R   R   t   n_iter_R;   (   RS   Rt   R   R~   R   R.   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_n_iter_used  s    c          C   s   t  j d d g d d g g  }  t  j d d g d d g g  } t  j d g d g g  } t  j d	 d
 g d d g g  } t |  | | |  d  S(   Ng      ?g        gbv
gCrgJ!zE?g)x>1?i   i    gKXAgr}gKXA>gr}?(   R$   R%   t   _run_answer_test(   t	   pos_inputt
   pos_outputt	   neighborst   grad_output(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_answer_gradient_two_points  s    !c          C   s   t  j d d g d d g d d g d d g g  }  t  j d d g d	 d
 g d d g d d g g  } t  j d d d g d d d g d d d g d d d g g  } t  j d d g d d g d d g d d g g  } t |  | | |  d  S(   Ng      ?g        g      @g       @g333333@g@g$1?gmg5a ҇&gIimgU-g|3Sٵ?g:ǁg$*i   i   i   i    g\$w?gRn		Qgz}g`>g41f>g6Scg>gU9&g#*@>(   R$   R%   R   (   R   R   R   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt    test_answer_gradient_four_points  s    				c          C   s   t  j d d g d d g d d g d d g g  }  t  j d d g d	 d
 g d d g d d g g  } t  j d d d g d d d g d d d g d d d g g  } t  j d d g d d g d d g d d g g  } t |  | | | t d d  d  S(   Ng      ?g        g      @g       @g333333@g@g$1?gmg5a ҇&gIimgU-g|3Sٵ?g:ǁg$*i   i   i   i    g41f>g6Scg>gU9&g#*@>g?(   R$   R%   R   t   False(   R   R   R   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_skip_num_points_gradient  s     				g?c         C   s  t  |   j t j  } | | | f } | j t j  } | j t j  } t |   }	 t |	  j t j  }	 t j | j d t j }
 d d l	 m
 } | |	  } | j j t j  } | j j t j  } t j | j | | | |
 d d d d d t |
 | d	 d
 d  S(   Nt   dtypei(   R   g      ?i   i   t   skip_num_pointsi    R@   i   (   R   RB   R$   RC   R\   R   R   R8   RO   t   scipy.sparseR   t   indicest   indptrR   t   gradientt   dataR   (   R   R   R   R   R4   R   R   RT   t   argst	   pij_inputt   grad_bhR   RV   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyR     s    c          C   s   t  d  }  t d d  } |  j d d  } t j } t   t _ z | j |  Wd  t j j   } t j j   | t _ Xd | k s t	  d | k s t	  d | k s t	  d | k s t	  d	 | k s t	  d  S(
   Ni    R4   i   i   s   [t-SNE]s   nearest neighbors...s"   Computed conditional probabilitiess
   Mean sigmas   early exaggeration(
   R   R   RA   R5   R6   R7   R   R9   R:   R;   (   RS   R   R~   R<   R>   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_verbose'  s    	
c          C   s>   t  d  }  t d d  } |  j d d  } | j |  d  S(   Ni    R   t	   chebyshevi   i   (   R   R   RA   R   (   RS   R   R~   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_chebyshev_metric=  s    c          C   sa   t  d  }  t d d  } |  j d d  } | j |  j } t j t j |   s] t  d  S(   Ni    Rt   i   i   i   (	   R   R   RA   R   t
   embedding_R$   t   allt   isfiniteR;   (   RS   R   R~   Rx   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_reduction_to_one_componentE  s
    c          C   s   t  d  }  |  j d d  } d | t j j d d d  t j j d d d  f <t j |  } t d d d d	  } t t	 d
 | j
 |  d  S(   Ni    id   i   g        i2   R.   i   R   R   s   A sparse matrix was.*(   R   RA   R$   R   R   R   R   R   R
   t	   TypeErrorR   (   RS   R~   R   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_no_sparse_on_barnes_hutN  s    4	R   R   R   t   dtc         C   s   t  d  } | j d d  j |  } t d d d d d d d d d	 |  d
 d  } | j |  } | j } | t j k s t  d  S(   Ni    i2   i   Rt   R   R1   g      Y@RS   R   R4   (	   R   RA   RB   R   R   R   R$   RC   R;   (   R   R   RS   R~   R   Rx   t   effective_type(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt
   test_64bitY  s    	c         C   s{   t  d  } | j d d  } t d d d d d d d d d	 |  d
 d d d  } | j |  t j | j  sw t  d  S(   Ni    i2   i   Rt   R   R1   g      Y@RS   R   R4   R.   i  (   R   RA   R   R   R$   t   isnanR   R;   (   R   RS   R~   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_kl_divergence_not_nanj  s    c          C   s<  d }  d } d } x#d d g D]} d } t  | d  } t d  } | j | |  } | j t j  } t | j | j   } t j	 | d  | j | |  } t
 | | d	 d }	 t | |	 | | |  \ }
 } | d
 } t |  } | j | d | d
 \ } } | d  d   d
 d   f } t j g  t |  D] } | | | | f ^ q< } t j | d | d f | d k  st t | d | d f | d    t | | | d	 d } t | | | | | d |  d d d	 d \ } } t |	  }	 | j   } t | |	 d d t |
 | d d q Wd  S(   Ng        i
   id   i   i   i   g      ?i    R4   i   Rb   R   R   R@   (   t   floatR   RA   RB   R$   RC   RD   RE   RF   RG   R   R   R   t   queryR%   RN   R   R;   R   R   R   Rn   R   R   (   R   R   R`   Rt   Rw   t   degrees_of_freedomRS   RT   Rr   RV   t   kl_exactt
   grad_exactRb   t   btRd   Rc   RW   t   P_bht   kl_bhR   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_barnes_hut_anglex  sB    
	-*%		c          C   s   t  d  }  |  j d d  } x d d g D] } t d d d d	 d
 d d d d | d d d d  } d | _ d | _ t j } t   t _ z | j |  Wd  t j j	   } t j j
   | t _ Xt d |  q+ Wd  S(   Ni    id   i
   R   R   R/   iR4   i   R1   g    חARS   R   R.   i_  R   R   i   s@   did not make any progress during the last -1 episodes. Finished.(   R   RA   R   t   _N_ITER_CHECKt   _EXPLORATION_N_ITERR5   R6   R7   R   R9   R:   R   (   RS   R~   R   R   R<   R>   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_n_iter_without_progress  s     			
c       	   C   sZ  t  d  }  |  j d d  } d } t d | d d d d d d	  } t j } t   t _ z | j |  Wd  t j j   } t j j   | t _ X| j	 d
  } g  } xx | D]p } d | k r Pn  | j
 d  }	 |	 d k r | |	 } | j d d  j	 d  d } | j t |   q q Wt j |  } t | | | k  }
 t |
 d  d  S(   Ni    id   i   gMb`?R3   R4   RS   R   R   s   
t   Finisheds   gradient norms   gradient norm = t    t    i   (   R   RA   R   R5   R6   R7   R   R9   R:   t   splitt   findt   replaceR   R   R$   R%   t   lenR   (   RS   R~   R3   R   R<   R>   t	   lines_outt   gradient_norm_valuest   linet   start_grad_normt   n_smaller_gradient_norms(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_min_grad_norm  s2    	

c       	   C   s  t  d  }  |  j d d  } t d d d d d d d d  } t j } t   t _ z | j |  Wd  t j j   } t j j   | t _ Xxm | j	 d	  d  d  d
  D]O } d | k r | j
 d  \ } } } | r | j
 d  \ } } } Pq q q Wt | j t |  d d d  S(   Ni    id   i   R/   R4   RS   R   R   s   
it	   Iterations   error = t   ,R@   i   (   R   RA   R   R5   R6   R7   R   R9   R:   R   t	   partitionR   R   R   (   RS   R~   R   R<   R>   R   R&   R=   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_accessible_kl_divergence  s$    	
#i   i  c         C   s   x | D] } t  d d d d d | d d d | d	 |   } | j t  } d
 j |  |  } y t | |  Wq t k
 r | d 7} | | _ | j t  } t | |  q Xq Wd S(   s  Make sure that TSNE can approximately recover a uniform 2D grid

    Due to ties in distances between point in X_2d_grid, this test is platform
    dependent for ``method='barnes_hut'`` due to numerical imprecision.

    Also, t-SNE is not assured to converge to the right solution because bad
    initialization can lead to convergence to bad local minimum (the
    optimization problem is non-convex). To avoid breaking the test too often,
    we re-run t-SNE from the final point when the convergence is not good
    enough.
    Rt   i   R   R   RS   R   i   R.   R   s   {}_{}s   :rerunN(   R   R   t	   X_2d_gridR   t   assert_uniform_gridR;   R   (   R   t   seedsR.   t   seedR   t   Yt   try_name(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   check_uniform_grid  s    
	c         C   s   t  d d  j |   } | j d t  d j   } | j   d k sL t  | j   t j |  } | j	   t j |  } t
 | d d | t | d d | d  S(	   NRz   i   t   return_distancei    g?g      ?R   i   (   R   R   t
   kneighborsR+   R_   t   minR;   R$   RM   t   maxR	   R   (   R   R   t   nnt
   dist_to_nnt   smallest_to_meant   largest_to_mean(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyR     s    c         C   s   t  |   d  S(   N(   R   (   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_uniform_grid,  s    c          C   s   t  d  }  d } |  j d |  j t j  } i  } i  } xv d d g D]h } t d d d | d	 d
 d d d d d d d d d d  } d | _ | j |  | | <| j | | <qI W| d | d k s t	  t
 | d | d d d d  S(   Ni    i
   i   R   R   Rt   i   R   R1   g      ?R   R   RS   R.   i   R   g      >@R   R@   i   (   R   RA   RB   R$   RC   R   R   R   R   R;   R   (   RS   Rw   R~   t   X_embeddedsR.   R   R   (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   test_bh_match_exact1  s    	c    
      C   s   t  d  }  d } d } |  j d |  j t j  } d d g } t t g } xx t | |  D]g \ } } t d | d | d	 d  j	 |  } t d d
 d | d	 d  j	 | |   }	 t
 | |	  q^ Wd S(   s8   Make sure that TSNE works for different distance metricsi    i   i   i2   t	   manhattanR   R   Rt   RS   R   N(   R   RA   RB   R$   RC   R   R   t   zipR   R   R   (
   RS   t   n_components_originalt   n_components_embeddingR~   t   metricst
   dist_funcsR   t	   dist_funct   X_transformed_tsnet   X_transformed_tsne_precomputed(    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt)   test_tsne_with_different_distance_metricsG  s    (p   R5   t   sklearn.externals.six.movesR    R7   t   numpyR$   R   t   sparseR   t   pytestt   sklearn.neighborsR   R   t   sklearn.utils.testingR   R   R   R   R   R   R	   R
   R   R   R   R   t   sklearn.utilsR   t   sklearn.manifold.t_sneR   R   R   R   R   R   R   t   sklearn.manifoldR   t   sklearn.manifold._utilsR   t   sklearn.datasetsR   t   scipy.optimizeR   t   scipy.spatial.distanceR   R   t   sklearn.metrics.pairwiseR   R   R   R]   R   t   meshgridt   xxt   yyt   hstackR_   R|   R   R?   RY   Rl   Rq   Ry   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t   markt   parametrizeRC   t   float64R   R   R   R   R   R   R   RH   R   R	  R  R  (    (    (    s@   lib/python2.7/site-packages/sklearn/manifold/tests/test_t_sne.pyt   <module>   s   	>		(									
																								-$	(	+	$	