U
    »mœdmª  ã                   @   sl  d dl Zd dlmZmZmZmZ d dlZd dlmZ	 d dl
Zd dl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z) d dl*m+Z+ ddl,m-Z- z&d dl.Z.e. /d	¡ d dl0m1Z2 d
Z3W n e4k
�r   dZ3Y nX G dd„ dƒZ5G dd„ dƒZ6G dd„ dƒZ7G dd„ dƒZ8G dd„ dƒZ9G dd„ dƒZ:G dd„ dƒZ;G dd„ dƒZ<G dd„ dƒZ=G dd„ dƒZ>G d d!„ d!ƒZ?G d"d#„ d#ƒZ@G d$d%„ d%ƒZAG d&d'„ d'ƒZBG d(d)„ d)ƒZCG d*d+„ d+ƒZDG d,d-„ d-ƒZEG d.d/„ d/ƒZFd0d1„ ZGdEd3d4„ZHd5d6„ ZId7d8„ ZJd9d:„ ZKd;d<„ ZLd=d>„ ZMd?d@„ ZNdAdB„ ZOdCdD„ ZPdS )Fé    N)Úassert_allcloseÚassert_equalÚassert_Úassert_warns)Úraises)ÚClusterWarningÚlinkageÚfrom_mlab_linkageÚto_mlab_linkageÚnum_obs_linkageÚinconsistentÚcophenetÚfclusterdataÚfclusterÚis_isomorphicÚsingleÚleadersÚ
correspondÚis_monotonicÚmaxdistsÚmaxinconstsÚmaxRstatÚis_valid_linkageÚis_valid_imÚto_treeÚleaves_listÚ
dendrogramÚset_link_color_paletteÚcut_treeÚoptimal_leaf_orderingÚ_order_cluster_treeÚ
_hierarchyÚ_LINKAGE_METHODS)Úpdist)ÚHeapé   )Úhierarchy_test_dataZAggTFc                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTestLinkagec                 C   s$   t  d¡}t j|d< ttt|ƒ d S )N)é   r   )ÚnpÚzerosÚnanÚassert_raisesÚ
ValueErrorr   ©ÚselfÚy© r1   ú[/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/cluster/tests/test_hierarchy.pyÚ3test_linkage_non_finite_elements_in_distance_matrixD   s    

z?TestLinkage.test_linkage_non_finite_elements_in_distance_matrixc                 C   s   t  d¡}ttt|ƒ d S )N©r   )r)   r*   r,   r-   r   r.   r1   r1   r2   Ú"test_linkage_empty_distance_matrixK   s    
z.TestLinkage.test_linkage_empty_distance_matrixc                 C   s   dD ]}|   |¡ qd S )N)r   ÚcompleteÚaverageÚweighted)Úcheck_linkage_tdist©r/   Úmethodr1   r1   r2   Útest_linkage_tdistP   s    zTestLinkage.test_linkage_tdistc                 C   s,   t tj|ƒ}ttd| ƒ}t||dd� d S )NZlinkage_ytdist_ç»½×Ùß|Û=©Úatol©r   r&   ÚytdistÚgetattrr   )r/   r;   ÚZÚ	expectedZr1   r1   r2   r9   T   s    zTestLinkage.check_linkage_tdistc                 C   s   dD ]}|   |¡ qd S )N)ÚcentroidÚmedianÚward)Úcheck_linkage_qr:   r1   r1   r2   Útest_linkage_XZ   s    zTestLinkage.test_linkage_Xc                 C   sX   t tj|ƒ}ttd| ƒ}t||dd� tjjjtjdd�}t ||ƒ}t||dd� d S )NZ
linkage_X_ç�íµ ÷Æ°>r>   Ú	euclidean)Úmetric)	r   r&   ÚXrB   r   ÚscipyZspatialÚdistancer#   )r/   r;   rC   rD   r0   r1   r1   r2   rH   ^   s    ÿ
zTestLinkage.check_linkage_qc           	      C   sb   t j d¡}d}| |d¡}t|ƒ}t ¡ D ]0\}}t |||¡}t||ƒ}t	||ddd� q,d S )Nr   é   é   g›+¡†›„=çVçž¯Ò<)Zrtolr?   )
r)   ÚrandomZRandomStateÚrandr#   r"   Úitemsr!   r   r   )	r/   ÚrngÚnrM   Údr;   ÚcodeZ	Z_trivialrC   r1   r1   r2   Útest_compare_with_triviali   s    
z%TestLinkage.test_compare_with_trivialc                 C   s*   t tjdd�}ttdƒ}t||dd� d S )NT)Zoptimal_orderingÚlinkage_ytdist_single_olor=   r>   r@   )r/   rC   rD   r1   r1   r2   Útest_optimal_leaf_orderingt   s    
z&TestLinkage.test_optimal_leaf_orderingN)Ú__name__Ú
__module__Ú__qualname__r3   r5   r<   r9   rI   rH   rZ   r\   r1   r1   r1   r2   r'   C   s   r'   c                   @   sæ   e Zd Ze ddddgddddgg¡e ddddgddddgg¡e ddddgddddgg¡e ddddgddddgg¡e ddddgddddgg¡e ddddgddddgg¡e ddddgddddgg¡d	œZd
d„ Zdd„ ZdS )ÚTestLinkageTiesr   r%   gß'Üež ö?rQ   é   gß'Üež @gçeÌvø @g€©Ž˜@©r   r6   r7   r8   rE   rF   rG   c                 C   s   dD ]}|   |¡ qd S ©Nrb   )Úcheck_linkage_tiesr:   r1   r1   r2   Útest_linkage_tiesŒ   s    z!TestLinkageTies.test_linkage_tiesc                 C   sD   t  ddgddgddgg¡}t||d�}| j| }t||dd� d S )Néÿÿÿÿr   r%   ©r;   rJ   r>   )r)   Úarrayr   Ú_expectationsr   )r/   r;   rM   rC   rD   r1   r1   r2   rd   �   s    
z"TestLinkageTies.check_linkage_tiesN)r]   r^   r_   r)   rh   ri   re   rd   r1   r1   r1   r2   r`   z   s0   
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿór`   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestInconsistentc                 C   s   t jD ]}|  |¡ qd S ©N)r&   Úinconsistent_ytdistÚcheck_inconsistent_tdist)r/   Údepthr1   r1   r2   Útest_inconsistent_tdist˜   s    
z(TestInconsistent.test_inconsistent_tdistc                 C   s    t j}tt||ƒt j| ƒ d S rk   )r&   Úlinkage_ytdist_singler   r   rl   )r/   rn   rC   r1   r1   r2   rm   œ   s    
ÿz)TestInconsistent.check_inconsistent_tdistN)r]   r^   r_   ro   rm   r1   r1   r1   r2   rj   —   s   rj   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCopheneticDistancec                 C   sH   t  dddddddddddddddg¡}tj}t|ƒ}t||dd� d S )Né  é'  éÿ   éŠ   éÛ   r=   r>   )r)   rh   r&   rp   r   r   )r/   Ú	expectedMrC   ÚMr1   r1   r2   Útest_linkage_cophenet_tdist_Z£   s        ÿz4TestCopheneticDistance.test_linkage_cophenet_tdist_Zc                 C   sb   t j}t|t jƒ\}}t dddddddddddddddg¡}d}t||dd� t||dd� d S )	Nrr   rs   rt   ru   rv   g*É»2Qzä?r=   r>   )r&   rp   r   rA   r)   rh   r   )r/   rC   Úcrx   rw   Z	expectedcr1   r1   r2   Útest_linkage_cophenet_tdist_Z_Y«   s        ÿz6TestCopheneticDistance.test_linkage_cophenet_tdist_Z_YN)r]   r^   r_   ry   r{   r1   r1   r1   r2   rq   ¢   s   rq   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestMLabLinkageConversionc                 C   s*   t  g ¡}ttg ƒ|ƒ ttg ƒ|ƒ d S rk   ©r)   Úasarrayr   r	   r
   )r/   rM   r1   r1   r2   Ú"test_mlab_linkage_conversion_empty·   s    
z<TestMLabLinkageConversion.test_mlab_linkage_conversion_emptyc                 C   s@   t  ddddgg¡}dddgg}tt|ƒ|ƒ tt|ƒ|ƒ d S )Nç        ç      ð?ç      @ç       @r%   rQ   ra   r}   )r/   rC   ÚZmr1   r1   r2   Ú'test_mlab_linkage_conversion_single_row½   s    zATestMLabLinkageConversion.test_mlab_linkage_conversion_single_rowc              	   C   s”   t  dddgdddgddd	gd
ddgdddgg¡}t j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 jd�}tt|ƒ|ƒ tt|ƒ|ƒ d S ) Nra   r(   ru   é   é   rv   r%   é   rt   rQ   é	   rr   é   é
   rs   rƒ   ç      @ç     @a@r‚   ç      @ç     `k@r€   g      @ç     ào@r�   g       @ç     Àp@g      @g      "@ç     pr@©Zdtype)r)   r~   rh   Údoubler   r	   r
   )r/   r„   rC   r1   r1   r2   Ú*test_mlab_linkage_conversion_multiple_rowsÄ   s      ÿ



üûzDTestMLabLinkageConversion.test_mlab_linkage_conversion_multiple_rowsN)r]   r^   r_   r   r…   r•   r1   r1   r1   r2   r|   ¶   s   r|   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestFclusterc                 C   sL   t jD ]}|  |d¡ qt jD ]}|  |d¡ qt jD ]}|  |d¡ q6d S ©Nr   rO   Úmaxclust)r&   Úfcluster_inconsistentÚcheck_fclusterdataÚfcluster_distanceÚfcluster_maxclust©r/   Útr1   r1   r2   Útest_fclusterdataÓ   s    


zTestFcluster.test_fclusterdatac                 C   s8   t td| ƒ| }tj}t|||d�}tt||ƒƒ d S ©NZ	fcluster_©Ú	criterionrž   )rB   r&   ÚQ_Xr   r   r   )r/   rž   r¢   Ú	expectedTrM   ÚTr1   r1   r2   rš   Û   s    zTestFcluster.check_fclusterdatac                 C   sL   t jD ]}|  |d¡ qt jD ]}|  |d¡ qt jD ]}|  |d¡ q6d S r—   )r&   r™   Úcheck_fclusterr›   rœ   r�   r1   r1   r2   Útest_fclusterâ   s    


zTestFcluster.test_fclusterc                 C   s<   t td| ƒ| }ttjƒ}t|||d�}tt||ƒƒ d S r    )rB   r&   r   r£   r   r   r   )r/   rž   r¢   r¤   rC   r¥   r1   r1   r2   r¦   ê   s    
zTestFcluster.check_fclusterc                 C   s0   t jD ]}|  |¡ qt jD ]}|  |¡ qd S rk   )r&   r›   Úcheck_fcluster_monocritrœ   Ú check_fcluster_maxclust_monocritr�   r1   r1   r2   Útest_fcluster_monocritñ   s    

z#TestFcluster.test_fcluster_monocritc                 C   s:   t j| }tt jƒ}t||dt|ƒd�}tt||ƒƒ d S )NÚmonocrit©r¢   r«   )r&   r›   r   r£   r   r   r   r   ©r/   rž   r¤   rC   r¥   r1   r1   r2   r¨   ÷   s    

z$TestFcluster.check_fcluster_monocritc                 C   s:   t j| }tt jƒ}t||dt|ƒd�}tt||ƒƒ d S )NZmaxclust_monocritr¬   )r&   rœ   r   r£   r   r   r   r   r­   r1   r1   r2   r©   ý   s    

z-TestFcluster.check_fcluster_maxclust_monocritN)
r]   r^   r_   rŸ   rš   r§   r¦   rª   r¨   r©   r1   r1   r1   r2   r–   Ò   s   r–   c                   @   s   e Zd Zdd„ ZdS )ÚTestLeadersc                 C   s\   t j}t|ƒ}t|ƒ}t|ddd�}t dddg¡t dddg¡f}t||ƒ}t||ƒ d S )	Nr˜   ra   r¡   é5   é7   é8   rQ   r%   )	r&   r£   r#   r   r   r)   rh   r   r   )r/   rM   ÚYrC   r¥   ZLrightÚLr1   r1   r2   Útest_leaders_single  s     
zTestLeaders.test_leaders_singleN)r]   r^   r_   r´   r1   r1   r1   r2   r®     s   r®   c                   @   s^   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zddd„ZdS )ÚTestIsIsomorphicc                 C   s4   dddg}dddg}t t||ƒƒ t t||ƒƒ d S )Nr%   rQ   ©r   r   ©r/   ÚaÚbr1   r1   r2   Útest_is_isomorphic_1  s    

z%TestIsIsomorphic.test_is_isomorphic_1c                 C   s4   dddg}dddg}t t||ƒƒ t t||ƒƒ d S )Nr%   rŠ   rQ   ra   r¶   r·   r1   r1   r2   Útest_is_isomorphic_2  s    

z%TestIsIsomorphic.test_is_isomorphic_2c                 C   s   g }g }t t||ƒƒ d S rk   r¶   r·   r1   r1   r2   Útest_is_isomorphic_3  s    z%TestIsIsomorphic.test_is_isomorphic_3c                 C   s4   dddg}dddg}t t||ƒƒ t t||ƒƒ d S ©Nr%   rQ   ra   r¶   r·   r1   r1   r2   Útest_is_isomorphic_4A%  s    

z&TestIsIsomorphic.test_is_isomorphic_4Ac                 C   s@   ddddg}ddddg}t t||ƒdkƒ t t||ƒdkƒ d S )Nr%   rQ   ra   Fr¶   r·   r1   r1   r2   Útest_is_isomorphic_4B,  s    z&TestIsIsomorphic.test_is_isomorphic_4Bc                 C   s4   dddg}dddg}t t||ƒƒ t t||ƒƒ d S )NrŠ   rQ   ra   r(   r¶   r·   r1   r1   r2   Útest_is_isomorphic_4C3  s    

z&TestIsIsomorphic.test_is_isomorphic_4Cc                 C   s   dD ]}|   d|¡ qd S )N©rQ   ra   r‡   éè  ©Úhelp_is_isomorphic_randperm©r/   Úncr1   r1   r2   Útest_is_isomorphic_5:  s    z%TestIsIsomorphic.test_is_isomorphic_5c                 C   s   dD ]}|   d|dd¡ qd S )NrÁ   rÂ   Tr‡   rÃ   rÅ   r1   r1   r2   Útest_is_isomorphic_6@  s    z%TestIsIsomorphic.test_is_isomorphic_6c                 C   s    t tdddgdddgƒ ƒ d S r½   r¶   )r/   r1   r1   r2   Útest_is_isomorphic_7G  s    z%TestIsIsomorphic.test_is_isomorphic_7Fr   c                 C   sÔ   t dƒD ]Æ}t tj |¡| ¡}tj|jtjd�}tj |¡}t d|jd ƒD ]}	|||	  ||	< qP|r¦tj |¡}
||
d|…   d7  < ||
d|…   |;  < t	t
||ƒ| kƒ t	t
||ƒ| kƒ qd S )Nra   r“   r   r%   )Úranger)   Úint_rS   rT   r*   ÚsizeZpermutationÚshaper   r   )r/   ÚnobsZ	nclustersZnonisoZnerrorsÚkr¸   r¹   ÚPÚiÚQr1   r1   r2   rÄ   K  s    z,TestIsIsomorphic.help_is_isomorphic_randpermN)Fr   )r]   r^   r_   rº   r»   r¼   r¾   r¿   rÀ   rÇ   rÈ   rÉ   rÄ   r1   r1   r1   r2   rµ     s   rµ   c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestIsValidLinkagec                 C   s"   dD ]\}}}|   |||¡ qd S ©N))rQ   r‡   F)rQ   ra   F)r%   r†   T)rQ   r†   T)Ú#check_is_valid_linkage_various_size©r/   ÚnrowÚncolÚvalidr1   r1   r2   Ú"test_is_valid_linkage_various_size[  s    z5TestIsValidLinkage.test_is_valid_linkage_various_sizec                 C   sd   t jdddddgdddddggt jd�}|d |…d |…f }tt|ƒ|kƒ |s`ttt|d	d
� d S ©Nr   r%   r‚   rQ   r‡   ra   rŽ   r“   T©Úthrow)r)   r~   r”   r   r   r,   r-   )r/   r×   rØ   rÙ   rC   r1   r1   r2   rÕ   `  s    ÿÿz6TestIsValidLinkage.check_is_valid_linkage_various_sizec                 C   sF   t jddddgddddggtd�}tt|ƒdkƒ ttt|d	d
� d S ©Nr   r%   r‚   rQ   ra   rŽ   r“   FTrÜ   )r)   r~   Úintr   r   r,   Ú	TypeError©r/   rC   r1   r1   r2   Útest_is_valid_linkage_int_typei  s    
ÿÿz1TestIsValidLinkage.test_is_valid_linkage_int_typec                 C   s4   t jdt jd�}tt|ƒdkƒ ttt|dd� d S ©N©r   r†   r“   FTrÜ   )r)   r*   r”   r   r   r,   r-   rá   r1   r1   r2   Útest_is_valid_linkage_emptyp  s    z.TestIsValidLinkage.test_is_valid_linkage_emptyc                 C   sF   t dddƒD ]4}tj ||d  d ¡}t|ƒ}tt|ƒdkƒ qd S ©Nr†   é   ra   r%   rQ   T)rÊ   r)   rS   rT   r   r   r   ©r/   rÑ   r0   rC   r1   r1   r2   Útest_is_valid_linkage_4_and_upv  s    z1TestIsValidLinkage.test_is_valid_linkage_4_and_upc                 C   sf   t dddƒD ]T}tj ||d  d ¡}t|ƒ}d||d df< tt|ƒdkƒ ttt|d	d
� qd S )Nr†   rç   ra   r%   rQ   éþÿÿÿr   FTrÜ   ©	rÊ   r)   rS   rT   r   r   r   r,   r-   rè   r1   r1   r2   Ú-test_is_valid_linkage_4_and_up_neg_index_left~  s    z@TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_leftc                 C   sf   t dddƒD ]T}tj ||d  d ¡}t|ƒ}d||d df< tt|ƒdkƒ ttt|dd	� qd S ©
Nr†   rç   ra   r%   rQ   rê   FTrÜ   rë   rè   r1   r1   r2   Ú.test_is_valid_linkage_4_and_up_neg_index_rightˆ  s    zATestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_rightc                 C   sf   t dddƒD ]T}tj ||d  d ¡}t|ƒ}d||d df< tt|ƒdkƒ ttt|dd	� qd S ©
Nr†   rç   ra   r%   rQ   g      à¿FTrÜ   rë   rè   r1   r1   r2   Ú'test_is_valid_linkage_4_and_up_neg_dist’  s    z:TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_distc                 C   sf   t dddƒD ]T}tj ||d  d ¡}t|ƒ}d||d df< tt|ƒdkƒ ttt|dd	� qd S rí   rë   rè   r1   r1   r2   Ú)test_is_valid_linkage_4_and_up_neg_countsœ  s    z<TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_countsN)r]   r^   r_   rÚ   rÕ   râ   rå   ré   rì   rî   rð   rñ   r1   r1   r1   r2   rÓ   Z  s   	


rÓ   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTestIsValidInconsistentc                 C   sF   t jddddgddddggtd�}tt|ƒdkƒ ttt|d	d
� d S rÞ   )r)   r~   rß   r   r   r,   rà   ©r/   ÚRr1   r1   r2   Útest_is_valid_im_int_type¨  s    
ÿÿz1TestIsValidInconsistent.test_is_valid_im_int_typec                 C   s"   dD ]\}}}|   |||¡ qd S rÔ   )Úcheck_is_valid_im_various_sizerÖ   r1   r1   r2   Útest_is_valid_im_various_size¯  s    z5TestIsValidInconsistent.test_is_valid_im_various_sizec                 C   sd   t jdddddgdddddggt jd�}|d |…d |…f }tt|ƒ|kƒ |s`ttt|d	d
� d S rÛ   )r)   r~   r”   r   r   r,   r-   )r/   r×   rØ   rÙ   rô   r1   r1   r2   rö   ´  s    ÿÿz6TestIsValidInconsistent.check_is_valid_im_various_sizec                 C   s4   t jdt jd�}tt|ƒdkƒ ttt|dd� d S rã   )r)   r*   r”   r   r   r,   r-   ró   r1   r1   r2   Útest_is_valid_im_empty½  s    z.TestIsValidInconsistent.test_is_valid_im_emptyc                 C   sN   t dddƒD ]<}tj ||d  d ¡}t|ƒ}t|ƒ}tt|ƒdkƒ qd S ræ   )rÊ   r)   rS   rT   r   r   r   r   ©r/   rÑ   r0   rC   rô   r1   r1   r2   Útest_is_valid_im_4_and_upÃ  s
    z1TestIsValidInconsistent.test_is_valid_im_4_and_upc                 C   sn   t dddƒD ]\}tj ||d  d ¡}t|ƒ}t|ƒ}d||d df< tt|ƒdkƒ tt	t|d	d
� qd S )Nr†   rç   ra   r%   rQ   ç       Àr   FTrÜ   ©
rÊ   r)   rS   rT   r   r   r   r   r,   r-   rù   r1   r1   r2   Ú(test_is_valid_im_4_and_up_neg_index_leftÌ  s    z@TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_leftc                 C   sn   t dddƒD ]\}tj ||d  d ¡}t|ƒ}t|ƒ}d||d df< tt|ƒdkƒ tt	t|dd	� qd S )
Nr†   rç   ra   r%   rQ   rû   FTrÜ   rü   rù   r1   r1   r2   Ú)test_is_valid_im_4_and_up_neg_index_right×  s    zATestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_rightc                 C   sn   t dddƒD ]\}tj ||d  d ¡}t|ƒ}t|ƒ}d||d df< tt|ƒdkƒ tt	t|dd	� qd S rï   rü   rù   r1   r1   r2   Ú"test_is_valid_im_4_and_up_neg_distâ  s    z:TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_distN)r]   r^   r_   rõ   r÷   rö   rø   rú   rý   rþ   rÿ   r1   r1   r1   r2   rò   §  s   		rò   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestNumObsLinkagec                 C   s    t jdt jd�}ttt|ƒ d S ©Nrä   r“   )r)   r*   r”   r,   r-   r   rá   r1   r1   r2   Útest_num_obs_linkage_emptyï  s    z,TestNumObsLinkage.test_num_obs_linkage_emptyc                 C   s,   t jddddggt jd�}tt|ƒdƒ d S ©Nr   r%   r‚   rQ   r“   ©r)   r~   r”   r   r   rá   r1   r1   r2   Útest_num_obs_linkage_1x4ô  s    z*TestNumObsLinkage.test_num_obs_linkage_1x4c                 C   s6   t jddddgddddggt jd�}tt|ƒdƒ d S ©Nr   r%   r‚   rQ   ra   rŽ   r“   r  rá   r1   r1   r2   Útest_num_obs_linkage_2x4ù  s    
ÿÿz*TestNumObsLinkage.test_num_obs_linkage_2x4c                 C   sD   t dddƒD ]2}tj ||d  d ¡}t|ƒ}tt|ƒ|ƒ qd S )Nr†   rç   ra   r%   rQ   )rÊ   r)   rS   rT   r   r   r   rè   r1   r1   r2   Útest_num_obs_linkage_4_and_upÿ  s    z/TestNumObsLinkage.test_num_obs_linkage_4_and_upN)r]   r^   r_   r  r  r  r  r1   r1   r1   r2   r   î  s   r   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestLeavesListc                 C   s8   t jddddggt jd�}t|ƒ tt|ƒddgƒ d S r  ©r)   r~   r”   r   r   r   rá   r1   r1   r2   Útest_leaves_list_1x4	  s    z#TestLeavesList.test_leaves_list_1x4c                 C   sD   t jddddgddddggt jd�}t|ƒ tt|ƒdddgƒ d S r  r
  rá   r1   r1   r2   Útest_leaves_list_2x4  s    
ÿÿz#TestLeavesList.test_leaves_list_2x4c                 C   s   dD ]}|   |¡ qd S rc   )Úcheck_leaves_list_Qr:   r1   r1   r2   Útest_leaves_list_Q  s    z!TestLeavesList.test_leaves_list_Qc                 C   s.   t j}t||ƒ}t|ƒ}t| ¡ t|ƒƒ d S rk   )r&   r£   r   r   r   Ú	pre_orderr   )r/   r;   rM   rC   Únoder1   r1   r2   r    s    
z"TestLeavesList.check_leaves_list_Qc                 C   s>   t j}t|dƒ}t|ƒ}t| ¡ | ¡  ¡ | ¡  ¡  ƒ d S )Nr   )r&   r£   r   r   r   r  Úget_leftÚ	get_right)r/   rM   rC   r  r1   r1   r2   Útest_Q_subtree_pre_order"  s    

ÿz'TestLeavesList.test_Q_subtree_pre_orderN)r]   r^   r_   r  r  r  r  r  r1   r1   r1   r2   r	    s
   r	  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestCorrespondc                 C   s&   t  d¡}t  d¡}ttt||ƒ d S )Nr4   rä   )r)   r*   r,   r-   r   )r/   r0   rC   r1   r1   r2   Útest_correspond_empty,  s    

z$TestCorrespond.test_correspond_emptyc                 C   s‚   t ddƒD ]2}tj ||d  d ¡}t|ƒ}tt||ƒƒ q
t dddƒD ]2}tj ||d  d ¡}t|ƒ}tt||ƒƒ qJd S )NrQ   r†   r%   rç   ra   )rÊ   r)   rS   rT   r   r   r   rè   r1   r1   r2   Útest_correspond_2_and_up2  s    z'TestCorrespond.test_correspond_2_and_upc                 C   s²   t tt tddƒƒt tddƒƒƒƒt tt tddƒƒt tddƒƒƒƒ D ]h\}}tj ||d  d ¡}tj ||d  d ¡}t|ƒ}t|ƒ}tt||ƒdƒ tt||ƒdƒ qDd S )NrQ   r†   ra   r‡   r%   F©	ÚlistÚziprÊ   r)   rS   rT   r   r   r   ©r/   rÑ   Újr0   Úy2rC   ÚZ2r1   r1   r2   Útest_correspond_4_and_up>  s      ÿz'TestCorrespond.test_correspond_4_and_upc                 C   s²   t tt tddƒƒt tddƒƒƒƒt tt tddƒƒt tddƒƒƒƒ D ]h\}}tj ||d  d ¡}tj ||d  d ¡}t|ƒ}t|ƒ}tt||ƒdƒ tt||ƒdƒ qDd S )NrQ   rŠ   é   é   r%   Fr  r  r1   r1   r2   Útest_correspond_4_and_up_2J  s      ÿz)TestCorrespond.test_correspond_4_and_up_2c                 C   s@   t ddƒD ]0}tj |d¡}t|ƒ}t|ƒ}tt|ƒ|ƒ q
d S )NrQ   r‹   r†   )rÊ   r)   rS   rT   r#   r   r   r   )r/   rW   rM   r²   rC   r1   r1   r2   Ú!test_num_obs_linkage_multi_matrixV  s
    z0TestCorrespond.test_num_obs_linkage_multi_matrixN)r]   r^   r_   r  r  r  r!  r"  r1   r1   r1   r2   r  +  s
   r  c                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestIsMonotonicc                 C   s   t  d¡}ttt|ƒ d S )Nrä   )r)   r*   r,   r-   r   rá   r1   r1   r2   Útest_is_monotonic_empty`  s    
z'TestIsMonotonic.test_is_monotonic_emptyc                 C   s,   t jddddggt jd�}tt|ƒdƒ d S )Nr   r%   ç333333Ó?rQ   r“   T©r)   r~   r”   r   r   rá   r1   r1   r2   Útest_is_monotonic_1x4e  s    z%TestIsMonotonic.test_is_monotonic_1x4c                 C   s6   t jddddgddddggt jd�}tt|ƒdƒ d S )	Nr   r%   r%  rQ   ra   çš™™™™™Ù?r“   Tr&  rá   r1   r1   r2   Útest_is_monotonic_2x4_Tj  s    
ÿÿz'TestIsMonotonic.test_is_monotonic_2x4_Tc                 C   s6   t jddddgddddggt jd�}tt|ƒdƒ d S )	Nr   r%   r(  rQ   ra   r%  r“   Fr&  rá   r1   r1   r2   Útest_is_monotonic_2x4_Fp  s    
ÿÿz'TestIsMonotonic.test_is_monotonic_2x4_Fc                 C   s@   t jddddgddddgddd	dggt jd
�}tt|ƒdƒ d S )Nr   r%   r%  rQ   ra   r(  r†   r‡   ç333333ã?r“   Tr&  rá   r1   r1   r2   Útest_is_monotonic_3x4_Tv  s    

þþz'TestIsMonotonic.test_is_monotonic_3x4_Tc                 C   s@   t jddddgddddgddd	dggt jd
�}tt|ƒdƒ d S )Nr   r%   r%  rQ   ra   çš™™™™™É?r†   r‡   r+  r“   Fr&  rá   r1   r1   r2   Útest_is_monotonic_3x4_F1}  s    

þþz(TestIsMonotonic.test_is_monotonic_3x4_F1c                 C   s@   t jddddgddddgddd	dggt jd
�}tt|ƒdƒ d S )Nr   r%   gš™™™™™é?rQ   ra   r(  r†   r‡   r+  r“   Fr&  rá   r1   r1   r2   Útest_is_monotonic_3x4_F2„  s    

þþz(TestIsMonotonic.test_is_monotonic_3x4_F2c                 C   s@   t jddddgddddgddd	dggt jd
�}tt|ƒdƒ d S )Nr   r%   r%  rQ   ra   r(  r†   r‡   r-  r“   Fr&  rá   r1   r1   r2   Útest_is_monotonic_3x4_F3‹  s    

þþz(TestIsMonotonic.test_is_monotonic_3x4_F3c                 C   s   t tjdƒ}tt|ƒdƒ d S ©Nr   T©r   r&   rA   r   r   rá   r1   r1   r2   Ú test_is_monotonic_tdist_linkage1’  s    z0TestIsMonotonic.test_is_monotonic_tdist_linkage1c                 C   s&   t tjdƒ}d|d< tt|ƒdƒ d S )Nr   r€   )rQ   rQ   Fr2  rá   r1   r1   r2   Ú test_is_monotonic_tdist_linkage2˜  s    z0TestIsMonotonic.test_is_monotonic_tdist_linkage2c                 C   s"   t j}t|dƒ}tt|ƒdƒ d S r1  )r&   r£   r   r   r   )r/   rM   rC   r1   r1   r2   Útest_is_monotonic_Q_linkageŸ  s    
z+TestIsMonotonic.test_is_monotonic_Q_linkageN)r]   r^   r_   r$  r'  r)  r*  r,  r.  r/  r0  r3  r4  r5  r1   r1   r1   r2   r#  _  s   r#  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestMaxDistsc                 C   s    t jdt jd�}ttt|ƒ d S r  )r)   r*   r”   r,   r-   r   rá   r1   r1   r2   Útest_maxdists_empty_linkage¨  s    z(TestMaxDists.test_maxdists_empty_linkagec                 C   s<   t jddddggt jd�}t|ƒ}t|ƒ}t||dd� d S ©Nr   r%   r%  r†   r“   rR   r>   )r)   r~   r”   r   Úcalculate_maximum_distancesr   )r/   rC   ÚMDÚ
expectedMDr1   r1   r2   Ú!test_maxdists_one_cluster_linkage­  s    z.TestMaxDists.test_maxdists_one_cluster_linkagec                 C   s   dD ]}|   |¡ qd S ©N©r   r6   rG   rE   rF   )Úcheck_maxdists_Q_linkager:   r1   r1   r2   Útest_maxdists_Q_linkage´  s    z$TestMaxDists.test_maxdists_Q_linkagec                 C   s2   t j}t||ƒ}t|ƒ}t|ƒ}t||dd� d S ©NrR   r>   )r&   r£   r   r   r9  r   )r/   r;   rM   rC   r:  r;  r1   r1   r2   r?  ¸  s
    
z%TestMaxDists.check_maxdists_Q_linkageN)r]   r^   r_   r7  r<  r@  r?  r1   r1   r1   r2   r6  §  s   r6  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestMaxInconstsc                 C   s2   t jdt jd�}t jdt jd�}ttt||ƒ d S r  )r)   r*   r”   r,   r-   r   ©r/   rC   rô   r1   r1   r2   Útest_maxinconsts_empty_linkageÂ  s    z.TestMaxInconsts.test_maxinconsts_empty_linkagec                 C   s:   t jddddggt jd�}t j dd¡}ttt||ƒ d S ©Nr   r%   r%  r†   r“   rQ   )r)   r~   r”   rS   rT   r,   r-   r   rC  r1   r1   r2   Útest_maxinconsts_difrow_linkageÈ  s    z/TestMaxInconsts.test_maxinconsts_difrow_linkagec                 C   sZ   t jddddggt jd�}t jddddggt jd�}t||ƒ}t||ƒ}t||dd� d S r8  )r)   r~   r”   r   Ú!calculate_maximum_inconsistenciesr   )r/   rC   rô   r:  r;  r1   r1   r2   Ú$test_maxinconsts_one_cluster_linkageÏ  s
    

z4TestMaxInconsts.test_maxinconsts_one_cluster_linkagec                 C   s   dD ]}|   |¡ qd S r=  )Úcheck_maxinconsts_Q_linkager:   r1   r1   r2   Útest_maxinconsts_Q_linkage×  s    z*TestMaxInconsts.test_maxinconsts_Q_linkagec                 C   s>   t j}t||ƒ}t|ƒ}t||ƒ}t||ƒ}t||dd� d S rA  )r&   r£   r   r   r   rG  r   )r/   r;   rM   rC   rô   r:  r;  r1   r1   r2   rI  Û  s    


z+TestMaxInconsts.check_maxinconsts_Q_linkageN)r]   r^   r_   rD  rF  rH  rJ  rI  r1   r1   r1   r2   rB  Á  s
   rB  c                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚTestMaxRStatc                 C   s   dD ]}|   |¡ qd S )N)gffffff
@rf   r†   )Úcheck_maxRstat_invalid_index©r/   rÑ   r1   r1   r2   Útest_maxRstat_invalid_indexæ  s    z(TestMaxRStat.test_maxRstat_invalid_indexc                 C   sd   t jddddggt jd�}t jddddggt jd�}t|tƒrPttt|||ƒ nttt|||ƒ d S )Nr   r%   r%  r†   r“   )	r)   r~   r”   Ú
isinstancerß   r,   r-   r   rà   ©r/   rÑ   rC   rô   r1   r1   r2   rL  ê  s
    
z)TestMaxRStat.check_maxRstat_invalid_indexc                 C   s   t dƒD ]}|  |¡ qd S ©Nr†   )rÊ   Úcheck_maxRstat_empty_linkagerM  r1   r1   r2   Útest_maxRstat_empty_linkageó  s    z(TestMaxRStat.test_maxRstat_empty_linkagec                 C   s4   t jdt jd�}t jdt jd�}ttt|||ƒ d S r  )r)   r*   r”   r,   r-   r   rP  r1   r1   r2   rR  ÷  s    z)TestMaxRStat.check_maxRstat_empty_linkagec                 C   s   t dƒD ]}|  |¡ qd S rQ  )rÊ   Úcheck_maxRstat_difrow_linkagerM  r1   r1   r2   Útest_maxRstat_difrow_linkageý  s    z)TestMaxRStat.test_maxRstat_difrow_linkagec                 C   s<   t jddddggt jd�}t j dd¡}ttt|||ƒ d S rE  )r)   r~   r”   rS   rT   r,   r-   r   rP  r1   r1   r2   rT    s    z*TestMaxRStat.check_maxRstat_difrow_linkagec                 C   s   t dƒD ]}|  |¡ qd S rQ  )rÊ   Ú"check_maxRstat_one_cluster_linkagerM  r1   r1   r2   Ú!test_maxRstat_one_cluster_linkage  s    z.TestMaxRStat.test_maxRstat_one_cluster_linkagec                 C   s^   t jddddggt jd�}t jddddggt jd�}t||dƒ}t||dƒ}t||dd� d S r8  )r)   r~   r”   r   rG  r   )r/   rÑ   rC   rô   r:  r;  r1   r1   r2   rV    s
    z/TestMaxRStat.check_maxRstat_one_cluster_linkagec                 C   s(   dD ]}t dƒD ]}|  ||¡ qqd S )Nr>  r†   )rÊ   Úcheck_maxRstat_Q_linkage)r/   r;   rÑ   r1   r1   r2   Útest_maxRstat_Q_linkage  s    z$TestMaxRStat.test_maxRstat_Q_linkagec                 C   sB   t j}t||ƒ}t|ƒ}t||dƒ}t||dƒ}t||dd� d S )Nr%   rR   r>   )r&   r£   r   r   r   rG  r   )r/   r;   rÑ   rM   rC   rô   r:  r;  r1   r1   r2   rX    s    
z%TestMaxRStat.check_maxRstat_Q_linkageN)r]   r^   r_   rN  rL  rS  rR  rU  rT  rW  rV  rY  rX  r1   r1   r1   r2   rK  å  s   	rK  c                   @   s’   e Zd Zdd„ Zdd„ Zdd„ Zejje	 dd�d	d
„ ƒZ
ejje	 dd�dd„ ƒZdd„ Zejje	 dd�dd„ ƒZdd„ Zdd„ Zdd„ ZdS )ÚTestDendrogramc                 C   s:   t tjdƒ}t|dd�}|d }t|ddddd	d
gƒ d S )Nr   T©Úno_plotÚleavesrQ   r‡   r%   r   ra   r†   )r   r&   rA   r   r   )r/   rC   rô   r]  r1   r1   r2   Ú$test_dendrogram_single_linkage_tdist$  s    z3TestDendrogram.test_dendrogram_single_linkage_tdistc                 C   s    t tjdƒ}ttt|dd� d S )Nr   Zfoo©Úorientation)r   r&   rA   r,   r-   r   rá   r1   r1   r2   Útest_valid_orientation+  s    z%TestDendrogram.test_valid_orientationc                 C   sR   t tjdƒ}t ddddddg¡}t||dd	�}t|| ¡ dd	�}||ksNt‚d S )
Nr   r%   ra   rQ   r(   r†   r‡   T)Úlabelsr\  )r   r&   rA   r)   rh   r   ÚtolistÚAssertionError)r/   rC   rb  Zresult1Zresult2r1   r1   r2   Útest_labels_as_array_or_list/  s
    z+TestDendrogram.test_labels_as_array_or_listzno matplotlib)Úreasonc              	   C   sž   t  ddddgddddgdddd	gg¡}t ¡  t t¡�}t|tt	d
ƒƒd� W 5 Q R X dt
|jƒkslt‚tjtdd�� t|g d� W 5 Q R X t ¡  d S )Nr   r%   r�   r†   rQ   ra   r‡   rƒ   r(   éd   )rb  z.Dimensions of Z and labels must be consistent.)Úmatch)r)   rh   ÚpltÚfigureÚpytestr   r-   r   r  rÊ   ÚstrÚvaluerd  Úclose)r/   ÚlinkÚexc_infor1   r1   r2   Útest_valid_label_size7  s"    


ýÿþz$TestDendrogram.test_valid_label_sizec                 C   s   dD ]}|   |¡ qd S )N)ÚtopÚbottomÚleftÚright)Úcheck_dendrogram_plot)r/   r`  r1   r1   r2   Útest_dendrogram_plotK  s    z#TestDendrogram.test_dendrogram_plotc           	      C   sÔ  t tjdƒ}d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dd	d	dgg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ddddddgddddddgddddddgd œ}t ¡ }| d!¡}t|||d"�}t||ƒ t|||d#d$d%� |d&k�r| ¡ d n
| 	¡ d }t| 
¡ d$ƒ t| ¡ d#ƒ t|||d$d'� |d&k�rP| ¡ d n
| 	¡ d }t| 
¡ d$ƒ t|||d#d(� |d&k�r�| ¡ d n
| 	¡ d }t| ¡ d#ƒ t ¡  t||d)�}t ¡  t||ƒ d S )*Nr   ÚC1ÚC0r€   r�   r�   r�   r‘   r’   rŒ   ç      .@ç     €F@g     €K@ç     €A@g      I@ç      9@g     @E@ç      $@g     à@@Ú2Ú5Ú1Ú0Ú3Ú4rQ   r‡   r%   r   ra   r†   ©Ú
color_listZdcoordZicoordZivlr]  Úleaves_color_listéÝ   )Úaxr`  rP   éZ   )r‰  r`  Úleaf_font_sizeÚleaf_rotation)rr  rs  )r‰  r`  rŒ  )r‰  r`  r‹  r_  )r   r&   rA   ri  rj  Zadd_subplotr   r   Zget_xticklabelsZget_yticklabelsZget_rotationÚget_sizern  )	r/   r`  rC   ÚexpectedZfigr‰  ZR1Z	testlabelZR2r1   r1   r2   rv  P  sh    




ü




üó

 ÿÿ
ýÿÿ
ýÿÿ
ýz$TestDendrogram.check_dendrogram_plotc                 C   s  t tjdƒ}t|dddd�}t ¡  t|dgddddggd	d	d
d
ggddgddgddgdœƒ t|dddd�}t ¡  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d	d	d
d
gddddgddddgddddggdddddgddd d!d"gdddddgdœƒ d S )#Nr   rQ   ZlastpT)Zshow_contractedry  r€   r’   rŒ   rz  z(2)z(4)r(   r‰   r…  Zmticarx  r�   r�   r‘   r|  r{  r}  g      D@r~  g     @@@r  r€  r�  r‚  r‡   r%   r   rŠ   )r   r&   rA   r   ri  rn  r   rC  r1   r1   r2   Útest_dendrogram_truncate_modeŒ  s6    û



ý



ýõz,TestDendrogram.test_dendrogram_truncate_modec                 C   sh   t tjdƒ}tddddgƒ t|dddd	�}tdd
ddddgƒ |d }t|dddddgƒ td ƒ d S )Nr   rz   Úmr0   rÏ   TÚgéú   )r\  Zabove_threshold_colorZcolor_thresholdÚrr†  )r   r&   rA   r   r   r   )r/   rC   rô   r†  r1   r1   r2   Útest_dendrogram_colorsª  s     ÿz%TestDendrogram.test_dendrogram_colorsc              
   C   sv   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ƒ}t|dd�}ddddd	d	g}|d
 }t||ƒ d S )Nr%   r   rQ   r   Tr[  ry  rx  ÚC2r‡  ©r)   rh   r   r   r   ©r/   ÚxÚzrX   Z
exp_colorsÚcolorsr1   r1   r2   Ú%test_dendrogram_leaf_colors_zero_dist¹  s    û
z4TestDendrogram.test_dendrogram_leaf_colors_zero_distc              
   C   sv   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ƒ}t|dd�}dd	d	dd
d
g}|d }t||ƒ d S )Nr%   r   gš™™™™™ñ?rQ   r   Tr[  ry  rx  r•  r‡  r–  r—  r1   r1   r2   Útest_dendrogram_leaf_colorsÈ  s    û
z*TestDendrogram.test_dendrogram_leaf_colorsN)r]   r^   r_   r^  ra  re  rk  ÚmarkZskipifÚhave_matplotlibrq  rw  rv  r�  r”  r›  rœ  r1   r1   r1   r2   rZ  #  s   

<
rZ  c                 C   s¸   | j d d }t |d f¡}t d¡}td|d ƒD ]|}d|d d …< | |df }| |df }||krz|t|ƒ|  |d< ||kr–|t|ƒ|  |d< | |df |d< | ¡ ||< q6|S ©Nr   r%   )ra   r€   rQ   ©rÍ   r)   r*   rÊ   rß   Úmax)rC   rW   ÚBÚqrÑ   rt  ru  r1   r1   r2   r9  Ø  s    
r9  ra   c           	      C   s¸   | j d d }t |d f¡}t d¡}td|d ƒD ]|}d|d d …< | |df }| |df }||krz|t|ƒ|  |d< ||kr–|t|ƒ|  |d< |||f |d< | ¡ ||< q6|S rŸ  r   )	rC   rô   rÏ   rW   r¢  r£  rÑ   rt  ru  r1   r1   r2   rG  ê  s    
rG  c                 C   s   t  | | ¡ ¡ |k S rk   )r)   Úabsr¡  )r¸   r¹   Ztolr1   r1   r2   Ú
within_tolü  s    r¥  c                   C   s   t ttddgddggƒ d S )Nr   r%   )r   r   r   r1   r1   r1   r2   Ú<test_unsupported_uncondensed_distance_matrix_linkage_warning   s    r¦  c                  C   s2   t jjjD ]"} tttddgddgg| dd� q
d S )Nr%   Z	cityblock©r;   rL   )rN   ÚclusterÚ	hierarchyZ_EUCLIDEAN_METHODSr,   r-   r   rg   r1   r1   r2   Ú"test_euclidean_linkage_value_error  s
     ÿrª  c                  C   s8   t dgddd�} t ddgddggddd�}t| |ƒ d S )Nr%   r   rK   r§  r   )r   r   )ZZ1r  r1   r1   r2   Útest_2x2_linkage
  s    r«  c                  C   s„   t j d¡ d} t j | d¡}tjj |¡}t|ƒ}t	|| 
¡ kƒ t	| ¡ | 
¡ kƒ t	| ¡ | ¡ kƒ t	| ¡ | 
¡ kƒ d S )Né   é2   r†   )r)   rS   ÚseedÚrandnrN   r¨  r©  rG   r   r   r  r  )rÎ   rM   rC   Útreer1   r1   r2   Útest_node_compare  s    r±  c                  C   sš  t j d¡ d} t j | d¡}tjj |¡}t|ƒ}t	|d d …df t  
| ¡ƒ t	|d d …df t  | ¡ƒ t	| d¡t  
| d dd¡ƒ t	|d d …dgf t|dd	�ƒ t	|d d …dd
gf t|ddgd	�ƒ t	|d d …d
dgf t|ddgd	�ƒ t|ƒ}t  dd„ |D ƒ¡}t	|d d …t  |dg¡f t|dd�ƒ t	|d d …t  |ddg¡f t|ddgd�ƒ t	|d d …t  |ddg¡f t|ddgd�ƒ d S )Nr¬  r­  r†   r   rf   r%   éûÿÿÿr‡   )Z
n_clustersiöÿÿÿr‹   c                 S   s   g | ]
}|j ‘qS r1   )Údist)Ú.0r  r1   r1   r2   Ú
<listcomp>,  s     z!test_cut_tree.<locals>.<listcomp>)Úheight)r)   rS   r®  r¯  rN   r¨  r©  rG   r   r   Zaranger*   r¡  r    rh   Zsearchsorted)rÎ   rM   rC   ZcutreeZnodesZheightsr1   r1   r2   Útest_cut_tree  s,     &&
ÿÿÿr·  c                  C   sR   t ttjƒtjƒ} tj}t| |dd� t ttjdƒtjƒ} tj}t| |dd� d S )Nr=   r>   rG   rJ   )r   r   r&   rA   r[   r   rM   Zlinkage_X_ward_olo)rC   rD   r1   r1   r2   r\   6  s    
ÿÿr\   c                  C   s  t  dddddg¡} t| ƒ}| ¡ }t|d dƒ t|d dƒ | ¡  | ¡ }t|d dƒ t|d dƒ | dd	¡ | ¡ }t|d dƒ t|d dƒ | ¡  | ¡  | dd
¡ | ¡ }t|d dƒ t|d dƒ | ¡  | ¡ }t|d dƒ t|d d
ƒ d S )NrQ   rf   r   g      ø¿ra   Úkeyrm  r%   g      @r‹   r†   )r)   rh   r$   Zget_minr   Z
remove_minZchange_value)ÚvaluesÚheapÚpairr1   r1   r2   Ú	test_HeapD  s.    r¼  )ra   )QÚnumpyr)   Znumpy.testingr   r   r   r   rk  r   r,   Zscipy.cluster.hierarchyrN   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"   Zscipy.spatial.distancer#   Zscipy.cluster._hierarchyr$   Ú r&   Z
matplotlibZuseZmatplotlib.pyplotZpyplotri  rž  Ú	Exceptionr'   r`   rj   rq   r|   r–   r®   rµ   rÓ   rò   r   r	  r  r#  r6  rB  rK  rZ  r9  rG  r¥  r¦  rª  r«  r±  r·  r\   r¼  r1   r1   r1   r2   Ú<module>"   sX   x

72JMG#4H$> 6
