a
    Re+                     @   sb  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 e4y   dZ3Y n0 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 ZGdCd3d4ZHd5d6 ZId7d8 ZJd9d: ZKd;d< ZLd=d> ZMd?d@ ZNdAdB ZOdS )D    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   V/var/www/sunrise/env/lib/python3.9/site-packages/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g dg dgeg dg dgeg dg dgeg dg dgeg dg dgeg dg dgeg dg dgdZdd Zd	d
 ZdS )TestLinkageTies)r   r%   'e?rQ   )rQ      ra   rb   )rQ   rb   g'e@rb   )rQ   rb   gev @rb   )rQ   rb   g@rb   r   r6   r7   r8   rE   rF   rG   c                 C   s   dD ]}|  | qd S Nrc   )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   re      s    
z"TestLinkageTies.check_linkage_tiesN)r]   r^   r_   r)   ri   rj   rf   re   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 rl   )r&   linkage_ytdist_singler   r   rm   )r/   ro   rC   r1   r1   r2   rn      s    
z)TestInconsistent.check_inconsistent_tdistN)r]   r^   r_   rp   rn   r1   r1   r1   r2   rk      s   rk   c                   @   s   e Zd Zdd Zdd ZdS )TestCopheneticDistancec                 C   s.   t g d}tj}t|}t||dd d S )N  '     rv   ru   ru   rt   rt   ru   ru   ru         ru   ru   r=   r>   )r)   ri   r&   rq   r   r   )r/   	expectedMrC   Mr1   r1   r2   test_linkage_cophenet_tdist_Z   s    z4TestCopheneticDistance.test_linkage_cophenet_tdist_Zc                 C   sH   t j}t|t j\}}tg d}d}t||dd t||dd d S )Nrs   g*ɻ2Qz?r=   r>   )r&   rq   r   rA   r)   ri   r   )r/   rC   crz   ry   Z	expectedcr1   r1   r2   test_linkage_cophenet_tdist_Z_Y   s    z6TestCopheneticDistance.test_linkage_cophenet_tdist_Z_YN)r]   r^   r_   r{   r}   r1   r1   r1   r2   rr      s   rr   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 rl   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 g dg}g dg}tt|| tt|| d S )N)              ?      @       @r%   rQ   rb   r   )r/   rC   Zmr1   r1   r2   'test_mlab_linkage_conversion_single_row   s    
zATestMLabLinkageConversion.test_mlab_linkage_conversion_single_rowc                 C   sv   t g dg dg dg dg dg}t jg dg dg dg d	g d
gt jd}tt|| tt|| d S )N)rb   r(   rw   )      rx   )r%      rv   )rQ   	   rt   )   
   ru   )r         @     @a@r   )r         @     `k@r   )r   g      @     o@r   )r   g       @     p@r   )      @g      "@     pr@r   Zdtype)r)   r   ri   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 rl   )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   sX   t j}t|}t|}t|ddd}tg dtg df}t||}t|| d S )Nr   rb   r   )5   7   8   )rQ   rb   r%   )	r&   r   r#   r   r   r)   ri   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   s0   g d}g d}t t|| t t|| d S )Nr%   r%   r%   )rQ   rQ   rQ   r   r   r/   abr1   r1   r2   test_is_isomorphic_1  s    z%TestIsIsomorphic.test_is_isomorphic_1c                 C   s0   g d}g d}t t|| t t|| d S )N)r%   r   r%   )rQ   rb   rQ   r   r   r1   r1   r2   test_is_isomorphic_2  s    z%TestIsIsomorphic.test_is_isomorphic_2c                 C   s   g }g }t t|| d S rl   r   r   r1   r1   r2   test_is_isomorphic_3  s    z%TestIsIsomorphic.test_is_isomorphic_3c                 C   s0   g d}g d}t t|| t t|| d S )Nr   )r%   rb   rQ   r   r   r1   r1   r2   test_is_isomorphic_4A%  s    z&TestIsIsomorphic.test_is_isomorphic_4Ac                 C   s8   g d}g d}t t||du  t t||du  d S )N)r%   rQ   rb   rb   )r%   rb   rQ   rb   Fr   r   r1   r1   r2   test_is_isomorphic_4B,  s    z&TestIsIsomorphic.test_is_isomorphic_4Bc                 C   s0   g d}g d}t t|| t t|| d S )N)r   rQ   rb   )r(   rb   rQ   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   rb   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g dg d  d S )Nr   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 )Nrb   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   rb   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   sX   t jg dg dgt jd}|d |d |f }tt||k |sTttt|dd d S N)r   r%   r   rQ   r   )rb   rQ   r   rb   rb   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   s>   t jg dg dgtd}tt|du  ttt|dd d S Nr   r%   r   rQ   rb   rQ   r   rb   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u  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u  qd S Nr      rb   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u  ttt|d	d
 qd S )Nr   r   rb   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u  ttt|dd	 qd S 
Nr   r   rb   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u  ttt|dd	 qd S 
Nr   r   rb   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u  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   s>   t jg dg dgtd}tt|du  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   sX   t jg dg dgt jd}|d |d |f }tt||k |sTt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u  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u  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u  tt	t|d	d
 qd S )Nr   r   rb   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u  tt	t|dd	 qd S )
Nr   r   rb   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u  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g dgt jd}tt|d d S )Nr   r   rQ   r)   r   r   r   r   r   r1   r1   r2   test_num_obs_linkage_1x4  s    z*TestNumObsLinkage.test_num_obs_linkage_1x4c                 C   s.   t jg dg dgt jd}tt|d d S )Nr   r   r   rb   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   rb   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   s4   t jg dgt jd}t| tt|ddg d S )Nr   r   r   r%   r)   r   r   r   r   r   r   r1   r1   r2   test_leaves_list_1x4	  s    z#TestLeavesList.test_leaves_list_1x4c                 C   s:   t jg dg dgt jd}t| tt|g d d S )Nr   r   r   )r   r%   rQ   r  r   r1   r1   r2   test_leaves_list_2x4  s    
z#TestLeavesList.test_leaves_list_2x4c                 C   s   dD ]}|  | qd S rd   )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 rl   )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   rb   )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   rb   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g dgt jd}tt|d d S )Nr   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   s.   t jg dg dgt jd}tt|d d S )Nr(  )rQ   rb   皙?rb   r   Tr*  r   r1   r1   r2   test_is_monotonic_2x4_Tj  s    
z'TestIsMonotonic.test_is_monotonic_2x4_Tc                 C   s.   t jg dg dgt jd}tt|d d S )N)r   r%   r,  rQ   )rQ   rb   r)  rb   r   Fr*  r   r1   r1   r2   test_is_monotonic_2x4_Fp  s    
z'TestIsMonotonic.test_is_monotonic_2x4_Fc                 C   s4   t jg dg dg dgt jd}tt|d d S )Nr(  rQ   rb   r,  rQ   r   r   g333333?r   r   Tr*  r   r1   r1   r2   test_is_monotonic_3x4_Tv  s    
z'TestIsMonotonic.test_is_monotonic_3x4_Tc                 C   s4   t jg dg dg dgt jd}tt|d d S )Nr(  )rQ   rb   皙?rQ   r0  r   Fr*  r   r1   r1   r2   test_is_monotonic_3x4_F1}  s    
z(TestIsMonotonic.test_is_monotonic_3x4_F1c                 C   s4   t jg dg dg dgt jd}tt|d d S )N)r   r%   g?rQ   r/  r0  r   Fr*  r   r1   r1   r2   test_is_monotonic_3x4_F2  s    
z(TestIsMonotonic.test_is_monotonic_3x4_F2c                 C   s4   t jg dg dg dgt jd}tt|d d S )Nr(  r/  )r   r   r2  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   Fr7  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 r6  )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.  r1  r3  r4  r5  r8  r9  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 )
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   s8   t jg dgt jd}t|}t|}t||dd d S )Nr   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   r>  r   )r/   r;   rM   rC   r?  r@  r1   r1   r2   rD    s
    
z%TestMaxDists.check_maxdists_Q_linkageN)r]   r^   r_   r<  rA  rE  rD  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 )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   s6   t jg dgt jd}t jdd}ttt|| d S Nr=  r   rQ   r   )r)   r   r   rS   rT   r,   r-   r   rH  r1   r1   r2   test_maxinconsts_difrow_linkage  s    z/TestMaxInconsts.test_maxinconsts_difrow_linkagec                 C   sR   t jg dgt jd}t jg dgt jd}t||}t||}t||dd d S )Nr=  r   r   r   r   r)  rR   r>   )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 rB  )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 rF  )r&   r   r   r   r   rM  r   )r/   r;   rM   rC   r   r?  r@  r1   r1   r2   rO    s    


z+TestMaxInconsts.check_maxinconsts_Q_linkageN)r]   r^   r_   rI  rK  rN  rP  rO  r1   r1   r1   r2   rG    s
   rG  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
@rg   r   )check_maxRstat_invalid_indexr/   r   r1   r1   r2   test_maxRstat_invalid_index  s    z(TestMaxRStat.test_maxRstat_invalid_indexc                 C   s\   t jg dgt jd}t jg dgt jd}t|trHttt||| nttt||| d S )Nr=  r   rL  )	r)   r   r   
isinstancer   r,   r-   r   r   r/   r   rC   r   r1   r1   r2   rR    s
    
z)TestMaxRStat.check_maxRstat_invalid_indexc                 C   s   t dD ]}| | qd S Nr   )r   check_maxRstat_empty_linkagerS  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   rV  r1   r1   r2   rX    s    z)TestMaxRStat.check_maxRstat_empty_linkagec                 C   s   t dD ]}| | qd S rW  )r   check_maxRstat_difrow_linkagerS  r1   r1   r2   test_maxRstat_difrow_linkage  s    z)TestMaxRStat.test_maxRstat_difrow_linkagec                 C   s8   t jg dgt jd}t jdd}ttt||| d S rJ  )r)   r   r   rS   rT   r,   r-   r   rV  r1   r1   r2   rZ    s    z*TestMaxRStat.check_maxRstat_difrow_linkagec                 C   s   t dD ]}| | qd S rW  )r   "check_maxRstat_one_cluster_linkagerS  r1   r1   r2   !test_maxRstat_one_cluster_linkage  s    z.TestMaxRStat.test_maxRstat_one_cluster_linkagec                 C   sV   t jg dgt jd}t jg dgt jd}t||d}t||d}t||dd d S )Nr=  r   rL  r%   rR   r>   )r)   r   r   r   rM  r   )r/   r   rC   r   r?  r@  r1   r1   r2   r\    s
    z/TestMaxRStat.check_maxRstat_one_cluster_linkagec                 C   s(   dD ]}t dD ]}| || qqd S )NrC  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   rM  r   )r/   r;   r   rM   rC   r   r?  r@  r1   r1   r2   r^    s    
z%TestMaxRStat.check_maxRstat_Q_linkageN)r]   r^   r_   rT  rR  rY  rX  r[  rZ  r]  r\  r_  r^  r1   r1   r1   r2   rQ    s   	rQ  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   s2   t tjd}t|dd}|d }t|g d d S )Nr   Tno_plotleavesrQ   r   r%   r   rb   r   )r   r&   rA   r   r   )r/   rC   r   rc  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   sJ   t tjd}tg d}t||dd}t|| dd}||ksFJ d S )Nr   )r%   rb   rQ   r(   r   r   T)labelsrb  )r   r&   rA   r)   ri   r   tolist)r/   rC   ri  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 g dg dg dg}t  tt$}t|tt	dd W d    n1 sX0    Y  dt
|jv stJ tjtdd t|g d W d    n1 s0    Y  t  d S )N)r   r%   r   r   )rQ   rb   r   r   )r   r   r   r(   d   )ri  z.Dimensions of Z and labels must be consistent.)match)r)   ri   pltfigurepytestr   r-   r   r  r   strvalueclose)r/   linkexc_infor1   r1   r2   test_valid_label_size7  s"    2*z$TestDendrogram.test_valid_label_sizec                 C   s   dD ]}|  | qd S )N)topbottomleftright)check_dendrogram_plot)r/   rg  r1   r1   r2   test_dendrogram_plotK  s    z#TestDendrogram.test_dendrogram_plotc           	      C   s  t tjd}g dg dg dg dg dg dgg dg d	g d
g dg dgg dg dg dd}t }|d}t|||d}t|| t|||ddd |dv r| d n
|	 d }t|
 d t| d t|||dd |dv r| d n
|	 d }t|
 d t|||dd |dv rH| d n
|	 d }t| d t  t||d}t  t|| d S )Nr   )C1C0r  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  )     F@r       K@r  )     A@r        I@r  )      9@r       @E@r  )      $@r       @@r  )251034rd  )r~  r~  r  r  r  r  
color_listZdcoordZicoordZivlrc  leaves_color_list   )axrg  rP   Z   )r  rg  leaf_font_sizeleaf_rotation)rx  ry  r   )r  rg  r  )r  rg  r  rf  )r   r&   rA   ro  rp  Zadd_subplotr   r   Zget_xticklabelsZget_yticklabelsZget_rotationget_sizert  )	r/   rg  rC   expectedZfigr  ZR1Z	testlabelZR2r1   r1   r2   r|  P  sf    




z$TestDendrogram.check_dendrogram_plotc              	   C   s   t tjd}t|dddd}t  t|dgg dgg dgd	d
gddgddgd t|dddd}t  t|g dg dg dg dg dgg dg dg dg dgg dg dg dd d S )Nr   rQ   ZlastpT)Zshow_contractedr  )r   r   r   r   r  (2)z(4)r(   r   r  Zmtica)r~  r  r  r  r  )r   r   r   r   r  r  )r  r  r  r  )r  r        D@r  )r  r       @@@r  )r  r  r  r  r  )rQ   r   r%   r   r   )r~  r~  r  r  r  )r   r&   rA   r   ro  rt  r   rH  r1   r1   r2   test_dendrogram_truncate_mode  s6    
z,TestDendrogram.test_dendrogram_truncate_modec                 C   sV   t tjd}tg d t|dddd}tg d |d }t|g d	 td  d S )
Nr   )r|   mr0   r   Tg   )rb  Zabove_threshold_colorZcolor_threshold)r  rr|   r  r0   r   r  )r|   r  r  r  r  )r   r&   rA   r   r   r   )r/   rC   r   r  r1   r1   r2   test_dendrogram_colors  s    z%TestDendrogram.test_dendrogram_colorsc              	   C   sb   t g dg dg dg dg dg dg}t|d}t|dd}g d}|d	 }t|| d S )
Nr%   r   r   r   r   r%   r   rQ   r   r   r%   r   r   Tra  r  r~  r~  r  C2r  r  r)   ri   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   sb   t g dg dg dg dg dg dg}t|d}t|dd}g d	}|d
 }t|| d S )Nr  )r   r   g?r  r  r  r   Tra  r  r  r  r  r1   r1   r2   test_dendrogram_leaf_colors  s    

z*TestDendrogram.test_dendrogram_leaf_colorsN)r]   r^   r_   re  rh  rk  rq  markZskipifhave_matplotlibrw  r}  r|  r  r  r  r  r1   r1   r1   r2   r`  #  s   

<
r`  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%   )rb   r   rQ   r   r)   r*   r   r   max)rC   rW   Bqr   rz  r{  r1   r1   r2   r>    s    
r>  rb   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   rz  r{  r1   r1   r2   rM    s    
rM  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   rh   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   rg   r%   r   )Z
n_clustersir   c                 S   s   g | ]
}|j qS r1   )dist).0r  r1   r1   r2   
<listcomp>(      z!test_cut_tree.<locals>.<listcomp>)height)r)   rS   r  r  rN   r  r  rG   r   r   Zaranger*   r  r    ri   Zsearchsorted)r   rM   rC   Zcutree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\   2  s    
r\   c                  C   s  t g d} 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 )N)rQ   rg   r         rb   keyrb   rs  r  r%   rg   g      @rQ   r   r   r   )r)   ri   r$   Zget_minr   Z
remove_minZchange_value)valuesheappairr1   r1   r2   	test_Heap@  s.    r  )rb   )Pnumpyr)   Znumpy.testingr   r   r   r   rq  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pyplotro  r  	Exceptionr'   r`   rk   rr   r~   r   r   r   r   r   r  r  r  r&  r;  rG  rQ  r`  r>  rM  r  r  r  r  r  r\   r  r1   r1   r1   r2   <module>"   sV   x

72JMG#4H$> 6
