
    {Kg              	       P	   d dl Z d dlmZ 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mZ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mZmZmZmZ d dl m!Z! d dl"m#Z#m$Z$m%Z% d dl&m'Z'm(Z( d dl)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3  ejh                  d dd      Z5 ejl                  e5e5      \  Z7Z8 ejr                  e7ju                         jw                  dd      e8ju                         jw                  dd      g      Z<d Z=d Z>d Z?d Z@d ZAd ZBd ZCd ZDej                  j                  dddg      ej                  j                  dd       d!               ZGd" ZHej                  j                  dddg      ej                  j                  d#e2      d$               ZId% ZJd& ZKej                  j                  d'dej                  fdej                  fge2D  cg c]  } d| f c}       ej                  j                  d(d)gd*ggd+fd)d,gd*d)ggd-fg      d.               ZMej                  j                  d#e2      d/        ZNej                  j                  d#e2      d0        ZO e/e1      ej                  j                  d2e2e3z         d3               ZPd4 ZQd5 ZRd6 ZSd7 ZTej                  j                  d#e2      d8        ZUd9 ZVd: ZWd; ZXej                  j                  d#e2      d<        ZYej                  j                  d#e2      d=        ZZej                  j                  d#e2      d>        Z[	 	 	 dZd?Z\d@ Z]dA Z^dB Z_ej                  j                  dddg      ej                  j                  dCej                  ej                  g      dD               Zbej                  j                  dddg      dE        ZcdF Zde0dG        ZedH ZfdI Zgej                  j                  dddg      dJ        Zhd[dKZidL ZjdM Zkej                  j                  dNdOe$fdPe#fg      ej                  j                  dddg      dQ               Zlej                  j                  dddg      dR        ZmdS Znej                  j                  dTdU      dV        ZodW ZpdX ZqdY Zryc c} w )\    N)StringIO)assert_allclose)
check_grad)pdist
squareform)config_context)
make_blobs)EfficiencyWarning)TSNE_barnes_hut_tsne)_gradient_descent_joint_probabilities_joint_probabilities_nn_kl_divergence_kl_divergence_bhtrustworthiness)_binary_search_perplexity)cosine_distancesmanhattan_distancespairwise_distances)NearestNeighborskneighbors_graph)check_random_state)assert_almost_equalassert_array_almost_equalassert_array_equalignore_warningsskip_if_32bit)CSR_CONTAINERSLIL_CONTAINERS   
   c                      G d d      } dd}t         j                  }t               t         _        	 t         |        t	        j
                  d      dddddddd	

      \  }}}t         j                  j                         }t         j                  j                          |t         _        |dk(  sJ |dk(  sJ d|v sJ t         j                  }t               t         _        	 t        |t	        j
                  d      dddddddd	

      \  }}}t         j                  j                         }t         j                  j                          |t         _        |dk(  sJ |dk(  sJ d|v sJ t         j                  }t               t         _        	 t         |        t	        j
                  d      dddddddd	

      \  }}}t         j                  j                         }t         j                  j                          |t         _        |dk(  sJ |dk(  sJ d|v sJ y # t         j                  j                         }t         j                  j                          |t         _        w xY w# t         j                  j                         }t         j                  j                          |t         _        w xY w# t         j                  j                         }t         j                  j                          |t         _        w xY w)Nc                       e Zd Zd ZddZy);test_gradient_descent_stops.<locals>.ObjectiveSmallGradientc                     d| _         y Nr#   )it)selfs    e/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/manifold/tests/test_t_sne.py__init__zDtest_gradient_descent_stops.<locals>.ObjectiveSmallGradient.__init__:   s	    DG    c                 |    | xj                   dz  c_         d| j                   z
  dz  t        j                  dg      fS )Nr!   r"         $@h㈵>)r)   nparray)r*   _compute_errors      r+   __call__zDtest_gradient_descent_stops.<locals>.ObjectiveSmallGradient.__call__=   s2    GGqLGLD("((D6*:::r-   NT)__name__
__module____qualname__r,   r5    r-   r+   ObjectiveSmallGradientr&   9   s    		;r-   r;   c                 0    dt        j                  d      fS )N        r!   )r1   ones)r3   r4   s     r+   flat_functionz2test_gradient_descent_stops.<locals>.flat_functionA   s    BGGAJr-   r!   r   d   r=   r0      )max_itern_iter_without_progressmomentumlearning_ratemin_gainmin_grad_normverbose      ?gradient normr"      zdid not make any progresszIteration 10r6   )sysstdoutr   r   r1   zerosgetvalueclose)r;   r?   
old_stdoutr3   errorr)   outs          r+   test_gradient_descent_stopsrT   7   sz   ; ; JCJ ("$HHQK$'
5" jj!!#


C<<7N7c!!! JCJ (HHQK$&
5" jj!!#


C<<8O8&#--- JCJ ("$HHQK$'
5" jj!!#


C<<8O8S   k jj!!#


, jj!!#


, jj!!#


s&   1H #,I' 1J3 A	I$'A	J03A	K<c                  N   t        d      } | j                  dd      }t        |      j                  t        j
                        }d}t        ||d      }t	        j                  |t	        j                  t        j                        j                        }t	        j                  t        |j                  d         D cg c]G  }t	        j                  t	        j                  ||   t	        j                   ||         z               I c}      }t#        ||d       y c c}w )Nr   2            9@rH      decimal)r   randnr   astyper1   float32r   maximumfinfodoubleepsmeanrangeshapeexpsumlogr   )random_statedata	distancesdesired_perplexityPimean_perplexitys          r+   test_binary_searchrq      s    %a(Lb!$D"4(//

;I!)-?KA


1bhhryy)--.Agg7<QWWQZ7HI7H!!rvvad|+,,	-7HIO );QG 	Js    AD"c            
      4   t        d      } | j                  dd      j                  t        j                        dz   }d}t        ||d      }dt        j                  |ddd f   t        j                  |ddd f         z         z  }t        ||d	
       y )N*   r!   Z   r@   g      >@r   rY   rA   rZ   r[   )	r   r]   r^   r1   r_   r   nansumlog2r   )rj   rk   rm   rn   
perplexitys        r+   test_binary_search_underflowrx      s     &b)La$++BJJ7#=D!$(:AFAryy1ab5BGGAaeH,=!=>>>J
$6Br-   c                     d} d}t        d      }|j                  | d      j                  t        j                  d      }t        |      }t        ||d      }| dz
  }t               j                  |      }|j                  |d	
      }|j                  j                  t        j                  d      }	|	j                  | |      }	t        |	|d      }
|j                  }t        j                  t        |       D cg c]  }|||j                  ||   ||dz       f   ! c}      }t!        ||
d       t        j"                  d| dz
  d      D ]  }t%        |      }|dz  }|j                  |d	
      }|j                  j                  t        j                  d      }	|	j                  | |      }	t        |	|d      }t!        ||
d       t        j&                  |j)                               d d d   }|j)                         |   d | }t        j&                  |j)                               d d d   }|j)                         |   d | }t!        ||d        y c c}w )N   rX   r   rA   FcopyrY   r!   distancen_neighborsmode   r[      rW   r"   r#   )r   r]   r^   r1   r_   r   r   r   fitr   rk   reshapeindptrr2   re   indicesr   linspaceintargsortravel)	n_samplesrm   rj   rk   rl   P1r   nndistance_graphdistances_nnP2r   kP1_nntopnP2kidxP1topP2tops                      r+   test_binary_search_neighborsr      s@    I%a(Li+222::E2JD"4(I	"9.@!	LB a-K					%B(([z(RN!&&--bjju-EL''	;?L	"<1CQ	OB""FHH 9%	
% q.((VAE]CCD%	
E eR3 [[i!mQ/F2v,,,L%**11"**51I#++Iq9'6HRST!%Q7jj$TrT*
3&jj%dd+		C $'!%: 0	
s   >$I!c                     d} d}t        d      }|j                  |d      }t               j                  |      }|j	                  | d      }|j
                  j                  t        j                  d      }|j                  ||       }d }d	}t        d      D ]_  }	t        |j                         |d
      }
t        ||d
      }|j                         }||
}|}Dt        |
|d       t        |d       a y )Nr"   r@   r   rW   r}   r~   Fr{   rZ   rY   r   r[   )r   r]   r   r   r   rk   r^   r1   r_   r   re   r   r|   r   toarrayr   )r   r   rj   rk   r   r   rl   last_Prm   r3   rn   r   last_P1s                r+    test_binary_perplexity_stabilityr      s     KI%a(Li+D					%B(([z(RN##**2::E*BI!!)[9IF3Z%inn&68JTUV$^5GQRSZZ\>FG%a;%b'1= r-   c                     	 t        d      } d	d}dd| j                  	|      j                  t        j                        }t        j
                  |j                  |j                              }t        j                  |d       | j                  	      j                  t        j                        }t        |dd      	fd}	fd	}t        t        |||j                               dd
       y )Nr   rV   rA   rI   r=   rX   )rm   rH   c                 (    t        |       d   S )Nr   r   paramsrn   alphan_componentsr   s    r+   funztest_gradient.<locals>.fun       fa	<HKKr-   c                 (    t        |       d   S )Nr!   r   r   s    r+   gradztest_gradient.<locals>.grad  r   r-   rW   r[   )r   r]   r^   r1   r_   absdotTfill_diagonalr   r   r   r   )
rj   
n_featuresrl   
X_embeddedr   r   rn   r   r   r   s
         @@@@r+   test_gradientr      s    %a(LIJLE""9j9@@LIy}}Y[[12IY$##I|<CCBJJOJY4KALL 
3j.>.>.@A3PQRr-   c                     t        d      } | j                  dd      }t        |d|dz  z         dk(  sJ t        j                  d      j                  dd      }|j                         }| j                  |       t        ||      d	k  sJ t        j                  d
      j                  dd      }t        j                  dgdgdgdgdgg      }t        t        ||d      d       y )Nr   r@   rA         @r/   rI   r#   r!   g333333?rW   r   rZ   r   g?)
r   r]   r   r1   aranger   r|   shuffler2   r   )rj   Xr   s      r+   test_trustworthinessr     s    %a(L 	3"A1cAHn-444 			#r1%AJ$1j)C/// 			!R#AA3aS1#s34J:1EsKr-   c                  F   d} t         j                  j                  d      }|j                  dd      }|j                  dd      }t	        j
                  t        |       5  t        ||d       d	d	d	       t        ||d
      }d|cxk  rdk  sJ  J y	# 1 sw Y   (xY w)z[Raise an error when n_neighbors >= n_samples / 2.

    Non-regression test for #18567.
    z%n_neighbors .+ should be less than .+rs      r   rA   matchrW   r   NrZ   r   r!   )r1   randomRandomStaterandpytestraises
ValueErrorr   )regexrngr   r   trusts        r+   &test_trustworthiness_n_neighbors_errorr     s    
 4E
))


#CAA!QJ	z	/:15 
0 Azq9E????	 
0	/s   !BB methodexact
barnes_hutinit)r   pcac                     t        d      }d}|j                  d|      j                  t        j                        }t        ||d| dd      }|j                  |      }t        ||d      }|d	kD  sJ y )
Nr   rA   rV   i  auto)r   r   rj   r   rB   rE   r!   r   g333333?)r   r]   r^   r1   r_   r   fit_transformr   )r   r   rj   r   r   tsner   ts           r+   +test_preserve_trustworthiness_approximatelyr   +  s{     &a(LL2|,33BJJ?A!D ##A&J:15At8O8r-   c            	          t        d      } t        d|       \  }}g }dD ]?  }t        dddd|d	      }|j                  |       |j	                  |j
                         A |d
   |d   k  sJ |d   |d
   k  sJ y)z=t-SNE should give a lower KL divergence with more iterations.r   rZ   )r   rj   )   ,  i^  rA   r   r"         Y@)r   r   rw   rE   rB   rj   r!   N)r   r	   r   r   appendkl_divergence_)rj   r   r3   kl_divergencesrB   r   s         r+   )test_optimization_minimizes_kl_divergencer   ?  s    %a(L>DAqN#
 	1d112 $ !q 1111!q 1111r-   csr_containerc           	         t        d      }|j                  dd      }d||j                  ddd      |j                  ddd      f<    ||      }t        ddddd| d	
      }|j	                  |      }t        t        ||d      dd       y )Nr   rV   rA   r=      r   r"   r   i  )r   r   rw   rE   rj   r   rB   r!   r   rI   g)\(?rtol)r   r]   randintr   r   r   r   )r   r   r   r   X_csrr   r   s          r+   test_fit_transform_csr_matrixr   S  s     Q
C		"aA9<As{{1b"s{{1a456!ED ##E*JOE:1EsQWXr-   c                      t        d      } t        d      D ]d  }| j                  dd      }t        t	        |      d      }t        ddddd|dd	d
	      }|j                  |      }t        ||dd      }|dkD  rdJ  y )Nr   rZ   P   rA   sqeuclideanr          @precomputed  r   )	r   rw   rE   early_exaggerationmetricrj   rH   rB   r   r!   )r   r   gffffff?)r   re   r]   r   r   r   r   r   )rj   ro   r   Dr   r   r   s          r+   Ftest_preserve_trustworthiness_approximately_with_precomputed_distancesr   j  s    %a(L1Xr1%uQx/" 

 ''*
AzqO4xx! r-   c                      t        d      } | j                  dd      }t        ||d      t        t        |d      |d      k(  sJ y )Nr   r@   rA   cosiner   r   )r   r]   r   r   )rj   r   s     r+   )test_trustworthiness_not_euclidean_metricr     sP     &a(L3"A1a1_1X.-6   r-   zmethod, retypezD, message_regexr=   rI   z.* square distance matrixg      z.* positive.*c                     t        d| ddd      }t        j                  t        |      5  |j	                   ||             d d d        y # 1 sw Y   y xY w)Nr   r   rs   r!   r   r   r   rj   rw   r   )r   r   r   r   r   )r   r   retypemessage_regexr   s        r+   test_bad_precomputed_distancesr     sK      D 
z	76!9% 
8	7	7s   AAc                     t        ddddd      }t        j                  t        d      5  |j	                   | d	d
gd
d	gg             d d d        y # 1 sw Y   y xY w)Nr   r   r   rs   r!   r   sparser   r   rW   r   r   r   	TypeErrorr   r   r   s     r+    test_exact_no_precomputed_sparser     sW    D 
y	1=1a&1a&)9:; 
2	1	1s   AAc                     t        j                  g dg dg dg      } | |      }t        dddd      }d}t        j                  t
        |	      5  |j                  |       d d d        y # 1 sw Y   y xY w)
N)rI   r=   r=   )r=   rI   r=   r   r   rs   r!   )r   r   rj   rw   zB3 neighbors per samples are required, but some samples have only 1r   )r1   r2   r   r   r   r   r   )r   distbad_distr   msgs        r+   1test_high_perplexity_precomputed_sparse_distancesr     sa     88_oGHDT"H}8"QRSD
NC	z	-8$ 
.	-	-s   A..A7)categorysparse_containerc                 Z   t        d      }|j                  dd      }t        |ddd      }t        |      }t	        j
                  |      sJ t        |j                         |       t        dddd	
      }|j                  |      }|j                   | |            }t        ||       y)zAMake sure that TSNE works identically for sparse and dense matrixr   r@   rA   r}   T)r   r   include_selfr   r   r   )r   rj   r   rE   N)
r   r]   r   r   spissparser   r   r   r   )r   rj   r   D_sparser   r   Xt_dense	Xt_sparses           r+    test_sparse_precomputed_distancer    s     &a(L3"AsRVWH1A;;x   ((*A.186D !!!$H""#3H#=>I),r-   c                      d } t        | dd      }t        j                  ddgddgg      }t        j                  t
        d      5  |j                  |       d d d        y # 1 sw Y   y xY w)	Nc                      yr(   r:   )xys     r+   r   z4test_non_positive_computed_distances.<locals>.metric  s    r-   r   r!   )r   r   rw   r=   rI   zAll distances .*metric given.*r   )r   r1   r2   r   r   r   r   )r   r   r   s      r+   $test_non_positive_computed_distancesr    s\     vg!<D
3*sCj)*A	z)I	J1 
K	J	J   A##A,c                      t        t        j                  d      d      } | j                  t        j                  d            }t        t        j                  d      |       y )Nr@   rA   r   )r   rE   )r@   rW   )r   r1   rN   r   r>   r   )r   r   s     r+   test_init_ndarrayr    sC    RXXh'v>D##BGGH$56Jrxx):6r-   c                      t        t        j                  d      dd      } | j                  t        j                  d             y )Nr  r   g      I@)r   r   rE   )r@   r@   )r   r1   rN   r   r   s    r+   test_init_ndarray_precomputedr    s7     XXhD
 	HHRXXj!"r-   c                      t        ddd      } t        j                  t        d      5  | j	                  t        j                  dgdgg             d d d        y # 1 sw Y   y xY w)	Nr   r   r!   )r   r   rw   zBThe parameter init="pca" cannot be used with metric="precomputed".r   r=   rI   r   r   r   r   r   r1   r2   r  s    r+   >test_pca_initialization_not_compatible_with_precomputed_kernelr    sS    }5Q?D	R
 	288cUSEN34	
 
 
   )AA%c                     t        ddd      }t        j                  t        d      5  |j	                   | ddgddgg             d d d        y # 1 sw Y   y xY w)	Nr   r   r!   )r   rE   rw   zPCA initialization.*r   r   rW   r   r   s     r+   8test_pca_initialization_not_compatible_with_sparse_inputr    sN     U%A>D	y(>	?=1a&1a&)9:; 
@	?	?s   AAc                      t        ddd      } t        j                  t        d      5  | j	                  t        j                  dgdgg             d d d        y # 1 sw Y   y xY w)	Nr   r   r!   )r   r   rw   z'n_components' should be .*r   r=   rI   r  r  s    r+   test_n_components_ranger    sK    Q|BD	z)F	G288cUSEN34 
H	G	Gr  c                  R   t        d      } d}ddg}| j                  d|      j                  t        j                        }|D ]b  }t        |dddd|d	d
      }|j                  |      }t        |dddd|dd
      }|j                  |      }t        j                  ||      sbJ  y )Nr   rA   r   r   r   r!   r   r   rI   r   r   rw   rE   r   rj   r   r   rB   r/   )r   r]   r^   r1   r_   r   r   allclose)rj   r   methodsr   r   r   X_embedded1X_embedded2s           r+   test_early_exaggeration_usedr"  	  s    %a(LL%G2|,33BJJ?A%"	
 ((+%#	
 ((+;;{K8881 r-   c                     t        d      } d}ddg}| j                  d|      j                  t        j                        }|D ]A  }dD ]:  }t        |ddd	d|d
|      }|j                  |       |j                  |dz
  k(  r:J  C y )Nr   rA   r   r   r   )   r   r!         ?r   rI   r  )r   r]   r^   r1   r_   r   r   n_iter_)rj   r   r  r   r   rB   r   s          r+   test_max_iter_usedr'  *  s    %a(LL%G2|,33BJJ?A"H)!#&!	D q!<<8a</// # r-   c                     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        |||||        y )NrI   r=   gbv
gCrgJ!zE?g)x>1?r!   r   gKXAgr}gKXA>gr}?r1   r2   _run_answer_testr   	pos_input
pos_output	neighborsgrad_outputs        r+   test_answer_gradient_two_pointsr0  A  s     3*sCj12I
	',)EFJ 1#s$I((
?	+nn-MNK Y
I{MRr-   c                 *   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                  g dg dg dg dg      }t        j                  ddgddgddgddgg      }t        |||||        y )NrI   r=   r   r   333333@皙@$1?m5a ҇&IimU-|3Sٵ?:ǁ$*r!   rA   rZ   r   rA   rZ   r!   r   rZ   r!   rA   r   g\$w?gRn		Qgz}g`>41f>6Sc>gU9&#*@>r)  r+  s        r+    test_answer_gradient_four_pointsrD  R  s     3*sCj3*sCjIJI=)M*L)M*		
J )Y	9EFI((_-n-_-n-		
K Y
I{MRr-   c           
      0   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                  g dg dg dg dg      }t        j                  ddgddgddgddgg      }t        ||||| ddd       y )NrI   r=   r   r   r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  F皙?rA   r)  r+  s        r+   test_skip_num_points_gradientrG  m  s     3*sCj3*sCjIJI=)M*L)M*		
J )Y	9EFI((#J#J_-n-		
K :y+}eSRSr-   c                    t        |       j                  t        j                        }|||f}	|j                  t        j                        }|j                  t        j                  d      }t        |	 }
t        |
      j                  t        j                        }
t        j                  |j                  t        j                        } ||
      }|j                  j                  t        j                        }|j                  j                  t        j                        }t        j                  |j                  ||||dddd	       t        ||d	
       y )NFr{   )dtyper%  rA   r!   r   )skip_num_pointsr   r[   )r   r^   r1   r_   int64r   r   rN   rf   r   r   r   gradientrk   r   )r,  r-  r.  r/  r   rH   rw   rJ  rl   args	pij_inputgrad_bhrn   r   s                 r+   r*  r*    s     #9-44RZZ@Ij')D""2::.J   6I$d+I9%,,RZZ8Ihhz''rzz:Gi A		  *IXX__RXX&F	
IvwQST g{A>r-   c                  $   t        d      } t        dd      }| j                  dd      }t        j                  }t               t        _        	 |j                  |       t        j                  j                         }t        j                  j                          |t        _        d|v sJ d|v sJ d|v sJ d	|v sJ d
|v sJ y # t        j                  j                         }t        j                  j                          |t        _        w xY w)Nr   rA   r   )rH   rw   rW   z[t-SNE]znearest neighbors...z"Computed conditional probabilitiesz
Mean sigmazearly exaggeration)	r   r   r]   rL   rM   r   r   rO   rP   )rj   r   r   rQ   rS   s        r+   test_verboserQ    s    %a(La(D1a AJCJ 1jj!!#


!S(((/366633&&& jj!!#


s   C A	Dc                  z    t        d      } t        dd      }| j                  dd      }|j                  |       y )Nr   	chebyshevr   )r   rw   rW   rA   )r   r   r]   r   )rj   r   r   s      r+   test_chebyshev_metricrT    s8    %a(L{q1D1a Aqr-   c                      t        d      } t        dd      }| j                  dd      }|j                  |      j                  }t        j                  t        j                  |            sJ y )Nr   r!   r   )r   rw   rW   rA   )r   r   r]   r   
embedding_r1   allisfinite)rj   r   r   r   s       r+   test_reduction_to_one_componentrY    sX    %a(LQ1-D1a A!''J66"++j)***r-   dtc           
          t        d      }|j                  dd      j                  |d      }t        dddd| ddd	      }|j	                  |      }|j
                  }|t        j                  k(  sJ y )
Nr   r"   rA   Fr{   r   r   r   r   rw   rE   rj   r   rH   rB   r   )r   r]   r^   r   r   rI  r1   r_   )r   rZ  rj   r   r   r   effective_types          r+   
test_64bitr^    s     &a(L2q!((%(8A	D ##A&J%%N RZZ'''r-   c           
          t        d      }|j                  dd      }t        dddd| ddd      }|j                  |       t	        j
                  |j                        rJ y )Nr   rV   rA   r   i  r   r\  )r   r]   r   r   r1   isnanr   )r   rj   r   r   s       r+   test_kl_divergence_not_nanra    sm     &a(L2q!A	D 	qxx++,,,,r-   c                     d} d}d}dD ]  }d}t        |dz
        }t        d      }|j                  ||      }t        |      }|j                  ||      }	t	        ||d      }
t        |	|
|||      \  }}|d	z
  }t               j                  |      j                  |d
      }t        ||d      }t        |	||||| dd      \  }}t        |
      }
|j                         }t        ||
d       t        ||d        y )Nr=   r"   r@   )rA   rZ   rW   rI   r   rY   r!   r}   r~   )anglerJ  rH   r[   rZ   )floatr   r]   r   r   r   r   r   r   r   r   r   r   r   r   )rc  rw   r   r   r   degrees_of_freedomrj   rk   rl   r   rn   kl_exact
grad_exactr   distances_csrP_bhkl_bhrO  s                     r+   test_barnes_hut_anglerk     s%   EJI
"<##56)!,!!)Z8&t,	##I|< JB-A)9l 
*  !mSY+JG 	
 '}j!L*	
w qM||~!$15HeQ7E r-   c            
      (   t        d      } | j                  dd      }dD ]  }t        dddd|dd	
      }d|_        d|_        t
        j                  }t               t
        _        	 |j                  |       t
        j                  j                         }t
        j                  j                          |t
        _        d|v rJ  y # t
        j                  j                         }t
        j                  j                          |t
        _        w xY w)Nr   r@   r"   )r   r   r#   rA   g    חAi_  r   )rC   rH   rE   rj   r   rB   r   r!   z@did not make any progress during the last -1 episodes. Finished.)r   r]   r   _N_ITER_CHECK_EXPLORATION_MAX_ITERrL   rM   r   r   rO   rP   )rj   r   r   r   rQ   rS   s         r+   test_n_iter_without_progressro  *  s     &a(L3#A)$&
 %&"ZZ
Z
	$q!**%%'CJJ#CJ RUXXXX/ *$ **%%'CJJ#CJs   'CA	Dc                  >   t        d      } | j                  dd      }d}t        |ddd      }t        j                  }t               t        _        	 |j                  |       t        j                  j                         }t        j                  j                          |t        _        |j                  d      }g }|D ]b  }d|v r n\|j                  d	      }	|	dk\  s ||	d  }|j                  d
d      j                  d      d   }|j                  t        |             d t        j                  |      }t!        |||k           }
|
dk  sJ y # t        j                  j                         }t        j                  j                          |t        _        w xY w)Nr   r@   rA   gMb`?r   )rG   rH   rj   r   
FinishedrJ   zgradient norm =   r!   )r   r]   r   rL   rM   r   r   rO   rP   splitfindreplacer   rd  r1   r2   len)rj   r   rG   r   rQ   rS   	lines_outgradient_norm_valueslinestart_grad_normn_smaller_gradient_normss              r+   test_min_grad_normr~  I  sk   %a(L3"AMmQQwWDJCJ 1jj!!#


		$I  ))O4a()D<< 2B7==cB1ED ''d4  88$89"1]BC  $q(((9 jj!!#


s   E A	Fc                     t        d      } | j                  dd      }t        ddddd      }t        j                  }t               t        _        	 |j                  |       t        j                  j                         }t        j                  j                          |t        _        |j                  d      d d d   D ]5  }d	|v s|j                  d
      \  }}}|s |j                  d      \  }}} n t        |j                  t              d       y # t        j                  j                         }t        j                  j                          |t        _        w xY w)Nr   rV   rA   r   r   )rC   rH   rj   r   rB   rq  r#   	Iterationzerror = ,rW   r[   )r   r]   r   rL   rM   r   r   rO   rP   ru  	partitionr   r   rd  )rj   r   r   rQ   rS   r{  r3   rR   s           r+   test_accessible_kl_divergencer  t  s   %a(L2q!A !D JCJ 1jj!!#


 		$"%$..4KAq%#ooc2q! & ++U5\1E jj!!#


s   D A	E$c           
      0   t        d      }d}|D ]H  }t        dd|d|| d      }|j                  t              }dj	                  | |      }	 t        ||       J y
# t        $ r0 |d	z  }||_        |j                  t              }t        ||       Y w xY w)a  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.
    rZ   r   rA   r   rV   r   )r   r   rj   rw   rB   r   rE   z{}_{}z:rerunN)re   r   r   	X_2d_gridformatassert_uniform_gridAssertionErrorr   )r   seedsrB   seedr   Ytry_names          r+   test_uniform_gridr    s     !HEH 
 y)>>&$/		-8,   	-  HDI""9-A8,	-s   A6BBc                 r   t        d      j                  |       }|j                  d      d   j                         }|j	                         dkD  sJ |j	                         t        j                  |      z  }|j                         t        j                  |      z  }|dkD  sJ |       |dk  sJ |       y )	Nr!   r   T)return_distancer   rF  r%  rA   )r   r   
kneighborsr   minr1   rd   max)r  r  r   
dist_to_nnsmallest_to_meanlargest_to_means         r+   r  r    s     
a	(	,	,Q	/Bt4Q7==?J>>c!!!!~~'"''**== nn&)<<Oc!+8+!Q((r-   c                  N   t        d      } d}| j                  d|      j                  t        j                        }i }i }dD ]?  }t        d|ddddd	d
      }d|_        |j                  |      ||<   |j                  ||<   A |d   |d   k(  sJ t        |d   |d   d       y )Nr   r"      )r   r   rA   rI   r   r$  g     =@)r   r   rE   r   rj   rB   rw   rc  r   r   g-C6?r   )
r   r]   r^   r1   r_   r   rn  r   r&  r   )rj   r   r   X_embeddedsrB   r   r   s          r+   test_bh_match_exactr    s     &a(LJ2z*11"**=AKH)	
 &'""003F<< *  G 6666K(+l*C$Or-   c                     d} d}d}d}d}d}t        d      }|j                  ||       j                  t        j                        }|j                  ||      }|dz
  }	t               j                  |      j                  |	d	      }
t        |
|d
      }t        ||||||ddd	      \  }}dD ]3  }t        ||||||dd|	      \  }}t        ||d       t        ||       5 y )Nr"   r  rA   r!   rZ   rW   r   r}   r~   rY   )rc  rJ  rH   num_threads)rA   r   gư>r   )r   r]   r^   r1   r_   r   r   r   r   r   r   )r   r   r   re  rc  rw   rj   rk   r   r   rh  ri  kl_sequentialgrad_sequentialr  kl_multithreadgrad_multithreads                    r+   -test_gradient_bh_multithread_match_sequentialr    s    JILEJ%a(Li4;;BJJGD	<8Fa-K	T		k
		C 
 #=*aHD%6
&"M? +<#
,
(( 	DA(*:; r-   zmetric, dist_func	manhattanr   c           	      f   |dk(  r| dk(  rt        j                  d       t        d      }d}d}|j                  d|      j	                  t
        j                        }t        | ||ddd	d
      j                  |      }t        d||ddd	d
      j                   ||            }t        ||       y)z8Make sure that TSNE works for different distance metricsr   r  zoDistance computations are different for method == 'barnes_hut' and metric == 'manhattan', but this is expected.r   rZ   rA   rV   r   r   r   )r   r   r   rj   rB   r   rE   r   N)
r   xfailr   r]   r^   r1   r_   r   r   r   )	r   	dist_funcr   rj   n_components_originaln_components_embeddingr   X_transformed_tsneX_transformed_tsne_precomputeds	            r+   )test_tsne_with_different_distance_metricsr    s     &K"7 	5	

 &a(L245<<RZZHA+ mA  &*+& mIaL! # )+IJr-   c           
          t        d      }d}|j                  d|      }t        d| dddddd	      j                  |      }t        d| dddddd	      j                  |      }t	        ||       y
)z=Make sure that the n_jobs parameter doesn't impact the outputr   r"   r  rA   rX   r!   r   r   )r   r   rw   rc  n_jobsrj   r   rE   N)r   r]   r   r   r   )r   rj   r   r   X_tr_refX_trs         r+   test_tsne_n_jobsr  L  s     &a(LJ2z*A	 mA  	 mA 	 Hd#r-   c                     t        d      } d\  }}| j                  ||      }ddddddd}t        dd	d
i|}d}t        j                  t
        |      5  |j                  |       ddd       t        t        |d
      d      }t        dd	di|j                  |      }t        dd
dt        j                  |j                        id|j                  |      }	t        |	|       y# 1 sw Y   xY w)zAMake sure that method_parameters works with mahalanobis distance.r   )r   r"   (   r   r   r   rZ   )rw   rB   rE   r   r   rj   r   mahalanobisz4Must provide either V or VI for Mahalanobis distancer   Nr   T)checksr   V)r   metric_paramsr:   )r   r]   r   r   r   r   r   r   r   r1   covr   r   )
rj   r   r   r   default_paramsr   r   precomputed_XX_trans_expectedX_transs
             r+   #test_tsne_with_mahalanobis_distancer  j  s   %a(L#Iz9j1AN 7}77D
@C	z	-1 
. uQ}=dKMC=CNCQQ  S"&&+,>BPmA  G-. 
.	-s   C--C6rw   )   r  c                     t        d      }|j                  dd      }t        dd| |      }d}t        j                  t
        |      5  |j                  |       d	d	d	       y	# 1 sw Y   y	xY w)
z=Make sure that perplexity > n_samples results in a ValueErrorr   r  rA   r   r   )rE   r   rw   rj   z&perplexity must be less than n_samplesr   Nr   r]   r   r   r   r   r   )rw   rj   r   estr   s        r+   test_tsne_perplexity_validationr    se     &a(L2q!A
!	C 3C	z	-! 
.	-	-s   
A%%A.c                      t        j                  d       t        d      5  t        j                  d      j                  dd      } t        d      j                  |        ddd       y# 1 sw Y   yxY w)	ziMake sure that TSNE works when the output is set to "pandas".

    Non-regression test for gh-25365.
    pandas)transform_output   #   r   rA   )r   N)r   importorskipr   r1   r   r   r   r   )arrs    r+   "test_tsne_works_with_pandas_outputr    sT    
 !		2ii''A.!**3/ 
3	2	2s   AA,,A5c                      t        d      } | j                  dd      }t        d      }d}t        j                  t
        |      5  |j                  |       ddd       y# 1 sw Y   yxY w)	z$Check `n_iter` parameter deprecated.r   r  r@   r   )n_iterz"'n_iter' was renamed to 'max_iter'r   N)r   r]   r   r   warnsFutureWarningr   rj   r   r   r   s       r+   test_tnse_n_iter_deprecatedr    sU    %a(L2s#AsD
.C	m3	/1 
0	/	/s   A""A+c                      t        d      } | j                  dd      }t        dd      }d}t        j                  t
        |      5  |j                  |       d	d	d	       y	# 1 sw Y   y	xY w)
z9Check error raised when `n_iter` and `max_iter` both set.r   r  r@   r   r   )r  rB   z0Both 'n_iter' and 'max_iter' attributes were setr   Nr  r  s       r+   "test_tnse_n_iter_max_iter_both_setr    sW    %a(L2s#AsS)D
<C	z	-1 
.	-	-r  )FrF  r   )N)srL   ior   numpyr1   r   scipy.sparser   r  numpy.testingr   scipy.optimizer   scipy.spatial.distancer   r   sklearnr   sklearn.datasetsr	   sklearn.exceptionsr
   sklearn.manifoldr   r   sklearn.manifold._t_sner   r   r   r   r   r   sklearn.manifold._utilsr   sklearn.metrics.pairwiser   r   r   sklearn.neighborsr   r   sklearn.utilsr   sklearn.utils._testingr   r   r   r   r   sklearn.utils.fixesr   r    r   r
  meshgridxxyyhstackr   r   r  rT   rq   rx   r   r   r   r   r   markparametrizer   r   r   r   r   asarrayr   r   r   r  r  r  r  r  r  r  r"  r'  r0  rD  rG  r*  rQ  rT  rY  r_   float64r^  ra  rk  ro  r~  r  r  r  r  r  r  r  r  r  r  r  r  )r   s   0r+   <module>r     s=   
     ) % 4 " ' 0  > 
 A ,  ?BKK1b	Q	BBII

2q!

2q!	S!lH	C);X>6S2L(  G\#:;!23 4 <$2( G\#:;.9Y : <Y*, 	"**	rzz" >L	L^M<
'^	L %#45+Sz	"O4	&	& .9	< :	< .9% :% +,+^n-LM- N --&	7#5 .9< :<59B0. .9S :S  .9S :S4 .9 :J ?:',+ L'#:;

BJJ78( 9 <(. L'#:;- <-*'8T Y Y<()VF@ L'#:;$- <$-N)P80<f &'(4D)EF L'#:;*K <	
*KZ G\#:;$ <$:/< x0 1 0C 
Ms   !R#