
    >[g-              	       d	   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jb                  d dd      Z2 ejf                  e2e2      \  Z4Z5 ejl                  e4jo                         jq                  dd      e5jo                         jq                  dd      g      Z9d Z:d Z;d Z<d Z=d Z>d Z?d Z@d ZAej                  j                  dddg      ej                  j                  dd      d                ZDd! ZEej                  j                  dddg      ej                  j                  d"e/      d#               ZFd$ ZGd% ZHej                  j                  d&dej                  fdej                  fge/D  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-               ZJej                  j                  d"e/      d.        ZKej                  j                  d"e/      d/        ZLej                  j                  d0      ej                  j                  d1e/e0z         d2               ZNd3 ZOd4 ZPd5 ZQd6 ZRej                  j                  d"e/      d7        ZSd8 ZTd9 ZUd: ZVej                  j                  d"e/      d;        ZWej                  j                  d"e/      d<        ZXej                  j                  d"e/      d=        ZY	 	 	 dYd>ZZd? Z[d@ Z\dA Z]ej                  j                  dddg      ej                  j                  dBej                  ej                  g      dC               Z`ej                  j                  dddg      dD        ZadE Zbe-dF        ZcdG ZddH Zeej                  j                  dddg      dI        ZfdZdJZgdK ZhdL Ziej                  j                  dMdNe"fdOe!fg      ej                  j                  dddg      dP               Zjej                  j                  dddg      dQ        ZkdR Zlej                  j                  dSdT      dU        ZmdV ZndW ZodX Zpyc c} w )[    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                      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    \/var/www/html/bid-api/venv/lib/python3.12/site-packages/sklearn/manifold/tests/test_t_sne.py__init__zDtest_gradient_descent_stops.<locals>.ObjectiveSmallGradient.__init__8   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*   r3    r+   r)   ObjectiveSmallGradientr$   7   s    		;r+   r9   c                 0    dt        j                  d      fS )N        r   )r/   ones)r1   r2   s     r)   flat_functionz2test_gradient_descent_stops.<locals>.flat_function?   s    BGGAJ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   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@rF      decimal)r   randnr   astyper/   float32r   maximumfinfodoubleepsmeanrangeshapeexpsumlogr   )random_statedata	distancesdesired_perplexityPimean_perplexitys          r)   test_binary_searchro      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   rW   r?   rX   rY   )	r   r[   r\   r/   r]   r   nansumlog2r   )rh   ri   rk   rl   
perplexitys        r)   test_binary_search_underflowrv      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   rV   r   r?   FcopyrW   r   distancen_neighborsmode   rY      rU   r    r!   )r   r[   r\   r/   r]   r   r   r   fitr   ri   reshapeindptrr0   rc   indicesr   linspaceintargsortravel)	n_samplesrk   rh   ri   rj   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   rU   r{   r|   Fry   rX   rW   r   rY   )r   r[   r   r   r   ri   r\   r/   r]   r   rc   r   rz   r   toarrayr   )r}   r   rh   ri   r   r   rj   last_Prk   r1   rl   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   rT   r?   rG   r;   rV   )rk   rF   c                 (    t        |       d   S )Nr   r   paramsrl   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+   rU   rY   )r   r[   r\   r/   r]   absdotTfill_diagonalr   r   r   r   )
rh   
n_featuresrj   
X_embeddedr   r   rl   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>   r?         @r-   rG   r!   r   g333333?rU   r   rX   r}   g?)
r   r[   r   r/   aranger   rz   shuffler0   r   )rh   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 .+rq      r   r?   matchrU   r   NrX   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	/: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   r?   rT   i  auto)r   r   rh   r   r@   rC   r   r   g333333?)r   r[   r\   r/   r]   r
   fit_transformr   )r   r   rh   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   rX   )r   rh   )   ,  i^  r?   r   r          Y@)r   r   ru   rC   r@   rh   r   N)r   r	   r
   r   appendkl_divergence_)rh   r   r1   kl_divergencesr@   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   rT   r?   r;      r   r    r   i  )r   r   ru   rC   rh   r   r@   r   r   rG   g)\(?rtol)r   r[   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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   rX   P   r?   sqeuclideanr          @precomputed  r   )	r   ru   rC   early_exaggerationmetricrh   rF   r@   r   r   )r}   r   gffffff?)r   rc   r[   r   r   r
   r   r   )rh   rm   r   Dr   r   r   s          r)   Ftest_preserve_trustworthiness_approximately_with_precomputed_distancesr   h  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>   r?   cosiner   r   )r   r[   r   r   )rh   r   s     r)   )test_trustworthiness_not_euclidean_metricr   ~  sP     &a(L3"A1a1_1X.-6   r+   zmethod, retypezD, message_regexr;   rG   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   rq   r   r   r   r   rh   ru   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   rq   r   r   sparser   r   rU   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)rG   r;   r;   )r;   rG   r;   r   r   rq   r   )r   r   rh   ru   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     sa     88_oGHDT"H}8"QRSD
NC	z	-8$ 
.	-	-s   A..A7zaignore:Precomputed sparse input was not sorted by row values:sklearn.exceptions.EfficiencyWarning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>   r?   r{   T)r}   r~   include_selfr   r   r   )r   rh   r   rC   N)
r   r[   r   r   spissparser   r   r
   r   )r   rh   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&   r8   )xys     r)   r   z4test_non_positive_computed_distances.<locals>.metric  s    r+   r   r   )r   r   ru   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1 
K	J	J   A##A,c                      t        t        j                  d      d      } | j                  t        j                  d            }t        t        j                  d      |       y )Nr>   r?   r   )r   rC   )r>   rU   )r
   r/   rL   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   rC   )r>   r>   )r
   r/   rL   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   ru   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    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   rC   ru   zPCA initialization.*r   r   rU   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   ru   z'n_components' should be .*r   r;   rG   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   r?   r   r   r   r   r   r   rG   r   r   ru   rC   r   rh   r   r   r@   r-   )r   r[   r\   r/   r]   r
   r   allclose)rh   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   r?   r   r   r   )   r   r         ?r   rG   r  )r   r[   r\   r/   r]   r
   r   n_iter_)rh   r   r  r   r   r@   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 )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_pointsr-  B  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 )NrG   r;   r   r   333333@皙@$1?m5a ҇&IimU-|3Sٵ?:ǁ$*r   r?   rX   r   r?   rX   r   r   rX   r   r?   r   g\$w?gRn		Qgz}g`>41f>6Sc>gU9&#*@>r&  r(  s        r)    test_answer_gradient_four_pointsrA  S  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 )NrG   r;   r   r   r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  F皙?r?   r&  r(  s        r)   test_skip_num_points_gradientrD  n  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 )NFry   )dtyper"  r?   r   r   )skip_num_pointsr   rY   )r   r\   r/   r]   int64r   r   rL   rd   r   r   r   gradientri   r   )r)  r*  r+  r,  r   rF   ru   rG  rj   args	pij_inputgrad_bhrl   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   r?   r   )rF   ru   rU   z[t-SNE]znearest neighbors...z"Computed conditional probabilitiesz
Mean sigmazearly exaggeration)	r   r
   r[   rJ   rK   r   r   rM   rN   )rh   r   r   rO   rQ   s        r)   test_verboserN    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   ru   rU   r?   )r   r
   r[   r   )rh   r   r   s      r)   test_chebyshev_metricrQ    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   ru   rU   r?   )r   r
   r[   r   
embedding_r/   allisfinite)rh   r   r   r   s       r)   test_reduction_to_one_componentrV    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    r?   Fry   r   r   r   r   ru   rC   rh   r   rF   r@   r   )r   r[   r\   r
   r   rF  r/   r]   )r   rW  rh   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   rT   r?   r   i  r   rY  )r   r[   r
   r   r/   isnanr   )r   rh   r   r   s       r)   test_kl_divergence_not_nanr^    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>   )r?   rX   rU   rG   r   rW   r   r{   r|   )anglerG  rF   rY   rX   )floatr   r[   r   r   r   r   r   r   r   r   r   r   r   r   )r`  ru   r   r   r   degrees_of_freedomrh   ri   rj   r   rl   kl_exact
grad_exactr}   distances_csrP_bhkl_bhrL  s                     r)   test_barnes_hut_anglerh    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!   r?   g    חAi_  r   )rA   rF   rC   rh   r   r@   r   r   z@did not make any progress during the last -1 episodes. Finished.)r   r[   r
   _N_ITER_CHECK_EXPLORATION_MAX_ITERrJ   rK   r   r   rM   rN   )rh   r   r   r   rO   rQ   s         r)   test_n_iter_without_progressrl  +  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>   r?   gMb`?r   )rE   rF   rh   r   
FinishedrH   zgradient norm =   r   )r   r[   r
   rJ   rK   r   r   rM   rN   splitfindreplacer   ra  r/   r0   len)rh   r   rE   r   rO   rQ   	lines_outgradient_norm_valueslinestart_grad_normn_smaller_gradient_normss              r)   test_min_grad_normr{  J  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   rT   r?   r   r   )rA   rF   rh   r   r@   rn  r!   	Iterationzerror = ,rU   rY   )r   r[   r
   rJ   rK   r   r   rM   rN   rr  	partitionr   r   ra  )rh   r   r   rO   rQ   rx  r1   rP   s           r)   test_accessible_kl_divergencer  u  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.
    rX   r   r?   r   rT   r   )r   r   rh   ru   r@   r   rC   z{}_{}z:rerunN)rc   r
   r   	X_2d_gridformatassert_uniform_gridAssertionErrorr   )r   seedsr@   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   rC  r"  r?   )r   r   
kneighborsr   minr/   rb   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   r?   rG   r   r!  g     =@)r   r   rC   r   rh   r@   ru   r`  r   r   g-C6?r   )
r   r[   r\   r/   r]   r
   rk  r   r#  r   )rh   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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  r?   r   rX   rU   r   r{   r|   rW   )r`  rG  rF   num_threads)r?   r   gư>r   )r   r[   r\   r/   r]   r   r   r   r   r   r   )r   r   r   rb  r`  ru   rh   ri   r   r}   re  rf  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   rX   r?   rT   r   r   r   )r   r   r   rh   r@   r   rC   r   N)
r   xfailr   r[   r\   r/   r]   r
   r   r   )	r   	dist_funcr   rh   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  r?   rV   r   r   r   )r   r   ru   r`  n_jobsrh   r   rC   N)r   r[   r
   r   r   )r   rh   r   r   X_tr_refX_trs         r)   test_tsne_n_jobsr  M  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   rX   )ru   r@   rC   r   r   rh   r   mahalanobisz4Must provide either V or VI for Mahalanobis distancer   Nr   T)checksr   V)r   metric_paramsr8   )r   r[   r
   r   r   r   r   r   r   r/   covr   r   )
rh   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1AN 7}77D
@C	z	-1 
. uQ}=dKMC=CNCQQ  S"&&+,>BPmA  G-. 
.	-s   C--C6ru   )   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  r?   r   r   )rC   r   ru   rh   z&perplexity must be less than n_samplesr   Nr   r[   r
   r   r   r   r   )ru   rh   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   r?   )r   N)r   importorskipr   r/   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   rh   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  r@   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
  )FrC  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   ro   rv   r   r   r   r   r   markparametrizer   r   r   r   r   asarrayr   r   r   filterwarningsr  r	  r  r  r  r  r  r  r$  r-  rA  rD  r'  rN  rQ  rV  r]   float64r[  r^  rh  rl  r{  r  r  r  r  r  r  r  r  r  r  r  r  )r   s   0r)   <module>r     sJ   
     ) % 4 " '  > 
 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% :% 6 +^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I 
Ms   R-