Ë
    ÷Q(h-›  ã            	       ó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/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/manifold/tests/test_t_sne.pyÚ__init__zDtest_gradient_descent_stops.<locals>.ObjectiveSmallGradient.__init__8   s	   € ØˆD�Gó    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   € Ø�GŠG�q‰L�GØ˜Ÿ™‘L DÑ(¬"¯(©(°D°6Ó*:Ð:Ð: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   € Ø”B—G‘G˜A“JˆÐ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Ü“„C„Jð Ü(Ù"Ó$Ü�H‰H�Q‹KØØØ$'ØØØØØô
‰ˆˆ5�"ô �j‰j×!Ñ!Ó#ˆÜ�
‰
×ÑÔØŒŒ
Ø�CŠ<Ðˆ<Ø�Š7€Nˆ7Ø˜cÑ!Ð!Ð!ô —‘€JÜ“„C„Jð Ü(ØÜ�H‰H�Q‹KØØØ$&ØØØØØô
‰ˆˆ5�"ô �j‰j×!Ñ!Ó#ˆÜ�
‰
×ÑÔØŒŒ
Ø�CŠ<Ðˆ<Ø�Š8€Oˆ8Ø&¨#Ñ-Ð-Ð-ô —‘€JÜ“„C„Jð Ü(Ù"Ó$Ü�H‰H�Q‹KØØØ$'ØØØØØô
‰ˆˆ5�"ô �j‰j×!Ñ!Ó#ˆÜ�
‰
×ÑÔØŒŒ
Ø�CŠ<Ðˆ<Ø�Š8€Oˆ8Ø˜SÑ Ð Ñ øôk �j‰j×!Ñ!Ó#ˆÜ�
‰
×ÑÔØŒ�
ûô, �j‰j×!Ñ!Ó#ˆÜ�
‰
×ÑÔØŒ�
ûô, �j‰j×!Ñ!Ó#ˆÜ�
‰
×ÑÔØŒ�
ú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ØÐÜ! )Ð-?ÈÔK€AÜ
�
‰
�1”b—h‘hœrŸy™yÓ)×-Ñ-Ó.€AÜ—g‘gÜ7<¸Q¿W¹WÀQ¹ZÓ7HÖI°!Œ�‰”—‘˜˜!™œrŸv™v a¨¡d›|Ñ+Ó,Ð,Õ	-Ò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 Ó$×+Ñ+¬B¯J©JÓ7¸#Ñ=€DØÐÜ! $Ð(:ÀAÔF€AØ”r—y‘y  1 a¡b 5¡¬B¯G©G°A°a¸¹°e±HÓ,=Ñ!=Ó>Ð>Ñ>€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Ñ2´2·:±:ÀEÐ2ÓJ€DÜ" 4Ó(€IÜ	" 9Ð.@È!Ô	L€Bð ˜a‘-€KÜ	Ó	×	Ñ	 Ó	%€BØ×(Ñ(°[ÀzÐ(ÓR€NØ!×&Ñ&×-Ñ-¬b¯j©j¸uÐ-ÓE€LØ×'Ñ'¨	°;Ó?€LÜ	" <Ð1CÈQÔ	O€Bà×"Ñ"€FÜ�H‰Hô ˜9Ó%ö	
àð ˆq�.×(Ñ(¨°©°V¸AÀ¹E±]ÐCÐCÓDò	
ó€Eô ˜e R°Õ3ô �[‰[˜˜i¨!™m¨QÓ/ó ;ˆÜ�‹FˆØ�2‰vˆØ×,Ñ,¸ÀÐ,ÓLˆØ%×*Ñ*×1Ñ1´"·*±*À5Ð1ÓIˆØ#×+Ñ+¨I°qÓ9ˆÜ'¨Ð6HÐRSÔTˆÜ! %¨°QÕ7Ü�j‰j˜Ÿ™›Ó$¡T r TÑ*ˆØ—‘“
˜3‘  Ð&ˆÜ�j‰j˜Ÿ™›Ó%¡d¨ dÑ+ˆØ—	‘	“˜CÑ   $Ð'ˆÜ! %¨¸×:ñ;ùò	
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Ð(ÓR€NØ×#Ñ#×*Ñ*¬2¯:©:¸EÐ*ÓB€IØ×!Ñ! )¨[Ó9€IØ€FØÐÜ�3‹Zò 
>ˆÜ% i§n¡nÓ&6Ð8JÐTUÔVˆÜ$ ^Ð5GÐQRÔSˆà�Z‰Z‹\ˆØˆ>Øˆ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ü   ó   ø€ Ü˜f a¨°	¸<Ó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à×"Ñ" 9¨jÓ9×@Ñ@ÄÇÁÓL€IÜ—‘�y—}‘} Y§[¡[Ó1Ó2€IÜ×Ñ�Y Ô$Ø×#Ñ# I¨|Ó<×CÑCÄBÇJÁJÓO€Jä˜Y¸4ÈÔK€A÷L÷Lô œ
 3¨¨j×.>Ñ.>Ó.@ÓAÀ3ÐPQÖ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Ü˜1˜c A¨¡H™nÓ-°Ò4Ð4Ð4ô 	�	‰	�#‹×Ñ˜r 1Ó%€AØ—‘“€JØ×Ñ˜Ô$Ü˜1˜jÓ)¨CÒ/Ð/Ð/ô 	�	‰	�!‹×Ñ˜R Ó#€AÜ—‘˜A˜3   a S¨1¨#°¨sÐ3Ó4€JÜœ¨¨:À1ÔEÀsÕ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�   € ð
 4€EÜ
�)‰)×
Ñ
 Ó
#€CØ�‰��A‹€AØ—‘˜!˜Q“€JÜ	�‰”z¨Ô	/ñ 6Ü˜˜:°1Õ5÷6ô ˜A˜z°qÔ9€EØ�Œ?˜Š?Ð‰?Ð‰?÷	6ð 6ú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Ñ3´B·J±JÓ?€AÜØ!ØØØØØô€Dð ×#Ñ# AÓ&€JÜ˜˜:°1Ô5€AØˆtŠ8€O‰8r+   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Ü °Ô>�D€A€qØ€NØ#ò 
3ˆÜØØØØØØô
ˆð 	×Ñ˜1ÔØ×Ñ˜d×1Ñ1Õ2ð
3ð ˜!Ñ ¨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Ó€AØ9<€A€s‡{�{�1�b˜"Ó˜sŸ{™{¨1¨a°Ó4Ð5Ñ6Ù˜!Ó€EÜØØØØØØØô€Dð ×#Ñ# EÓ*€JÜ”O E¨:À1ÔEÀsÐQWÖ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Ü�1‹Xò ˆØ×Ñ˜r 1Ó%ˆÜ”u˜Q“x Ó/ˆÜØØØØ"Ø ØØØØô

ˆð ×'Ñ'¨Ó*ˆ
Ü˜A˜z°qÀÔOˆØ�4‹xˆˆ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Ü˜1˜a¨Ô1´_Ü˜1 XÔ.°¸-ô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ð   ˆ  sT   € ô  ØØØØØô€Dô 
�‰”z¨Ô	7ñ &Ø×Ñ™6 !›9Ô%÷&÷ &ñ &ús   ¬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ö   £  s`   € äØØØØØô€Dô 
�‰”y¨Ô	1ñ <Ø×Ñ™=¨1¨a¨&°1°a°&Ð)9Ó:Ô;÷<÷ <ñ <ús   ¬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û   °  sj   € ô �8‰8’_¢o²ÐGÓH€DÙ˜TÓ"€HÜ�}¨8À"ÐQRÔS€DØ
N€CÜ	�‰”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ÔW€HÜ˜1Ó€AÜ�;‰;�xÔ Ð Ð Ü˜×(Ñ(Ó*¨AÔ.äØ¨1°8È6ô€Dð ×!Ñ! !Ó$€Hà×"Ñ"Ñ#3°HÓ#=Ó>€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	  Ó  sd   € òô �v g¸!Ô<€DÜ
�‰�3˜�*˜s C˜jÐ)Ó*€AÜ	�‰”zÐ)IÔ	Jñ Ø×Ñ˜1Ô÷÷ ñ úó   Á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   € ä”R—X‘X˜hÓ'°vÔ>€DØ×#Ñ#¤B§G¡G¨HÓ$5Ó6€JÜ”r—x‘x Ó)¨:Õ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   € ô Ü�X‰X�hÓØØô€Dð
 	‡H�HŒR�X‰X�jÓ!Õ"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  ñ  sX   € ä�}¨5¸QÔ?€DÜ	�‰ÜØRô
ñ 5ð 	×Ñœ2Ÿ8™8 c U¨S¨E NÓ3Ô4÷	5÷ 5ñ 5úó   ª)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  û  sV   € ô �U¨%¸AÔ>€DÜ	�‰”yÐ(>Ô	?ñ <Ø×Ñ™=¨1¨a¨&°1°a°&Ð)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    sS   € ä˜Q |ÀÔB€DÜ	�‰”zÐ)FÔ	Gñ 5Ø×Ñœ2Ÿ8™8 c U¨S¨E NÓ3Ô4÷5÷ 5ñ 5úr  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Ñ3´B·J±JÓ?€AØò 9ˆÜØ%ØØØØØØ"Øô	
ˆð ×(Ñ(¨Ó+ˆÜØ%ØØØØØØ#Øô	
ˆð ×(Ñ(¨Ó+ˆä—;‘;˜{¨KÕ8Ð8Ð8ñ19r+   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Ñ3´B·J±JÓ?€AØò 0ˆØ"ò 	0ˆHÜØ)ØØ!ØØØØ#&Ø!ô	ˆDð ×Ñ˜qÔ!à—<‘< 8¨a¡<Ó/Ð/Ð/ñ	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        ||||| «       y )NrG   r;   gbv›î
¿güC…r³¿gJ!zëE?gÒ)§x>µ1?r   r   g¹KÈXAÚø¾gµÎþr}¿g¹KÈXAÚø>gµÎþr}?©r/   r0   Ú_run_answer_test©rÖ   Ú	pos_inputÚ
pos_outputÚ	neighborsÚgrad_outputs        r)   Útest_answer_gradient_two_pointsr-  B  s‰   € ô —‘˜3 ˜* s¨C jÐ1Ó2€IÜ—‘Ø
˜Ð	'¨,¸Ð)EÐFó€Jô —‘˜1˜# ˜s˜Ó$€IÜ—(‘(Ø
˜?Ð	+¨n¸nÐ-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 ƒÒ‡&¿çIiò³mù¿çU Ÿ Æ-¿çÜ|3SÙµ?ç›È:Ç�¿çä$Ä*¹Ç¿©r   r?   rX   ©r   r?   rX   ©r   r   rX   ©r   r?   r   g\¥$Æw?g×Rn		Qà¾gz¡}¿g³«ûÙÕ`à>ç�4Ž1Çf>ç6×ÆS×c¾ç>ÛÔgU9&¾ç¸#£*@>r&  r(  s        r)   Ú test_answer_gradient_four_pointsrA  S  s¼   € ô —‘˜3 ˜* s¨C j°3¸°*¸sÀC¸jÐIÓJ€IÜ—‘à˜=Ð)Ø˜MÐ*Ø˜LÐ)Ø˜MÐ*ð		
ó€Jô —‘š)¢Y²	º9ÐEÓF€IÜ—(‘(à˜_Ð-Ø˜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 ˜* s¨C j°3¸°*¸sÀC¸jÐIÓJ€IÜ—‘à˜=Ð)Ø˜MÐ*Ø˜LÐ)Ø˜MÐ*ð		
ó€Jô —‘š)¢Y²	º9ÐEÓF€IÜ—(‘(à�#ˆJØ�#ˆJØ˜_Ð-Ø˜nÐ-ð		
ó€Kô Ø�:˜y¨+°}ÀeÈSÐRSõ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Ñ4´R·Z±ZÓ@€IØ�j 'Ð)€DØ×"Ñ"¤2§:¡:Ó.€JØ× Ñ ¤§¡°Ð Ó6€IÜ$ dÐ+€IÜ˜9Ó%×,Ñ,¬R¯Z©ZÓ8€IÜ�h‰h�z×'Ñ'¬r¯z©zÔ:€Gá�iÓ €Aà—	‘	× Ñ ¤§¡Ó*€IØ�X‰X�_‰_œRŸX™XÓ&€Fä×ÑØ	�‰�
˜I v¨w¸¸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Ø×Ñ˜1˜aÓ €Aä—‘€JÜ“„C„Jð Ø×Ñ˜1Ôä�j‰j×!Ñ!Ó#ˆÜ�
‰
×ÑÔØŒŒ
à˜ÑÐÐØ! SÑ(Ð(Ð(Ø/°3Ñ6Ð6Ð6Ø˜3ÑÐÐØ 3Ñ&Ð&Ñ&øô �j‰j×!Ñ!Ó#ˆÜ�
‰
×ÑÔØŒ�
ú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Ô1€DØ×Ñ˜1˜aÓ €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Ü˜Q¨1Ô-€DØ×Ñ˜1˜aÓ €AØ—‘˜!“×'Ñ'€JÜ�6‰6”"—+‘+˜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à×Ñ˜2˜qÓ!×(Ñ(¨°%Ð(Ó8€AÜØØØØØØØØô	€Dð ×#Ñ# AÓ&€JØ×%Ñ%€Nð œRŸZ™ZÒ'Ð'Ñ'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à×Ñ˜2˜qÓ!€AÜØØØØØØØØô	€Dð 	×Ñ�qÔä�x‰x˜×+Ñ+Ô,Ð,Ð,Ð,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Øò "8ˆØˆ
Ü" <°#Ñ#5Ó6Ðä)¨!Ó,ˆØ×!Ñ! )¨ZÓ8ˆÜ& tÓ,ˆ	Ø×#Ñ# I¨|Ó<ˆÜ  ¨JÀÔBˆÜ-Ø�AÐ)¨9°ló 
Ñˆ�*ð   !‘mˆäÓß‰S�‹YßÑ¨+¸JÐÓGð 	ô
 ' }°jÈ!ÔLˆÜ*ØØØØØØØØô	
‰ˆˆwô �q‹MˆØ�|‰|‹~ˆÜ! $¨°1Õ5Ü˜H e°QÖ7ñE"8r+   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Ø)ò YˆÜØ$&ØØØØØØô
ˆð ˆÔØ%&ˆÔ"ä—Z‘Zˆ
Ü“ZŒŒ
ð	$Ø×Ñ˜qÔ!ä—*‘*×%Ñ%Ó'ˆCÜ�J‰J×ÑÔØ#ŒCŒJð RÐUXÒXÐXÐXñ/Yøô$ —*‘*×%Ñ%Ó'ˆCÜ�J‰J×ÑÔØ#ŒC�Jús   Á'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?   gü©ñÒMb`?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  sp  € ä% aÓ(€LØ×Ñ˜3 Ó"€AØ€MÜ˜m°QÀQÈwÔW€Dä—‘€JÜ“„C„Jð Ø×Ñ˜1Ôä�j‰j×!Ñ!Ó#ˆÜ�
‰
×ÑÔØŒŒ
à—	‘	˜$“€Ið ÐØò 
5ˆð ˜ÑÙàŸ)™) OÓ4ˆØ˜aÓØ˜Ð(Ð)ˆDØ—<‘<Ð 2°BÓ7×=Ñ=¸cÓBÀ1ÑEˆDØ ×'Ñ'¬¨d«Õ4ð
5ô Ÿ8™8Ð$8Ó9ÐÜ"ØÐ1°]ÑBÑCó Ðð $ qÒ(Ð(Ñ(øô9 �j‰j×!Ñ!Ó#ˆÜ�
‰
×ÑÔØŒ�
ú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Ø×Ñ˜2˜qÓ!€AÜØ !ØØØØô€Dô —‘€JÜ“„C„Jð Ø×Ñ˜1Ôä�j‰j×!Ñ!Ó#ˆÜ�
‰
×ÑÔØŒŒ
ð —	‘	˜$“¡ " Ñ%ò ˆØ˜$ÒØŸ.™.¨Ó4‰KˆAˆq�%ÚØ#Ÿo™o¨cÓ2‘��q˜!Ùðô ˜×+Ñ+¬U°5«\À1ÖEøô �j‰j×!Ñ!Ó#ˆÜ�
‰
×ÑÔØŒ�
ú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¯   € ô �!‹H€EØ€HØò -ˆÜØØØØØØØ ô
ˆð ×ÑœyÓ)ˆà—>‘> &¨$Ó/ˆð		-Ü  8Õ,ñ-øô ò 	-ð ˜Ñ ˆHØˆDŒIØ×"Ñ"¤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�Ó4°QÑ7×=Ñ=Ó?€JØ�>‰>Ó˜cÒ!Ð!Ð!à!—~‘~Ó'¬"¯'©'°*Ó*=Ñ=ÐØ —n‘nÓ&¬¯©°Ó)<Ñ<€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Ø×Ñ˜2˜zÓ*×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×;Ñ;¼B¿J¹JÓG€DØ×Ñ 	¨<Ó8€Fà˜a‘-€KäÓß	‰ˆT‹ß	Ñ	 k¸
Ð	Ó	Cð ô
 # =°*ÀaÔH€DÜ%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×<Ñ<¼R¿Z¹ZÓH€AÜØØØ+ØØØØô÷ �m�AÓð ô &*ØØØ+ØØØØô&÷ �m‘I˜a“LÓ!ð #ô Ð)Ð+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Ø×Ñ˜2˜zÓ*€AÜØØØØØØØØô	÷ �m�AÓð ô ØØØØØØØØô	÷ �m�AÓð 	ô �H˜dÕ#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Ø#Ñ€IˆzØ×Ñ˜9 jÓ1€AàØØØØØñ€Nô Ñ7�}Ð7¨Ñ7€DØ
@€CÜ	�‰”z¨Ô	-ñ Ø×Ñ˜1Ô÷ô œu Q¨}Ô=ÀdÔK€MÜÑC =ÐC°NÑC×QÑQØóÐô ð Ø¨S´"·&±&¸¿¹³+Ð,>ñØBPñç�m�AÓð ô �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¼  ‰  sn   € ô & aÓ(€LØ×Ñ˜2˜qÓ!€AÜ
ØØØØ!ô	€Cð 3€CÜ	�‰”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Ä  š  s]   € ô
 ×Ñ˜Ô!Ü	¨Ô	2ñ 0Ü�i‰i˜Ó×'Ñ'¨¨AÓ.ˆÜ˜!Ô×*Ñ*¨3Ô/÷0÷ 0ñ 0ús   ¢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Ê  ¦  s^   € ä% aÓ(€LØ×Ñ˜2˜sÓ#€AÜ�sÔ€DØ
.€CÜ	�‰”m¨3Ô	/ñ Ø×Ñ˜1Ô÷÷ ñ ú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Ì  ±  s`   € ä% aÓ(€LØ×Ñ˜2˜sÓ#€AÜ�s SÔ)€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æ     sF  ðÛ 
Ý ã Û Ý Ý )Ý %ß 4å "Ý '÷÷÷ õ >÷ñ ÷
 AÝ ,÷ó ÷ ?à€B‡K�K��1�bÓ€Ø	ˆ�‰�Q˜Ó	�€€BØˆB�I‰Ià
�‰‹
×Ñ˜2˜qÓ!Ø
�‰‹
×Ñ˜2˜qÓ!ðó€	òS!òlHò	Cò);òX>ò6Sò2Lò(ð  ‡�×Ñ˜ G¨\Ð#:Ó;Ø‡�×Ñ˜Ð!2Ó3ñó 4ó <ðò$2ð( ‡�×Ñ˜ G¨\Ð#:Ó;Ø‡�×Ñ˜¨.Ó9ñYó :ó <ðYò*ò,ð ‡�×ÑØà	�"—*‘*ÐØ	�r—z‘zÐ"ðð >LÖ	L¨Mˆ<˜Ò
'Ò	Lðóð ‡�×ÑØàˆ%�#�ˆÐ4Ð5Ø�ˆ+˜˜S�zÐ	" OÐ4ðóñ	&óóð	&ð ‡�×Ñ˜¨.Ó9ñ	<ó :ð	<ð ‡�×Ñ˜¨.Ó9ñ%ó :ð%ð ‡�×Ñð6óð ‡�×ÑÐ+¨^¸nÑ-LÓMñ-ó Nó	ð
-ò&	ò7ò#ò5ð ‡�×Ñ˜¨.Ó9ñ<ó :ð<ò5ò9òB0ð. ‡�×Ñ˜¨.Ó9ñSó :ðSð  ‡�×Ñ˜¨.Ó9ñSó :ðSð4 ‡�×Ñ˜¨.Ó9ñó :ððJ ØØó?ò:'ò,ò+ð ‡�×Ñ˜ L°'Ð#:Ó;Ø‡�×Ñ˜ §
¡
¨B¯J©JÐ7Ó8ñ(ó 9ó <ð(ð. ‡�×Ñ˜ L°'Ð#:Ó;ñ-ó <ð-ò*'8ðT ñ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-