o
    gm                     @   sh  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 e4y   dZ3Y nw 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_dataAggTFc                   @   L   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 r3   `/home/ubuntu/cloudmapper/venv/lib/python3.10/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      t d}ttt| d S )Nr   )r+   r,   r.   r/   r   r0   r3   r3   r4   "test_linkage_empty_distance_matrixK      
z.TestLinkage.test_linkage_empty_distance_matrixc                 C      dD ]}|  | qd S )N)r   completeaverageweighted)check_linkage_tdistr1   methodr3   r3   r4   test_linkage_tdistP      zTestLinkage.test_linkage_tdistc                 C   s,   t tj|}ttd| }t||dd d S )Nlinkage_ytdist_绽|=atolr   r&   ytdistgetattrr   )r1   r@   Z	expectedZr3   r3   r4   r>   T   s   zTestLinkage.check_linkage_tdistc                 C   r:   )N)centroidmedianward)check_linkage_qr?   r3   r3   r4   test_linkage_XZ   rB   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 )N
linkage_X_ư>rE   	euclidean)metric)	r   r&   XrI   r   scipyspatialdistancer#   )r1   r@   rJ   rK   r2   r3   r3   r4   rO   ^   s   
zTestLinkage.check_linkage_qc           	      C   sb   t jd}d}||d}t|}t D ]\}}t|||}t||}t	||ddd qd S )Nr         g+=V瞯<)rtolrF   )
r+   randomRandomStaterandr#   r"   itemsr!   r   r   )	r1   rngnrU   dr@   code	Z_trivialrJ   r3   r3   r4   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)optimal_orderinglinkage_ytdist_single_olorD   rE   rG   )r1   rJ   rK   r3   r3   r4   test_optimal_leaf_orderingt   s   
z&TestLinkage.test_optimal_leaf_orderingN)__name__
__module____qualname__r5   r8   rA   r>   rP   rO   rf   ri   r3   r3   r3   r4   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?rZ   )rZ      rn   ro   )rZ   ro   g'e@ro   )rZ   ro   gev @ro   )rZ   ro   g@ro   r   r;   r<   r=   rL   rM   rN   c                 C   r:   Nrp   )check_linkage_tiesr?   r3   r3   r4   test_linkage_ties   rB   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@   rR   rE   )r+   arrayr   _expectationsr   )r1   r@   rU   rJ   rK   r3   r3   r4   rr      s   
z"TestLinkageTies.check_linkage_tiesN)rj   rk   rl   r+   rv   rw   rs   rr   r3   r3   r3   r4   rm   z   s2    






rm   c                   @      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)r1   depthr3   r3   r4   test_inconsistent_tdist   s   
z(TestInconsistent.test_inconsistent_tdistc                 C   s    t j}tt||t j|  d S rz   )r&   linkage_ytdist_singler   r   r{   )r1   r}   rJ   r3   r3   r4   r|      s   
z)TestInconsistent.check_inconsistent_tdistN)rj   rk   rl   r~   r|   r3   r3   r3   r4   ry      s    ry   c                   @   rx   )TestCopheneticDistancec                 C   s.   t g d}tj}t|}t||dd d S )N  '     r   r   r   r   r   r   r   r         r   r   rD   rE   )r+   rv   r&   r   r   r   )r1   	expectedMrJ   Mr3   r3   r4   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 )Nr   g*ɻ2Qz?rD   rE   )r&   r   r   rH   r+   rv   r   )r1   rJ   cr   r   	expectedcr3   r3   r4   test_linkage_cophenet_tdist_Z_Y   s   z6TestCopheneticDistance.test_linkage_cophenet_tdist_Z_YN)rj   rk   rl   r   r   r3   r3   r3   r4   r      s    r   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 rz   r+   asarrayr   r	   r
   )r1   rU   r3   r3   r4   "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%   rZ   ro   r   )r1   rJ   Zmr3   r3   r4   '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)ro   r*   r   )      r   )r%      r   )rZ   	   r   )   
   r   )r         @     @a@r   )r         @     `k@r   )r   g      @     o@r   )r   g       @     p@r   )      @g      "@     pr@r   dtype)r+   r   rv   doubler   r	   r
   )r1   r   rJ   r3   r3   r4   *test_mlab_linkage_conversion_multiple_rows   s   
zDTestMLabLinkageConversion.test_mlab_linkage_conversion_multiple_rowsN)rj   rk   rl   r   r   r   r3   r3   r3   r4   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   L   t jD ]}| |d qt jD ]}| |d qt jD ]}| |d qd S Nr   rX   maxclust)r&   fcluster_inconsistentcheck_fclusterdatafcluster_distancefcluster_maxclustr1   tr3   r3   r4   test_fclusterdata      


zTestFcluster.test_fclusterdatac                 C   s8   t td| | }tj}t|||d}tt|| d S N	fcluster_	criterionr   )rI   r&   Q_Xr   r   r   )r1   r   r   	expectedTrU   Tr3   r3   r4   r      s   zTestFcluster.check_fclusterdatac                 C   r   r   )r&   r   check_fclusterr   r   r   r3   r3   r4   test_fcluster   r   zTestFcluster.test_fclusterc                 C   s<   t td| | }ttj}t|||d}tt|| d S r   )rI   r&   r   r   r   r   r   )r1   r   r   r   rJ   r   r3   r3   r4   r      s   
zTestFcluster.check_fclusterc                 C   s0   t jD ]}| | qt jD ]}| | qd S rz   )r&   r   check_fcluster_monocritr    check_fcluster_maxclust_monocritr   r3   r3   r4   test_fcluster_monocrit   s
   

z#TestFcluster.test_fcluster_monocritc                 C   :   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   r1   r   r   rJ   r   r3   r3   r4   r         

z$TestFcluster.check_fcluster_monocritc                 C   r   )Nmaxclust_monocritr   )r&   r   r   r   r   r   r   r   r   r3   r3   r4   r      r   z-TestFcluster.check_fcluster_maxclust_monocritN)
rj   rk   rl   r   r   r   r   r   r   r   r3   r3   r3   r4   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   ro   r   )5   7   8   )rZ   ro   r%   )	r&   r   r#   r   r   r+   rv   r   r   )r1   rU   YrJ   r   LrightLr3   r3   r4   test_leaders_single  s   
zTestLeaders.test_leaders_singleN)rj   rk   rl   r   r3   r3   r3   r4   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   0   g d}g d}t t|| t t|| d S )Nr%   r%   r%   )rZ   rZ   rZ   r   r   r1   abr3   r3   r4   test_is_isomorphic_1     z%TestIsIsomorphic.test_is_isomorphic_1c                 C   r   )N)r%   r   r%   )rZ   ro   rZ   r   r   r3   r3   r4   test_is_isomorphic_2  r   z%TestIsIsomorphic.test_is_isomorphic_2c                 C   s   g }g }t t|| d S rz   r   r   r3   r3   r4   test_is_isomorphic_3  s   z%TestIsIsomorphic.test_is_isomorphic_3c                 C   r   )Nr   )r%   ro   rZ   r   r   r3   r3   r4   test_is_isomorphic_4A%  r   z&TestIsIsomorphic.test_is_isomorphic_4Ac                 C   s8   g d}g d}t t||dk t t||dk d S )N)r%   rZ   ro   ro   )r%   ro   rZ   ro   Fr   r   r3   r3   r4   test_is_isomorphic_4B,  s   z&TestIsIsomorphic.test_is_isomorphic_4Bc                 C   r   )N)r   rZ   ro   )r*   ro   rZ   r   r   r3   r3   r4   test_is_isomorphic_4C3  r   z&TestIsIsomorphic.test_is_isomorphic_4Cc                 C   s   dD ]}|  d| qd S )NrZ   ro   r     help_is_isomorphic_randpermr1   ncr3   r3   r4   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   r3   r3   r4   test_is_isomorphic_6@  s   z%TestIsIsomorphic.test_is_isomorphic_6c                 C   s   t tg dg d  d S )Nr   r   r   )r1   r3   r3   r4   test_is_isomorphic_7G  s   z%TestIsIsomorphic.test_is_isomorphic_7Fr   c                 C   s   t dD ]c}ttj|| }tj|jtjd}tj|}t d|jd D ]
}	|||	  ||	< q(|rStj|}
||
d|   d7  < ||
d|   |;  < t	t
||| k t	t
||| k qd S )Nro   r   r   r%   )ranger+   int_r]   r_   r,   sizepermutationshaper   r   )r1   nobs	nclustersnonisonerrorskr   r   PiQr3   r3   r4   r   K  s   z,TestIsIsomorphic.help_is_isomorphic_randpermN)Fr   )rj   rk   rl   r   r   r   r   r   r   r   r   r   r   r3   r3   r3   r4   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   "   dD ]\}}}|  ||| qd S N))rZ   r   F)rZ   ro   F)r%   r   T)rZ   r   T)#check_is_valid_linkage_various_sizer1   nrowncolvalidr3   r3   r4   "test_is_valid_linkage_various_size[     z5TestIsValidLinkage.test_is_valid_linkage_various_sizec                 C   \   t jg dg dgt jd}|d |d |f }tt||k |s,ttt|dd d S d S N)r   r%   r   rZ   r   )ro   rZ   r   ro   ro   r   Tthrow)r+   r   r   r   r   r.   r/   )r1   r   r   r   rJ   r3   r3   r4   r   `     
z6TestIsValidLinkage.check_is_valid_linkage_various_sizec                 C   >   t jg dg dgtd}tt|dk ttt|dd d S Nr   r%   r   rZ   ro   rZ   r   ro   r   FTr   )r+   r   intr   r   r.   	TypeErrorr1   rJ   r3   r3   r4   test_is_valid_linkage_int_typei     
z1TestIsValidLinkage.test_is_valid_linkage_int_typec                 C   4   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	  r3   r3   r4   test_is_valid_linkage_emptyp     z.TestIsValidLinkage.test_is_valid_linkage_emptyc                 C   sF   t dddD ]}tj||d  d }t|}tt|dk qd S Nr      ro   r%   rZ   T)r   r+   r]   r_   r   r   r   r1   r   r2   rJ   r3   r3   r4   test_is_valid_linkage_4_and_upv  s
   z1TestIsValidLinkage.test_is_valid_linkage_4_and_upc                 C   sf   t dddD ]*}tj||d  d }t|}d||d df< tt|dk ttt|d	d
 qd S )Nr   r  ro   r%   rZ   r   FTr   	r   r+   r]   r_   r   r   r   r.   r/   r  r3   r3   r4   -test_is_valid_linkage_4_and_up_neg_index_left~     z@TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_leftc                 C   sf   t dddD ]*}tj||d  d }t|}d||d df< tt|dk ttt|dd	 qd S 
Nr   r  ro   r%   rZ   r  FTr   r  r  r3   r3   r4   .test_is_valid_linkage_4_and_up_neg_index_right  r  zATestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_rightc                 C   sf   t dddD ]*}tj||d  d }t|}d||d df< tt|dk ttt|dd	 qd S 
Nr   r  ro   r%   rZ   g      FTr   r  r  r3   r3   r4   'test_is_valid_linkage_4_and_up_neg_dist  r  z:TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_distc                 C   sf   t dddD ]*}tj||d  d }t|}d||d df< tt|dk ttt|dd	 qd S r  r  r  r3   r3   r4   )test_is_valid_linkage_4_and_up_neg_counts  r  z<TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_countsN)rj   rk   rl   r   r   r
  r  r  r  r  r  r  r3   r3   r3   r4   r   Z  s    	


r   c                   @   r(   )TestIsValidInconsistentc                 C   r  r  )r+   r   r  r   r   r.   r  r1   Rr3   r3   r4   test_is_valid_im_int_type  r  z1TestIsValidInconsistent.test_is_valid_im_int_typec                 C   r   r   )check_is_valid_im_various_sizer   r3   r3   r4   test_is_valid_im_various_size  r   z5TestIsValidInconsistent.test_is_valid_im_various_sizec                 C   r   r   )r+   r   r   r   r   r.   r/   )r1   r   r   r   r   r3   r3   r4   r"    r  z6TestIsValidInconsistent.check_is_valid_im_various_sizec                 C   r  r  )r+   r,   r   r   r   r.   r/   r  r3   r3   r4   test_is_valid_im_empty  r  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+   r]   r_   r   r   r   r   r1   r   r2   rJ   r   r3   r3   r4   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  ro   r%   rZ          r   FTr   
r   r+   r]   r_   r   r   r   r   r.   r/   r%  r3   r3   r4   (test_is_valid_im_4_and_up_neg_index_left     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  ro   r%   rZ   r'  FTr   r(  r%  r3   r3   r4   )test_is_valid_im_4_and_up_neg_index_right  r*  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%  r3   r3   r4   "test_is_valid_im_4_and_up_neg_dist  r*  z:TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_distN)rj   rk   rl   r!  r#  r"  r$  r&  r)  r+  r,  r3   r3   r3   r4   r    s    		r  c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestNumObsLinkagec                 C       t jdt jd}ttt| d S Nr  r   )r+   r,   r   r.   r/   r   r	  r3   r3   r4   test_num_obs_linkage_empty     z,TestNumObsLinkage.test_num_obs_linkage_emptyc                 C   (   t jg dgt jd}tt|d d S )Nr  r   rZ   r+   r   r   r   r   r	  r3   r3   r4   test_num_obs_linkage_1x4     z*TestNumObsLinkage.test_num_obs_linkage_1x4c                 C   .   t jg dg dgt jd}tt|d d S )Nr  r  r   ro   r4  r	  r3   r3   r4   test_num_obs_linkage_2x4     
z*TestNumObsLinkage.test_num_obs_linkage_2x4c                 C   sD   t dddD ]}tj||d  d }t|}tt|| qd S )Nr   r  ro   r%   rZ   )r   r+   r]   r_   r   r   r   r  r3   r3   r4   test_num_obs_linkage_4_and_up  s
   z/TestNumObsLinkage.test_num_obs_linkage_4_and_upN)rj   rk   rl   r1  r5  r8  r:  r3   r3   r3   r4   r.    s
    r.  c                   @   4   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	  r3   r3   r4   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%   rZ   r=  r	  r3   r3   r4   test_leaves_list_2x4  s   
z#TestLeavesList.test_leaves_list_2x4c                 C   r:   rq   )check_leaves_list_Qr?   r3   r3   r4   test_leaves_list_Q  s   z!TestLeavesList.test_leaves_list_Qc                 C   s.   t j}t||}t|}t| t| d S rz   )r&   r   r   r   r   	pre_orderr   )r1   r@   rU   rJ   noder3   r3   r4   r@    s   
z"TestLeavesList.check_leaves_list_Qc                 C   s>   t j}t|d}t|}t| |  |    d S )Nr   )r&   r   r   r   r   rB  get_left	get_right)r1   rU   rJ   rC  r3   r3   r4   test_Q_subtree_pre_order"  s   


z'TestLeavesList.test_Q_subtree_pre_orderN)rj   rk   rl   r>  r?  rA  r@  rF  r3   r3   r3   r4   r<    s    r<  c                   @   r;  )TestCorrespondc                 C   s&   t d}t d}ttt|| d S )Nr7   r  )r+   r,   r.   r/   r   )r1   r2   rJ   r3   r3   r4   test_correspond_empty,  s   

z$TestCorrespond.test_correspond_emptyc                 C   s   t ddD ]}tj||d  d }t|}tt|| qt dddD ]}tj||d  d }t|}tt|| q%d S )NrZ   r   r%   r  ro   )r   r+   r]   r_   r   r   r   r  r3   r3   r4   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 ]4\}}tj||d  d }tj||d  d }t|}t|}tt||d tt||d q"d S )NrZ   r   ro   r   r%   F	listzipr   r+   r]   r_   r   r   r   r1   r   jr2   y2rJ   Z2r3   r3   r4   test_correspond_4_and_up>       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 ]4\}}tj||d  d }tj||d  d }t|}t|}tt||d tt||d q"d S )NrZ   r         r%   FrJ  rM  r3   r3   r4   test_correspond_4_and_up_2J  rR  z)TestCorrespond.test_correspond_4_and_up_2c                 C   s@   t ddD ]}tj|d}t|}t|}tt|| qd S )NrZ   r   r   )r   r+   r]   r_   r#   r   r   r   )r1   rb   rU   r   rJ   r3   r3   r4   !test_num_obs_linkage_multi_matrixV  s   z0TestCorrespond.test_num_obs_linkage_multi_matrixN)rj   rk   rl   rH  rI  rQ  rU  rV  r3   r3   r3   r4   rG  +  s    rG  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   r6   )Nr  )r+   r,   r.   r/   r   r	  r3   r3   r4   test_is_monotonic_empty`  r9   z'TestIsMonotonic.test_is_monotonic_emptyc                 C   r3  )Nr   r%   333333?rZ   r   Tr+   r   r   r   r   r	  r3   r3   r4   test_is_monotonic_1x4e  r6  z%TestIsMonotonic.test_is_monotonic_1x4c                 C   r7  )NrY  )rZ   ro   皙?ro   r   Tr[  r	  r3   r3   r4   test_is_monotonic_2x4_Tj  r9  z'TestIsMonotonic.test_is_monotonic_2x4_Tc                 C   r7  )N)r   r%   r]  rZ   )rZ   ro   rZ  ro   r   Fr[  r	  r3   r3   r4   test_is_monotonic_2x4_Fp  r9  z'TestIsMonotonic.test_is_monotonic_2x4_Fc                 C   4   t jg dg dg dgt jd}tt|d d S )NrY  rZ   ro   r]  rZ   r   r   g333333?r   r   Tr[  r	  r3   r3   r4   test_is_monotonic_3x4_Tv     
z'TestIsMonotonic.test_is_monotonic_3x4_Tc                 C   r`  )NrY  )rZ   ro   皙?rZ   rb  r   Fr[  r	  r3   r3   r4   test_is_monotonic_3x4_F1}  rd  z(TestIsMonotonic.test_is_monotonic_3x4_F1c                 C   r`  )N)r   r%   g?rZ   ra  rb  r   Fr[  r	  r3   r3   r4   test_is_monotonic_3x4_F2  rd  z(TestIsMonotonic.test_is_monotonic_3x4_F2c                 C   r`  )NrY  ra  )r   r   re  r   r   Fr[  r	  r3   r3   r4   test_is_monotonic_3x4_F3  rd  z(TestIsMonotonic.test_is_monotonic_3x4_F3c                 C   s   t tjd}tt|d d S Nr   Tr   r&   rH   r   r   r	  r3   r3   r4    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   )rZ   rZ   Frj  r	  r3   r3   r4    test_is_monotonic_tdist_linkage2  s   z0TestIsMonotonic.test_is_monotonic_tdist_linkage2c                 C   s"   t j}t|d}tt|d d S ri  )r&   r   r   r   r   )r1   rU   rJ   r3   r3   r4   test_is_monotonic_Q_linkage  s   
z+TestIsMonotonic.test_is_monotonic_Q_linkageN)rj   rk   rl   rX  r\  r^  r_  rc  rf  rg  rh  rk  rl  rm  r3   r3   r3   r4   rW  _  s    rW  c                   @   r-  )
TestMaxDistsc                 C   r/  r0  )r+   r,   r   r.   r/   r   r	  r3   r3   r4   test_maxdists_empty_linkage  r2  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%   rZ  r   r   r[   rE   )r+   r   r   r   calculate_maximum_distancesr   )r1   rJ   MD
expectedMDr3   r3   r4   !test_maxdists_one_cluster_linkage  s   z.TestMaxDists.test_maxdists_one_cluster_linkagec                 C   r:   Nr   r;   rN   rL   rM   )check_maxdists_Q_linkager?   r3   r3   r4   test_maxdists_Q_linkage  rB   z$TestMaxDists.test_maxdists_Q_linkagec                 C   s2   t j}t||}t|}t|}t||dd d S Nr[   rE   )r&   r   r   r   rq  r   )r1   r@   rU   rJ   rr  rs  r3   r3   r4   rw    s
   
z%TestMaxDists.check_maxdists_Q_linkageN)rj   rk   rl   ro  rt  rx  rw  r3   r3   r3   r4   rn    s
    rn  c                   @   r;  )TestMaxInconstsc                 C   s2   t jdt jd}t jdt jd}ttt|| d S r0  )r+   r,   r   r.   r/   r   r1   rJ   r   r3   r3   r4   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 Nrp  r   rZ   r   )r+   r   r   r]   r_   r.   r/   r   r{  r3   r3   r4   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 )Nrp  r   r   r   r   rZ  r[   rE   )r+   r   r   r   !calculate_maximum_inconsistenciesr   )r1   rJ   r   rr  rs  r3   r3   r4   $test_maxinconsts_one_cluster_linkage  s
   

z4TestMaxInconsts.test_maxinconsts_one_cluster_linkagec                 C   r:   ru  )check_maxinconsts_Q_linkager?   r3   r3   r4   test_maxinconsts_Q_linkage  rB   z*TestMaxInconsts.test_maxinconsts_Q_linkagec                 C   s>   t j}t||}t|}t||}t||}t||dd d S ry  )r&   r   r   r   r   r  r   )r1   r@   rU   rJ   r   rr  rs  r3   r3   r4   r    s   


z+TestMaxInconsts.check_maxinconsts_Q_linkageN)rj   rk   rl   r|  r~  r  r  r  r3   r3   r3   r4   rz    s    rz  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   r:   )N)gffffff
@rt   r   )check_maxRstat_invalid_indexr1   r   r3   r3   r4   test_maxRstat_invalid_index  rB   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r%ttt||| d S ttt||| d S )Nrp  r   r  )	r+   r   r   
isinstancer  r.   r/   r   r  r1   r   rJ   r   r3   r3   r4   r    s
   
z)TestMaxRStat.check_maxRstat_invalid_indexc                 C      t dD ]}| | qd S Nr   )r   check_maxRstat_empty_linkager  r3   r3   r4   test_maxRstat_empty_linkage     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 r0  )r+   r,   r   r.   r/   r   r  r3   r3   r4   r    r  z)TestMaxRStat.check_maxRstat_empty_linkagec                 C   r  r  )r   check_maxRstat_difrow_linkager  r3   r3   r4   test_maxRstat_difrow_linkage  r  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 r}  )r+   r   r   r]   r_   r.   r/   r   r  r3   r3   r4   r    s   z*TestMaxRStat.check_maxRstat_difrow_linkagec                 C   r  r  )r   "check_maxRstat_one_cluster_linkager  r3   r3   r4   !test_maxRstat_one_cluster_linkage  r  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 )Nrp  r   r  r%   r[   rE   )r+   r   r   r   r  r   )r1   r   rJ   r   rr  rs  r3   r3   r4   r    s
   z/TestMaxRStat.check_maxRstat_one_cluster_linkagec                 C   s(   dD ]}t dD ]}| || qqd S )Nrv  r   )r   check_maxRstat_Q_linkage)r1   r@   r   r3   r3   r4   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%   r[   rE   )r&   r   r   r   r   r  r   )r1   r@   r   rU   rJ   r   rr  rs  r3   r3   r4   r    s   
z%TestMaxRStat.check_maxRstat_Q_linkageN)rj   rk   rl   r  r  r  r  r  r  r  r  r  r  r3   r3   r3   r4   r    s    	r  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rZ   r   r%   r   ro   r   )r   r&   rH   r   r   )r1   rJ   r   r  r3   r3   r4   $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   fooorientation)r   r&   rH   r.   r/   r   r	  r3   r3   r4   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s#J d S )Nr   )r%   ro   rZ   r*   r   r   T)labelsr  )r   r&   rH   r+   rv   r   tolist)r1   rJ   r  result1result2r3   r3   r4   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 s,w   Y  dt
|jv s:J tjtdd t|g d W d    n1 sRw   Y  t  d S )N)r   r%   r   r   )rZ   ro   r   r   )r   r   r   r*   d   )r  z.Dimensions of Z and labels must be consistent.)match)r+   rv   pltfigurepytestr   r/   r   rK  r   strvalueclose)r1   linkexc_infor3   r3   r4   test_valid_label_size7  s&   z$TestDendrogram.test_valid_label_sizec                 C   r:   )N)topbottomleftright)check_dendrogram_plot)r1   r  r3   r3   r4   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 r| 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4r  )r  r  r  r  r  r  
color_listdcoordicoordivlr  leaves_color_list   )axr  rY   Z   )r  r  leaf_font_sizeleaf_rotation)r  r  r   )r  r  r  )r  r  r  r  )r   r&   rH   r  r  add_subplotr   r   get_xticklabelsget_yticklabelsget_rotationget_sizer  )	r1   r  rJ   expectedfigr  R1	testlabelR2r3   r3   r4   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   rZ   lastpT)show_contractedr  )r   r   r   r   r  (2)z(4)r*   r   r  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  )rZ   r   r%   r   r   )r  r  r  r  r  )r   r&   rH   r   r  r  r   r{  r3   r3   r4   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   mr2   r   Tg   )r  above_threshold_colorcolor_threshold)r  rr   r  r2   r   r  )r   r  r  r  r  )r   r&   rH   r   r   r   )r1   rJ   r   r  r3   r3   r4   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   rZ   r   r   r%   r   r   Tr  r  r  r  r  C2r  r  r+   rv   r   r   r   r1   xzrc   
exp_colorscolorsr3   r3   r4   %test_dendrogram_leaf_colors_zero_dist     

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   Tr  r  r  r  r  r3   r3   r4   test_dendrogram_leaf_colors  r  z*TestDendrogram.test_dendrogram_leaf_colorsN)rj   rk   rl   r  r  r  r  markskipifhave_matplotlibr  r  r  r  r  r  r  r3   r3   r3   r4   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r=|t||  |d< ||krK|t||  |d< | |df |d< | ||< q|S Nr   r%   ro   r   rZ   r   r+   r,   r   r  max)rJ   rb   Bqr   r  r  r3   r3   r4   rq       
rq  ro   c           	      C   s   | j d d }t|d f}td}td|d D ]>}d|d d < | |df }| |df }||kr=|t||  |d< ||krK|t||  |d< |||f |d< | ||< q|S r   r  )	rJ   r   r   rb   r  r  r   r  r  r3   r3   r4   r    r  r  c                 C   s   t | |  |k S rz   )r+   absr  )r   r   tolr3   r3   r4   
within_tol  s   r	  c                   C   s   t ttddgddgg d S )Nr   r%   )r   r   r   r3   r3   r3   r4   <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%   	cityblockr@   rT   )rV   cluster	hierarchy_EUCLIDEAN_METHODSr.   r/   r   ru   r3   r3   r4   "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   rS   r  r   )r   r   )Z1rP  r3   r3   r4   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+   r]   seedrandnrV   r  r  rN   r   r   rD  rE  )r   rU   rJ   treer3   r3   r4   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   rt   r%   r   )
n_clustersir   c                 S   s   g | ]}|j qS r3   )dist).0rC  r3   r3   r4   
<listcomp>,  s    z!test_cut_tree.<locals>.<listcomp>)height)r+   r]   r  r  rV   r  r  rN   r   r   aranger,   r  r    rv   searchsorted)r   rU   rJ   cutreenodesheightsr3   r3   r4   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 )NrD   rE   rN   rR   )r   r   r&   rH   rh   r   rU   linkage_X_ward_olo)rJ   rK   r3   r3   r4   ri   6  s   
ri   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)rZ   rt   r         ro   keyro   r  r&  r%   rt   g      @rZ   r   r   r   )r+   rv   r$   get_minr   
remove_minchange_value)valuesheappairr3   r3   r4   	test_HeapD  s.   r.  r  )Qnumpyr+   numpy.testingr   r   r   r   r  r   r.   scipy.cluster.hierarchyrV   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"   scipy.spatial.distancer#   scipy.cluster._hierarchyr$    r&   
matplotlibusematplotlib.pyplotpyplotr  r  	Exceptionr)   rm   ry   r   r   r   r   r   r   r  r.  r<  rG  rW  rn  rz  r  r  rq  r  r	  r
  r  r  r  r$  ri   r.  r3   r3   r3   r4   <module>   s\   !x
72JMG#4H$> 6
