§
    ¨éUg›  ã                   óŽ	  — d dl Z d dlmZ d dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZmZmZmZmZmZ d dl m!Z! d dl"m#Z#m$Z$m%Z% d dl&m'Z'm(Z( d dl)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3  ej4        d dd¦  «        Z5 ej6        e5e5¦  «        \  Z7Z8 ej9        e7 :                    ¦   «          ;                    dd¦  «        e8 :                    ¦   «          ;                    dd¦  «        g¦  «        Z<d„ Z=d„ Z>d„ Z?d„ Z@d„ ZAd„ ZBd„ ZCd„ ZDejE         F                    dddg¦  «        ejE         F                    dd ¦  «        d!„ ¦   «         ¦   «         ZGd"„ ZHejE         F                    dddg¦  «        ejE         F                    d#e2¦  «        d$„ ¦   «         ¦   «         ZId%„ ZJd&„ ZKejE         F                    d'dejL        fdejL        fgd(„ e2D ¦   «         ¢¦  «        ejE         F                    d)d*gd+ggd,fd*d-gd+d*ggd.fg¦  «        d/„ ¦   «         ¦   «         ZMejE         F                    d#e2¦  «        d0„ ¦   «         ZNejE         F                    d#e2¦  «        d1„ ¦   «         ZO e/e¬2¦  «        ejE         F                    d3e2e3z   ¦  «        d4„ ¦   «         ¦   «         ZPd5„ ZQd6„ ZRd7„ ZSd8„ ZTejE         F                    d#e2¦  «        d9„ ¦   «         ZUd:„ ZVd;„ ZWd<„ ZXejE         F                    d#e2¦  «        d=„ ¦   «         ZYejE         F                    d#e2¦  «        d>„ ¦   «         ZZejE         F                    d#e2¦  «        d?„ ¦   «         Z[	 	 	 d]dB„Z\dC„ Z]dD„ Z^dE„ Z_ejE         F                    dddg¦  «        ejE         F                    dFej`        eja        g¦  «        dG„ ¦   «         ¦   «         ZbejE         F                    dddg¦  «        dH„ ¦   «         ZcdI„ Zde0dJ„ ¦   «         ZedK„ ZfdL„ ZgejE         F                    dddg¦  «        dM„ ¦   «         Zhd^dN„ZidO„ ZjdP„ ZkejE         F                    dQdRe$fdSe#fg¦  «        ejE         F                    dddg¦  «        dT„ ¦   «         ¦   «         ZlejE         F                    dddg¦  «        dU„ ¦   «         ZmdV„ ZnejE         F                    dWdX¦  «        dY„ ¦   «         ZodZ„ Zpd[„ Zqd\„ ZrdS )_é    N)ÚStringIO)Úassert_allclose)Ú
check_grad)ÚpdistÚ
squareform)Úconfig_context)Ú
make_blobs)ÚEfficiencyWarning)ÚTSNEÚ_barnes_hut_tsne)Ú_gradient_descentÚ_joint_probabilitiesÚ_joint_probabilities_nnÚ_kl_divergenceÚ_kl_divergence_bhÚtrustworthiness)Ú_binary_search_perplexity)Úcosine_distancesÚmanhattan_distancesÚpairwise_distances)ÚNearestNeighborsÚkneighbors_graph)Úcheck_random_state)Úassert_almost_equalÚassert_array_almost_equalÚassert_array_equalÚignore_warningsÚskip_if_32bit)ÚCSR_CONTAINERSÚLIL_CONTAINERSé   é
   éÿÿÿÿc                  óH  —  G d„ d¦  «        } dd„}t           j        }t          ¦   «         t           _        	 t           | ¦   «         t	          j        d¦  «        ddddddd	d
¬¦
  «
        \  }}}t           j                             ¦   «         }t           j                             ¦   «          |t           _        nM# t           j                             ¦   «         }t           j                             ¦   «          |t           _        w xY w|dk    sJ ‚|dk    sJ ‚d|v sJ ‚t           j        }t          ¦   «         t           _        	 t          |t	          j        d¦  «        dddddddd
¬¦
  «
        \  }}}t           j                             ¦   «         }t           j                             ¦   «          |t           _        nM# t           j                             ¦   «         }t           j                             ¦   «          |t           _        w xY w|dk    sJ ‚|dk    sJ ‚d|v sJ ‚t           j        }t          ¦   «         t           _        	 t           | ¦   «         t	          j        d¦  «        dddddddd
¬¦
  «
        \  }}}t           j                             ¦   «         }t           j                             ¦   «          |t           _        nM# t           j                             ¦   «         }t           j                             ¦   «          |t           _        w xY w|dk    sJ ‚|dk    sJ ‚d|v sJ ‚d S )Nc                   ó   — e Zd Zd„ Zdd„ZdS )ú;test_gradient_descent_stops.<locals>.ObjectiveSmallGradientc                 ó   — d| _         d S ©Nr#   )Úit)Úselfs    ú`/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/manifold/tests/test_t_sne.pyÚ__init__zDtest_gradient_descent_stops.<locals>.ObjectiveSmallGradient.__init__:   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,   r5   © r-   r+   ÚObjectiveSmallGradientr&   9   s7   € € € € € ð	ð 	ð 	ð	;ð 	;ð 	;ð 	;ð 	;ð 	;r-   r;   Tc                 ó.   — dt          j        d¦  «        fS )Nç        r!   )r1   Úones)r3   r4   s     r+   Úflat_functionz2test_gradient_descent_stops.<locals>.flat_functionA   s   € Ø•B”G˜A‘J”JˆÐr-   r!   r   éd   r=   r0   é   )Úmax_iterÚn_iter_without_progressÚmomentumÚlearning_rateÚmin_gainÚmin_grad_normÚverboseç      ð?úgradient normr"   é   zdid not make any progresszIteration 10r6   )ÚsysÚstdoutr   r   r1   ÚzerosÚgetvalueÚclose)r;   r?   Ú
old_stdoutr3   Úerrorr)   Úouts          r+   Útest_gradient_descent_stopsrT   7   s/  € ð;ð ;ð ;ð ;ð ;ñ ;ô ;ð ;ðð ð ð õ ”€JÝ‘”…C„Jð Ý(Ø"Ð"Ñ$Ô$ÝŒH�Q‰KŒKØØØ$'ØØØØØð
ñ 
ô 
‰ˆˆ5�"õ Œj×!Ò!Ñ#Ô#ˆÝŒ
×ÒÑÔÐØ�Œ
ˆ
øõ Œj×!Ò!Ñ#Ô#ˆÝŒ
×ÒÑÔÐØ�Œ
ÐÐÐÐØ�CŠ<ˆ<ˆ<ˆ<Ø�Š7ˆ7ˆ7ˆ7Ø˜cÐ!Ð!Ð!Ð!õ ”€JÝ‘”…C„Jð Ý(ØÝŒH�Q‰KŒKØØØ$&ØØØØØð
ñ 
ô 
‰ˆˆ5�"õ Œj×!Ò!Ñ#Ô#ˆÝŒ
×ÒÑÔÐØ�Œ
ˆ
øõ Œj×!Ò!Ñ#Ô#ˆÝŒ
×ÒÑÔÐØ�Œ
ÐÐÐÐØ�CŠ<ˆ<ˆ<ˆ<Ø�Š8ˆ8ˆ8ˆ8Ø&¨#Ð-Ð-Ð-Ð-õ ”€JÝ‘”…C„Jð Ý(Ø"Ð"Ñ$Ô$ÝŒH�Q‰KŒKØØØ$'ØØØØØð
ñ 
ô 
‰ˆˆ5�"õ Œj×!Ò!Ñ#Ô#ˆÝŒ
×ÒÑÔÐØ�Œ
ˆ
øõ Œj×!Ò!Ñ#Ô#ˆÝŒ
×ÒÑÔÐØ�Œ
ÐÐÐÐØ�CŠ<ˆ<ˆ<ˆ<Ø�Š8ˆ8ˆ8ˆ8Ø˜SÐ Ð Ð Ð Ð Ð s&   ·7B7 Â7A
DÄ?/F7 Æ7A
HÈ?7J? Ê?A
L	c                  óÒ  ‡— t          d¦  «        } |                      dd¦  «        }t          |¦  «                             t          j        ¦  «        }d}t          ||d¬¦  «        Št	          j        ‰t	          j        t          j	        ¦  «        j
        ¦  «        Št	          j        ˆfd„t          ‰j        d         ¦  «        D ¦   «         ¦  «        }t          ||d¬¦  «         d S )	Nr   é2   é   ç      9@©rH   c                 ó    •— g | ]J}t          j        t          j        ‰|         t          j        ‰|         ¦  «        z  ¦  «         ¦  «        ‘ŒKS r:   )r1   Ú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   Úastyper1   Úfloat32r   ÚmaximumÚfinfoÚdoubleÚepsÚmeanÚrangeÚshaper   )Úrandom_stateÚdataÚ	distancesÚdesired_perplexityÚmean_perplexityr`   s        @r+   Útest_binary_searchrt   �   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   rY   rA   rb   rc   )	r   re   rf   r1   rg   r   ÚnansumÚlog2r   )ro   rp   rr   r`   Ú
perplexitys        r+   Útest_binary_search_underflowr{   ›   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éÈ   rX   r   rA   F©ÚcopyrY   r!   Údistance©Ún_neighborsÚmodec           	      ó\   •— g | ](}‰|‰j         ‰|         ‰|d z            …         f         ‘Œ)S )r!   )Úindices)r^   ÚkÚP1Údistance_graphÚindptrs     €€€r+   ra   z0test_binary_search_neighbors.<locals>.<listcomp>¼   sL   ø€ ð 	
ð 	
ð 	
àð ˆq�.Ô(¨°¬°V¸AÀ¹E´]Ð)BÔCÐCÔDð	
ð 	
ð 	
r-   é   rc   é–   rW   r"   r#   )r   re   rf   r1   rg   r   r   r   Úfitr   rp   Úreshaper‰   r2   rm   r   ÚlinspaceÚintÚargsortÚravel)Ú	n_samplesrr   ro   rp   rq   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   rW   r€   r�   Fr~   rb   rY   rŠ   rc   )r   re   r   rŒ   r   rp   rf   r1   rg   r�   rm   r   r   r   Útoarrayr   )r‚   r’   ro   rp   r“   rˆ   rq   Úlast_Prr   r3   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   rV   rA   rI   r=   rX   )rr   rH   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-   rW   rc   )r   re   rf   r1   rg   ÚabsÚdotÚTÚfill_diagonalr   r   r   r‘   )
ro   Ú
n_featuresrq   Ú
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@   rA   ç      @r/   rI   r#   r!   g333333ã?rW   rŠ   rb   ©r‚   gš™™™™™É?)
r   re   r   r1   Úaranger�   r   Úshuffler2   r   )ro   Ú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 .+rv   é   rŠ   rA   ©ÚmatchrW   r¶   Nrb   r   r!   )r1   Ú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   rA   rV   i¼  Úauto)r¨   rÌ   ro   rÉ   rB   rE   r!   r¶   g333333ë?)r   re   rf   r1   rg   r   Úfit_transformr   )rÉ   rÌ   ro   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   rb   )r±   ro   )éú   é,  i^  rA   r¿   r"   ç      Y@)r¨   rÌ   rz   rE   rB   ro   r!   N)r   r	   r   rÐ   ÚappendÚkl_divergence_)ro   r¹   r3   Úkl_divergencesrB   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-   Úcsr_containerc           	      ób  — t          d¦  «        }|                     dd¦  «        }d||                     ddd¦  «        |                     ddd¦  «        f<    ||¦  «        }t          ddddd| d	¬
¦  «        }|                     |¦  «        }t          t          ||d¬¦  «        dd¬¦  «         d S )Nr   rV   rA   r=   é   r¿   r"   r×   iî  )r¨   rÌ   rz   rE   ro   rÉ   rB   r!   r¶   rI   g)\�Âõ(¼?©Úrtol)r   re   Úrandintr   rÐ   r   r   )rÉ   rÜ   rÆ   r¹   ÚX_csrrÑ   r²   s          r+   Útest_fit_transform_csr_matrixrã   S  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   rb   éP   rA   Úsqeuclideanr×   ç       @Úprecomputedéô  r¿   )	r¨   rz   rE   Úearly_exaggerationÚmetricro   rH   rB   rÌ   r!   )r‚   rë   gffffffî?)r   rm   re   r   r   r   rÐ   r   )ro   r_   r¹   ÚDrÑ   r²   rÒ   s          r+   ÚFtest_preserve_trustworthiness_approximately_with_precomputed_distancesrí   j  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@   rA   Úcosine©rë   rè   )r   re   r   r   )ro   r¹   s     r+   Ú)test_trustworthiness_not_euclidean_metricrñ   €  s{   € õ & aÑ(Ô(€LØ×Ò˜3 Ñ"Ô"€AÝ˜1˜a¨Ð1Ñ1Ô1µ_Ý˜1 XÐ.Ñ.Ô.°¸-ð6ñ 6ô 6ò ð ð ð ð ð r-   zmethod, retypec                 ó   — g | ]}d |f‘ŒS )rË   r:   )r^   rÜ   s     r+   ra   ra   �  s   € Ð	LÐ	LÐ	L¨Mˆ<˜Ð
'Ð	LÐ	LÐ	Lr-   zD, message_regexr=   rI   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¿   rv   r!   ©rë   rÉ   rÌ   ro   rz   r½   )r   rÂ   rÃ   rÄ   rÐ   )rÉ   rì   ÚretypeÚmessage_regexrÑ   s        r+   Útest_bad_precomputed_distancesr÷   Š  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¿   rv   r!   rô   Úsparser½   r   rW   ©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)rI   r=   r=   )r=   rI   r=   rè   r¿   rv   r!   )rë   rÌ   ro   rz   zB3 neighbors per samples are required, but some samples have only 1r½   )r1   r2   r   rÂ   rÃ   rÄ   rÐ   )rÜ   ÚdistÚbad_distrÑ   Úmsgs        r+   Ú1test_high_perplexity_precomputed_sparse_distancesr  ²  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 )ÚcategoryÚ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@   rA   r€   T)r‚   rƒ   Úinclude_selfrè   r¿   rÏ   )rë   ro   rÌ   rE   N)
r   re   r   r   ÚspÚissparser   rž   r   rÐ   )r  ro   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(   r:   )ÚxÚys     r+   rë   z4test_non_positive_computed_distances.<locals>.metricÔ  s   € Øˆrr-   rÊ   r!   )rë   rÉ   rz   r=   rI   zAll distances .*metric given.*r½   )r   r1   r2   rÂ   rÃ   rÄ   rÐ   )rë   rÑ   r¹   s      r+   Ú$test_non_positive_computed_distancesr  Ò  sÑ   € ðð ð õ �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@   rA   rÏ   )rÌ   rE   )r@   rW   )r   r1   rN   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ë   rE   )r@   r@   )r   r1   rN   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Ì   rz   zBThe parameter init="pca" cannot be used with metric="precomputed".r½   r=   rI   ©r   rÂ   rÃ   rÄ   rÐ   r1   r2   r  s    r+   Ú>test_pca_initialization_not_compatible_with_precomputed_kernelr  ð  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  |                      | ddgddgg¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	NrÍ   r×   r!   )rÌ   rE   rz   zPCA initialization.*r½   r   rW   rú   rü   s     r+   Ú8test_pca_initialization_not_compatible_with_sparse_inputr  ú  s½   € õ �U¨%¸AÐ>Ñ>Ô>€DÝ	Œ•yÐ(>Ð	?Ñ	?Ô	?ð <ð <Ø×Ò˜=˜=¨1¨a¨&°1°a°&Ð)9Ñ:Ô:Ñ;Ô;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <ð <ð <s   ®%A Á A$Á'A$c                  óè   — t          ddd¬¦  «        } t          j        t          d¬¦  «        5  |                      t          j        dgdgg¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	NrŠ   rË   r!   )r¨   rÉ   rz   z'n_components' should be .*r½   r=   rI   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   rA   rÊ   rË   rÞ   r!   r×   rÍ   rI   rÕ   ©r¨   rz   rE   rÌ   ro   rÉ   rê   rB   r/   )r   re   rf   r1   rg   r   rÐ   Úallclose)ro   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   rA   rÊ   rË   rÞ   )éû   ré   r!   ç      à?r¿   rI   r!  )r   re   rf   r1   rg   r   rÐ   Ún_iter_)ro   r¨   r#  r¹   rÉ   rB   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 )NrI   r=   gbv›î
¿güC…r³¿gJ!zëE?gÒ)§x>µ1?r!   r   g¹KÈXAÚø¾gµÎþr}¿g¹KÈXAÚø>gµÎþr}?©r1   r2   Ú_run_answer_test©rÜ   Ú	pos_inputÚ
pos_outputÚ	neighborsÚgrad_outputs        r+   Útest_answer_gradient_two_pointsr4  A  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 )NrI   r=   rµ   rç   ç333333@çš™™™™™@ç$·á1á?ç›mƒ´ª¿ç5a ƒÒ‡&¿çIiò³mù¿çU Ÿ Æ-¿çÜ|3SÙµ?ç›È:Ç�¿çä$Ä*¹Ç¿©r!   rA   rb   ©r   rA   rb   ©r!   r   rb   ©r!   rA   r   g\¥$Æw?g×Rn		Qà¾gz¡}¿g³«ûÙÕ`à>ç�4Ž1Çf>ç6×ÆS×c¾ç>ÛÔgU9&¾ç¸#£*@>r-  r/  s        r+   Ú test_answer_gradient_four_pointsrH  R  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 )NrI   r=   rµ   rç   r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  Fçš™™™™™¹?rA   r-  r/  s        r+   Útest_skip_num_points_gradientrK  m  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-   FrJ  c                 óª  — t          | ¦  «                             t          j        ¦  «        }|||f}	|                     t          j        ¦  «        }|                     t          j        d¬¦  «        }t          |	Ž }
t          |
¦  «                             t          j        ¦  «        }
t          j        |j        t          j        ¬¦  «        } ||
¦  «        }|j	                             t          j        ¦  «        }|j
                             t          j        ¦  «        }t          j        |j        ||||dddd¬¦	  «	         t          ||d	¬
¦  «         d S )NFr~   )Údtyper)  rA   r!   r   )Úskip_num_pointsrŠ   rc   )r   rf   r1   rg   Úint64r   r   rN   rn   r…   r‰   r   Úgradientrp   r   )r0  r1  r2  r3  rÜ   rH   rz   rN  rq   ÚargsÚ	pij_inputÚgrad_bhr`   r‰   s                 r+   r.  r.  �  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   rA   rŠ   )rH   rz   rW   z[t-SNE]znearest neighbors...z"Computed conditional probabilitiesz
Mean sigmazearly exaggeration)	r   r   re   rL   rM   r   rÐ   rO   rP   )ro   rÑ   r¹   rQ   rS   s        r+   Útest_verboserU  ª  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ë   rz   rW   rA   )r   r   re   rÐ   )ro   rÑ   r¹   s      r+   Útest_chebyshev_metricrX  À  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¨   rz   rW   rA   )r   r   re   rŒ   Ú
embedding_r1   ÚallÚisfinite)ro   rÑ   r¹   r²   s       r+   Útest_reduction_to_one_componentr]  È  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"   rA   Fr~   r×   rÖ   r¿   ©r¨   rz   rE   ro   rÉ   rH   rB   rÌ   )r   re   rf   r   rÐ   rM  r1   rg   )rÉ   r^  ro   r¹   rÑ   r²   Úeffective_types          r+   Ú
test_64bitrb  Ñ  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   rV   rA   r×   i÷  r¿   r`  )r   re   r   rÐ   r1   ÚisnanrÙ   )rÉ   ro   r¹   rÑ   s       r+   Útest_kl_divergence_not_nanre  ê  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@   )rA   rb   rW   rI   r   rY   r!   r€   r�   )ÚanglerN  rH   rc   rb   )Úfloatr   re   r   r   r   r   rŒ   r   r   r   r   rž   r   r   )rg  rz   r’   r¨   r±   Údegrees_of_freedomro   rp   rq   r¦   r`   Úkl_exactÚ
grad_exactr‚   Údistances_csrÚP_bhÚkl_bhrS  s                     r+   Útest_barnes_hut_anglero     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            
      óN  — t          d¦  «        } |                      dd¦  «        }dD ]ü}t          dddd|dd	¬
¦  «        }d|_        d|_        t
          j        }t          ¦   «         t
          _        	 |                     |¦  «         t
          j         	                    ¦   «         }t
          j         
                    ¦   «          |t
          _        nM# t
          j         	                    ¦   «         }t
          j         
                    ¦   «          |t
          _        w xY wd|v sJ ‚Œýd S )Nr   r@   r"   )rË   rÊ   r#   rA   g    „×—Ai_  r¿   )rC   rH   rE   ro   rÉ   rB   rÌ   r!   z@did not make any progress during the last -1 episodes. Finished.)r   re   r   Ú_N_ITER_CHECKÚ_EXPLORATION_MAX_ITERrL   rM   r   rÐ   rO   rP   )ro   r¹   rÉ   rÑ   rQ   rS   s         r+   Útest_n_iter_without_progressrs  *  s.  € õ & aÑ(Ô(€LØ×Ò˜3 Ñ#Ô#€AØ)ð Yð YˆÝØ$&ØØØØØØð
ñ 
ô 
ˆð ˆÔØ%&ˆÔ"å”Zˆ
Ý‘Z”Z�Œ
ð	$Ø×Ò˜qÑ!Ô!Ð!å”*×%Ò%Ñ'Ô'ˆCÝŒJ×ÒÑÔÐØ#�CŒJˆJøõ ”*×%Ò%Ñ'Ô'ˆCÝŒJ×ÒÑÔÐØ#�CŒJÐ#Ð#Ð#Ð#ð RÐUXÐXÐXÐXÐXÐXð/Yð Ys   Á3CÃA
Dc                  ó´  — t          d¦  «        } |                      dd¦  «        }d}t          |ddd¬¦  «        }t          j        }t          ¦   «         t          _        	 |                     |¦  «         t          j                             ¦   «         }t          j                             ¦   «          |t          _        nM# t          j                             ¦   «         }t          j                             ¦   «          |t          _        w xY w| 	                    d¦  «        }g }|D ]~}d|v r nw| 
                    d	¦  «        }	|	dk    r[||	d …         }|                     d
d¦  «         	                    d¦  «        d         }|                     t          |¦  «        ¦  «         Œt          j        |¦  «        }t!          |||k             ¦  «        }
|
dk    sJ ‚d S )Nr   r@   rA   gü©ñÒMb`?rÊ   )rG   rH   ro   rÉ   ú
ÚFinishedrJ   zgradient norm = Ú ú r!   )r   re   r   rL   rM   r   rÐ   rO   rP   ÚsplitÚfindÚreplacerØ   rh  r1   r2   Úlen)ro   r¹   rG   rÑ   rQ   rS   Ú	lines_outÚgradient_norm_valuesÚlineÚstart_grad_normÚn_smaller_gradient_normss              r+   Útest_min_grad_normr‚  I  sÇ  € å% aÑ(Ô(€LØ×Ò˜3 Ñ"Ô"€AØ€MÝ˜m°QÀQÈwÐWÑWÔW€Då”€JÝ‘”…C„Jð Ø×Ò˜1ÑÔÐåŒj×!Ò!Ñ#Ô#ˆÝŒ
×ÒÑÔÐØ�Œ
ˆ
øõ Œj×!Ò!Ñ#Ô#ˆÝŒ
×ÒÑÔÐØ�Œ
ÐÐÐÐà—	’	˜$‘”€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Ò(Ð(Ð(Ð(Ð(Ð(s   Á B> Â>A
Dc                  ó  — t          d¦  «        } |                      dd¦  «        }t          ddddd¬¦  «        }t          j        }t          ¦   «         t          _        	 |                     |¦  «         t          j                             ¦   «         }t          j                             ¦   «          |t          _        nM# t          j                             ¦   «         }t          j                             ¦   «          |t          _        w xY w| 	                    d¦  «        d d d…         D ]<}d	|v r6| 
                    d
¦  «        \  }}}|r| 
                    d¦  «        \  }}} nŒ=t          |j        t          |¦  «        d¬¦  «         d S )Nr   rV   rA   rÊ   ré   )rC   rH   ro   rÉ   rB   ru  r#   Ú	Iterationzerror = ú,rW   rc   )r   re   r   rL   rM   r   rÐ   rO   rP   ry  Ú	partitionr   rÙ   rh  )ro   r¹   rÑ   rQ   rS   r  r3   rR   s           r+   Útest_accessible_kl_divergencer‡  t  sr  € å% aÑ(Ô(€LØ×Ò˜2˜qÑ!Ô!€AÝØ !ØØØØðñ ô €Dõ ”€JÝ‘”…C„Jð Ø×Ò˜1ÑÔÐåŒj×!Ò!Ñ#Ô#ˆÝŒ
×ÒÑÔÐØ�Œ
ˆ
øõ Œj×!Ò!Ñ#Ô#ˆÝŒ
×ÒÑÔÐØ�Œ
ÐÐÐÐð —	’	˜$‘”   " Ô%ð ð ˆØ˜$ÐÐØŸ.š.¨Ñ4Ô4‰KˆAˆq�%Øð Ø#Ÿošo¨cÑ2Ô2‘��q˜!Ø�øÝ˜Ô+­U°5©\¬\À1ÐEÑEÔEÐEÐEÐEs   ÁB= Â=A
Dc           
      ól  — t          d¦  «        }d}|D ]Ÿ}t          dd|d|| d¬¦  «        }|                     t          ¦  «        }d                     | |¦  «        }	 t          ||¦  «         ŒZ# t          $ r9 |d	z  }||_        |                     t          ¦  «        }t          ||¦  «         Y Œœw xY wd
S )a  Make sure that TSNE can approximately recover a uniform 2D grid

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

    Also, t-SNE is not assured to converge to the right solution because bad
    initialization can lead to convergence to bad local minimum (the
    optimization problem is non-convex). To avoid breaking the test too often,
    we re-run t-SNE from the final point when the convergence is not good
    enough.
    rb   ré   rA   r¿   rV   rÏ   )r¨   rÌ   ro   rz   rB   rÉ   rE   z{}_{}z:rerunN)rm   r   rÐ   Ú	X_2d_gridÚformatÚassert_uniform_gridÚAssertionErrorrÌ   )rÉ   ÚseedsrB   ÚseedrÑ   ÚYÚtry_names          r+   Útest_uniform_gridr‘  ”  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   rJ  r)  rA   )r   rŒ   Ú
kneighborsr‘   Úminr1   rl   Ú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Ë   rA   rI   r¿   r(  g     €=@)r¨   rÉ   rE   rÌ   ro   rB   rz   rg  rÊ   rË   g-Cëâ6?rß   )
r   re   rf   r1   rg   r   rr  rÐ   r*  r   )ro   r±   r¹   ÚX_embeddedsrB   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›  rA   r!   rb   rW   r   r€   r�   rY   )rg  rN  rH   Únum_threads)rA   rŠ   g�íµ ÷Æ°>rß   )r   re   rf   r1   rg   r   rŒ   r   r   r   r   )r±   r’   r¨   ri  rg  rz   ro   rp   r¦   r‚   rl  rm  Ú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   rb   rA   rV   rÖ   r¿   rÏ   )rë   rÉ   r¨   ro   rB   rÌ   rE   rè   N)
rÂ   Úxfailr   re   rf   r1   rg   r   rÐ   r   )	rë   Ú	dist_funcrÉ   ro   Ú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›  rA   rX   r!   r¿   rÏ   )r¨   rÉ   rz   rg  Ún_jobsro   rÌ   rE   N)r   re   r   rÐ   r   )rÉ   ro   r±   r¹   ÚX_tr_refÚX_trs         r+   Útest_tsne_n_jobsr²  L  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¿   rb   )rz   rB   rE   rÌ   r¨   ro   rë   Úmahalanobisz4Must provide either V or VI for Mahalanobis distancer½   Nrð   T)Úchecksrè   ÚV)rë   Úmetric_paramsr:   )r   re   r   rÂ   rÃ   rÄ   rÐ   r   r   r1   Úcovr¯   r   )
ro   r’   r±   r¹   Údefault_paramsrÑ   r  Úprecomputed_XÚX_trans_expectedÚX_transs
             r+   Ú#test_tsne_with_mahalanobis_distancer¾  j  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rz   )é   r›  c                 ó  — t          d¦  «        }|                     dd¦  «        }t          dd| |¬¦  «        }d}t          j        t
          |¬¦  «        5  |                     |¦  «         d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
z=Make sure that perplexity > n_samples results in a ValueErrorr   r¿  rA   rÏ   rÍ   )rE   rÌ   rz   ro   z&perplexity must be less than n_samplesr½   N©r   re   r   rÂ   rÃ   rÄ   rÐ   )rz   ro   r¹   Úestr  s        r+   Útest_tsne_perplexity_validationrÃ  ˆ  sÚ   € õ & aÑ(Ô(€LØ×Ò˜2˜qÑ!Ô!€AÝ
ØØØØ!ð	ñ ô €Cð 3€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð ð Ø×Ò˜!ÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÁA9Á9A=Â A=c                  ó  — t          j        d¦  «         t          d¬¦  «        5  t          j        d¦  «                             dd¦  «        } t          d¬¦  «                             | ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )	ziMake sure that TSNE works when the output is set to "pandas".

    Non-regression test for gh-25365.
    Úpandas)Útransform_outputéŒ   é#   rŠ   rA   )r¨   N)rÂ   Úimportorskipr   r1   r·   r�   r   rÐ   )Úarrs    r+   Ú"test_tsne_works_with_pandas_outputrË  ™  sÈ   € õ
 Ô˜Ñ!Ô!Ð!Ý	¨Ð	2Ñ	2Ô	2ð 0ð 0ÝŒi˜ÑÔ×'Ò'¨¨AÑ.Ô.ˆÝ˜!ÐÑÔ×*Ò*¨3Ñ/Ô/Ð/ð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð 0ð 0s   ¥AA>Á>BÂBc                  ó  — t          d¦  «        } |                      dd¦  «        }t          d¬¦  «        }d}t          j        t
          |¬¦  «        5  |                     |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )	z$Check `n_iter` parameter deprecated.r   r´  r@   rÕ   )Ún_iterz"'n_iter' was renamed to 'max_iter'r½   N)r   re   r   rÂ   ÚwarnsÚFutureWarningrÐ   ©ro   r¹   rÑ   r  s       r+   Útest_tnse_n_iter_deprecatedrÑ  ¥  sÆ   € å% aÑ(Ô(€LØ×Ò˜2˜sÑ#Ô#€AÝ�sÐÑÔ€DØ
.€CÝ	Œ•m¨3Ð	/Ñ	/Ô	/ð ð Ø×Ò˜1ÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÁA6Á6A:Á=A:c                  ó  — t          d¦  «        } |                      dd¦  «        }t          dd¬¦  «        }d}t          j        t
          |¬¦  «        5  |                     |¦  «         d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
z9Check error raised when `n_iter` and `max_iter` both set.r   r´  r@   rÕ   ré   )rÍ  rB   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ÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÁA7Á7A;Á>A;)FrJ  r   )N)srL   Úior   Únumpyr1   rÂ   Úscipy.sparserù   r  Únumpy.testingr   Úscipy.optimizer   Úscipy.spatial.distancer   r   Úsklearnr   Úsklearn.datasetsr	   Úsklearn.exceptionsr
   Úsklearn.manifoldr   r   Úsklearn.manifold._t_sner   r   r   r   r   r   Úsklearn.manifold._utilsr   Úsklearn.metrics.pairwiser   r   r   Úsklearn.neighborsr   r   Úsklearn.utilsr   Úsklearn.utils._testingr   r   r   r   r   Úsklearn.utils.fixesr   r    rŽ   r  ÚmeshgridÚxxÚyyÚhstackr‘   r�   r‰  rT   rt   r{   rœ   r¡   r³   rº   rÈ   ÚmarkÚparametrizerÓ   rÛ   rã   rí   rñ   Úasarrayr÷   rý   r  r  r  r  r  r  r  r  r&  r+  r4  rH  rK  r.  rU  rX  r]  rg   Úfloat64rb  re  ro  rs  r‚  r‡  r‘  r‹  r�  r¤  r­  r²  r¾  rÃ  rË  rÑ  rÓ  r:   r-   r+   ú<module>rí     s	  ðØ 
€
€
€
Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø %Ð %Ð %Ð %Ð %Ð %Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4à "Ð "Ð "Ð "Ð "Ð "Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð >Ð =Ð =Ð =Ð =Ð =ðð ð ð ð ð ð ð ð ð ð
 AÐ @Ð @Ð @Ð @Ð @Ð @Ð @Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ?Ð >Ð >Ð >Ð >Ð >Ð >Ð >à€B„K��1�bÑÔ€Ø	ˆŒ�Q˜Ñ	Ô	�€€BØˆBŒIà
�Š‰
Œ
×Ò˜2˜qÑ!Ô!Ø
�Š‰
Œ
×Ò˜2˜qÑ!Ô!ðñô €	ðS!ð S!ð S!ðlHð Hð Hð	Cð 	Cð 	Cð);ð );ð );ðX>ð >ð >ð6Sð Sð Sð2Lð Lð Lð(ð ð ð  „×Ò˜ G¨\Ð#:Ñ;Ô;Ø„×Ò˜Ð!2Ñ3Ô3ðð ñ 4Ô3ñ <Ô;ðð$2ð 2ð 2ð( „×Ò˜ G¨\Ð#:Ñ;Ô;Ø„×Ò˜¨.Ñ9Ô9ðYð Yñ :Ô9ñ <Ô;ðYð*ð ð ð,ð ð ð „×ÒØà	�"”*ÐØ	�r”zÐ"ðð 
MÐ	L¸^Ð	LÑ	LÔ	Lðñô ð „×ÒØàˆ%�#�ˆÐ4Ð5Ø�ˆ+˜˜S�zÐ	" OÐ4ðñô ð	&ð 	&ñô ñô ð	&ð „×Ò˜¨.Ñ9Ô9ð	<ð 	<ñ :Ô9ð	<ð „×Ò˜¨.Ñ9Ô9ð%ð %ñ :Ô9ð%ð €Ð+Ð,Ñ,Ô,Ø„×ÒÐ+¨^¸nÑ-LÑMÔMð-ð -ñ NÔMñ -Ô,ð-ð&	ð 	ð 	ð7ð 7ð 7ð#ð #ð #ð5ð 5ð 5ð „×Ò˜¨.Ñ9Ô9ð<ð <ñ :Ô9ð<ð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 ðYð Yñ „ðYð<()ð ()ð ()ðVFð Fð Fð@ „×Ò˜ L°'Ð#:Ñ;Ô;ð$-ð $-ñ <Ô;ð$-ðN)ð )ð )ð )ðPð Pð Pð80<ð 0<ð 0<ðf „×ÒØØÐ&Ð'¨(Ð4DÐ)EÐFñô ð „×Ò˜ L°'Ð#:Ñ;Ô;ð*Kð *Kñ <Ô;ñ	ô ð
*KðZ „×Ò˜ G¨\Ð#:Ñ;Ô;ð$ð $ñ <Ô;ð$ð:/ð /ð /ð< „×Ò˜ xÑ0Ô0ðð ñ 1Ô0ðð 0ð 0ð 0ðð ð ðð ð ð ð r-   