
    0Ph-                     	   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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- d dl.m/Z/m0Z0  ej1        d dd          Z2 ej3        e2e2          \  Z4Z5 ej6        e47                                8                    dd          e57                                8                    dd          g          Z9d Z:d Z;d Z<d Z=d Z>d Z?d Z@d ZAejB        C                    dddg          ejB        C                    dd          d                          ZDd! ZEejB        C                    dddg          ejB        C                    d"e/          d#                         ZFd$ ZGd% ZHejB        C                    d&dejI        fdejI        fgd' e/D                       ejB        C                    d(d)gd*ggd+fd)d,gd*d)ggd-fg          d.                         ZJejB        C                    d"e/          d/             ZKejB        C                    d"e/          d0             ZLejB        M                    d1          ejB        C                    d2e/e0z             d3                         ZNd4 ZOd5 ZPd6 ZQd7 ZRejB        C                    d"e/          d8             ZSd9 ZTd: ZUd; ZVejB        C                    d"e/          d<             ZWejB        C                    d"e/          d=             ZXejB        C                    d"e/          d>             ZY	 	 	 d\dAZZdB Z[dC Z\dD Z]ejB        C                    dddg          ejB        C                    dEej^        ej_        g          dF                         Z`ejB        C                    dddg          dG             ZadH Zbe-dI             ZcdJ ZddK ZeejB        C                    dddg          dL             Zfd]dMZgdN ZhdO ZiejB        C                    dPdQe"fdRe!fg          ejB        C                    dddg          dS                         ZjejB        C                    dddg          dT             ZkdU ZlejB        C                    dVdW          dX             ZmdY ZndZ Zod[ ZpdS )^    N)StringIO)assert_allclose)
check_grad)pdist
squareform)config_context)
make_blobs)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skip_if_32bit)CSR_CONTAINERSLIL_CONTAINERS   
   c                  H    G d d          } dd}t           j        }t                      t           _        	 t           |             t	          j        d          ddddddd	d

  
        \  }}}t           j                                        }t           j                                         |t           _        nM# t           j                                        }t           j                                         |t           _        w xY w|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                                        }t           j                                         |t           _        nM# t           j                                        }t           j                                         |t           _        w xY w|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                                        }t           j                                         |t           _        nM# t           j                                        }t           j                                         |t           _        w xY w|dk    sJ |dk    sJ d|v sJ d S )Nc                       e Zd Zd ZddZdS );test_gradient_descent_stops.<locals>.ObjectiveSmallGradientc                     d| _         d S Nr!   )it)selfs    a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/manifold/tests/test_t_sne.py__init__zDtest_gradient_descent_stops.<locals>.ObjectiveSmallGradient.__init__8   s    DGGG    Tc                 f    | 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__;   s3    GGqLGGLD("(D6*:*:::r+   NT)__name__
__module____qualname__r*   r3    r+   r)   ObjectiveSmallGradientr$   7   s7        	 	 		; 	; 	; 	; 	; 	;r+   r9   Tc                 .    dt          j        d          fS )N        r   )r/   ones)r1   r2   s     r)   flat_functionz2test_gradient_descent_stops.<locals>.flat_function?   s    BGAJJr+   r   r   d   r;   r.      )max_itern_iter_without_progressmomentumlearning_ratemin_gainmin_grad_normverbose      ?gradient normr       zdid not make any progresszIteration 10r4   )sysstdoutr   r   r/   zerosgetvalueclose)r9   r=   
old_stdoutr1   errorr'   outs          r)   test_gradient_descent_stopsrR   5   s/   ; ; ; ; ; ; ; ;    JCJ (""$$HQKK$'
 
 
5" j!!##


 j!!##

C<<<<7777c!!!! JCJ (HQKK$&
 
 
5" j!!##


 j!!##

C<<<<8888&#---- JCJ (""$$HQKK$'
 
 
5" j!!##


 j!!##

C<<<<8888S      s&   7B7 7A
D?/F7 7A
H?7J? ?A
L	c                     t          d          } |                     dd          }t          |                              t          j                  }d}t          ||d          t	          j        t	          j        t          j	                  j
                  t	          j        fdt          j        d                   D                       }t          ||d           d S )	Nr   2            9@rF   c                     g | ]J}t          j        t          j        |         t          j        |                   z                       KS r8   )r/   expsumlog).0iPs     r)   
<listcomp>z&test_binary_search.<locals>.<listcomp>   sE    III!!rvad||+,,,	-	-IIIr+      decimal)r   randnr   astyper/   float32r   maximumfinfodoubleepsmeanrangeshaper   )random_statedata	distancesdesired_perplexitymean_perplexityr^   s        @r)   test_binary_searchrr      s    %a((Lb!$$D"4((//
;;I!)-?KKKA

1bhry))-..AgIIIIuQWQZ7H7HIII O );QGGGGGGr+   c            
      ^   t          d          } |                     dd                              t          j                  dz   }d}t          ||d          }dt          j        |ddd f         t          j        |ddd f                   z             z  }t          ||d	
           d S )N*   r   Z   r>   g      >@r   rW   r?   r`   ra   )	r   rc   rd   r/   re   r   nansumlog2r   )rm   rn   rp   r^   
perplexitys        r)   test_binary_search_underflowry      s     &b))La$$++BJ77#=D!$(:AFFFAry1abb5BGAaeH,=,=!=>>>>J
$6BBBBBBr+   c                  >   d} d}t          d          }|                    | d                              t          j        d          }t          |          }t          ||d          | dz
  }t                                          |          }|	                    |d	
          j
                            t          j        d          }|                    | |          }t          ||d          }j        t          j        fdt          |           D                       }	t          |	|d           t          j        d| dz
  d          D ]B}
t#          |
          }
|
dz  }|	                    |
d	
          j
                            t          j        d          }|                    | |
          }t          ||d          }t          |	|d           t          j                                                  d d d         }                                |         d |         }t          j        |                                          d d d         }|                                |         d |         }t          ||d           Dd S )N   rV   r   r?   FcopyrW   r   distancen_neighborsmodec           	      \    g | ](}|j         |         |d z                     f         )S )r   )indices)r\   kP1distance_graphindptrs     r)   r_   z0test_binary_search_neighbors.<locals>.<listcomp>   sL     	
 	
 	
 q.(VAE])BCCD	
 	
 	
r+      ra      rU   r    r!   )r   rc   rd   r/   re   r   r   r   fitr   rn   reshaper   r0   rk   r   linspaceintargsortravel)	n_samplesrp   rm   rn   ro   r   nndistances_nnP2P1_nnr   topnP2kidxP1topP2topr   r   r   s                   @@@r)   test_binary_search_neighborsr      s    I%a((Li++222:E2JJD"4((I	"9.@!	L	L	LB a-K						%	%B(([z(RRN!&--bju-EEL''	;??L	"<1CQ	O	O	OB"FH	
 	
 	
 	
 	
 	
9%%	
 	
 	
 E eR3333 [i!mQ// ; ;FF2v,,,LL%*11"*51II#++Iq99'6HRSTTT!%Q7777j$$TTrT*

3&j%%ddd+		C $'!%:::::; ;r+   c                  V   d} d}t          d          }|                    |d          }t                                          |          }|                    | d          }|j                            t          j        d          }|	                    ||           }d }d	}t          d          D ]w}	t          |                                |d
          }
t          ||d
          }|                                }||
}|}St          |
|d           t          ||d           xd S )Nr    r>   r   rU   r~   r   Fr|   r`   rW   r   ra   )r   rc   r   r   r   rn   rd   r/   re   r   rk   r   r}   r   toarrayr   )r   r   rm   rn   r   r   ro   last_Prp   r1   r^   r   last_P1s                r)    test_binary_perplexity_stabilityr      s>    KI%a((Li++D						%	%B(([z(RRN#**2:E*BBI!!)[99IF3ZZ 
> 
>%inn&6&68JTUVVV$^5GQRSSSZZ\\>FGG%a;;;;%b'1=====
> 
>r+   c                  4  	 t          d          } d	d}dd|                     	|                              t          j                  }t          j        |                    |j                            }t          j        |d           |                     	                              t          j                  }t          |dd          	fd}	fd	}t          t          |||                                          dd
           d S )Nr   rT   r?   rG   r;   rV   )rp   rF   c                 6    t          |           d         S )Nr   r   paramsr^   alphan_componentsr   s    r)   funztest_gradient.<locals>.fun       fa	<HHKKr+   c                 6    t          |           d         S )Nr   r   r   s    r)   gradztest_gradient.<locals>.grad   r   r+   rU   ra   )r   rc   rd   r/   re   absdotTfill_diagonalr   r   r   r   )
rm   
n_featuresro   
X_embeddedr   r   r^   r   r   r   s
         @@@@r)   test_gradientr      sK   %a((LIJLE""9j99@@LLIy}}Y[1122IY$$$##I|<<CCBJOOJY4KKKAL L L L L L L LL L L L L L L L 
3j.>.>.@.@AA3PQRRRRRRr+   c                  "   t          d          } |                     dd          }t          |d|dz  z             dk    sJ t          j        d                              dd          }|                                }|                     |           t          ||          d	k     sJ t          j        d
                              dd          }t          j        dgdgdgdgdgg          }t          t          ||d          d           d S )Nr   r>   r?         @r-   rG   r!   r   g333333?rU   r   r`   r   g?)
r   rc   r   r/   aranger   r}   shuffler0   r   )rm   Xr   s      r)   test_trustworthinessr     s   %a((L 	3""A1cAHn--4444 		#r1%%AJ$$$1j))C//// 		!R##AA3aS1#s344J:1EEEsKKKKKr+   c                  p   d} t           j                            d          }|                    dd          }|                    dd          }t	          j        t          |           5  t          ||d           d	d	d	           n# 1 swxY w Y   t          ||d
          }d|cxk    rdk    sn J d	S )z[Raise an error when n_neighbors >= n_samples / 2.

    Non-regression test for #18567.
    z%n_neighbors .+ should be less than .+rt      r   r?   matchrU   r   Nr`   r   r   )r/   randomRandomStaterandpytestraises
ValueErrorr   )regexrngr   r   trusts        r)   &test_trustworthiness_n_neighbors_errorr     s    
 4E
)


#
#CAA!QJ	z	/	/	/ 6 6:155556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 Azq999E????????????s   )BBBmethodexact
barnes_hutinit)r   pcac                    t          d          }d}|                    d|                              t          j                  }t          ||d| dd          }|                    |          }t          ||d          }|d	k    sJ d S )
Nr   r?   rT   i  auto)r   r   rm   r   r@   rC   r   r   g333333?)r   rc   rd   r/   re   r
   fit_transformr   )r   r   rm   r   r   tsner   ts           r)   +test_preserve_trustworthiness_approximatelyr   )  s     &a((LL2|,,33BJ??A!  D ##A&&J:1555At888888r+   c            	      2   t          d          } t          d|           \  }}g }dD ]F}t          dddd|d	          }|                    |           |                    |j                   G|d
         |d         k    sJ |d         |d
         k    sJ dS )z=t-SNE should give a lower KL divergence with more iterations.r   r`   )r   rm   )   ,  i^  r?   r   r          Y@)r   r   rx   rC   r@   rm   r   N)r   r	   r
   r   appendkl_divergence_)rm   r   r1   kl_divergencesr@   r   s         r)   )test_optimization_minimizes_kl_divergencer   =  s    %a((L>>>DAqN# 
3 
3
 
 
 	1d12222!q 11111!q 1111111r+   csr_containerc           	      b   t          d          }|                    dd          }d||                    ddd          |                    ddd          f<    ||          }t          ddddd| d	
          }|                    |          }t          t          ||d          dd           d S )Nr   rT   r?   r;      r   r    r   i  )r   r   rx   rC   rm   r   r@   r   r   rG   g)\(?rtol)r   rc   randintr
   r   r   r   )r   r   r   r   X_csrr   r   s          r)   test_fit_transform_csr_matrixr   Q  s     Q

C		"aA9<As{{1b"s{{1a4456M!E  D ##E**JOE:1EEEsQWXXXXXXr+   c                  >   t          d          } t          d          D ]}}|                     dd          }t          t	          |          d          }t          ddddd|dd	d
	  	        }|                    |          }t          ||dd          }|dk    sJ ~d S )Nr   r`   P   r?   sqeuclideanr          @precomputed  r   )	r   rx   rC   early_exaggerationmetricrm   rF   r@   r   r   )r   r   gffffff?)r   rk   rc   r   r   r
   r   r   )rm   r]   r   Dr   r   r   s          r)   Ftest_preserve_trustworthiness_approximately_with_precomputed_distancesr   h  s    %a((L1XX  r1%%uQxx//" 

 

 

 ''**
AzqOOO4xxxxx! r+   c                      t          d          } |                     dd          }t          ||d          t          t          |d          |d          k    sJ d S )Nr   r>   r?   cosiner   r   )r   rc   r   r   )rm   r   s     r)   )test_trustworthiness_not_euclidean_metricr   ~  s{     &a((L3""A1a111_1X...-6 6 6      r+   zmethod, retypec                     g | ]}d |fS )r   r8   )r\   r   s     r)   r_   r_     s    	L	L	LM<
'	L	L	Lr+   zD, message_regexr;   rG   z.* square distance matrixg      z.* positive.*c                     t          d| ddd          }t          j        t          |          5  |                     ||                     d d d            d S # 1 swxY w Y   d S )Nr   r   rt   r   r   r   r   rm   rx   r   )r
   r   r   r   r   )r   r   retypemessage_regexr   s        r)   test_bad_precomputed_distancesr     s        D 
z	7	7	7 & &66!99%%%& & & & & & & & & & & & & & & & & &s   AA #A c                     t          ddddd          }t          j        t          d          5  |                     | d	d
gd
d	gg                     d d d            d S # 1 swxY w Y   d S )Nr   r   r   rt   r   r   sparser   r   rU   r
   r   r   	TypeErrorr   r   r   s     r)    test_exact_no_precomputed_sparser     s      D 
y	1	1	1 < <==1a&1a&)9::;;;< < < < < < < < < < < < < < < < < <s   %A""A&)A&c                    t          j        g dg dg dg          } | |          }t          dddd          }d}t          j        t
          |	          5  |                    |           d d d            d S # 1 swxY w Y   d S )
N)rG   r;   r;   )r;   rG   r;   r   r   rt   r   )r   r   rm   rx   zB3 neighbors per samples are required, but some samples have only 1r   )r/   r0   r
   r   r   r   r   )r   distbad_distr   msgs        r)   1test_high_perplexity_precomputed_sparse_distancesr     s     8___oooGHHD}T""H}8"QRSSSD
NC	z	-	-	- % %8$$$% % % % % % % % % % % % % % % % % %s   A<<B B zaignore:Precomputed sparse input was not sorted by row values:sklearn.exceptions.EfficiencyWarningsparse_containerc                    t          d          }|                    dd          }t          |ddd          }t          |          }t	          j        |          sJ t          |                                |           t          dddd	
          }|	                    |          }|	                     | |                    }t          ||           dS )zAMake sure that TSNE works identically for sparse and dense matrixr   r>   r?   r~   T)r   r   include_selfr   r   r   )r   rm   r   rC   N)
r   rc   r   r   spissparser   r   r
   r   )r  rm   r   D_sparser   r   Xt_dense	Xt_sparses           r)    test_sparse_precomputed_distancer	    s     &a((L3""AsRVWWWH1A;x     ((**A...186  D !!!$$H""#3#3H#=#=>>I),,,,,r+   c                      d } t          | dd          }t          j        ddgddgg          }t          j        t
          d          5  |                    |           d d d            d S # 1 swxY w Y   d S )	Nc                     dS r&   r8   )xys     r)   r   z4test_non_positive_computed_distances.<locals>.metric  s    rr+   r   r   )r   r   rx   r;   rG   zAll distances .*metric given.*r   )r
   r/   r0   r   r   r   r   )r   r   r   s      r)   $test_non_positive_computed_distancesr    s       vg!<<<D
3*sCj)**A	z)I	J	J	J  1                 s   A..A25A2c                      t          t          j        d          d          } |                     t          j        d                    }t          t          j        d          |           d S )Nr>   r?   r   )r   rC   )r>   rU   )r
   r/   rL   r   r<   r   )r   r   s     r)   test_init_ndarrayr    s[    RXh''v>>>D##BGH$5$566Jrx)):66666r+   c                      t          t          j        d          dd          } |                     t          j        d                     d S )Nr  r   g      I@)r   r   rC   )r>   r>   )r
   r/   rL   r   r   s    r)   test_init_ndarray_precomputedr    sO     Xh  D
 	HHRXj!!"""""r+   c                      t          ddd          } t          j        t          d          5  |                     t          j        dgdgg                     d d d            d S # 1 swxY w Y   d S )	Nr   r   r   )r   r   rx   zBThe parameter init="pca" cannot be used with metric="precomputed".r   r;   rG   r
   r   r   r   r   r/   r0   r  s    r)   >test_pca_initialization_not_compatible_with_precomputed_kernelr    s    }5Q???D	R
 
 
 5 5 	28cUSEN33444	5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5   ,A''A+.A+c                     t          ddd          }t          j        t          d          5  |                     | ddgddgg                     d d d            d S # 1 swxY w Y   d S )	Nr   r   r   )r   rC   rx   zPCA initialization.*r   r   rU   r   r   s     r)   8test_pca_initialization_not_compatible_with_sparse_inputr    s     U%A>>>D	y(>	?	?	? < <==1a&1a&)9::;;;< < < < < < < < < < < < < < < < < <s   %A  A$'A$c                      t          ddd          } t          j        t          d          5  |                     t          j        dgdgg                     d d d            d S # 1 swxY w Y   d S )	Nr   r   r   )r   r   rx   z'n_components' should be .*r   r;   rG   r  r  s    r)   test_n_components_ranger    s    Q|BBBD	z)F	G	G	G 5 528cUSEN334445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5r  c                  ~   t          d          } d}ddg}|                     d|                              t          j                  }|D ]q}t          |dddd|d	d
          }|                    |          }t          |dddd|dd
          }|                    |          }t          j        ||          rJ rd S )Nr   r?   r   r   r   r   r   r   rG   r   r   rx   rC   r   rm   r   r   r@   r-   )r   rc   rd   r/   re   r
   r   allclose)rm   r   methodsr   r   r   X_embedded1X_embedded2s           r)   test_early_exaggeration_usedr#  
  s    %a((LL%G2|,,33BJ??A 9 9%"	
 	
 	
 ((++%#	
 	
 	
 ((++;{K88888819 9r+   c                  "   t          d          } d}ddg}|                     d|                              t          j                  }|D ]C}dD ]>}t          |ddd	d|d
|          }|                    |           |j        |dz
  k    sJ ?Dd S )Nr   r?   r   r   r   )   r   r         ?r   rG   r  )r   rc   rd   r/   re   r
   r   n_iter_)rm   r   r   r   r   r@   r   s          r)   test_max_iter_usedr(  +  s    %a((LL%G2|,,33BJ??A 0 0" 	0 	0H)!#&!	 	 	D q!!!<8a</////	00 0r+   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          |||||            d S )NrG   r;   gbv
gCrgJ!zE?g)x>1?r   r   gKXAgr}gKXA>gr}?r/   r0   _run_answer_testr   	pos_input
pos_output	neighborsgrad_outputs        r)   test_answer_gradient_two_pointsr1  B  s     3*sCj122I
	',)EF J 1#s$$I(
?	+nn-MN K Y
I{MRRRR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          |||||            d S )NrG   r;   r   r   333333@皙@$1?m5a ҇&IimU-|3Sٵ?:ǁ$*r   r?   r`   r   r?   r`   r   r   r`   r   r?   r   g\$w?gRn		Qgz}g`>41f>6Sc>gU9&#*@>r*  r,  s        r)    test_answer_gradient_four_pointsrE  S  s     3*sCj3*sCjIJJI=)M*L)M*		
 J )))YYY			999EFFI(_-n-_-n-		
 K Y
I{MRRRRRr+   c           
      2   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           d S )NrG   r;   r   r   r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  F皙?r?   r*  r,  s        r)   test_skip_num_points_gradientrH  n  s     3*sCj3*sCjIJJI=)M*L)M*		
 J )))YYY			999EFFI(#J#J_-n-		
 K :y+}eSRS    r+   FrG  c                    t          |                               t          j                  }|||f}	|                    t          j                  }|                    t          j        d          }t          |	 }
t          |
                              t          j                  }
t          j        |j        t          j                  } ||
          }|j	                            t          j                  }|j
                            t          j                  }t          j        |j        ||||dddd	  	         t          ||d	
           d S )NFr|   )dtyper&  r?   r   r   )skip_num_pointsr   ra   )r   rd   r/   re   int64r   r   rL   rl   r   r   r   gradientrn   r   )r-  r.  r/  r0  r   rF   rx   rK  ro   args	pij_inputgrad_bhr^   r   s                 r)   r+  r+    s$    #9--44RZ@@Ij')D""2:..J   66I$d+I9%%,,RZ88Ihz'rz:::Gi  A	  **IX__RX&&F	
IvwQST    g{A>>>>>>r+   c                  N   t          d          } t          dd          }|                     dd          }t          j        }t                      t          _        	 |                    |           t          j                                        }t          j                                         |t          _        nM# t          j                                        }t          j                                         |t          _        w xY wd|v sJ d|v sJ d|v sJ d	|v sJ d
|v sJ d S )Nr   r?   r   )rF   rx   rU   z[t-SNE]znearest neighbors...z"Computed conditional probabilitiesz
Mean sigmazearly exaggeration)	r   r
   rc   rJ   rK   r   r   rM   rN   )rm   r   r   rO   rQ   s        r)   test_verboserR    s)   %a((La(((D1a  AJCJ 1j!!##


 j!!##

!S((((/3666633&&&&&&s   B: :A
Dc                      t          d          } t          dd          }|                     dd          }|                    |           d S )Nr   	chebyshevr   )r   rx   rU   r?   )r   r
   rc   r   )rm   r   r   s      r)   test_chebyshev_metricrU    sP    %a((L{q111D1a  Aqr+   c                      t          d          } t          dd          }|                     dd          }|                    |          j        }t          j        t          j        |                    sJ d S )Nr   r   r   )r   rx   rU   r?   )r   r
   rc   r   
embedding_r/   allisfinite)rm   r   r   r   s       r)   test_reduction_to_one_componentrZ    sn    %a((LQ1---D1a  A!'J6"+j))*******r+   dtc           
         t          d          }|                    dd                              |d          }t          dddd| ddd	          }|                    |          }|j        }|t          j        k    sJ d S )
Nr   r    r?   Fr|   r   r   r   r   rx   rC   rm   r   rF   r@   r   )r   rc   rd   r
   r   rJ  r/   re   )r   r[  rm   r   r   r   effective_types          r)   
test_64bitr_    s     &a((L2q!!((%(88A	 	 	D ##A&&J%N RZ''''''r+   c           
          t          d          }|                    dd          }t          dddd| ddd          }|                    |           t	          j        |j                  rJ d S )Nr   rT   r?   r   i  r   r]  )r   rc   r
   r   r/   isnanr   )r   rm   r   r   s       r)   test_kl_divergence_not_nanrb    s     &a((L2q!!A	 	 	D 	qx+,,,,,,,r+   c                     d} d}d}dD ]7}d}t          |dz
            }t          d          }|                    ||          }t          |          }|                    ||          }	t	          ||d          }
t          |	|
|||          \  }}|d	z
  }t                                          |                              |d
          }t          ||d          }t          |	||||| dd          \  }}t          |
          }
|                                }t          ||
d           t          ||d           9d S )Nr;   r    r>   )r?   r`   rU   rG   r   rW   r   r~   r   )anglerK  rF   ra   r`   )floatr   rc   r   r   r   r   r   r   r   r   r   r   r   r   )rd  rx   r   r   r   degrees_of_freedomrm   rn   ro   r   r^   kl_exact
grad_exactr   distances_csrP_bhkl_bhrP  s                     r)   test_barnes_hut_anglerl    s   EJI "8 "8
"<##566)!,,!!)Z88&t,,	##I|<< JBBB-A)9l 
  
*  !mSYY+JGG 	
 '}j!LLL*	
 	
 	
w qMM||~~!$15555HeQ77777E"8 "8r+   c            
      N   t          d          } |                     dd          }dD ]}t          dddd|dd	
          }d|_        d|_        t
          j        }t                      t
          _        	 |                    |           t
          j        	                                }t
          j        
                                 |t
          _        nM# t
          j        	                                }t
          j        
                                 |t
          _        w xY wd|v sJ d S )Nr   r>   r    )r   r   r!   r?   g    חAi_  r   )rA   rF   rC   rm   r   r@   r   r   z@did not make any progress during the last -1 episodes. Finished.)r   rc   r
   _N_ITER_CHECK_EXPLORATION_MAX_ITERrJ   rK   r   r   rM   rN   )rm   r   r   r   rO   rQ   s         r)   test_n_iter_without_progressrp  +  s.    &a((L3##A) Y Y$&
 
 
 %&"Z
ZZ
	$q!!!*%%''CJ#CJJ *%%''CJ#CJ#### RUXXXXXX/Y Ys   3CA
Dc                     t          d          } |                     dd          }d}t          |ddd          }t          j        }t                      t          _        	 |                    |           t          j                                        }t          j                                         |t          _        nM# t          j                                        }t          j                                         |t          _        w xY w|	                    d          }g }|D ]~}d|v r nw|
                    d	          }	|	dk    r[||	d          }|                    d
d          	                    d          d         }|                    t          |                     t          j        |          }t!          |||k                       }
|
dk    sJ d S )Nr   r>   r?   gMb`?r   )rE   rF   rm   r   
FinishedrH   zgradient norm =   r   )r   rc   r
   rJ   rK   r   r   rM   rN   splitfindreplacer   re  r/   r0   len)rm   r   rE   r   rO   rQ   	lines_outgradient_norm_valueslinestart_grad_normn_smaller_gradient_normss              r)   test_min_grad_normr  J  s   %a((L3""AMmQQwWWWDJCJ 1j!!##


 j!!##

		$I  
5 
5 E))O44a(()D<< 2B77==cBB1ED ''d444 8$899"1]BC    $q((((((s    B> >A
Dc                     t          d          } |                     dd          }t          ddddd          }t          j        }t                      t          _        	 |                    |           t          j                                        }t          j                                         |t          _        nM# t          j                                        }t          j                                         |t          _        w xY w|	                    d          d d d         D ]<}d	|v r6|
                    d
          \  }}}|r|
                    d          \  }}} n=t          |j        t          |          d           d S )Nr   rT   r?   r   r   )rA   rF   rm   r   r@   rr  r!   	Iterationzerror = ,rU   ra   )r   rc   r
   rJ   rK   r   r   rM   rN   rv  	partitionr   r   re  )rm   r   r   rO   rQ   r|  r1   rP   s           r)   test_accessible_kl_divergencer  u  sr   %a((L2q!!A !  D JCJ 1j!!##


 j!!##

 		$"%  $..44KAq% #ooc22q!+U5\\1EEEEEEs   B= =A
Dc           
      l   t          d          }d}|D ]}t          dd|d|| d          }|                    t                    }d                    | |          }	 t          ||           Z# t          $ r9 |d	z  }||_        |                    t                    }t          ||           Y w xY wd
S )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.
    r`   r   r?   r   rT   r   )r   r   rm   rx   r@   r   rC   z{}_{}z:rerunN)rk   r
   r   	X_2d_gridformatassert_uniform_gridAssertionErrorr   )r   seedsr@   seedr   Ytry_names          r)   test_uniform_gridr    s     !HHEH - - 
 
 
 y))>>&$//		-8,,,, 	- 	- 	-  HDI""9--A8,,,,,	-- -s   A..A B10B1c                    t          d                              |           }|                    d          d                                         }|                                dk    sJ |                                t          j        |          z  }|                                t          j        |          z  }|dk    s
J |            |dk     s
J |            d S )	Nr   r   T)return_distancer   rG  r&  r?   )r   r   
kneighborsr   minr/   rj   max)r  r  r   
dist_to_nnsmallest_to_meanlargest_to_means         r)   r  r    s     
a	(	(	(	,	,Q	/	/Bt44Q7==??J>>c!!!!!~~''"'**=*== nn&&)<)<<Oc!!!8!!!Qr+   c                     t          d          } d}|                     d|                              t          j                  }i }i }dD ]B}t          d|ddddd	d
          }d|_        |                    |          ||<   |j        ||<   C|d         |d         k    sJ t          |d         |d         d           d S )Nr   r       )r   r   r?   rG   r   r%  g     =@)r   r   rC   r   rm   r@   rx   rd  r   r   g-C6?r   )
r   rc   rd   r/   re   r
   ro  r   r'  r   )rm   r   r   X_embeddedsr@   r   r   s          r)   test_bh_match_exactr    s     &a((LJ2z**11"*==AKH) ( (	
 	
 	
 &'""0033F<G 66666K(+l*C$OOOOOOr+   c                  "   d} d}d}d}d}d}t          d          }|                    ||                               t          j                  }|                    ||          }|dz
  }	t                                          |                              |	d	          }
t          |
|d
          }t          ||||||ddd	  	        \  }}dD ]?}t          ||||||dd|	  	        \  }}t          ||d           t          ||           @d S )Nr    r  r?   r   r`   rU   r   r~   r   rW   )rd  rK  rF   num_threads)r?   r   gư>r   )r   rc   rd   r/   re   r   r   r   r   r   r   )r   r   r   rf  rd  rx   rm   rn   r   r   ri  rj  kl_sequentialgrad_sequentialr  kl_multithreadgrad_multithreads                    r)   -test_gradient_bh_multithread_match_sequentialr    se    JILEJ%a((Li44;;BJGGD	<88Fa-K	T		k
		C	C 
 #=*aHHHD%6
& 
& 
&"M?  < <+<#
,
 
,
 
,
(( 	DAAAA(*:;;;;< <r+   zmetric, dist_func	manhattanr   c           	         |dk    r| dk    rt          j        d           t          d          }d}d}|                    d|                              t
          j                  }t          | ||ddd	d
                              |          }t          d||ddd	d
                               ||                    }t          ||           dS )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   r`   r?   rT   r   r   r   )r   r   r   rm   r@   r   rC   r   N)
r   xfailr   rc   rd   r/   re   r
   r   r   )	r   	dist_funcr   rm   n_components_originaln_components_embeddingr   X_transformed_tsneX_transformed_tsne_precomputeds	            r)   )test_tsne_with_different_distance_metricsr    s    &K"7"7 	5	
 	
 	

 &a((L2455<<RZHHA+   mA  &*+& & & mIIaLL!! # )+IJJJJJr+   c           
         t          d          }d}|                    d|          }t          d| dddddd	                              |          }t          d| dddddd	                              |          }t	          ||           d
S )z=Make sure that the n_jobs parameter doesn't impact the outputr   r    r  r?   rV   r   r   r   )r   r   rx   rd  n_jobsrm   r   rC   N)r   rc   r
   r   r   )r   rm   r   r   X_tr_refX_trs         r)   test_tsne_n_jobsr  M  s     &a((LJ2z**A	 	 	 mA  	 	 	 mA 	 Hd#####r+   c                  4   t          d          } d\  }}|                     ||          }ddddddd}t          dd	d
i|}d}t          j        t
          |          5  |                    |           ddd           n# 1 swxY w Y   t          t          |d
          d          }t          dd	di|                    |          }t          dd
dt          j
        |j                  id|                    |          }	t          |	|           dS )zAMake sure that method_parameters works with mahalanobis distance.r   )r   r    (   r   r   r   r`   )rx   r@   rC   r   r   rm   r   mahalanobisz4Must provide either V or VI for Mahalanobis distancer   Nr   T)checksr   V)r   metric_paramsr8   )r   rc   r
   r   r   r   r   r   r   r/   covr   r   )
rm   r   r   r   default_paramsr   r   precomputed_XX_trans_expectedX_transs
             r)   #test_tsne_with_mahalanobis_distancer  k  s   %a((L#Iz9j11A N 77}777D
@C	z	-	-	-  1               uQ}===dKKKMCC=CNCCQQ   S"&++,> BP mA  G-.....s   BBBrx   )   r  c                    t          d          }|                    dd          }t          dd| |          }d}t          j        t
          |          5  |                    |           d	d	d	           d	S # 1 swxY w Y   d	S )
z=Make sure that perplexity > n_samples results in a ValueErrorr   r  r?   r   r   )rC   r   rx   rm   z&perplexity must be less than n_samplesr   Nr   rc   r
   r   r   r   r   )rx   rm   r   estr   s        r)   test_tsne_perplexity_validationr    s     &a((L2q!!A
!	  C 3C	z	-	-	-  !                 s   A99A= A=c                     t          j        d           t          d          5  t          j        d                              dd          } t          d                              |            ddd           dS # 1 swxY w Y   dS )	ziMake sure that TSNE works when the output is set to "pandas".

    Non-regression test for gh-25365.
    pandas)transform_output   #   r   r?   )r   N)r   importorskipr   r/   r   r   r
   r   )arrs    r)   "test_tsne_works_with_pandas_outputr    s    
 !!!		2	2	2 0 0i''A..!**3///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   AA>>BBc                     t          d          } |                     dd          }t          d          }d}t          j        t
          |          5  |                    |           ddd           dS # 1 swxY w Y   dS )	z$Check `n_iter` parameter deprecated.r   r  r>   r   )n_iterz"'n_iter' was renamed to 'max_iter'r   N)r   rc   r
   r   warnsFutureWarningr   rm   r   r   r   s       r)   test_tnse_n_iter_deprecatedr    s    %a((L2s##AsD
.C	m3	/	/	/  1                 s   A66A:=A:c                     t          d          } |                     dd          }t          dd          }d}t          j        t
          |          5  |                    |           d	d	d	           d	S # 1 swxY w Y   d	S )
z9Check error raised when `n_iter` and `max_iter` both set.r   r  r>   r   r   )r  r@   z0Both 'n_iter' and 'max_iter' attributes were setr   Nr  r  s       r)   "test_tnse_n_iter_max_iter_both_setr    s    %a((L2s##AsS)))D
<C	z	-	-	-  1                 s   A77A;>A;)FrG  r   )N)qrJ   ior   numpyr/   r   scipy.sparser   r  numpy.testingr   scipy.optimizer   scipy.spatial.distancer   r   sklearnr   sklearn.datasetsr	   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   sklearn.utils.fixesr   r   r   r  meshgridxxyyhstackr   r   r  rR   rr   ry   r   r   r   r   r   markparametrizer   r   r   r   r   asarrayr   r   r   filterwarningsr	  r  r  r  r  r  r  r#  r(  r1  rE  rH  r+  rR  rU  rZ  re   float64r_  rb  rl  rp  r  r  r  r  r  r  r  r  r  r  r  r  r  r8   r+   r)   <module>r     s   



                  ) ) ) ) ) ) % % % % % % 4 4 4 4 4 4 4 4 " " " " " " ' ' ' ' ' '                       > = = = = =         
 A @ @ @ @ @ @ @ , , , , , ,            ? > > > > > > >BK1b	Q		BBI


2q!!


2q!! 	S! S! S!lH H H	C 	C 	C); ); );X> > >6S S S2L L L(    G\#:;;!233  43 <;$2 2 2( G\#:;;.99Y Y :9 <;Y*  ,   	"*	rz" 
M	L^	L	L	L  %#45+Sz	"O4 	& 	&  	& .99	< 	< :9	< .99% % :9% 6  +^n-LMM- - NM	 
-&	 	 	7 7 7# # #5 5 5 .99< < :9<5 5 59 9 9B0 0 0. .99S S :9S  .99S S :9S4 .99  :9J ? ? ? ?:' ' ',  + + + L'#:;;
BJ788( ( 98 <;(. L'#:;;- - <;-*'8 '8 '8T Y Y Y<() () ()VF F F@ L'#:;;$- $- <;$-N) ) ) )P P P80< 0< 0<f &'(4D)EF  L'#:;;*K *K <;	 
*KZ G\#:;;$ $ <;$:/ / /< x00  10 0 0 0      r+   