a
    �ù»jï€  ã                	   @   sÖ  d Z ddlZddlZddlm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mZmZ ddlmZmZmZ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! ddl"m#Z#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7 dd„ Z8dd„ Z9dd„ Z:dd„ Z;dd„ Z<e	j= >ddd g¡e	j= >d!d"d#g¡e	j= >d$g d%¢¡d&d'„ ƒƒƒZ?e	j= >d(e7¡d)d*„ ƒZ@d+d,„ ZAd-d.„ ZBd/d0„ ZCd1d2„ ZDd3d4„ ZEd5d6„ ZFe	j= >d7e+¡d8d9„ ƒZGd:d;„ ZHd<d=„ ZId>d?„ ZJd@dA„ ZKdBdC„ ZLdDdE„ ZMdFdG„ ZNdHdI„ ZOdJdK„ ZPdLdM„ ZQdNdO„ ZRe	j= >d$g dP¢¡dQdR„ ƒZSdSdT„ ZTdUdV„ ZUe	j= >d$g dP¢¡e	j= >dWdXdYdgfdZdYdgfd[ddgfg¡d\d]„ ƒƒZVd^d_„ ZWd`da„ ZXdbdc„ ZYdS )dz=
Several basic tests for hierarchical clustering procedures

é    N)Úpartial)Úmkdtemp)Ú	hierarchy)Úconnected_components)ÚAgglomerativeClusteringÚFeatureAgglomerationÚ	ward_tree)Ú_TREE_BUILDERSÚ_fix_connectivityÚ_hc_cutÚlinkage_tree)Úaverage_mergeÚ	max_mergeÚmst_linkage_core)Úmake_circlesÚ
make_moons)Úgrid_to_graph)ÚDistanceMetric)Úadjusted_rand_scoreÚnormalized_mutual_info_score)ÚPAIRED_DISTANCESÚcosine_distancesÚmanhattan_distancesÚpairwise_distances)ÚMETRICS_DEFAULT_PARAMS)Úkneighbors_graph)ÚIntFloatDict)Úassert_almost_equalÚassert_array_almost_equalÚassert_array_equalÚcreate_memmap_backed_dataÚignore_warnings)ÚLIL_CONTAINERSc                  C   sî   t j d¡} | jdd�}t t¡� t|dd� W d   ƒ n1 sD0    Y  t t¡�" t|t  d¡d� W d   ƒ n1 s€0    Y  t	ƒ  
|¡ t|ƒ}t|dd	�}t|d
 t|dd	�d
 ƒ t|td	�}t|d
 t|dd	�d
 ƒ d S )Né*   )é   r$   ©ÚsizeZfoo)Úlinkage©é   r)   ©ÚconnectivityÚprecomputed©Úaffinityr   ÚcosineÚ	manhattan)ÚnpÚrandomÚRandomStateÚnormalÚpytestÚraisesÚ
ValueErrorr   Úonesr   Úfitr   r   r   )ÚrngÚXÚdisÚres© r>   úME:\soccer\ml_env\Lib\site-packages\sklearn/cluster/tests/test_hierarchical.pyÚtest_linkage_misc6   s    *0r@   c            
   	   C   s  t j d¡} t jddgtd�}d|dd…dd…f< |  dd¡}t|jŽ }t 	¡ D ]À}||j
|d�\}}}}d	|jd
  d
 }	t|ƒ| |	ks�J ‚t t¡�$ ||j
t  d¡d� W d   ƒ n1 sÄ0    Y  t t¡�& ||j
d d… |d� W d   ƒ qP1 �s0    Y  qPd S )Nr   é
   ©Zdtyper)   é   é2   éd   r*   é   é   r(   )r1   r2   r3   r8   ÚboolÚrandnr   Úshaper	   ÚvaluesÚTÚlenr5   r6   r7   )
r:   Úmaskr;   r+   Útree_builderÚchildrenÚn_componentsÚn_leavesÚparentÚn_nodesr>   r>   r?   Útest_structured_linkage_treeO   s    
ÿ2rU   c                  C   sj  t j d¡} |  dd¡}||d fD ]�}tƒ �P t t¡�& t|j	dd�\}}}}W d   ƒ n1 sf0    Y  W d   ƒ n1 s„0    Y  d|j
d  d }t|ƒ| |ks$J ‚q$t ¡ D ]¦}||d fD ]”}tƒ �R t t¡�& ||j	dd�\}}}}W d   ƒ n1 �s0    Y  W d   ƒ n1 �s20    Y  d|j
d  d }t|ƒ| |ksÎJ ‚qÎq¾d S )Nr   rD   rE   rA   )Ú
n_clustersrF   rG   )r1   r2   r3   rI   r!   r5   ÚwarnsÚUserWarningr   rL   rJ   rM   r	   rK   )r:   r;   Zthis_XrP   rT   rR   rS   rO   r>   r>   r?   Útest_unstructured_linkage_treef   s"    RÿNrY   c            	      C   s‚   t j d¡} t jddgtd�}|  dd¡}t|jŽ }t 	¡ D ]@}||j
|d�\}}}}d|jd  d }t|ƒ| |ks<J ‚q<d S )	Nr   rA   rB   rD   rE   r*   rF   rG   )r1   r2   r3   r8   rH   rI   r   rJ   r	   rK   rL   rM   )	r:   rN   r;   r+   Úlinkage_funcrP   rT   rR   rS   r>   r>   r?   Útest_height_linkage_tree~   s    
ÿr[   c                  C   sX   t  ddgddgg¡} d}tjt|d�� t| dd� W d   ƒ n1 sJ0    Y  d S )Nr   rG   z;Cosine affinity cannot be used when X contains zero vectors©Úmatchr/   r-   )r1   Úarrayr5   r6   r7   r   )r;   Úmsgr>   r>   r?   Útest_zero_cosine_linkage_treeŒ   s    r`   zn_clusters, distance_threshold)Nç      à?)rA   NÚcompute_distancesTFr'   ©ÚwardÚcompleteÚaverageÚsinglec                 C   s¬   t j d¡}t jddgtd�}d}| |d¡}t|jŽ }t| ||||d�}	|	 	|¡ |s`|d uršt
|	dƒsnJ ‚|	jjd }
|
d }|	jj|d fks¨J ‚nt
|	dƒr¨J ‚d S )	Nr   rA   rB   rE   rD   )rV   r+   r'   Údistance_thresholdrb   Ú
distances_rG   )r1   r2   r3   r8   rH   rI   r   rJ   r   r9   ÚhasattrÚ	children_ri   )rV   rb   rh   r'   r:   rN   Ú	n_samplesr;   r+   Ú
clusteringZ
n_childrenrT   r>   r>   r?   Ú'test_agglomerative_clustering_distances•   s&    
û
rn   Úlil_containerc              
   C   sf  t j | ¡}t jddgtd�}d}| |d¡}t|jŽ }dD �].}td||d�}| 	|¡ zLt
ƒ }	td||	|d�}| 	|¡ |j}
t  t  |
¡¡dksšJ ‚W t |	¡ nt |	¡ 0 td||d�}d|_| 	|¡ tt|j|
ƒd	ƒ d |_| 	|¡ t  t  |j¡¡dk�sJ ‚td|| ¡ d d…d d…f ƒ|d�}t t¡� | 	|¡ W d   ƒ q<1 �sb0    Y  q<td| ¡ d
dd�}t t¡� | 	|¡ W d   ƒ n1 �s®0    Y  t ¡ D ]X}tdt  ||f¡|dd�}| 	|¡ tdd |dd�}| 	|¡ tt|j|jƒd	ƒ �qÀtd|dd�}| 	|¡ t|ƒ}td|ddd�}| 	|¡ t|j|jƒ d S )NrA   rB   rE   rD   rc   ©rV   r+   r'   )rV   r+   Zmemoryr'   FrG   r0   rd   )rV   r+   Úmetricr'   re   r,   )r1   r2   r3   r8   rH   rI   r   rJ   r   r9   r   Úlabels_r&   ÚuniqueÚshutilÚrmtreeÚcompute_full_treer   r   r+   Ztoarrayr5   r6   r7   r   Úkeysr   r   )Úglobal_random_seedro   r:   rN   rl   r;   r+   r'   rm   ÚtempdirÚlabelsrq   Zclustering2ÚX_distr>   r>   r?   Útest_agglomerative_clustering´   s”    

ÿ
ü
ÿ

ý,ü*ü
ÿ
ÿÿ
ü
r|   c                  C   s2   t j d¡} t|  dd¡ƒ}tddd� |¡ dS )zhAgglomerativeClustering must work on mem-mapped dataset.

    Non-regression test for issue #19875.
    r   rD   rE   Ú	euclideanrg   ©rq   r'   N)r1   r2   r3   r    rI   r   r9   )r:   ÚXmmr>   r>   r?   Ú+test_agglomerative_clustering_memory_mapped  s    r€   c                 C   sò   t j | ¡}t jddgtd�}| dd¡}t|jŽ }td|d�}| 	|¡ t  
t  |j¡¡dksdJ ‚| |¡}|jd dks€J ‚| |¡}t  |d ¡j
dks¢J ‚t| |¡|ƒ t t¡�" | 	|d d… ¡ W d   ƒ n1 sä0    Y  d S )	NrA   rB   rD   rE   r$   ©rV   r+   rG   r   )r1   r2   r3   r8   rH   rI   r   rJ   r   r9   r&   rs   rr   Z	transformZinverse_transformr   r5   r6   r7   )rx   r:   rN   r;   r+   ZaggloZX_redZX_fullr>   r>   r?   Útest_ward_agglomeration  s    



r‚   c                  C   sv   t ddd�\} }tddd�}| | ¡ tt|j|ƒdƒ tdd	dd
�\}}tddd�}| |¡ tt|j|ƒdƒ d S )Ngš™™™™™©?r#   )ÚnoiseÚrandom_staterF   rg   )rV   r'   rG   ra   gš™™™™™™?)Úfactorrƒ   r„   )r   r   r9   r   r   rr   r   )ZmoonsZmoon_labelsrm   ZcirclesZcircle_labelsr>   r>   r?   Útest_single_linkage_clustering2  s    
ÿ
ÿr†   c                 C   sv   g }| |fD ]L}t |ƒ}| ¡ d }t ||f¡}d|t |¡|f< | t ||j¡¡ q|d |d k ¡ srJ ‚dS )zUtil for comparison with scipyrG   r   N)	rM   Úmaxr1   ZzerosÚarangeÚappendÚdotrL   Úall)Zcut1Zcut2Zco_clustÚcutÚnÚkZecutr>   r>   r?   Úassess_same_labellingC  s    r�   c                 C   sT  d\}}}t j | ¡}t  ||f¡}t ¡ D ]æ}tdƒD ]Ø}d|j||fd� }|dt  |¡d d …t j	f  8 }||j
dd�d d …t j	f 8 }tj||d�}	|	d d …d d	…f jtd
d�}
t| ||d�\}}}}|jdd� t||
d| ƒ t|||ƒ}t||
|ƒ}t||ƒ q8q,t t¡�  t|d ||ƒ W d   ƒ n1 �sF0    Y  d S )N©rA   r$   é   r$   çš™™™™™¹?r%   ç      @rG   ©Zaxis©ÚmethodrF   F©Úcopyr*   z2linkage tree differs from scipy impl for linkage: )r1   r2   r3   r8   r	   rw   Úranger4   rˆ   ÚnewaxisÚmeanr   r'   ÚastypeÚintÚsortr   r   r�   r5   r6   r7   )rx   r�   ÚprŽ   r:   r+   r'   Úir;   Úoutrk   rP   Ú_rR   rŒ   Zcut_r>   r>   r?   Útest_sparse_scikit_vs_scipyO  s0    
 ÿýr£   c                 C   sâ   d\}}}t j | ¡}d|j||fd� }|dt  |¡d d …t jf  8 }||jdd�d d …t jf 8 }tj|dd�}|d d …d d	…f  	t
¡}td |ƒ\}}	}
}	|jdd� t||d
ƒ t|||
ƒ}t|||
ƒ}t||ƒ d S )Nr�   r’   r%   r“   rG   r”   rg   r•   rF   z8linkage tree differs from scipy impl for single linkage.)r1   r2   r3   r4   rˆ   rš   r›   r   r'   rœ   r�   r	   rž   r   r   r�   )rx   rl   Ú
n_featuresrV   r:   r;   r¡   Zchildren_scipyrP   r¢   rR   rŒ   Z	cut_scipyr>   r>   r?   Ú)test_vector_scikit_single_vs_scipy_singlew  s"    
 ýr¥   Úmetric_param_gridc                 C   sŒ   t jjdd�}|jdd�}t|ƒ}| \}}| ¡ }tj| ¡ Ž D ]F}t	t
||ƒƒ}tj|fi |¤Ž}	t||	ƒ}
t||	ƒ}t j |
|¡ q@dS )zoThe MST-LINKAGE-CORE algorithm must work on mem-mapped dataset.

    Non-regression test for issue #19875.
    rG   )Úseed)é   r)   r%   N)r1   r2   r3   r4   r    rw   Ú	itertoolsÚproductrK   ÚdictÚzipr   Z
get_metricr   ZtestingZassert_equal)r¦   r:   r;   r   rq   Z
param_gridrw   ÚvalsÚkwargsZdistance_metricZmstZmst_mmr>   r>   r?   Ú#test_mst_linkage_core_memory_mapped�  s    

r¯   c               	   C   s    t  g d¢g d¢g d¢g d¢g d¢g d¢g¡} t  g d¢¡}t| ddd�}d||j  }t| |d	ƒ\}}d
D ].}td||d�}| | ¡ tt|j	|ƒdƒ qld S )N)r   r   r   )rG   rG   rG   )rF   rF   rF   )r   r   rG   rG   rF   rF   r‘   F©Zn_neighborsÚinclude_selfra   r}   )rg   rf   rf   rd   )rV   r'   r+   rG   )
r1   r^   r   rL   r
   r   r9   r   r   rr   )r;   Ztrue_labelsr+   rQ   r'   rm   r>   r>   r?   Útest_identical_points£  s    .ÿ
ÿr²   c                  C   s8   t  g d¢¡} t| ddd�}td|dd�}| | ¡ d S )N))çyé&1¬Œ?g¸…ëQ¸¾?)r³   gòÒMbX¹?)r³   g¢E¶óýÔ¸?©gœÄ °rh‘?ç/Ý$�•Ã?r´   ©ç;ßO�—n’?rµ   r¶   r¶   r¶   r¶   r¶   r¶   )r·   gÛù~j¼tÃ?)r·   gßO�—nÃ?)r·   g;ßO�—nÂ?rA   F©r±   r)   rd   rp   )r1   r^   r   r   r9   )r;   r+   rd   r>   r>   r?   Útest_connectivity_propagation·  s    ÿÿr¹   c           	      C   s¬   d\}}t j | ¡}t  ||f¡}tdƒD ]|}d|j||fd� }|dt  |¡d d …t jf  8 }||jdd�d d …t jf 8 }t	|ƒ}t	||d�}t
|d	 |d	 ƒ q*d S )
N©rA   r$   r$   r’   r%   r“   rG   r”   r*   r   )r1   r2   r3   r8   r™   r4   rˆ   rš   r›   r   r   )	rx   r�   rŸ   r:   r+   r    r;   Úout_unstructuredÚout_structuredr>   r>   r?   Útest_ward_tree_children_orderÖ  s     r½   c              	   C   s:  d\}}t j | ¡}t  ||f¡}tdƒD �]}d|j||fd� }|dt  |¡d d …t jf  8 }||jdd�d d …t jf 8 }t	|dd	�}t	||dd
�}|d }	|d }
t
|	|
ƒ |d }|d }t||ƒ dD ]^}t|||dd�d }t||dd�d }|d }|d }|d }|d }t||ƒ t||ƒ qÔq*t  ddgddgddgddgddgddgg¡}t  g d¢g d¢g d¢g d¢g d ¢g¡}t  g d¢g d¢g d¢g d!¢g d"¢g¡}t  g d¢g d¢g d¢g d#¢g d$¢g¡}t  |¡\}}t  ||f¡}t	|dd	�}t	||dd
�}t
|d d …d d%…f |d ƒ t
|d d …d d%…f |d ƒ t|d d …d%f |d& ƒ t|d d …d%f |d& ƒ g d'¢}||g}t||ƒD ]˜\}}t|d|d(�}t|||dd�}t
|d d …d d%…f |d ƒ t
|d d …d d%…f |d ƒ t|d d …d%f |d& ƒ t|d d …d%f |d& ƒ �qœd S ))Nrº   r$   r’   r%   r“   rG   r”   T)Úreturn_distance)r+   r¾   r   éÿÿÿÿ)rf   re   rg   )r+   r'   r¾   )r'   r¾   g»™Ñ�†ãö?gææeGÀg…�w7äÕ@g}°Î)¯J@gZ!E•ø@gÇÇn]#Àgú!º�Ü„@gŠ´,8Àg!«�Yùz @gRÕ¡&<aÀg¤ÚŽF‘�@gÜT“–€!@)g      @r“   g0rqÐ5×?ç       @)ç      ð?g      @gAæVJÇSü?rÀ   )g        rÀ   gòL�/ùu@rÀ   )ç      @ç       @g6S„HD4"@r“   )ç      @ç      "@gˆwÊ´GÇ8@rÂ   )rÂ   rÃ   gwîfÛ£Þ@r“   )rÄ   rÅ   g63CÆ2@rÂ   )rÂ   rÃ   gÐéýoº;@r“   )rÄ   rÅ   g_‡ ½á.@rÂ   rF   r)   )re   rf   rg   )r¾   r'   )r1   r2   r3   r8   r™   r4   rˆ   rš   r›   r   r   r   r   r^   rJ   r¬   )rx   r�   rŸ   r:   r+   r    r;   r»   r¼   Zchildren_unstructuredZchildren_structuredZdist_unstructuredZdist_structuredr'   Zstructured_itemsZunstructured_itemsZstructured_distZunstructured_distZstructured_childrenZunstructured_childrenZlinkage_X_wardZlinkage_X_completeZlinkage_X_averagerl   r¤   Zconnectivity_XZout_X_unstructuredZout_X_structuredZlinkage_optionsZX_linkage_truthZX_truthr>   r>   r?   Ú&test_ward_linkage_tree_return_distanceê  s¤     

ÿþÿ
úÿûÿ
ûÿ
ûÿ
ÿrÆ   c                  C   s~   t  ddgddgg¡} t  ddgddgg¡}tdd|d�}t|dd�}t t¡� | | ¡ W d   ƒ n1 sp0    Y  d S )	Nr   rG   TFrF   )Ún_xÚn_yrN   rd   ©r+   r'   )r1   r^   r   r   r5   rW   rX   r9   )ÚxÚmÚcÚwr>   r>   r?   Ú test_connectivity_fixing_non_lil`  s    rÎ   c            	      C   sâ   t j d¡} t  | jddd�jt jdd�¡}|  t|ƒ¡}t	||ƒ}t
||ƒD ]\}}|| |ksNJ ‚qNt jdt jd�d d d	… }t  dd
¡d d d	… }t	||ƒ}t||t jdt jd�ddd� t||t jdt jd�ddd� d S )Nr   rE   rA   r%   Fr—   rD   rB   rF   ra   rG   )rN   Zn_aZn_b)r1   r2   r3   rs   Úrandintrœ   ZintpÚrandrM   r   r¬   rˆ   Úfullr   r8   r   )	r:   rw   rK   ÚdÚkeyÚvalueZ
other_keysZother_valuesÚotherr>   r>   r?   Útest_int_float_dictm  s     

rÖ   c                  C   sj   t j d¡} |  dd¡}t|ddd�}t|d�}tttddd�d�}| |¡ | |¡ t|j	|j	ƒ d S )	Nr   r¨   r$   r‘   Fr¸   r*   r°   )
r1   r2   r3   rÐ   r   r   r   r9   r   rr   )r:   r;   r+   Úaglc1Úaglc2r>   r>   r?   Útest_connectivity_callable~  s    
ÿ

rÙ   c                  C   sn   t j d¡} |  dd¡}t|ddd�}t|ddd�}t|d�}t|d�}| |¡ | |¡ t|j|jƒ d S )	Nr   r¨   r$   r‘   Fr¸   Tr*   )	r1   r2   r3   rÐ   r   r   r9   r   rr   )r:   r;   r+   Zconnectivity_include_selfr×   rØ   r>   r>   r?   Ú"test_connectivity_ignores_diagonal‹  s    



rÚ   c                  C   sÀ   t j d¡} |  dd¡}t|ddd�}td|d�}| |¡ |jd }|jjd }||d ksbJ ‚d	}|  d
d¡}t|ddd�}t||d�}| |¡ |jd }|jjd }||| ks¼J ‚d S )Nr   rA   rF   r$   Fr¸   r�   rG   ée   éÈ   )	r1   r2   r3   rI   r   r   r9   rJ   rk   )r:   r;   r+   Zagcrl   rT   rV   r>   r>   r?   Útest_compute_full_tree—  s     



rÝ   c                  C   sP   t j d¡} |  dd¡}t  d¡}t ¡ D ] }t|ƒ||d�d dks*J ‚q*d S )Nr   r$   r*   rG   )r1   r2   r3   rÐ   Úeyer	   rK   r!   )r:   r;   r+   rZ   r>   r>   r?   Útest_n_components±  s
    
rß   c                  C   sr   d} t j d¡}| | | ¡}t  g d¢¡}t| | |t jd�}G dd„ dƒ}|ƒ }t|||jd� |j	dksnJ ‚d S )	NrF   r   )TFFT)rÇ   rÈ   rN   Z	return_asc                   @   s   e Zd Zdd„ Zdd„ ZdS )z>test_affinity_passed_to_fix_connectivity.<locals>.FakeAffinityc                 S   s
   d| _ d S )Nr   ©Úcounter)Úselfr>   r>   r?   Ú__init__É  s    zGtest_affinity_passed_to_fix_connectivity.<locals>.FakeAffinity.__init__c                 _   s   |  j d7  _ | j S )NrG   rà   )râ   Úargsr®   r>   r>   r?   Ú	incrementÌ  s    zHtest_affinity_passed_to_fix_connectivity.<locals>.FakeAffinity.incrementN)Ú__name__Ú
__module__Ú__qualname__rã   rå   r>   r>   r>   r?   ÚFakeAffinityÈ  s   ré   )r+   r.   r‘   )
r1   r2   r3   rI   r^   r   Zndarrayr   rå   rá   )r&   r:   r;   rN   r+   ré   Úfar>   r>   r?   Ú(test_affinity_passed_to_fix_connectivity½  s    rë   )rd   re   rf   c                 C   sÜ   t j |¡}t jddgtd�}d}| |d¡}t|jŽ }d}d |fD ]’}td ||| d�}	|	 	|¡ |	j
}
tt  |	j
¡ƒ}t|  }|||d dd�\}}}}}t  ||k¡d }||ks¸J ‚t|||d	�}t  |
|¡sDJ ‚qDd S )
NrA   rB   rE   rD   )rV   rh   r+   r'   T)r+   rV   r¾   rG   )rV   rP   rR   )r1   r2   r3   r8   rH   rI   r   rJ   r   r9   rr   rM   rs   r	   Zcount_nonzeror   Zarray_equiv)r'   rx   r:   rN   rl   r;   r+   rh   Úconnrm   Zclusters_producedZnum_clusters_producedrO   rP   rQ   rR   rS   Z	distancesZnum_clusters_at_thresholdZclusters_at_thresholdr>   r>   r?   Ú5test_agglomerative_clustering_with_distance_threshold×  s6    
ü
ÿÿÿrí   c                 C   sx   t j | ¡}d}|jdd|dfd�}td ddd� |¡}t|d	d
d�}t  |t j¡ t  	|dk¡sfJ ‚|j
|kstJ ‚d S )NrA   iÔþÿÿi,  r‘   r%   rÁ   rg   ©rV   rh   r'   Ú	minkowskirF   ©rq   rŸ   r’   )r1   r2   r3   rÏ   r   r9   r   Úfill_diagonalÚinfr‹   Zn_clusters_)rx   r:   rl   r;   rm   Zall_distancesr>   r>   r?   Útest_small_distance_thresholdþ  s    ÿþró   c                 C   sà   t j | ¡}d}|jdd|dfd�}d}td |dd� |¡}|j}t|d	d
d�}t  |t j	¡ t  
|¡D ]r}||k}	||	 d d …|	f jdd� ¡ }
||	 d d …|	 f jdd� ¡ }|	 ¡ dkrÎ|
|k sÎJ ‚||kshJ ‚qhd S )NrE   iöÿÿÿrA   r‘   r%   r)   rg   rî   rï   rF   rð   r   r”   rG   )r1   r2   r3   rÏ   r   r9   rr   r   rñ   rò   rs   Úminr‡   Úsum)rx   r:   rl   r;   rh   rm   rz   ÚDÚlabelZin_cluster_maskZmax_in_cluster_distanceZmin_out_cluster_distancer>   r>   r?   Ú.test_cluster_distances_with_distance_threshold  s*    ÿþÿ ÿrø   )Ú	thresholdÚy_truera   rG   rÁ   g      ø?c                 C   s:   dgdgg}t d || d�}| |¡}t||ƒdks6J ‚d S )Nr   rG   rî   )r   Zfit_predictr   )r'   rù   rú   r;   Ú	clustererZy_predr>   r>   r?   Ú?test_agglomerative_clustering_with_distance_threshold_edge_case*  s    ÿ
rü   c                  C   sÞ   dgdgg} t jtdd��" td d d� | ¡ W d   ƒ n1 sB0    Y  t jtdd��" tddd� | ¡ W d   ƒ n1 s‚0    Y  dgdgg} t jtdd��$ td ddd	� | ¡ W d   ƒ n1 sÐ0    Y  d S )
Nr   rG   zExactly one of r\   )rV   rh   rF   z!compute_full_tree must be True ifF)rV   rh   rv   )r5   r6   r7   r   r9   )r;   r>   r>   r?   Ú&test_dist_threshold_invalid_parameters:  s    00ÿþrý   c                  C   s\   t j d¡} |  dd¡}tjtdd��" tddd� |¡ W d   ƒ n1 sN0    Y  d S )	Nr   r$   r‘   z>Distance matrix should be square, got matrix of shape \(5, 3\)r\   r,   re   r~   )	r1   r2   r3   rÐ   r5   r6   r7   r   r9   )r:   r;   r>   r>   r?   Ú*test_invalid_shape_precomputed_dist_matrixI  s    þrþ   c                  C   s
  t  g d¢g d¢g d¢g d¢g d¢g¡} t| ƒd dks<J ‚t j d¡}| dd¡}t|ƒ}td	| d
d�}d}tj	t
|d�� | |¡ W d  ƒ n1 sœ0    Y  t| d
d�}tj	t
|d�� | |¡ W d  ƒ n1 sà0    Y  t|j|jƒ t|j|jƒ dS )zÁCheck that connecting components works when connectivity and
    affinity are both precomputed and the number of connected components is
    greater than 1. Non-regression test for #16151.
    )r   rG   rG   r   r   )r   r   rG   r   r   )r   r   r   r   r   )r   r   r   r   rG   r   rF   r$   rA   r,   re   )rq   r+   r'   z.Completing it to avoid stopping the tree earlyr\   NrÉ   )r1   r^   r   r2   r3   rI   r   r   r5   rW   rX   r9   r   rr   rk   )Zconnectivity_matrixr:   r;   r{   Zclusterer_precomputedr_   rû   r>   r>   r?   Ú@test_precomputed_connectivity_metric_with_2_connected_componentsU  s2    ûÿ
ÿ(ÿ(rÿ   )ZÚ__doc__r©   rt   Ú	functoolsr   Útempfiler   Únumpyr1   r5   Zscipy.clusterr   Zscipy.sparse.csgraphr   Zsklearn.clusterr   r   r   Zsklearn.cluster._agglomerativer	   r
   r   r   Z"sklearn.cluster._hierarchical_fastr   r   r   Zsklearn.datasetsr   r   Z sklearn.feature_extraction.imager   Zsklearn.metricsr   Zsklearn.metrics.clusterr   r   Zsklearn.metrics.pairwiser   r   r   r   Z'sklearn.metrics.tests.test_dist_metricsr   Zsklearn.neighborsr   Zsklearn.utils._fast_dictr   Zsklearn.utils._testingr   r   r   r    r!   Zsklearn.utils.fixesr"   r@   rU   rY   r[   r`   ÚmarkZparametrizern   r|   r€   r‚   r†   r�   r£   r¥   r¯   r²   r¹   r½   rÆ   rÎ   rÖ   rÙ   rÚ   rÝ   rß   rë   rí   ró   rø   rü   rý   rþ   rÿ   r>   r>   r>   r?   Ú<module>   s~   	
^
(
v
&"ÿ