U
    ½mœdM�  ã                	   @   s  d 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Z	ddl
mZ ddl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 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'm(Z(m)Z)m*Z* ddlm+Z+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1 ddl2m3Z3 ddlm4Z4 ddl5m6Z6m7Z7 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)d*d+d,d-g¡d.d/„ ƒƒƒZ?d0d1„ Z@d2d3„ ZAd4d5„ ZBd6d7„ ZCd8d9„ ZDd:d;„ ZEd<d=„ ZFej= Gd>¡ej= >d?e¡d@dA„ ƒƒZHdBdC„ ZIdDdE„ ZJdFdG„ ZKdHdI„ ZLdJdK„ ZMdLdM„ ZNdNdO„ ZOdPdQ„ ZPdRdS„ ZQdTdU„ ZRdVdW„ ZSej= >d)d*d+d,g¡dXdY„ ƒZTdZd[„ ZUd\d]„ ZVej= >d)d*d+d,g¡ej= >d^d_d`dgfdad`dgfdbddgfg¡dcdd„ ƒƒZWdedf„ ZXdgdh„ ZYdidj„ ZZdkdl„ Z[dS )mz=
Several basic tests for hierarchical clustering procedures

é    N)Úmkdtemp)Úpartial)Úsparse)Ú	hierarchy)Úconnected_components)Úadjusted_rand_score)ÚMETRICS_DEFAULT_PARAMS)Úassert_almost_equalÚcreate_memmap_backed_data)Úassert_array_almost_equal)Úignore_warnings)Ú	ward_tree)ÚAgglomerativeClusteringÚFeatureAgglomeration)Ú_hc_cutÚ_TREE_BUILDERSÚlinkage_treeÚ_fix_connectivity)Úgrid_to_graph)ÚDistanceMetric)ÚPAIRED_DISTANCESÚcosine_distancesÚmanhattan_distancesÚpairwise_distances)Únormalized_mutual_info_score)Úkneighbors_graph)Úaverage_mergeÚ	max_mergeÚmst_linkage_core)ÚIntFloatDict)Úassert_array_equal)Ú
make_moonsÚmake_circlesc               	   C   sÆ   t j d¡} | jdd�}t t¡� t|dd� W 5 Q R X t t¡� t|t  d¡d� W 5 Q R X 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>   ú`/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/cluster/tests/test_hierarchical.pyÚtest_linkage_misc5   s    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�t‚t t¡� ||j
t  d¡d� W 5 Q R X t t¡� ||j
d d… |d� W 5 Q R X qPd S )Nr   é
   ©Zdtyper)   é   é2   éd   r*   é   é   r(   )r1   r2   r3   r8   ÚboolÚrandnr   Úshaper   ÚvaluesÚTÚlenÚAssertionErrorr5   r6   r7   )
r:   Úmaskr;   r+   Útree_builderÚchildrenÚn_componentsÚn_leavesÚparentÚn_nodesr>   r>   r?   Útest_structured_linkage_treeN   s     
 ÿrV   c                  C   s  t j d¡} |  dd¡}||d fD ]h}tƒ �2 t t¡� t|j	dd�\}}}}W 5 Q R X W 5 Q R X d|j
d  d }t|ƒ| |ks$t‚q$t ¡ D ]z}||d fD ]h}tƒ �2 t t¡� ||j	dd�\}}}}W 5 Q R X W 5 Q R X d|j
d  d }t|ƒ| |ks¦t‚q¦q–d S )Nr   rD   rE   rA   )Ú
n_clustersrF   rG   )r1   r2   r3   rI   r   r5   ÚwarnsÚUserWarningr   rL   rJ   rM   rN   r   rK   )r:   r;   Zthis_XrQ   rU   rS   rT   rP   r>   r>   r?   Útest_unstructured_linkage_treee   s$    * ÿ"rZ   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<t‚q<d S )	Nr   rA   rB   rD   rE   r*   rF   rG   )r1   r2   r3   r8   rH   rI   r   rJ   r   rK   rL   rM   rN   )	r:   rO   r;   r+   Úlinkage_funcrQ   rU   rS   rT   r>   r>   r?   Útest_height_linkage_tree}   s    
 ÿr\   c               	   C   sD   t  ddgddgg¡} d}tjt|d�� t| dd� W 5 Q R X 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    ra   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 k	ršt
|	dƒsnt‚|	jjd }
|
d }|	jj|d fks¨t‚nt
|	dƒr¨t‚d S )	Nr   rA   rB   rE   rD   )rW   r+   r'   Údistance_thresholdrc   Ú
distances_rG   )r1   r2   r3   r8   rH   rI   r   rJ   r   r9   ÚhasattrrN   Ú	children_ri   )rW   rc   rh   r'   r:   rO   Ú	n_samplesr;   r+   Ú
clusteringZ
n_childrenrU   r>   r>   r?   Ú'test_agglomerative_clustering_distances”   s&    
û
rn   c              
   C   s2  t j | ¡}t jddgtd�}d}| |d¡}t|jŽ }dD �]}td||d�}| 	|¡ zBtƒ }td|||d�}| 	|¡ |j}	t  t  |	¡¡dksšt‚W 5 t
 |¡ X td||d�}d|_| 	|¡ tt|j|	ƒd	ƒ d |_| 	|¡ t  t  |j¡¡dk�st‚tdt | ¡ d d…d d…f ¡|d�}t t¡� | 	|¡ W 5 Q R X q<td| ¡ d
dd�}t t¡� | 	|¡ W 5 Q R X 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   )rd   re   rf   rg   ©rW   r+   r'   )rW   r+   Zmemoryr'   FrG   r0   rd   )rW   r+   Úmetricr'   re   r,   )r1   r2   r3   r8   rH   rI   r   rJ   r   r9   ÚshutilÚrmtreer   Úlabels_r&   ÚuniquerN   Úcompute_full_treer	   r   r+   r   Z
lil_matrixZtoarrayr5   r6   r7   r   Úkeysr   r    )Úglobal_random_seedr:   rO   rl   r;   r+   r'   rm   ÚtempdirÚlabelsrp   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   ©rp   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sdt‚| |¡}|jd dks€t‚| |¡}t  |d ¡j
dks¢t‚t| |¡|ƒ t t¡� | 	|d d… ¡ W 5 Q R X d S )	NrA   rB   rD   rE   r$   ©rW   r+   rG   r   )r1   r2   r3   r8   rH   rI   r   rJ   r   r9   r&   rt   rs   rN   Z	transformZinverse_transformr   r5   r6   r7   )rw   r:   rO   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   )rW   r'   rG   rb   gš™™™™™™?)Úfactorr‚   rƒ   )r!   r   r9   r	   r   rs   r"   )ZmoonsZmoon_labelsrm   ZcirclesZcircle_labelsr>   r>   r?   Útest_single_linkage_clustering0  s    

 ÿ

 ÿr…   c                 C   sv   g }| |fD ]L}t |ƒ}| ¡ d }t ||f¡}d|t |¡|f< | t ||j¡¡ q|d |d k ¡ srt	‚dS )zUtil for comparison with scipyrG   r   N)
rM   Úmaxr1   ZzerosÚarangeÚappendÚdotrL   ÚallrN   )Zcut1Zcut2Zco_clustÚcutÚnÚkZecutr>   r>   r?   Úassess_same_labellingA  s    rŽ   c              	   C   s>  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 5 Q R X 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   rv   Úranger4   r‡   ÚnewaxisÚmeanr   r'   ÚastypeÚintÚsortr    r   rŽ   r5   r6   r7   )rw   rŒ   Úpr�   r:   r+   r'   Úir;   Úoutrk   rQ   Ú_rS   r‹   Zcut_r>   r>   r?   Útest_sparse_scikit_vs_scipyM  s2    
  ÿý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Ž   )rw   rl   Ú
n_featuresrW   r:   r;   r    Zchildren_scipyrQ   r¡   rS   r‹   Z	cut_scipyr>   r>   r?   Ú)test_vector_scikit_single_vs_scipy_singleu  s"    
 ýr¤   z/ignore:WMinkowskiDistance:FutureWarning:sklearnÚmetric_param_gridc                 C   sˆ   t jjdd�}|jdd�}t|ƒ}| \}}| ¡ }tj| ¡ Ž D ]B}t	t
||ƒƒ}tj|f|Ž}	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
   rv   Ú	itertoolsÚproductrK   ÚdictÚzipr   Z
get_metricr   ÚtestingZassert_equal)r¥   r:   r;   r~   rp   Z
param_gridrv   ÚvalsÚkwargsZdistance_metricZmstZmst_mmr>   r>   r?   Ú#test_mst_linkage_core_memory_mapped�  s    

r¯   c               
   C   s´   t  dddgdddgdddgdddgdddgdddgg¡} t  ddddddg¡}t| ddd�}d||j  }t| |dƒ\}}d	D ].}td||d
�}| | ¡ tt|j	|ƒdƒ q€d S )Nr   rG   rF   r�   F©Zn_neighborsÚinclude_selfrb   r|   )rg   rf   rf   rd   )rW   r'   r+   )
r1   r_   r   rL   r   r   r9   r	   r   rs   )r;   Ztrue_labelsr+   rR   r'   rm   r>   r>   r?   Útest_identical_points£  s     :  ÿ

 ÿr²   c                  C   sR   t  dddddddddddddddg¡} t| d	d
d�}td|dd�}| | ¡ d S )N)çyé&1¬Œ?g¸…ëQ¸¾?)r³   gòÒMbX¹?)r³   g¢E¶óýÔ¸?)gœÄ °rh‘?ç/Ý$�•Ã?)ç;ßO�—n’?r´   )rµ   gÛù~j¼tÃ?)rµ   gßO�—nÃ?)rµ   g;ßO�—nÂ?rA   F©r±   r)   rd   ro   )r1   r_   r   r   r9   )r;   r+   rd   r>   r>   r?   Útest_connectivity_propagation·  s2    ñÿ  ÿ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    )	rw   rŒ   rž   r:   r+   rŸ   r;   Úout_unstructuredÚout_structuredr>   r>   r?   Útest_ward_tree_children_orderÖ  s     r»   c              
   C   sx  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  ddddgdd d!dgd"dd#dgd$d%d&dgd'd(d)d$gg¡}t  ddddgdd d!dgd"dd#dgd$d%d*dgd'd(d+d$gg¡}t  ddddgdd d!dgd"dd#dgd$d%d,dgd'd(d-d$g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/ ƒ d0d1d2g}||g}t||ƒD ]˜\}}t|d|d3�}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 )4Nr¸   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      @g0rqÐ5×?g       @ç      ð?g      @gAæVJÇSü?g        gòL�/ùu@g      @g       @g6S„HD4"@g      @g      "@gˆwÊ´GÇ8@gwîfÛ£Þ@g63CÆ2@gÐéýoº;@g_‡ ½á.@rF   r)   re   rf   rg   )r¼   r'   )r1   r2   r3   r8   r˜   r4   r‡   r™   rš   r   r    r   r   r_   rJ   r«   )rw   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   sj   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 5 Q R X d S )	Nr   rG   TFrF   )Ún_xÚn_yrO   rd   ©r+   r'   )r1   r_   r   r   r5   rX   rY   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sNt‚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   rb   rG   )rO   Zn_aZn_b)r1   r2   r3   rt   Úrandintr›   ZintpÚrandrM   r   r«   rN   r‡   Úfullr   r8   r   )	r:   rv   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    rs   )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    rs   )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sbt	‚d	}|  d
d¡}t|ddd�}t||d�}| |¡ |jd }|jjd }||| ks¼t	‚d S )Nr   rA   rF   r$   Fr¶   r€   rG   ée   éÈ   )
r1   r2   r3   rI   r   r   r9   rJ   rk   rN   )r:   r;   r+   Zagcrl   rU   rW   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*t‚q*d S )Nr   r$   r*   rG   )	r1   r2   r3   rÉ   Úeyer   rK   r   rN   )r:   r;   r+   r[   r>   r>   r?   Útest_n_components±  s
    
rØ   c                  C   sv   d} t j d¡}| | | ¡}t  ddddg¡}t| | |t jd�}G dd„ dƒ}|ƒ }t|||jd� |j	d	ksrt
‚d S )
NrF   r   TF)rÀ   rÁ   rO   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Ú   rN   )r&   r:   r;   rO   r+   râ   Úfar>   r>   r?   Ú(test_affinity_passed_to_fix_connectivity½  s    rä   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¸t‚t|||d	�}t  |
|¡sDt‚qDd S )
NrA   rB   rE   rD   )rW   rh   r+   r'   T)r+   rW   r¼   rG   )rW   rQ   rS   )r1   r2   r3   r8   rH   rI   r   rJ   r   r9   rs   rM   rt   r   Zcount_nonzerorN   r   Zarray_equiv)r'   rw   r:   rO   rl   r;   r+   rh   Úconnrm   Zclusters_producedZnum_clusters_producedrP   rQ   rR   rS   rT   Z	distancesZnum_clusters_at_thresholdZclusters_at_thresholdr>   r>   r?   Ú5test_agglomerative_clustering_with_distance_threshold×  s@    
ü
   ÿÿ  ÿ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¡sft
‚|j|kstt
‚d S )NrA   iÔþÿÿi,  r�   r%   r¾   rg   ©rW   rh   r'   Ú	minkowskirF   ©rp   rž   r‘   )r1   r2   r3   rÈ   r   r9   r   Úfill_diagonalÚinfrŠ   rN   Zn_clusters_)rw   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Ît‚||ksht‚qhd S )NrE   iöÿÿÿrA   r�   r%   r)   rg   rç   rè   rF   ré   r   r“   rG   )r1   r2   r3   rÈ   r   r9   rs   r   rê   rë   rt   Úminr†   ÚsumrN   )rw   r:   rl   r;   rh   rm   ry   Ú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_truerb   rG   r¾   g      ø?c                 C   s:   dgdgg}t d || d�}| |¡}t||ƒdks6t‚d S )Nr   rG   rç   )r   Úfit_predictr   rN   )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 5 Q R X t jtdd�� tddd� | ¡ W 5 Q R X dgdgg} t jtdd�� td ddd	� | ¡ W 5 Q R X d S )
Nr   rG   zExactly one of r]   )rW   rh   rF   z!compute_full_tree must be True ifF)rW   rh   ru   )r5   r6   r7   r   r9   )r;   r>   r>   r?   Ú&test_dist_threshold_invalid_parameters:  s      ÿþr÷   c               	   C   sH   t j d¡} |  dd¡}tjtdd�� tddd� |¡ W 5 Q R X 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  dddddgdddddgdddddgdddddgdddddgg¡} t| ƒd dksZt‚t j d¡}| dd¡}t|ƒ}td| dd�}d	}t	j
t|d
�� | |¡ W 5 Q R X t| dd�}t	j
t|d
�� | |¡ W 5 Q R X 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   rF   r$   rA   r,   re   )r.   r+   r'   z.Completing it to avoid stopping the tree earlyr]   rÂ   N)r1   r_   r   rN   r2   r3   rI   r   r   r5   rX   rY   r9   r    rs   rk   )Zconnectivity_matrixr:   r;   rz   Zclusterer_precomputedr`   rõ   r>   r>   r?   ÚBtest_precomputed_connectivity_affinity_with_2_connected_componentsU  s8    ûÿ
  ÿ ÿrù   c               	   C   sÊ   t j d¡} |  dd¡}tdd�}d}tjt|d�� | |¡ W 5 Q R X tjt|d�� | 	|¡ W 5 Q R X tddd�}d	}tj
t|d�� | |¡ W 5 Q R X tj
t|d�� | 	|¡ W 5 Q R X d S )
Nr#   rD   rA   r|   r-   zcAttribute `affinity` was deprecated in version 1.2 and will be removed in 1.4. Use `metric` insteadr]   )rp   r.   z;Both `affinity` and `metric` attributes were set. Attribute)r1   r2   r3   rI   r   r5   rX   ÚFutureWarningr9   rô   r6   r7   )r:   r;   Úafr`   r>   r>   r?   Útest_deprecate_affinity}  s    
ÿrü   )\Ú__doc__r¨   Útempfiler   rq   r5   Ú	functoolsr   Únumpyr1   Zscipyr   Zscipy.clusterr   Zscipy.sparse.csgraphr   Zsklearn.metrics.clusterr   Z'sklearn.metrics.tests.test_dist_metricsr   Zsklearn.utils._testingr	   r
   r   r   Zsklearn.clusterr   r   r   Zsklearn.cluster._agglomerativer   r   r   r   Z sklearn.feature_extraction.imager   Zsklearn.metricsr   Zsklearn.metrics.pairwiser   r   r   r   r   Zsklearn.neighborsr   Z"sklearn.cluster._hierarchical_fastr   r   r   Zsklearn.utils._fast_dictr   r    Zsklearn.datasetsr!   r"   r@   rV   rZ   r\   ra   ÚmarkZparametrizern   r{   r   r�   r…   rŽ   r¢   r¤   Úfilterwarningsr¯   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
&  ÿ(