U
    Hvfm                     @   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   F/tmp/pip-unpacked-wheel-96ln3f52/scipy/cluster/tests/test_hierarchy.py3test_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ev @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 )Nr   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/   Z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|rt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   Fr1  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 r0  )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.  r/  r2  r3  r4  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   r8  r   )r/   r;   rM   rC   r9  r:  r1   r1   r2   r>    s
    
z%TestMaxDists.check_maxdists_Q_linkageN)r]   r^   r_   r6  r;  r?  r>  r1   r1   r1   r2   r5    s   r5  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   rB  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 r7  )r)   r~   r   r   !calculate_maximum_inconsistenciesr   )r/   rC   r   r9  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 r@  )r&   r   r   r   r   rF  r   )r/   r;   rM   rC   r   r9  r:  r1   r1   r2   rH    s    


z+TestMaxInconsts.check_maxinconsts_Q_linkageN)r]   r^   r_   rC  rE  rG  rI  rH  r1   r1   r1   r2   rA    s
   rA  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   rK    s
    
z)TestMaxRStat.check_maxRstat_invalid_indexc                 C   s   t dD ]}| | qd S Nr   )r   check_maxRstat_empty_linkagerL  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   rO  r1   r1   r2   rQ    s    z)TestMaxRStat.check_maxRstat_empty_linkagec                 C   s   t dD ]}| | qd S rP  )r   check_maxRstat_difrow_linkagerL  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 rD  )r)   r~   r   rS   rT   r,   r-   r   rO  r1   r1   r2   rS    s    z*TestMaxRStat.check_maxRstat_difrow_linkagec                 C   s   t dD ]}| | qd S rP  )r   "check_maxRstat_one_cluster_linkagerL  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 r7  )r)   r~   r   r   rF  r   )r/   r   rC   r   r9  r:  r1   r1   r2   rU    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   rF  r   )r/   r;   r   rM   rC   r   r9  r:  r1   r1   r2   rW    s    
z%TestMaxRStat.check_maxRstat_Q_linkageN)r]   r^   r_   rM  rK  rR  rQ  rT  rS  rV  rU  rX  rW  r1   r1   r1   r2   rJ    s   	rJ  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   ra  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   )ra  z.Dimensions of Z and labels must be consistent.)match)r)   rh   pltfigurepytestr   r-   r   r  r   strvaluerc  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)rq  rr  )r  r_  r  )r  r_  r  r^  )r   r&   rA   rh  ri  Zadd_subplotr   r   Zget_xticklabelsZget_yticklabelsZget_rotationget_sizerm  )	r/   r_  rC   expectedZfigr  ZR1Z	testlabelZR2r1   r1   r2   ru  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_contractedrx  r   r   r   ry  z(2)z(4)r(   r   r  Zmticarw  r   r   r   r{  rz  r|  g      D@r}  g     @@@r~  r  r  r  r   r%   r   r   )r   r&   rA   r   rh  rm  r   rB  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   TrZ  rx  rw  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   TrZ  rx  rw  r  r  r  r  r1   r1   r2   test_dendrogram_leaf_colors  s    
z*TestDendrogram.test_dendrogram_leaf_colorsN)r]   r^   r_   r]  r`  rd  rj  markZskipifhave_matplotlibrp  rv  ru  r  r  r  r  r1   r1   r1   r2   rY  #  s   

<
rY  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   rs  rt  r1   r1   r2   r8    s    
r8  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   rs  rt  r1   r1   r2   rF    s    
rF  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_clustersir   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   keyrl  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   )QZnumpyr)   Znumpy.testingr   r   r   r   rj  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pyplotrh  r  	Exceptionr'   r`   rj   rq   r|   r   r   r   r   r   r   r  r  r"  r5  rA  rJ  rY  r8  rF  r  r  r  r  r  r  r\   r  r1   r1   r1   r2   <module>"   sX   x

72JMG#4H$> 6
