§
    rŠtji“  ã                   ó¸	  — d dl Z 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/m0Z0m1Z1  ej2        d dd¦  «        Z3 ej4        e3e3¦  «        \  Z5Z6 ej7        e5 8                    ¦   «          9                    dd¦  «        e6 8                    ¦   «          9                    dd¦  «        g¦  «        Z:d„ Z;d„ Z<d„ Z=d„ Z>d„ Z?d„ Z@d„ ZAd„ ZBejC         D                    dddg¦  «        ejC         D                    dd¦  «        d „ ¦   «         ¦   «         ZEd!„ ZFejC         D                    dddg¦  «        ejC         D                    dd"d#g¦  «        ejC         D                    d$e0¦  «        d%„ ¦   «         ¦   «         ¦   «         ZGd&„ ZHd'„ ZIejC         D                    d(dejJ        fdejJ        fgd)„ e0D ¦   «         ¢¦  «        ejC         D                    d*d+gd,ggd-fd+d.gd,d+ggd/fg¦  «        d0„ ¦   «         ¦   «         ZKejC         D                    d$e0¦  «        d1„ ¦   «         ZLejC         D                    d$e0¦  «        d2„ ¦   «         ZMejC         N                    d3¦  «        ejC         D                    d4e0e1z   ¦  «        d5„ ¦   «         ¦   «         ZOd6„ ZPd7„ ZQd8„ ZRd9„ ZSd:„ ZTd;„ ZUd<„ ZVejC         D                    d$e0¦  «        d=„ ¦   «         ZWejC         D                    d$e0¦  «        d>„ ¦   «         ZXejC         D                    d$e0¦  «        d?„ ¦   «         ZY	 	 	 d[dB„ZZejC        j[        dC„ ¦   «         Z\dD„ Z]dE„ Z^ejC         D                    dddg¦  «        ejC         D                    dFej_        ej`        g¦  «        dG„ ¦   «         ¦   «         ZaejC         D                    dddg¦  «        dH„ ¦   «         ZbdI„ Zce.dJ„ ¦   «         ZddK„ ZedL„ ZfejC         D                    dddg¦  «        dM„ ¦   «         Zgd\dN„ZhdO„ ZidP„ ZjejC         D                    dQdRe#fdSe"fg¦  «        ejC         D                    dddg¦  «        dT„ ¦   «         ¦   «         ZkejC         D                    dddg¦  «        dU„ ¦   «         ZldV„ ZmejC         D                    dWdX¦  «        dY„ ¦   «         ZndZ„ ZodS )]é    N)ÚStringIO)Úassert_allclose)Ú
check_grad)ÚpdistÚ
squareform)Úconfig_context)Ú
make_blobs)ÚTSNEÚ_barnes_hut_tsne)Ú_gradient_descentÚ_joint_probabilitiesÚ_joint_probabilities_nnÚ_kl_divergenceÚ_kl_divergence_bhÚtrustworthiness)Ú_binary_search_perplexity)Úcosine_distancesÚmanhattan_distancesÚpairwise_distances)ÚNearestNeighborsÚkneighbors_graph)Úcheck_random_state)Úassert_almost_equalÚassert_array_almost_equalÚassert_array_equalÚskip_if_32bit)ÚCSR_CONTAINERSÚLIL_CONTAINERSé   é
   éÿÿÿÿc                 óp  —  G d„ d¦  «        }dd„}t           |¦   «         t          j        d¦  «        ddddddd	d
¬¦
  «
        \  }}}|dk    sJ ‚|dk    sJ ‚d|                      ¦   «         j        v sJ ‚t          |t          j        d¦  «        dddddddd
¬¦
  «
        \  }}}|dk    sJ ‚|dk    sJ ‚d|                      ¦   «         j        v sJ ‚t           |¦   «         t          j        d¦  «        dddddddd
¬¦
  «
        \  }}}|dk    sJ ‚|dk    sJ ‚d|                      ¦   «         j        v sJ ‚d S )Nc                   ó   — e Zd Zd„ Zdd„ZdS )ú;test_gradient_descent_stops.<locals>.ObjectiveSmallGradientc                 ó   — d| _         d S ©Nr!   )Úit)Úselfs    ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sklearn/manifold/tests/test_t_sne.pyÚ__init__zDtest_gradient_descent_stops.<locals>.ObjectiveSmallGradient.__init__9   s   € ØˆDŒGˆGˆGó    Tc                 óf   — | xj         dz  c_         d| j         z
  dz  t          j        dg¦  «        fS )Nr   r    ç      $@çñhãˆµøä>)r'   ÚnpÚarray)r(   Ú_Úcompute_errors      r)   Ú__call__zDtest_gradient_descent_stops.<locals>.ObjectiveSmallGradient.__call__<   s3   € ØˆGŒG�q‰LˆGŒGØ˜œ‘L DÑ(­"¬(°D°6Ñ*:Ô*:Ð:Ð:r+   N©T)Ú__name__Ú
__module__Ú__qualname__r*   r3   © r+   r)   ÚObjectiveSmallGradientr$   8   s7   € € € € € ð	ð 	ð 	ð	;ð 	;ð 	;ð 	;ð 	;ð 	;r+   r9   Tc                 ó.   — dt          j        d¦  «        fS )Nç        r   )r/   Úones)r1   r2   s     r)   Úflat_functionz2test_gradient_descent_stops.<locals>.flat_function@   s   € Ø•B”G˜A‘J”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   )r   r/   ÚzerosÚ
readouterrÚout)Úcapsysr9   r=   r1   Úerrorr'   s         r)   Útest_gradient_descent_stopsrO   6   sÐ  € ð;ð ;ð ;ð ;ð ;ñ ;ô ;ð ;ðð ð ð õ %ØÐÑ Ô Ý
Œ�‰ŒØ	ØØ #ØØØØØðñ ô �L€A€uˆbð �CŠ<ˆ<ˆ<ˆ<Ø�Š7ˆ7ˆ7ˆ7Ø˜f×/Ò/Ñ1Ô1Ô5Ð5Ð5Ð5Ð5õ %ØÝ
Œ�‰ŒØ	ØØ "ØØØØØðñ ô �L€A€uˆbð �CŠ<ˆ<ˆ<ˆ<Ø�Š8ˆ8ˆ8ˆ8Ø&¨&×*;Ò*;Ñ*=Ô*=Ô*AÐAÐAÐAÐAõ %ØÐÑ Ô Ý
Œ�‰ŒØ	ØØ #ØØØØØðñ ô �L€A€uˆbð �CŠ<ˆ<ˆ<ˆ<Ø�Š8ˆ8ˆ8ˆ8Ø˜V×.Ò.Ñ0Ô0Ô4Ð4Ð4Ð4Ð4Ð4Ð4r+   c                  óÒ  ‡— t          d¦  «        } |                      dd¦  «        }t          |¦  «                             t          j        ¦  «        }d}t          ||d¬¦  «        Št	          j        ‰t	          j        t          j	        ¦  «        j
        ¦  «        Št	          j        ˆfd„t          ‰j        d         ¦  «        D ¦   «         ¦  «        }t          ||d¬¦  «         d S )	Nr   é2   é   ç      9@©rF   c                 ó    •— g | ]J}t          j        t          j        ‰|         t          j        ‰|         ¦  «        z  ¦  «         ¦  «        ‘ŒKS r8   )r/   ÚexpÚsumÚlog)Ú.0ÚiÚPs     €r)   ú
<listcomp>z&test_binary_search.<locals>.<listcomp>€   sE   ø€ ÐIÐIÐI°!�Œ•”˜˜!œ�rœv a¨¤d™|œ|Ñ+Ñ,Ô,Ð,Ñ	-Ô	-ÐIÐIÐIr+   é   ©Údecimal)r   Úrandnr   Úastyper/   Úfloat32r   ÚmaximumÚfinfoÚdoubleÚepsÚmeanÚrangeÚshaper   )Úrandom_stateÚdataÚ	distancesÚdesired_perplexityÚmean_perplexityr[   s        @r)   Útest_binary_searchro   w   sÑ   ø€ å% aÑ(Ô(€LØ×Ò˜b !Ñ$Ô$€DÝ" 4Ñ(Ô(×/Ò/µ´
Ñ;Ô;€IØÐÝ! )Ð-?ÈÐKÑKÔK€AÝ
Œ
�1•b”h�rœyÑ)Ô)Ô-Ñ.Ô.€AÝ”gØIÐIÐIÐIµu¸Q¼WÀQ¼ZÑ7HÔ7HÐIÑIÔIñô €Oõ ˜Ð);ÀQÐGÑGÔGÐGÐGÐGr+   c            
      ó^  — t          d¦  «        } |                      dd¦  «                             t          j        ¦  «        dz   }d}t          ||d¬¦  «        }dt          j        |ddd …f         t          j        |ddd …f         ¦  «        z  ¦  «         z  }t          ||d	¬
¦  «         d S )Né*   r   éZ   r>   g      >@r   rT   r?   r]   r^   )	r   r`   ra   r/   rb   r   ÚnansumÚlog2r   )rj   rk   rm   r[   Ú
perplexitys        r)   Útest_binary_search_underflowrv   …   s°   € õ & bÑ)Ô)€LØ×Ò˜a Ñ$Ô$×+Ò+­B¬JÑ7Ô7¸#Ñ=€DØÐÝ! $Ð(:ÀAÐFÑFÔF€AØ•r”y  1 a b b 5¤­B¬G°A°a¸¸¸°e´HÑ,=Ô,=Ñ!=Ñ>Ô>Ð>Ñ>€JÝ˜
Ð$6ÀÐBÑBÔBÐBÐBÐBr+   c                  ó>  ‡‡‡— d} d}t          d¦  «        }|                     | d¦  «                             t          j        d¬¦  «        }t          |¦  «        }t          ||d¬¦  «        Š| dz
  }t          ¦   «                              |¦  «        }| 	                    |d	¬
¦  «        Š‰j
                             t          j        d¬¦  «        }|                     | |¦  «        }t          ||d¬¦  «        }‰j        Št          j        ˆˆˆfd„t          | ¦  «        D ¦   «         ¦  «        }	t          |	|d¬¦  «         t          j        d| dz
  d¦  «        D �]B}
t#          |
¦  «        }
|
dz  }| 	                    |
d	¬
¦  «        Š‰j
                             t          j        d¬¦  «        }|                     | |
¦  «        }t          ||d¬¦  «        }t          |	|d¬¦  «         t          j        ‰                     ¦   «         ¦  «        d d d…         }‰                     ¦   «         |         d |…         }t          j        |                     ¦   «         ¦  «        d d d…         }|                     ¦   «         |         d |…         }t          ||d¬¦  «         �ŒDd S )NéÈ   rS   r   r?   F©ÚcopyrT   r   Údistance©Ún_neighborsÚmodec           	      ó\   •— g | ](}‰|‰j         ‰|         ‰|d z            …         f         ‘Œ)S )r   )Úindices)rY   ÚkÚP1Údistance_graphÚindptrs     €€€r)   r\   z0test_binary_search_neighbors.<locals>.<listcomp>¦   sL   ø€ ð 	
ð 	
ð 	
àð ˆq�.Ô(¨°¬°V¸AÀ¹E´]Ð)BÔCÐCÔDð	
ð 	
ð 	
r+   é   r^   é–   rR   r    r!   )r   r`   ra   r/   rb   r   r   r   Úfitr   rk   Úreshaper„   r0   rh   r   ÚlinspaceÚintÚargsortÚravel)Ú	n_samplesrm   rj   rk   rl   r}   ÚnnÚdistances_nnÚP2ÚP1_nnr�   ÚtopnÚP2kÚidxÚP1topÚP2topr‚   rƒ   r„   s                   @@@r)   Útest_binary_search_neighborsr—   ‘   s�  øøø€ ð €IØÐÝ% aÑ(Ô(€LØ×Ò˜i¨Ñ+Ô+×2Ò2µ2´:ÀEÐ2ÑJÔJ€DÝ" 4Ñ(Ô(€IÝ	" 9Ð.@È!Ð	LÑ	LÔ	L€Bð ˜a‘-€KÝ	Ñ	Ô	×	Ò	 Ñ	%Ô	%€BØ×(Ò(°[ÀzÐ(ÑRÔR€NØ!Ô&×-Ò-­b¬j¸uÐ-ÑEÔE€LØ×'Ò'¨	°;Ñ?Ô?€LÝ	" <Ð1CÈQÐ	OÑ	OÔ	O€BàÔ"€FÝŒHð	
ð 	
ð 	
ð 	
ð 	
ð 	
å˜9Ñ%Ô%ð	
ñ 	
ô 	
ñô €Eõ ˜e R°Ð3Ñ3Ô3Ð3õ Œ[˜˜i¨!™m¨QÑ/Ô/ð ;ñ ;ˆÝ�‰FŒFˆØ�2‰vˆØ×,Ò,¸ÀÐ,ÑLÔLˆØ%Ô*×1Ò1µ"´*À5Ð1ÑIÔIˆØ#×+Ò+¨I°qÑ9Ô9ˆÝ'¨Ð6HÐRSÐTÑTÔTˆÝ! %¨°QÐ7Ñ7Ô7Ð7ÝŒj˜Ÿš™œÑ$Ô$ T T r TÔ*ˆØ—’‘
”
˜3”   Ô&ˆÝŒj˜Ÿš™œÑ%Ô% d d¨ dÔ+ˆØ—	’	‘”˜CÔ   $ Ô'ˆÝ! %¨¸Ð:Ñ:Ô:Ð:Ñ:ð;ð ;r+   c                  óV  — d} d}t          d¦  «        }|                     |d¦  «        }t          ¦   «                              |¦  «        }|                     | d¬¦  «        }|j                             t          j        d¬¦  «        }| 	                    || ¦  «        }d }d	}t          d¦  «        D ]w}	t          |                     ¦   «         |d¬
¦  «        }
t          ||d¬
¦  «        }|                     ¦   «         }|€|
}|}ŒSt          |
|d¬¦  «         t          ||d¬¦  «         Œxd S )Nr    r>   r   rR   r{   r|   Fry   r]   rT   r…   r^   )r   r`   r   r‡   r   rk   ra   r/   rb   rˆ   rh   r   rz   r   Útoarrayr   )r}   r�   rj   rk   rŽ   rƒ   rl   Úlast_Prm   r1   r[   r‚   Úlast_P1s                r)   Ú test_binary_perplexity_stabilityrœ   ½   s>  € ð €KØ€IÝ% aÑ(Ô(€LØ×Ò˜i¨Ñ+Ô+€DÝ	Ñ	Ô	×	Ò	 Ñ	%Ô	%€BØ×(Ò(°[ÀzÐ(ÑRÔR€NØÔ#×*Ò*­2¬:¸EÐ*ÑBÔB€IØ×!Ò! )¨[Ñ9Ô9€IØ€FØÐÝ�3‰ZŒZð 
>ð 
>ˆÝ% i§n¢nÑ&6Ô&6Ð8JÐTUÐVÑVÔVˆÝ$ ^Ð5GÐQRÐSÑSÔSˆà�ZŠZ‰\Œ\ˆØˆ>ØˆFØˆGˆGå% a¨¸Ð;Ñ;Ô;Ð;Ý% b¨'¸1Ð=Ñ=Ô=Ð=Ð=ð
>ð 
>r+   c                  ó4  ‡‡‡‡	— t          d¦  «        } dŠ	d}dŠdŠ|                      ‰	|¦  «                             t          j        ¦  «        }t          j        |                     |j        ¦  «        ¦  «        }t          j        |d¦  «         |                      ‰	‰¦  «                             t          j        ¦  «        }t          |dd¬¦  «        Šˆˆˆˆ	fd„}ˆˆˆˆ	fd	„}t          t          |||                     ¦   «         ¦  «        dd
¬¦  «         d S )Nr   rQ   r?   rG   r;   rS   )rm   rF   c                 ó6   •— t          | ‰‰‰‰¦  «        d         S )Nr   ©r   ©Úparamsr[   ÚalphaÚn_componentsr�   s    €€€€r)   Úfunztest_gradient.<locals>.funè   ó   ø€ Ý˜f a¨°	¸<ÑHÔHÈÔKÐKr+   c                 ó6   •— t          | ‰‰‰‰¦  «        d         S )Nr   rŸ   r    s    €€€€r)   Úgradztest_gradient.<locals>.gradë   r¥   r+   rR   r^   )r   r`   ra   r/   rb   ÚabsÚdotÚTÚfill_diagonalr   r   r   rŒ   )
rj   Ú
n_featuresrl   Ú
X_embeddedr¤   r§   r[   r¢   r£   r�   s
         @@@@r)   Útest_gradientr®   Ø   sK  øøøø€ å% aÑ(Ô(€Là€IØ€JØ€LØ€Eà×"Ò" 9¨jÑ9Ô9×@Ò@ÅÄÑLÔL€IÝ”�y—}’} Y¤[Ñ1Ô1Ñ2Ô2€IÝÔ�Y Ñ$Ô$Ð$Ø×#Ò# I¨|Ñ<Ô<×CÒCÅBÄJÑOÔO€Jå˜Y¸4ÈÐKÑKÔK€AðLð Lð Lð Lð Lð Lð Lð LðLð Lð Lð Lð Lð Lð Lð Lõ �
 3¨¨j×.>Ò.>Ñ.@Ô.@ÑAÔAÀ3ÐPQÐRÑRÔRÐRÐRÐRr+   c                  ó"  — t          d¦  «        } |                      dd¦  «        }t          |d|dz  z   ¦  «        dk    sJ ‚t          j        d¦  «                             dd¦  «        }|                     ¦   «         }|                      |¦  «         t          ||¦  «        d	k     sJ ‚t          j        d
¦  «                             dd¦  «        }t          j        dgdgdgdgdgg¦  «        }t          t          ||d¬¦  «        d¦  «         d S )Nr   r>   r?   ç      @r-   rG   r!   r   g333333ã?rR   r…   r]   ©r}   gš™™™™™É?)
r   r`   r   r/   Úarangerˆ   rz   Úshuffler0   r   )rj   ÚXr­   s      r)   Útest_trustworthinessrµ   ñ   s  € å% aÑ(Ô(€Lð 	×Ò˜3 Ñ"Ô"€AÝ˜1˜c A¨¡H™nÑ-Ô-°Ò4Ð4Ð4Ð4õ 	Œ	�#‰Œ×Ò˜r 1Ñ%Ô%€AØ—’‘”€JØ×Ò˜Ñ$Ô$Ð$Ý˜1˜jÑ)Ô)¨CÒ/Ð/Ð/Ð/õ 	Œ	�!‰Œ×Ò˜R Ñ#Ô#€AÝ”˜A˜3   a S¨1¨#°¨sÐ3Ñ4Ô4€JÝ�¨¨:À1ÐEÑEÔEÀsÑKÔKÐKÐKÐKr+   c                  óp  — d} t           j                             d¦  «        }|                     dd¦  «        }|                     dd¦  «        }t	          j        t          | ¬¦  «        5  t          ||d¬¦  «         d	d	d	¦  «         n# 1 swxY w Y   t          ||d
¬¦  «        }d|cxk    rdk    sn J ‚d	S )z[Raise an error when n_neighbors >= n_samples / 2.

    Non-regression test for #18567.
    z%n_neighbors .+ should be less than .+rq   é   r…   r?   ©ÚmatchrR   r±   Nr]   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ð 6Ý˜˜:°1Ð5Ñ5Ô5Ð5ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6õ ˜A˜z°qÐ9Ñ9Ô9€EØ�ˆ?ˆ?Š?ˆ?˜Š?ˆ?ˆ?ˆ?ˆ?ˆ?ˆ?ˆ?s   Á)BÂBÂBÚmethodÚexactÚ
barnes_hutÚinit)rº   Úpcac                 ó  — t          d¦  «        }d}|                     d|¦  «                             t          j        ¦  «        }t          ||d| dd¬¦  «        }|                     |¦  «        }t          ||d¬¦  «        }|d	k    sJ ‚d S )
Nr   r?   rQ   i¼  Úauto)r£   rÇ   rj   rÄ   r@   rC   r   r±   g333333ë?)r   r`   ra   r/   rb   r
   Úfit_transformr   )rÄ   rÇ   rj   r£   r´   Útsner­   Úts           r)   Ú+test_preserve_trustworthiness_approximatelyrÎ     s›   € õ & aÑ(Ô(€LØ€LØ×Ò˜2˜|Ñ,Ô,×3Ò3µB´JÑ?Ô?€AÝØ!ØØØØØðñ ô €Dð ×#Ò# AÑ&Ô&€JÝ˜˜:°1Ð5Ñ5Ô5€AØˆtŠ8ˆ8ˆ8ˆ8ˆ8ˆ8r+   c            	      ó2  — t          d¦  «        } t          d| ¬¦  «        \  }}g }dD ]F}t          dddd|d¬	¦  «        }|                     |¦  «         |                     |j        ¦  «         ŒG|d
         |d         k    sJ ‚|d         |d
         k    sJ ‚dS )z=t-SNE should give a lower KL divergence with more iterations.r   r]   )r¬   rj   )éú   é,  i^  r?   rº   r    ç      Y@)r£   rÇ   ru   rC   r@   rj   r   N)r   r	   r
   rË   ÚappendÚkl_divergence_)rj   r´   r1   Úkl_divergencesr@   rÌ   s         r)   Ú)test_optimization_minimizes_kl_divergencerÖ   )  sË   € å% aÑ(Ô(€LÝ °Ð>Ñ>Ô>�D€A€qØ€NØ#ð 
3ð 
3ˆÝØØØØØØð
ñ 
ô 
ˆð 	×Ò˜1ÑÔÐØ×Ò˜dÔ1Ñ2Ô2Ð2Ð2Ø˜!Ô ¨qÔ 1Ò1Ð1Ð1Ð1Ø˜!Ô ¨qÔ 1Ò1Ð1Ð1Ð1Ð1Ð1r+   rº   rÈ   Úcsr_containerc           	      ób  — t          d¦  «        }|                     dd¦  «        }d||                     ddd¦  «        |                     ddd¦  «        f<    ||¦  «        }t          d|ddd| d	¬
¦  «        }|                     |¦  «        }t          t          ||d¬¦  «        dd¬¦  «         d S )Nr   rQ   r]   r;   é   r?   r    rÒ   iî  )r£   rÇ   ru   rC   rj   rÄ   r@   r   r±   rG   g)\�Âõ(¼?©Úrtol)r   r`   Úrandintr
   rË   r   r   )rÄ   rÇ   r×   rÁ   r´   ÚX_csrrÌ   r­   s           r)   Útest_fit_transform_csr_matrixrÞ   =  sË   € õ ˜QÑ
Ô
€CØ�	Š	�"�aÑÔ€AØ9<€A€s‡{‚{�1�b˜"ÑÔ˜sŸ{š{¨1¨a°Ñ4Ô4Ð5Ñ6ØˆM˜!ÑÔ€EÝØØØØØØØðñ ô €Dð ×#Ò# EÑ*Ô*€JÝ•O E¨:À1ÐEÑEÔEÀsÐQWÐXÑXÔXÐXÐXÐXr+   c                  ó>  — t          d¦  «        } t          d¦  «        D ]}}|                      dd¦  «        }t          t	          |¦  «        d¦  «        }t          ddddd|dd	d
¬¦	  «	        }|                     |¦  «        }t          ||dd¬¦  «        }|dk    sJ ‚Œ~d S )Nr   r]   éP   r?   ÚsqeuclideanrÒ   ç       @Úprecomputedéô  rº   )	r£   ru   rC   Úearly_exaggerationÚmetricrj   rF   r@   rÇ   r   )r}   ræ   gffffffî?)r   rh   r`   r   r   r
   rË   r   )rj   rZ   r´   ÚDrÌ   r­   rÍ   s          r)   ÚFtest_preserve_trustworthiness_approximately_with_precomputed_distancesrè   U  sÁ   € å% aÑ(Ô(€LÝ�1‰XŒXð ð ˆØ×Ò˜r 1Ñ%Ô%ˆÝ•u˜Q‘x”x Ñ/Ô/ˆÝØØØØ"Ø ØØØØð

ñ 

ô 

ˆð ×'Ò'¨Ñ*Ô*ˆ
Ý˜A˜z°qÀÐOÑOÔOˆØ�4Šxˆxˆxˆxˆxð!ð r+   c                  ó¾   — t          d¦  «        } |                      dd¦  «        }t          ||d¬¦  «        t          t          |d¬¦  «        |d¬¦  «        k    sJ ‚d S )Nr   r>   r?   Úcosine©ræ   rã   )r   r`   r   r   )rj   r´   s     r)   Ú)test_trustworthiness_not_euclidean_metricrì   k  s{   € õ & aÑ(Ô(€LØ×Ò˜3 Ñ"Ô"€AÝ˜1˜a¨Ð1Ñ1Ô1µ_Ý˜1 XÐ.Ñ.Ô.°¸-ð6ñ 6ô 6ò ð ð ð ð ð r+   zmethod, retypec                 ó   — g | ]}d |f‘ŒS )rÆ   r8   )rY   r×   s     r)   r\   r\   z  s   € Ð	LÐ	LÐ	L¨Mˆ<˜Ð
'Ð	LÐ	LÐ	Lr+   zD, message_regexr;   rG   z.* square distance matrixg      ð¿z.* positive.*c                 óÒ   — t          d| ddd¬¦  «        }t          j        t          |¬¦  «        5  |                      ||¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nrã   rº   rq   r   ©ræ   rÄ   rÇ   rj   ru   r¸   )r
   r½   r¾   r¿   rË   )rÄ   rç   ÚretypeÚmessage_regexrÌ   s        r)   Útest_bad_precomputed_distancesrò   u  s¾   € õ  ØØØØØðñ ô €Dõ 
Œ•z¨Ð	7Ñ	7Ô	7ð &ð &Ø×Ò˜6˜6 !™9œ9Ñ%Ô%Ð%ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &s   °AÁA Á#A c                 óÞ   — t          ddddd¬¦  «        }t          j        t          d¬¦  «        5  |                      | d	d
gd
d	gg¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nrã   rÅ   rº   rq   r   rï   Úsparser¸   r   rR   )r
   r½   r¾   Ú	TypeErrorrË   )r×   rÌ   s     r)   Ú test_exact_no_precomputed_sparserö   �  sË   € åØØØØØðñ ô €Dõ 
Œ•y¨Ð	1Ñ	1Ô	1ð <ð <Ø×Ò˜=˜=¨1¨a¨&°1°a°&Ð)9Ñ:Ô:Ñ;Ô;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <ð <ð <s   °%A"Á"A&Á)A&c                 ó  — t          j        g d¢g d¢g d¢g¦  «        } | |¦  «        }t          dddd¬¦  «        }d}t          j        t
          |¬	¦  «        5  |                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )
N)rG   r;   r;   )r;   rG   r;   rã   rº   rq   r   )ræ   rÇ   rj   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û   �  sÞ   € õ Œ8�_�_�_ o o o°°°ÐGÑHÔH€DØˆ}˜TÑ"Ô"€HÝ�}¨8À"ÐQRÐSÑSÔS€DØ
N€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð %ð %Ø×Ò˜8Ñ$Ô$Ð$ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð %ð %s   ÁA<Á<B ÂB zaignore:Precomputed sparse input was not sorted by row values:sklearn.exceptions.EfficiencyWarningÚsparse_containerc                 ó°  — t          d¦  «        }|                     dd¦  «        }t          |ddd¬¦  «        }t          |¦  «        }t	          j        |¦  «        sJ ‚t          |                     ¦   «         |¦  «         t          dddd	¬
¦  «        }| 	                    |¦  «        }| 	                     | |¦  «        ¦  «        }t          ||¦  «         dS )zAMake sure that TSNE works identically for sparse and dense matrixr   r>   r?   r{   T)r}   r~   Úinclude_selfrã   rº   rÊ   )ræ   rj   rÇ   rC   N)
r   r`   r   r   ÚspÚissparser   r™   r
   rË   )rü   rj   r´   ÚD_sparserç   rÌ   ÚXt_denseÚ	Xt_sparses           r)   Ú test_sparse_precomputed_distancer  ¨  sã   € õ & aÑ(Ô(€LØ×Ò˜3 Ñ"Ô"€Aå ¨s¸ÐRVÐWÑWÔW€HÝ˜1ÑÔ€AÝŒ;�xÑ Ô Ð Ð Ð Ý˜×(Ò(Ñ*Ô*¨AÑ.Ô.Ð.åØ¨1°8È6ðñ ô €Dð ×!Ò! !Ñ$Ô$€Hà×"Ò"Ð#3Ð#3°HÑ#=Ô#=Ñ>Ô>€IÝ˜ )Ñ,Ô,Ð,Ð,Ð,r+   c                  óö   — d„ } t          | dd¬¦  «        }t          j        ddgddgg¦  «        }t          j        t
          d¬¦  «        5  |                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	Nc                 ó   — dS r&   r8   )ÚxÚys     r)   ræ   z4test_non_positive_computed_distances.<locals>.metricÂ  s   € Øˆrr+   rÅ   r   )ræ   rÄ   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Ñ   € ðð ð õ �v g¸!Ð<Ñ<Ô<€DÝ
Œ�3˜�*˜s C˜jÐ)Ñ*Ô*€AÝ	Œ•zÐ)IÐ	JÑ	JÔ	Jð ð Ø×Ò˜1ÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÁA.Á.A2Á5A2c                  óÞ   — t          t          j        d¦  «        d¬¦  «        } |                      t          j        d¦  «        ¦  «        }t          t          j        d¦  «        |¦  «         d S )N©r>   r?   rÊ   )rÇ   rC   )r>   rR   )r
   r/   rJ   rË   r<   r   )rÌ   r­   s     r)   Útest_init_ndarrayr  Ì  s[   € å•R”X˜hÑ'Ô'°vÐ>Ñ>Ô>€DØ×#Ò#¥B¤G¨HÑ$5Ô$5Ñ6Ô6€JÝ•r”x Ñ)Ô)¨:Ñ6Ô6Ð6Ð6Ð6r+   c                  óœ   — t          t          j        d¦  «        dd¬¦  «        } |                      t          j        d¦  «        ¦  «         d S )Nr  rã   g      I@)rÇ   ræ   rC   )r>   r>   )r
   r/   rJ   r‡   ©rÌ   s    r)   Útest_init_ndarray_precomputedr  Ó  sO   € õ ÝŒX�hÑÔØØðñ ô €Dð
 	‡H‚H�RŒX�jÑ!Ô!Ñ"Ô"Ð"Ð"Ð"r+   c                  óè   — t          ddd¬¦  «        } t          j        t          d¬¦  «        5  |                      t          j        dgdgg¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	Nrã   rÈ   r   )ræ   rÇ   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  Þ  s¿   € å�}¨5¸QÐ?Ñ?Ô?€DÝ	ŒÝØRð
ñ 
ô 
ð 5ð 5ð 	×Ò�2œ8 c U¨S¨E NÑ3Ô3Ñ4Ô4Ð4ð	5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ð 5ð 5ó   ®,A'Á'A+Á.A+c                  óè   — t          ddd¬¦  «        } t          j        t          d¬¦  «        5  |                      t          j        dgdgg¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	Nr…   rÆ   r   )r£   rÄ   ru   z'n_components' should be .*r¸   r;   rG   r  r  s    r)   Útest_n_components_ranger  è  s¶   € å˜Q |ÀÐBÑBÔB€DÝ	Œ•zÐ)FÐ	GÑ	GÔ	Gð 5ð 5Ø×Ò�2œ8 c U¨S¨E NÑ3Ô3Ñ4Ô4Ð4ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ð 5ð 5r  c                  ó~  — t          d¦  «        } d}ddg}|                      d|¦  «                             t          j        ¦  «        }|D ]q}t          |dddd|d	d
¬¦  «        }|                     |¦  «        }t          |dddd|dd
¬¦  «        }|                     |¦  «        }t          j        ||¦  «        rJ ‚Œrd S )Nr   r?   rÅ   rÆ   rÙ   r   rÒ   rÈ   rG   rÐ   ©r£   ru   rC   rÇ   rj   rÄ   rå   r@   r-   )r   r`   ra   r/   rb   r
   rË   Úallclose)rj   r£   Úmethodsr´   rÄ   rÌ   ÚX_embedded1ÚX_embedded2s           r)   Útest_early_exaggeration_usedr  ï  sù   € å% aÑ(Ô(€LØ€LØ˜Ð%€GØ×Ò˜2˜|Ñ,Ô,×3Ò3µB´JÑ?Ô?€AØð 9ð 9ˆÝØ%ØØØØØØ"Øð	
ñ 	
ô 	
ˆð ×(Ò(¨Ñ+Ô+ˆÝØ%ØØØØØØ#Øð	
ñ 	
ô 	
ˆð ×(Ò(¨Ñ+Ô+ˆå”;˜{¨KÑ8Ô8Ð8Ð8Ð8Ð8ð19ð 9r+   c                  ó"  — t          d¦  «        } d}ddg}|                      d|¦  «                             t          j        ¦  «        }|D ]C}dD ]>}t          |ddd	d|d
|¬¦  «        }|                     |¦  «         |j        |dz
  k    sJ ‚Œ?ŒDd S )Nr   r?   rÅ   rÆ   rÙ   )éû   rä   r   ç      à?rº   rG   r  )r   r`   ra   r/   rb   r
   rË   Ún_iter_)rj   r£   r  r´   rÄ   r@   rÌ   s          r)   Útest_max_iter_usedr!    sÌ   € å% aÑ(Ô(€LØ€LØ˜Ð%€GØ×Ò˜2˜|Ñ,Ô,×3Ò3µB´JÑ?Ô?€AØð 0ð 0ˆØ"ð 	0ð 	0ˆHÝØ)ØØ!ØØØØ#&Ø!ð	ñ 	ô 	ˆDð ×Ò˜qÑ!Ô!Ð!à”< 8¨a¡<Ò/Ð/Ð/Ð/Ð/ð	0ð0ð 0r+   c                 óø   — t          j        ddgddgg¦  «        }t          j        ddgddgg¦  «        }t          j        dgdgg¦  «        }t          j        d	d
gddgg¦  «        }t          ||||| ¦  «         d S )NrG   r;   gbv›î
¿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*  '  s�   € õ ”˜3 ˜* s¨C jÐ1Ñ2Ô2€IÝ”Ø
˜Ð	'¨,¸Ð)EÐFñô €Jõ ”˜1˜# ˜s˜Ñ$Ô$€IÝ”(Ø
˜?Ð	+¨n¸nÐ-MÐNñô €Kõ �Y 
¨I°{ÀMÑRÔRÐRÐRÐRr+   c                 ó,  — t          j        ddgddgddgddgg¦  «        }t          j        ddgd	d
gddgddgg¦  «        }t          j        g d¢g d¢g d¢g d¢g¦  «        }t          j        ddgddgddgddgg¦  «        }t          ||||| ¦  «         d S )NrG   r;   r°   râ   ç333333@çš™™™™™@ç$·á1á?ç›mƒ´ª¿ç5a ƒÒ‡&¿çIiò³mù¿çU Ÿ Æ-¿çÜ|3SÙµ?ç›È:Ç�¿çä$Ä*¹Ç¿©r   r?   r]   ©r   r?   r]   ©r   r   r]   ©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_pointsr>  8  sà   € õ ”˜3 ˜* s¨C j°3¸°*¸sÀC¸jÐIÑJÔJ€IÝ”à˜=Ð)Ø˜MÐ*Ø˜LÐ)Ø˜MÐ*ð		
ñô €Jõ ”˜)˜)˜) Y Y Y°	°	°	¸9¸9¸9ÐEÑFÔF€IÝ”(à˜_Ð-Ø˜nÐ-Ø˜_Ð-Ø˜nÐ-ð		
ñô €Kõ �Y 
¨I°{ÀMÑRÔRÐRÐRÐRr+   c           
      ó2  — t          j        ddgddgddgddgg¦  «        }t          j        ddgd	d
gddgddgg¦  «        }t          j        g d¢g d¢g d¢g d¢g¦  «        }t          j        ddgddgddgddgg¦  «        }t          ||||| ddd¦  «         d S )NrG   r;   r°   râ   r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  Fçš™™™™™¹?r?   r#  r%  s        r)   Útest_skip_num_points_gradientrA  S  sð   € õ ”˜3 ˜* s¨C j°3¸°*¸sÀC¸jÐIÑJÔJ€IÝ”à˜=Ð)Ø˜MÐ*Ø˜LÐ)Ø˜MÐ*ð		
ñô €Jõ ”˜)˜)˜) Y Y Y°	°	°	¸9¸9¸9ÐEÑFÔF€IÝ”(à�#ˆJØ�#ˆJØ˜_Ð-Ø˜nÐ-ð		
ñô €Kõ Ø�:˜y¨+°}ÀeÈSÐRSñô ð ð ð r+   Fr@  c                 óª  — t          | ¦  «                             t          j        ¦  «        }|||f}	|                     t          j        ¦  «        }|                     t          j        d¬¦  «        }t          |	Ž }
t          |
¦  «                             t          j        ¦  «        }
t          j        |j        t          j        ¬¦  «        } ||
¦  «        }|j	                             t          j        ¦  «        }|j
                             t          j        ¦  «        }t          j        |j        ||||dddd¬¦	  «	         t          ||d	¬
¦  «         d S )NFry   )Údtyper  r?   r   r   )Úskip_num_pointsr…   r^   )r   ra   r/   rb   Úint64r   r   rJ   ri   r€   r„   r   Úgradientrk   r   )r&  r'  r(  r)  r×   rF   ru   rD  rl   ÚargsÚ	pij_inputÚgrad_bhr[   r„   s                 r)   r$  r$  s  s$  € õ # 9Ñ-Ô-×4Ò4µR´ZÑ@Ô@€IØ�j 'Ð)€DØ×"Ò"¥2¤:Ñ.Ô.€JØ× Ò ¥¤°Ð Ñ6Ô6€IÝ$ dÐ+€IÝ˜9Ñ%Ô%×,Ò,­R¬ZÑ8Ô8€IÝŒh�zÔ'­r¬zÐ:Ñ:Ô:€Gàˆ�iÑ Ô €Aà”	× Ò ¥¤Ñ*Ô*€IØŒX�_Š_�RœXÑ&Ô&€FåÔØ	Œ�
˜I v¨w¸¸QÀÐSTðñ ô ð õ ˜g {¸AÐ>Ñ>Ô>Ð>Ð>Ð>r+   c                  óN  — t          d¦  «        } t          dd¬¦  «        }|                      dd¦  «        }t          j        }t          ¦   «         t          _        	 |                     |¦  «         t          j                             ¦   «         }t          j                             ¦   «          |t          _        nM# t          j                             ¦   «         }t          j                             ¦   «          |t          _        w xY wd|v sJ ‚d|v sJ ‚d|v sJ ‚d	|v sJ ‚d
|v sJ ‚d S )Nr   r?   r…   )rF   ru   rR   z[t-SNE]znearest neighbors...z"Computed conditional probabilitiesz
Mean sigmazearly exaggeration)	r   r
   r`   ÚsysÚstdoutr   rË   ÚgetvalueÚclose)rj   rÌ   r´   Ú
old_stdoutrL   s        r)   Útest_verboserP  �  s+  € õ & aÑ(Ô(€LÝ˜ aÐ(Ñ(Ô(€DØ×Ò˜1˜aÑ Ô €Aå”€JÝ‘”…C„Jð Ø×Ò˜1ÑÔÐåŒj×!Ò!Ñ#Ô#ˆÝŒ
×ÒÑÔÐØ�Œ
ˆ
øõ Œj×!Ò!Ñ#Ô#ˆÝŒ
×ÒÑÔÐØ�Œ
ÐÐÐÐà˜ÐÐÐÐØ! SÐ(Ð(Ð(Ð(Ø/°3Ð6Ð6Ð6Ð6Ø˜3ÐÐÐÐØ 3Ð&Ð&Ð&Ð&Ð&Ð&s   ÁB: Â:A
Dc                  óœ   — t          d¦  «        } t          dd¬¦  «        }|                      dd¦  «        }|                     |¦  «         d S )Nr   Ú	chebyshevr…   )ræ   ru   rR   r?   )r   r
   r`   rË   )rj   rÌ   r´   s      r)   Útest_chebyshev_metricrS  §  sP   € å% aÑ(Ô(€LÝ�{¨qÐ1Ñ1Ô1€DØ×Ò˜1˜aÑ Ô €AØ×Ò�qÑÔÐÐÐr+   c                  óö   — t          d¦  «        } t          dd¬¦  «        }|                      dd¦  «        }|                     |¦  «        j        }t          j        t          j        |¦  «        ¦  «        sJ ‚d S )Nr   r   r…   )r£   ru   rR   r?   )r   r
   r`   r‡   Ú
embedding_r/   ÚallÚisfinite)rj   rÌ   r´   r­   s       r)   Útest_reduction_to_one_componentrX  ¯  sn   € å% aÑ(Ô(€LÝ˜Q¨1Ð-Ñ-Ô-€DØ×Ò˜1˜aÑ Ô €AØ—’˜!‘”Ô'€JÝŒ6•"”+˜jÑ)Ô)Ñ*Ô*Ð*Ð*Ð*Ð*Ð*r+   Údtc           
      ó  — t          d¦  «        }|                     dd¦  «                             |d¬¦  «        }t          dddd| ddd¬	¦  «        }|                     |¦  «        }|j        }|t          j        k    sJ ‚d S )
Nr   r    r?   Fry   rÒ   rÑ   rº   ©r£   ru   rC   rj   rÄ   rF   r@   rÇ   )r   r`   ra   r
   rË   rC  r/   rb   )rÄ   rY  rj   r´   rÌ   r­   Úeffective_types          r)   Ú
test_64bitr]  ¸  s�   € õ & aÑ(Ô(€Là×Ò˜2˜qÑ!Ô!×(Ò(¨°%Ð(Ñ8Ô8€AÝØØØØØØØØð	ñ 	ô 	€Dð ×#Ò# AÑ&Ô&€JØÔ%€Nð �RœZÒ'Ð'Ð'Ð'Ð'Ð'r+   c           
      óÞ   — t          d¦  «        }|                     dd¦  «        }t          dddd| ddd¬¦  «        }|                     |¦  «         t	          j        |j        ¦  «        rJ ‚d S )Nr   rQ   r?   rÒ   i÷  rº   r[  )r   r`   r
   rË   r/   ÚisnanrÔ   )rÄ   rj   r´   rÌ   s       r)   Útest_kl_divergence_not_nanr`  Ñ  s‡   € õ & aÑ(Ô(€Là×Ò˜2˜qÑ!Ô!€AÝØØØØØØØØð	ñ 	ô 	€Dð 	×Ò�qÑÔÐåŒx˜Ô+Ñ,Ô,Ð,Ð,Ð,Ð,Ð,r+   c                  óˆ  — d} d}d}dD �]7}d}t          |dz
  ¦  «        }t          d¦  «        }|                     ||¦  «        }t          |¦  «        }|                     ||¦  «        }	t	          ||d¬¦  «        }
t          |	|
|||¦  «        \  }}|d	z
  }t          ¦   «                              |¦  «                             |d
¬¦  «        }t          ||d¬¦  «        }t          |	||||| dd¬¦  «        \  }}t          |
¦  «        }
|                     ¦   «         }t          ||
d¬¦  «         t          ||d¬¦  «         �Œ9d S )Nr;   r    r>   )r?   r]   rR   rG   r   rT   r   r{   r|   )ÚanglerD  rF   r^   r]   )Úfloatr   r`   r   r   r   r   r‡   r   r   r   r   r™   r   r   )rb  ru   r�   r£   r¬   Údegrees_of_freedomrj   rk   rl   r¡   r[   Úkl_exactÚ
grad_exactr}   Údistances_csrÚP_bhÚkl_bhrI  s                     r)   Útest_barnes_hut_anglerj  ç  s  € à€EØ€JØ€IØð "8ñ "8ˆØˆ
Ý" <°#Ñ#5Ñ6Ô6Ðå)¨!Ñ,Ô,ˆØ×!Ò! )¨ZÑ8Ô8ˆÝ& tÑ,Ô,ˆ	Ø×#Ò# I¨|Ñ<Ô<ˆÝ  ¨JÀÐBÑBÔBˆÝ-Ø�AÐ)¨9°lñ 
ô  
Ñˆ�*ð   !‘mˆåÑÔßŠS�‰YŒYßÒ¨+¸JÐÑGÔGð 	õ
 ' }°jÈ!ÐLÑLÔLˆÝ*ØØØØØØØØð	
ñ 	
ô 	
‰ˆˆwõ �q‰MŒMˆØ�|Š|‰~Œ~ˆÝ! $¨°1Ð5Ñ5Ô5Ð5Ý˜H e°QÐ7Ñ7Ô7Ð7Ñ7ðE"8ð "8r+   c           
      ó  — t          d¦  «        }|                     dd¦  «        }dD ]X}t          dddd|dd	¬
¦  «        }d|_        d|_        |                     |¦  «         d|                      ¦   «         j        v sJ ‚ŒYd S )Nr   r>   r    )rÆ   rÅ   r!   r?   g    „×—Ai_  rº   )rA   rF   rC   rj   rÄ   r@   rÇ   r   z@did not make any progress during the last -1 episodes. Finished.)r   r`   r
   Ú_N_ITER_CHECKÚ_EXPLORATION_MAX_ITERrË   rK   rL   )rM   rj   r´   rÄ   rÌ   s        r)   Útest_n_iter_without_progressrn    s¿   € õ & aÑ(Ô(€LØ×Ò˜3 Ñ#Ô#€AØ)ð 
ð 
ˆÝØ$&ØØØØØØð
ñ 
ô 
ˆð ˆÔØ%&ˆÔ"Ø×Ò˜1ÑÔÐð OØ× Ò Ñ"Ô"Ô&ð'ð 'ð 'ð 'ð 'ð!
ð 
r+   c                 ól  — t          d¦  «        }|                     dd¦  «        }d}t          |ddd¬¦  «        }|                     |¦  «         |                      ¦   «         j                             d¦  «        }g }|D ]~}d|v r nw|                     d	¦  «        }|dk    r[||d …         }|                     d
d¦  «                             d¦  «        d         }| 	                    t          |¦  «        ¦  «         Œt          j        |¦  «        }t          |||k             ¦  «        }	|	dk    sJ ‚d S )Nr   r>   r?   gü©ñÒMb`?rÅ   )rE   rF   rj   rÄ   ú
ÚFinishedrH   zgradient norm = Ú ú r   )r   r`   r
   rË   rK   rL   ÚsplitÚfindÚreplacerÓ   rc  r/   r0   Úlen)
rM   rj   r´   rE   rÌ   Ú	lines_outÚgradient_norm_valuesÚlineÚstart_grad_normÚn_smaller_gradient_normss
             r)   Útest_min_grad_normr}  +  sV  € å% aÑ(Ô(€LØ×Ò˜3 Ñ"Ô"€AØ€MÝ˜m°QÀQÈwÐWÑWÔW€Dà×Ò�qÑÔÐØ×!Ò!Ñ#Ô#Ô'×-Ò-¨dÑ3Ô3€Ið ÐØð 
5ð 
5ˆð ˜ÐÐØˆEàŸ)š) OÑ4Ô4ˆØ˜aÒÐØ˜Ð(Ð(Ô)ˆDØ—<’<Ð 2°BÑ7Ô7×=Ò=¸cÑBÔBÀ1ÔEˆDØ ×'Ò'­¨d©¬Ñ4Ô4Ð4øõ œ8Ð$8Ñ9Ô9ÐÝ"ØÐ1°]ÒBÔCñ ô  Ðð $ qÒ(Ð(Ð(Ð(Ð(Ð(r+   c                 óÎ  — t          d¦  «        }|                     dd¦  «        }t          ddddd¬¦  «        }|                     |¦  «         |                      ¦   «         j                             d¦  «        d d d…         D ]<}d	|v r6|                     d
¦  «        \  }}}|r|                     d¦  «        \  }}} nŒ=t          |j	        t          |¦  «        d¬¦  «         d S )Nr   rQ   r?   rÅ   rä   )rA   rF   rj   rÄ   r@   rp  r!   Ú	Iterationzerror = ú,rR   r^   )r   r`   r
   rË   rK   rL   rt  Ú	partitionr   rÔ   rc  )rM   rj   r´   rÌ   rz  r1   rN   s          r)   Útest_accessible_kl_divergencer‚  N  s  € å% aÑ(Ô(€LØ×Ò˜2˜qÑ!Ô!€AÝØ !ØØØØðñ ô €Dð 	×Ò�qÑÔÐð ×!Ò!Ñ#Ô#Ô'×-Ò-¨dÑ3Ô3°D°D°b°DÔ9ð ð ˆØ˜$ÐÐØŸ.š.¨Ñ4Ô4‰KˆAˆq�%Øð Ø#Ÿošo¨cÑ2Ô2‘��q˜!Ø�øÝ˜Ô+­U°5©\¬\À1ÐEÑEÔEÐEÐEÐEr+   c           
      ól  — t          d¦  «        }d}|D ]Ÿ}t          dd|d|| d¬¦  «        }|                     t          ¦  «        }d                     | |¦  «        }	 t          ||¦  «         ŒZ# t          $ r9 |d	z  }||_        |                     t          ¦  «        }t          ||¦  «         Y Œœw xY wd
S )a  Make sure that TSNE can approximately recover a uniform 2D grid

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

    Also, t-SNE is not assured to converge to the right solution because bad
    initialization can lead to convergence to bad local minimum (the
    optimization problem is non-convex). To avoid breaking the test too often,
    we re-run t-SNE from the final point when the convergence is not good
    enough.
    r]   rä   r?   rº   rQ   rÊ   )r£   rÇ   rj   ru   r@   rÄ   rC   z{}_{}z:rerunN)rh   r
   rË   Ú	X_2d_gridÚformatÚassert_uniform_gridÚAssertionErrorrÇ   )rÄ   Úseedsr@   ÚseedrÌ   ÚYÚtry_names          r)   Útest_uniform_gridrŒ  f  sí   € õ �!‰HŒH€EØ€HØð -ð -ˆÝØØØØØØØ ð
ñ 
ô 
ˆð ×Ò�yÑ)Ô)ˆà—>’> &¨$Ñ/Ô/ˆð		-Ý  8Ñ,Ô,Ð,Ð,øÝð 	-ð 	-ð 	-ð ˜Ñ ˆHØˆDŒIØ×"Ò"¥9Ñ-Ô-ˆAÝ  8Ñ,Ô,Ð,Ð,Ð,ð	-øøøð-ð -s   ÁA.Á.A B1Â0B1c                 óÀ  — t          d¬¦  «                             | ¦  «        }|                     d¬¦  «        d                              ¦   «         }|                     ¦   «         dk    sJ ‚|                     ¦   «         t          j        |¦  «        z  }|                     ¦   «         t          j        |¦  «        z  }|dk    s
J |¦   «         ‚|dk     s
J |¦   «         ‚d S )	Nr   r±   T)Úreturn_distancer   r@  r  r?   )r   r‡   Ú
kneighborsrŒ   Úminr/   rg   Úmax)rŠ  r‹  rŽ   Ú
dist_to_nnÚsmallest_to_meanÚlargest_to_means         r)   r†  r†  Ž  sÖ   € õ 
 aÐ	(Ñ	(Ô	(×	,Ò	,¨QÑ	/Ô	/€BØ—’¨t�Ñ4Ô4°QÔ7×=Ò=Ñ?Ô?€JØ�>Š>ÑÔ˜cÒ!Ð!Ð!Ð!à!—~’~Ñ'Ô'­"¬'°*Ñ*=Ô*=Ñ=ÐØ —n’nÑ&Ô&­¬°Ñ)<Ô)<Ñ<€Oà˜cÒ!Ð!Ð! 8Ñ!Ô!Ð!Ø˜QÒÐÐ ÑÔÐÐÐr+   c                  ó„  — t          d¦  «        } d}|                      d|¦  «                             t          j        ¦  «        }i }i }dD ]B}t          d|ddddd	d¬
¦  «        }d|_        |                     |¦  «        ||<   |j        ||<   ŒC|d         |d         k    sJ ‚t          |d         |d         d¬¦  «         d S )Nr   r    é   )rÅ   rÆ   r?   rG   rº   r  g     €=@)r£   rÄ   rC   rÇ   rj   r@   ru   rb  rÅ   rÆ   g-Cëâ6?rÚ   )
r   r`   ra   r/   rb   r
   rm  rË   r   r   )rj   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Ô3ˆ�FÑØœ<ˆ�ÑÐà�GÔ ¨Ô 6Ò6Ð6Ð6Ð6Ý�K Ô(¨+°lÔ*CÈ$ÐOÑOÔOÐOÐOÐOr+   c                  ó"  — d} d}d}d}d}d}t          d¦  «        }|                     || ¦  «                             t          j        ¦  «        }|                     ||¦  «        }|dz
  }	t          ¦   «                              |¦  «                             |	d¬	¦  «        }
t          |
|d¬
¦  «        }t          ||||||ddd¬¦	  «	        \  }}dD ]?}t          ||||||dd|¬¦	  «	        \  }}t          ||d¬¦  «         t          ||¦  «         Œ@d S )Nr    r–  r?   r   r]   rR   r   r{   r|   rT   )rb  rD  rF   Únum_threads)r?   r…   g�íµ ÷Æ°>rÚ   )r   r`   ra   r/   rb   r   r‡   r   r   r   r   )r¬   r�   r£   rd  rb  ru   rj   rk   r¡   r}   rg  rh  Úkl_sequentialÚgrad_sequentialrš  Úkl_multithreadÚgrad_multithreads                    r)   Ú-test_gradient_bh_multithread_match_sequentialrŸ  ¹  se  € ð €JØ€IØ€LØÐà€EØ€Jå% aÑ(Ô(€LØ×Ò˜i¨Ñ4Ô4×;Ò;½B¼JÑGÔG€DØ×Ò 	¨<Ñ8Ô8€Fà˜a‘-€KåÑÔß	ŠˆT‰Œß	Ò	 k¸
Ð	Ñ	CÔ	Cð õ
 # =°*ÀaÐHÑHÔH€DÝ%6ØØØØØØØØØð
&ñ 
&ô 
&Ñ"€M�?ð ð <ð <ˆÝ+<ØØØØØØØØØ#ð
,
ñ 
,
ô 
,
Ñ(ˆÐ(õ 	˜¨¸DÐAÑAÔAÐAÝÐ(Ð*:Ñ;Ô;Ð;Ð;ð<ð <r+   zmetric, dist_funcÚ	manhattanrê   c           	      ó¨  — |dk    r| dk    rt          j        d¦  «         t          d¦  «        }d}d}|                     d|¦  «                             t
          j        ¦  «        }t          | ||ddd	d
¬¦  «                             |¦  «        }t          d||ddd	d
¬¦  «                              ||¦  «        ¦  «        }t          ||¦  «         dS )z8Make sure that TSNE works for different distance metricsrÆ   r   zoDistance computations are different for method == 'barnes_hut' and metric == 'manhattan', but this is expected.r   r]   r?   rQ   rÑ   rº   rÊ   )ræ   rÄ   r£   rj   r@   rÇ   rC   rã   N)
r½   Úxfailr   r`   ra   r/   rb   r
   rË   r   )	ræ   Ú	dist_funcrÄ   rj   Ún_components_originalÚn_components_embeddingr´   ÚX_transformed_tsneÚX_transformed_tsne_precomputeds	            r)   Ú)test_tsne_with_different_distance_metricsr¨  ì  s  € ð �ÒÐ &¨KÒ"7Ð"7õ 	Œð5ñ	
ô 	
ð 	
õ
 & aÑ(Ô(€LØÐØÐØ×Ò˜2Ð4Ñ5Ô5×<Ò<½R¼ZÑHÔH€AÝØØØ+ØØØØðñ ô ÷ ‚m�AÑÔð õ &*ØØØ+ØØØØð&ñ &ô &÷ ‚m�I�I˜a‘L”LÑ!Ô!ð #õ Ð)Ð+IÑJÔJÐJÐJÐJr+   c           
      ó  — t          d¦  «        }d}|                     d|¦  «        }t          d| dddddd¬	¦  «                             |¦  «        }t          d| dddddd¬	¦  «                             |¦  «        }t	          ||¦  «         d
S )z=Make sure that the n_jobs parameter doesn't impact the outputr   r    r–  r?   rS   r   rº   rÊ   )r£   rÄ   ru   rb  Ún_jobsrj   rÇ   rC   N)r   r`   r
   rË   r   )rÄ   rj   r¬   r´   ÚX_tr_refÚX_trs         r)   Útest_tsne_n_jobsr­    sÁ   € õ & aÑ(Ô(€LØ€JØ×Ò˜2˜zÑ*Ô*€AÝØØØØØØØØð	ñ 	ô 	÷ ‚m�AÑÔð õ ØØØØØØØØð	ñ 	ô 	÷ ‚m�AÑÔð 	õ �H˜dÑ#Ô#Ð#Ð#Ð#r+   c                  ó4  — t          d¦  «        } d\  }}|                      ||¦  «        }dddddddœ}t          dd	d
i|¤Ž}d}t          j        t
          |¬¦  «        5  |                     |¦  «         ddd¦  «         n# 1 swxY w Y   t          t          |d
¬¦  «        d¬¦  «        }t          dd	di|¤Ž                     |¦  «        }t          dd
dt          j
        |j        ¦  «        idœ|¤Ž                     |¦  «        }	t          |	|¦  «         dS )zAMake sure that method_parameters works with mahalanobis distance.r   )rÑ   r    é(   rÐ   rÊ   rº   r]   )ru   r@   rC   rÇ   r£   rj   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   )
rj   r�   r¬   r´   Údefault_paramsrÌ   rú   Úprecomputed_XÚX_trans_expectedÚX_transs
             r)   Ú#test_tsne_with_mahalanobis_distancer¹  <  s–  € å% aÑ(Ô(€LØ#Ñ€IˆzØ×Ò˜9 jÑ1Ô1€AàØØØØØðð €Nõ Ð7Ð7�}Ð7¨Ð7Ð7€DØ
@€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð ð Ø×Ò˜1ÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ �u Q¨}Ð=Ñ=Ô=ÀdÐKÑKÔK€MÝÐCÐC =ÐC°NÐCÐC×QÒQØñô Ðõ ð Ø¨Sµ"´&¸¼±+´+Ð,>ðð ØBPðð ç‚m�AÑÔð õ �GÐ-Ñ.Ô.Ð.Ð.Ð.s   ÁBÂBÂBru   )é   r–  c                 ó8  — t          d¦  «        }|                     dd¦  «        }t          dd| |¬¦  «        }t          j        d| › d�¦  «        }t          j        t          |¬	¦  «        5  |                     |¦  «         d
d
d
¦  «         d
S # 1 swxY w Y   d
S )z=Make sure that perplexity > n_samples results in a ValueErrorr   rº  r?   rÊ   rÈ   )rC   rÇ   ru   rj   zperplexity (z") must be less than n_samples (20)r¸   N)	r   r`   r
   ÚreÚescaper½   r¾   r¿   rË   )ru   rj   r´   Úestrú   s        r)   Útest_tsne_perplexity_validationr¿  Z  sð   € õ & aÑ(Ô(€LØ×Ò˜2˜qÑ!Ô!€AÝ
ØØØØ!ð	ñ ô €Cõ Œ)ÐQ :ÐQÐQÐQÑ
RÔ
R€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð ð Ø×Ò˜!ÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   Á,BÂBÂBc                  ó  — t          j        d¦  «         t          d¬¦  «        5  t          j        d¦  «                             dd¦  «        } t          d¬¦  «                             | ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )	ziMake sure that TSNE works when the output is set to "pandas".

    Non-regression test for gh-25365.
    Úpandas)Útransform_outputéŒ   é#   r…   r?   )r£   N)r½   Úimportorskipr   r/   r²   rˆ   r
   rË   )Úarrs    r)   Ú"test_tsne_works_with_pandas_outputrÇ  k  sÈ   € õ
 Ô˜Ñ!Ô!Ð!Ý	¨Ð	2Ñ	2Ô	2ð 0ð 0ÝŒi˜ÑÔ×'Ò'¨¨AÑ.Ô.ˆÝ˜!ÐÑÔ×*Ò*¨3Ñ/Ô/Ð/ð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð 0ð 0s   ¥AA>Á>BÂB)Fr@  r   )N)pr¼  rK  Ú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„  rO   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  r$  Úthread_unsaferP  rS  rX  rb   Úfloat64r]  r`  rj  rn  r}  r‚  rŒ  r†  r˜  rŸ  r¨  r­  r¹  r¿  rÇ  r8   r+   r)   ú<module>râ     sã  ðØ 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø %Ð %Ð %Ð %Ð %Ð %Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4à "Ð "Ð "Ð "Ð "Ð "Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð >Ð =Ð =Ð =Ð =Ð =ðð ð ð ð ð ð ð ð ð ð
 AÐ @Ð @Ð @Ð @Ð @Ð @Ð @Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ðð ð ð ð ð ð ð ð ð ð ð ð ?Ð >Ð >Ð >Ð >Ð >Ð >Ð >à€B„K��1�bÑÔ€Ø	ˆŒ�Q˜Ñ	Ô	�€€BØˆBŒIà
�Š‰
Œ
×Ò˜2˜qÑ!Ô!Ø
�Š‰
Œ
×Ò˜2˜qÑ!Ô!ðñô €	ð>5ð >5ð >5ðBHð Hð Hð	Cð 	Cð 	Cð);ð );ð );ðX>ð >ð >ð6Sð Sð Sð2Lð Lð Lð(ð ð ð  „×Ò˜ G¨\Ð#:Ñ;Ô;Ø„×Ò˜Ð!2Ñ3Ô3ðð ñ 4Ô3ñ <Ô;ðð$2ð 2ð 2ð( „×Ò˜ G¨\Ð#:Ñ;Ô;Ø„×Ò˜ (¨EÐ!2Ñ3Ô3Ø„×Ò˜¨.Ñ9Ô9ðYð Yñ :Ô9ñ 4Ô3ñ <Ô;ðYð*ð ð ð,ð ð ð „×ÒØà	�"”*ÐØ	�r”zÐ"ðð 
MÐ	L¸^Ð	LÑ	LÔ	Lðñô ð „×ÒØàˆ%�#�ˆÐ4Ð5Ø�ˆ+˜˜S�zÐ	" OÐ4ðñô ð	&ð 	&ñô ñô ð	&ð „×Ò˜¨.Ñ9Ô9ð	<ð 	<ñ :Ô9ð	<ð „×Ò˜¨.Ñ9Ô9ð%ð %ñ :Ô9ð%ð „×Òð6ñô ð „×ÒÐ+¨^¸nÑ-LÑMÔMð-ð -ñ NÔMñ	ô ð
-ð&	ð 	ð 	ð7ð 7ð 7ð#ð #ð #ð5ð 5ð 5ð5ð 5ð 5ð9ð 9ð 9ðB0ð 0ð 0ð. „×Ò˜¨.Ñ9Ô9ðSð Sñ :Ô9ðSð  „×Ò˜¨.Ñ9Ô9ðSð Sñ :Ô9ðSð4 „×Ò˜¨.Ñ9Ô9ðð ñ :Ô9ððJ ØØð?ð ?ð ?ð ?ð: „Ôð'ð 'ñ Ôð'ð,ð ð ð+ð +ð +ð „×Ò˜ L°'Ð#:Ñ;Ô;Ø„×Ò˜ ¤
¨B¬JÐ7Ñ8Ô8ð(ð (ñ 9Ô8ñ <Ô;ð(ð. „×Ò˜ L°'Ð#:Ñ;Ô;ð-ð -ñ <Ô;ð-ð*'8ð '8ð '8ðT ð
ð 
ñ „ð
ð2 )ð  )ð  )ðFFð Fð Fð0 „×Ò˜ L°'Ð#:Ñ;Ô;ð$-ð $-ñ <Ô;ð$-ðN)ð )ð )ð )ðPð Pð Pð80<ð 0<ð 0<ðf „×ÒØØÐ&Ð'¨(Ð4DÐ)EÐFñô ð „×Ò˜ L°'Ð#:Ñ;Ô;ð*Kð *Kñ <Ô;ñ	ô ð
*KðZ „×Ò˜ G¨\Ð#:Ñ;Ô;ð$ð $ñ <Ô;ð$ð:/ð /ð /ð< „×Ò˜ xÑ0Ô0ðð ñ 1Ô0ðð 0ð 0ð 0ð 0ð 0r+   