
    xf+                        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- 	 d dl.Z. e.j^                  d	       d dl0m1Z2 d
Z3 G d d      Z5 G d d      Z6 G d d      Z7 G d d      Z8 G d d      Z9 G d d      Z: G d d      Z; G d d      Z< G d d      Z= G d d      Z> G d  d!      Z? G d" d#      Z@ G d$ d%      ZA G d& d'      ZB G d( d)      ZC G d* d+      ZD G d, d-      ZE G d. d/      ZFd0 ZGd9d1ZHd2 ZId3 ZJd4 ZKd5 ZLd6 ZMd7 ZNd8 ZOy# e4$ r dZ3Y w xY w):    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                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestLinkagec                 ~    t        j                  d      }t         j                  |d<   t        t        t
        |       y )N)   r   )npzerosnanassert_raises
ValueErrorr	   selfys     D/usr/lib/python3/dist-packages/scipy/cluster/tests/test_hierarchy.py3test_linkage_non_finite_elements_in_distance_matrixz?TestLinkage.test_linkage_non_finite_elements_in_distance_matrixD   s*     HHTNvv!j'1-    c                 X    t        j                  d      }t        t        t        |       y )Nr   )r-   r.   r0   r1   r	   r2   s     r5   "test_linkage_empty_distance_matrixz.TestLinkage.test_linkage_empty_distance_matrixK   s    HHTNj'1-r7   c                 4    dD ]  }| j                  |        y )N)r   completeaverageweighted)check_linkage_tdistr3   methods     r5   test_linkage_tdistzTestLinkage.test_linkage_tdistP   s    C 	-F$$V,	-r7   c                 z    t        t        j                  |      }t        t        d|z         }t	        ||d       y )Nlinkage_ytdist_绽|=atolr	   r'   ytdistgetattrr   )r3   rA   Z	expectedZs       r5   r?   zTestLinkage.check_linkage_tdistT   s4    '..7/1BV1KL	951r7   c                 4    dD ]  }| j                  |        y )N)centroidmedianward)check_linkage_qr@   s     r5   test_linkage_XzTestLinkage.test_linkage_XZ   s    4 	)F  (	)r7   c                     t        t        j                  |      }t        t        d|z         }t	        ||d       t
        j                  j                  j                  t        j                  d      }t        ||      }t	        ||d       y )N
linkage_X_ư>rF   	euclidean)metric)	r	   r'   XrJ   r   scipyspatialdistancer$   )r3   rA   rK   rL   r4   s        r5   rQ   zTestLinkage.check_linkage_q^   sv    '))62/1FG	951MM""(()<)>)>0; ) =Av951r7   c                    t         j                  j                  d      }d}|j                  |d      }t	        |      }t        j                         D ]7  \  }}t        j                  |||      }t        ||      }t        ||dd       9 y )Nr         g+=V瞯<)rtolrG   )
r-   randomRandomStaterandr$   r#   itemsr"   r	   r   )	r3   rngnrX   drA   code	Z_trivialrK   s	            r5   test_compare_with_trivialz%TestLinkage.test_compare_with_triviali   s    ii##A&HHQN!H,224 	BLFD"**1a6I6"AIqu5A	Br7   c                 v    t        t        j                  d      }t        t        d      }t	        ||d       y )NT)optimal_orderinglinkage_ytdist_single_olorE   rF   rH   )r3   rK   rL   s      r5   test_optimal_leaf_orderingz&TestLinkage.test_optimal_leaf_orderingt   s/    '..F/1LM	951r7   N)__name__
__module____qualname__r6   r:   rB   r?   rR   rQ   rj   rn    r7   r5   r*   r*   C   s+    ..
-2)	2	B2r7   r*   c                   `   e Zd Z ej                  g dg dg       ej                  g dg dg       ej                  g dg dg       ej                  g dg dg       ej                  g dg dg       ej                  g dg dg       ej                  g dg dg      dZd Zd Zy	)
TestLinkageTies)r   r&   'e?r^   )r^      ru   rv   )r^   rv   g'e@rv   )r^   rv   gev @rv   )r^   rv   g@rv   r   r<   r=   r>   rN   rO   rP   c                 4    dD ]  }| j                  |        y Nrw   )check_linkage_tiesr@   s     r5   test_linkage_tiesz!TestLinkageTies.test_linkage_ties   s    a 	,F##F+	,r7   c                     t        j                  ddgddgddgg      }t        ||      }| j                  |   }t	        ||d       y )Nr   r&   rA   rU   rF   )r-   arrayr	   _expectationsr   )r3   rA   rX   rK   rL   s        r5   rz   z"TestLinkageTies.check_linkage_ties   sK    HHr2hAA/0Af%&&v.	951r7   N)ro   rp   rq   r-   r   r   r{   rz   rr   r7   r5   rt   rt   z   s    "((113 4BHH335 6288224 5BHH335 6BHH335 6"((113 4//1 2M",2r7   rt   c                       e Zd Zd Zd Zy)TestInconsistentc                 P    t         j                  D ]  }| j                  |        y N)r'   inconsistent_ytdistcheck_inconsistent_tdist)r3   depths     r5   test_inconsistent_tdistz(TestInconsistent.test_inconsistent_tdist   s%    (<< 	1E))%0	1r7   c                 r    t         j                  }t        t        ||      t         j                  |          y r   )r'   linkage_ytdist_singler   r   r   )r3   r   rK   s      r5   r   z)TestInconsistent.check_inconsistent_tdist   s-    55Q.+??F	Hr7   N)ro   rp   rq   r   r   rr   r7   r5   r   r      s    1Hr7   r   c                       e Zd Zd Zd Zy)TestCopheneticDistancec                     t        j                  g d      }t        j                  }t	        |      }t        ||d       y )N  '     r   r   r   r   r   r   r   r         r   r   rE   rF   )r-   r   r'   r   r   r   )r3   	expectedMrK   Ms       r5   test_linkage_cophenet_tdist_Zz4TestCopheneticDistance.test_linkage_cophenet_tdist_Z   s5    HH 7 8	55QK951r7   c                     t         j                  }t        |t         j                        \  }}t	        j
                  g d      }d}t        ||d       t        ||d       y )Nr   g*ɻ2Qz?rE   rF   )r'   r   r   rI   r-   r   r   )r3   rK   cr   r   	expectedcs         r5   test_linkage_cophenet_tdist_Z_Yz6TestCopheneticDistance.test_linkage_cophenet_tdist_Z_Y   sT    55!0778AHH 7 8	4	951951r7   N)ro   rp   rq   r   r   rr   r7   r5   r   r      s    22r7   r   c                       e Zd Zd Zd Zd Zy)TestMLabLinkageConversionc                     t        j                  g       }t        t        g       |       t        t	        g       |       y r   r-   asarrayr   r
   r   )r3   rX   s     r5   "test_mlab_linkage_conversion_emptyz<TestMLabLinkageConversion.test_mlab_linkage_conversion_empty   s.    JJrN&r*A._R(!,r7   c                     t        j                  g dg      }g dg}t        t        |      |       t        t	        |      |       y )N)              ?      @       @r&   r^   rv   r   )r3   rK   Zms      r5   'test_mlab_linkage_conversion_single_rowzATestMLabLinkageConversion.test_mlab_linkage_conversion_single_row   s:    JJ()*[&r*A._Q',r7   c                    t        j                  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                        }t	        t        |      |       t	        t        |      |       y )N)rv   r,   r   )      r   )r&      r   )r^   	   r   )   
   r   )r         @     @a@r   )r         @     `k@r   )r   g      @     o@r   )r   g       @     p@r   )      @g      "@     pr@r   dtype)r-   r   r   doubler   r
   r   )r3   r   rK   s      r5   *test_mlab_linkage_conversion_multiple_rowszDTestMLabLinkageConversion.test_mlab_linkage_conversion_multiple_rows   sn    ZZk$k<A BHH(((((	*
 II' 	&r*A._Q',r7   N)ro   rp   rq   r   r   r   rr   r7   r5   r   r      s    ---r7   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestFclusterc                     t         j                  D ]  }| j                  |d        t         j                  D ]  }| j                  |d        t         j                  D ]  }| j                  |d        y Nr   r[   maxclust)r'   fcluster_inconsistentcheck_fclusterdatafcluster_distancefcluster_maxclustr3   ts     r5   test_fclusterdatazTestFcluster.test_fclusterdata   sq    $:: 	7A##A~6	7$66 	3A##Az2	3$66 	3A##Az2	3r7   c                     t        t        d|z         |   }t        j                  }t        |||      }t	        t        ||             y N	fcluster_	criterionr   )rJ   r'   Q_Xr   r   r   )r3   r   r   	expectedTrX   Ts         r5   r   zTestFcluster.check_fclusterdata   sA    /y1HI!L	##i15a+,r7   c                     t         j                  D ]  }| j                  |d        t         j                  D ]  }| j                  |d        t         j                  D ]  }| j                  |d        y r   )r'   r   check_fclusterr   r   r   s     r5   test_fclusterzTestFcluster.test_fcluster   sq    $:: 	3A>2	3$66 	/A:.	/$66 	/A:.	/r7   c                     t        t        d|z         |   }t        t        j                        }t	        |||      }t        t        ||             y r   )rJ   r'   r   r   r   r   r   )r3   r   r   r   rK   r   s         r5   r   zTestFcluster.check_fcluster   sG    /y1HI!L	&**+Q)q1a+,r7   c                     t         j                  D ]  }| j                  |        t         j                  D ]  }| j	                  |        y r   )r'   r   check_fcluster_monocritr    check_fcluster_maxclust_monocritr   s     r5   test_fcluster_monocritz#TestFcluster.test_fcluster_monocrit   sH    $66 	,A((+	,$66 	5A11!4	5r7   c                     t         j                  |   }t        t         j                        }t	        ||dt        |            }t        t        ||             y )Nmonocritr   r   )r'   r   r   r   r   r   r   r   r3   r   r   rK   r   s        r5   r   z$TestFcluster.check_fcluster_monocrit   sF    '99!<	&**+QZ(1+Fa+,r7   c                     t         j                  |   }t        t         j                        }t	        ||dt        |            }t        t        ||             y )Nmaxclust_monocritr   )r'   r   r   r   r   r   r   r   r   s        r5   r   z-TestFcluster.check_fcluster_maxclust_monocrit   sG    '99!<	&**+Q%88A;Oa+,r7   N)
ro   rp   rq   r   r   r   r   r   r   r   rr   r7   r5   r   r      s%    3-/-5--r7   r   c                       e Zd Zd Zy)TestLeadersc                     t         j                  }t        |      }t        |      }t	        |dd      }t        j                  g d      t        j                  g d      f}t        ||      }t        ||       y )Nr   rv   r   )5   7   8   )r^   rv   r&   )	r'   r   r$   r	   r   r-   r   r   r   )r3   rX   YrK   r   LrightLs          r5   test_leaders_singlezTestLeaders.test_leaders_single  s^    ##!HAJQ*2((<("((9*=>AqMQr7   N)ro   rp   rq   r   rr   r7   r5   r   r     s     r7   r   c                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zdd
Zy)TestIsIsomorphicc                 h    g d}g d}t        t        ||             t        t        ||             y )Nr&   r&   r&   )r^   r^   r^   r   r   r3   abs      r5   test_is_isomorphic_1z%TestIsIsomorphic.test_is_isomorphic_1  *    a#$a#$r7   c                 h    g d}g d}t        t        ||             t        t        ||             y )N)r&   r   r&   )r^   rv   r^   r   r   s      r5   test_is_isomorphic_2z%TestIsIsomorphic.test_is_isomorphic_2  r   r7   c                 6    g }g }t        t        ||             y r   r   r   s      r5   test_is_isomorphic_3z%TestIsIsomorphic.test_is_isomorphic_3  s    a#$r7   c                 h    g d}g d}t        t        ||             t        t        ||             y )Nr   )r&   rv   r^   r   r   s      r5   test_is_isomorphic_4Az&TestIsIsomorphic.test_is_isomorphic_4A%  r   r7   c                 p    g d}g d}t        t        ||      du        t        t        ||      du        y )N)r&   r^   rv   rv   )r&   rv   r^   rv   Fr   r   s      r5   test_is_isomorphic_4Bz&TestIsIsomorphic.test_is_isomorphic_4B,  s4    a#u,-a#u,-r7   c                 h    g d}g d}t        t        ||             t        t        ||             y )N)r   r^   rv   )r,   rv   r^   r   r   s      r5   test_is_isomorphic_4Cz&TestIsIsomorphic.test_is_isomorphic_4C3  r   r7   c                 6    dD ]  }| j                  d|        y )Nr^   rv   r     help_is_isomorphic_randpermr3   ncs     r5   test_is_isomorphic_5z%TestIsIsomorphic.test_is_isomorphic_5:  s#      	7B,,T26	7r7   c                 :    dD ]  }| j                  d|dd        y )Nr   r   Tr   r   r  s     r5   test_is_isomorphic_6z%TestIsIsomorphic.test_is_isomorphic_6@  s)      	@B,,T2tQ?	@r7   c                 8    t        t        g dg d              y )Nr   r   r   )r3   s    r5   test_is_isomorphic_7z%TestIsIsomorphic.test_is_isomorphic_7G  s    M)Y778r7   c                 f   t        d      D ]"  }t        j                  t        j                  j	                  |      |z        }t        j
                  |j                  t        j                        }t        j                  j                  |      }t        d|j                  d         D ]  }	|||	      ||	<    |r?t        j                  j                  |      }
||
d| xx   dz  cc<   ||
d| xx   |z  cc<   t        t        ||      | k(         t        t        ||      | k(         % y )Nrv   r   r   r&   )ranger-   int_ra   rc   r.   sizepermutationshaper   r   )r3   nobs	nclustersnonisonerrorskr   r   PiQs              r5   r   z,TestIsIsomorphic.help_is_isomorphic_randpermK  s    q 	9A		t,y89Arww/A		%%i0A1aggaj) 1w!II))$/!Ag,1$!Ag,9,M!Q'J78M!Q'J78	9r7   N)Fr   )ro   rp   rq   r   r   r   r   r   r   r  r  r  r   rr   r7   r5   r   r     s5    %%%%.%7@99r7   r   c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestIsValidLinkagec                 @    dD ]  \  }}}| j                  |||        y N))r^   r   F)r^   rv   F)r&   r   T)r^   r   T)#check_is_valid_linkage_various_sizer3   nrowncolvalids       r5   "test_is_valid_linkage_various_sizez5TestIsValidLinkage.test_is_valid_linkage_various_size[  s.    "> 	HD$44T4G	Hr7   c                     t        j                  g dg dgt         j                        }|d |d |f   }t        t	        |      |k(         |st        t        t        |d       y y N)r   r&   r   r^   r   )rv   r^   r   rv   rv   r   Tthrow)r-   r   r   r   r   r0   r1   )r3   r  r  r  rK   s        r5   r  z6TestIsValidLinkage.check_is_valid_linkage_various_size`  sa    JJ))+24))=eteUdUlO #u,-*&6F r7   c                     t        j                  g dg dgt              }t        t	        |      du        t        t        t        |d       y Nr   r&   r   r^   rv   r^   r   rv   r   FTr"  )r-   r   intr   r   r0   	TypeErrorr3   rK   s     r5   test_is_valid_linkage_int_typez1TestIsValidLinkage.test_is_valid_linkage_int_typei  s?    JJ&(/24 #u,-i!11DAr7   c                     t        j                  dt         j                        }t        t	        |      du        t        t        t        |d       y Nr   r   r   FTr"  )r-   r.   r   r   r   r0   r1   r*  s     r5   test_is_valid_linkage_emptyz.TestIsValidLinkage.test_is_valid_linkage_emptyp  s8    HHV299- #u,-j"2ATBr7   c                     t        ddd      D ]K  }t        j                  j                  ||dz
  z  dz        }t	        |      }t        t        |      du        M y Nr      rv   r&   r^   T)r	  r-   ra   rc   r	   r   r   r3   r  r4   rK   s       r5   test_is_valid_linkage_4_and_upz1TestIsValidLinkage.test_is_valid_linkage_4_and_upv  sU     q"a 	1A		q!A#wz*A
A$Q'4/0	1r7   c                     t        ddd      D ]l  }t        j                  j                  ||dz
  z  dz        }t	        |      }d||dz  df<   t        t        |      du        t        t        t        |d	
       n y )Nr   r2  rv   r&   r^   r   FTr"  	r	  r-   ra   rc   r	   r   r   r0   r1   r3  s       r5   -test_is_valid_linkage_4_and_up_neg_index_leftz@TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_left~  w     q"a 	GA		q!A#wz*A
AAad1fI$Q'501*&6F	Gr7   c                     t        ddd      D ]l  }t        j                  j                  ||dz
  z  dz        }t	        |      }d||dz  df<   t        t        |      du        t        t        t        |d	       n y 
Nr   r2  rv   r&   r^   r6  FTr"  r7  r3  s       r5   .test_is_valid_linkage_4_and_up_neg_index_rightzATestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_right  r9  r7   c                     t        ddd      D ]l  }t        j                  j                  ||dz
  z  dz        }t	        |      }d||dz  df<   t        t        |      du        t        t        t        |d	       n y 
Nr   r2  rv   r&   r^   g      FTr"  r7  r3  s       r5   'test_is_valid_linkage_4_and_up_neg_distz:TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_dist  sw     q"a 	GA		q!A#wz*A
AAad1fI$Q'501*&6F	Gr7   c                     t        ddd      D ]l  }t        j                  j                  ||dz
  z  dz        }t	        |      }d||dz  df<   t        t        |      du        t        t        t        |d	       n y r;  r7  r3  s       r5   )test_is_valid_linkage_4_and_up_neg_countsz<TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_counts  r9  r7   N)ro   rp   rq   r  r  r+  r/  r4  r8  r<  r?  rA  rr   r7   r5   r  r  Z  s7    H
GBC1GGGGr7   r  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestIsValidInconsistentc                     t        j                  g dg dgt              }t        t	        |      du        t        t        t        |d       y r%  )r-   r   r(  r   r   r0   r)  r3   Rs     r5   test_is_valid_im_int_typez1TestIsValidInconsistent.test_is_valid_im_int_type  s<    JJ&(/24A%'(iat<r7   c                 @    dD ]  \  }}}| j                  |||        y r  )check_is_valid_im_various_sizer  s       r5   test_is_valid_im_various_sizez5TestIsValidInconsistent.test_is_valid_im_various_size  s.    "> 	CD$//dEB	Cr7   c                     t        j                  g dg dgt         j                        }|d |d |f   }t        t	        |      |k(         |st        t        t        |d       y y r!  )r-   r   r   r   r   r0   r1   )r3   r  r  r  rF  s        r5   rI  z6TestIsValidInconsistent.check_is_valid_im_various_size  s^    JJ))+24))=eteUdUlOA%'(*k1DA r7   c                     t        j                  dt         j                        }t        t	        |      du        t        t        t        |d       y r-  )r-   r.   r   r   r   r0   r1   rE  s     r5   test_is_valid_im_emptyz.TestIsValidInconsistent.test_is_valid_im_empty  s5    HHV299-A%'(j+q=r7   c                     t        ddd      D ]V  }t        j                  j                  ||dz
  z  dz        }t	        |      }t        |      }t        t        |      du        X y r1  )r	  r-   ra   rc   r	   r   r   r   r3   r  r4   rK   rF  s        r5   test_is_valid_im_4_and_upz1TestIsValidInconsistent.test_is_valid_im_4_and_up  s\     q"a 	,A		q!A#wz*A
AQAKNd*+		,r7   c                    t        ddd      D ]w  }t        j                  j                  ||dz
  z  dz        }t	        |      }t        |      }d||dz  df<   t        t        |      du        t        t        t        |d	
       y y )Nr   r2  rv   r&   r^          r   FTr"  
r	  r-   ra   rc   r	   r   r   r   r0   r1   rO  s        r5   (test_is_valid_im_4_and_up_neg_index_leftz@TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_left  }     q"a 	BA		q!A#wz*A
AQAAad1fIKNe+,*k1DA	Br7   c                    t        ddd      D ]w  }t        j                  j                  ||dz
  z  dz        }t	        |      }t        |      }d||dz  df<   t        t        |      du        t        t        t        |d	       y y )
Nr   r2  rv   r&   r^   rR  FTr"  rS  rO  s        r5   )test_is_valid_im_4_and_up_neg_index_rightzATestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_right  rU  r7   c                    t        ddd      D ]w  }t        j                  j                  ||dz
  z  dz        }t	        |      }t        |      }d||dz  df<   t        t        |      du        t        t        t        |d	       y y r>  rS  rO  s        r5   "test_is_valid_im_4_and_up_neg_distz:TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_dist  rU  r7   N)ro   rp   rq   rG  rJ  rI  rM  rP  rT  rW  rY  rr   r7   r5   rC  rC    s/    =C
B>,	B	B	Br7   rC  c                   $    e Zd Zd Zd Zd Zd Zy)TestNumObsLinkagec                 x    t        j                  dt         j                        }t        t        t
        |       y Nr.  r   )r-   r.   r   r0   r1   r   r*  s     r5   test_num_obs_linkage_emptyz,TestNumObsLinkage.test_num_obs_linkage_empty  s"    HHV299-j/15r7   c                 ~    t        j                  g dgt         j                        }t        t	        |      d       y )Nr&  r   r^   r-   r   r   r   r   r*  s     r5   test_num_obs_linkage_1x4z*TestNumObsLinkage.test_num_obs_linkage_1x4  s(    JJ'ryy9_Q'+r7   c                     t        j                  g dg dgt         j                        }t        t	        |      d       y )Nr&  r'  r   rv   r`  r*  s     r5   test_num_obs_linkage_2x4z*TestNumObsLinkage.test_num_obs_linkage_2x4  s0    JJ&(/1yy:_Q'+r7   c                     t        ddd      D ]J  }t        j                  j                  ||dz
  z  dz        }t	        |      }t        t        |      |       L y )Nr   r2  rv   r&   r^   )r	  r-   ra   rc   r	   r   r   r3  s       r5   test_num_obs_linkage_4_and_upz/TestNumObsLinkage.test_num_obs_linkage_4_and_up  sQ     q"a 	0A		q!A#wz*A
A+Q/	0r7   N)ro   rp   rq   r^  ra  rc  re  rr   r7   r5   r[  r[    s    6
,
,0r7   r[  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestLeavesListc                     t        j                  g dgt         j                        }t        |       t	        t        |      ddg       y )Nr&  r   r   r&   r-   r   r   r   r   r   r*  s     r5   test_leaves_list_1x4z#TestLeavesList.test_leaves_list_1x4	  s2    JJ'ryy9
[^aV,r7   c                     t        j                  g dg dgt         j                        }t        |       t	        t        |      g d       y )Nr&  r'  r   )r   r&   r^   ri  r*  s     r5   test_leaves_list_2x4z#TestLeavesList.test_leaves_list_2x4  s6    JJ&(/1yy:
[^Y/r7   c                 4    dD ]  }| j                  |        y ry   )check_leaves_list_Qr@   s     r5   test_leaves_list_Qz!TestLeavesList.test_leaves_list_Q  s!    ) 	-F$$V,	-r7   c                     t         j                  }t        ||      }t        |      }t	        |j                         t        |             y r   )r'   r   r	   r   r   	pre_orderr   )r3   rA   rX   rK   nodes        r5   rn  z"TestLeavesList.check_leaves_list_Q  s7    ##AvqzT^^%{1~6r7   c                     t         j                  }t        |d      }t        |      }t	        |j                         |j                         j                         |j                         j                         z          y )Nr   )r'   r   r	   r   r   rq  get_left	get_right)r3   rX   rK   rr  s       r5   test_Q_subtree_pre_orderz'TestLeavesList.test_Q_subtree_pre_order"  s^    ##Ax qzT^^%(A(A(C*...*:*D*D*F)G 	Ir7   N)ro   rp   rq   rj  rl  ro  rn  rv  rr   r7   r5   rg  rg    s    -0-
7Ir7   rg  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestCorrespondc                     t        j                  d      }t        j                  d      }t        t        t        ||       y )Nr9   r.  )r-   r.   r0   r1   r   )r3   r4   rK   s      r5   test_correspond_emptyz$TestCorrespond.test_correspond_empty,  s*    HHTNHHUOj*a3r7   c                 j   t        dd      D ]J  }t        j                  j                  ||dz
  z  dz        }t	        |      }t        t        ||             L t        ddd      D ]J  }t        j                  j                  ||dz
  z  dz        }t	        |      }t        t        ||             L y )Nr^   r   r&   r2  rv   )r	  r-   ra   rc   r	   r   r   r3  s       r5   test_correspond_2_and_upz'TestCorrespond.test_correspond_2_and_up2  s     q! 	&A		q!A#wz*A
AJq!$%	& q"a 	&A		q!A#wz*A
AJq!$%	&r7   c                 &   t        t        t        t        dd            t        t        dd                        t        t        t        t        dd            t        t        dd                        z   D ]  \  }}t        j                  j                  ||dz
  z  dz        }t        j                  j                  ||dz
  z  dz        }t        |      }t        |      }t        t        ||      d       t        t        ||      d        y )Nr^   r   rv   r   r&   F	listzipr	  r-   ra   rc   r	   r   r   r3   r  jr4   y2rK   Z2s          r5   test_correspond_4_and_upz'TestCorrespond.test_correspond_4_and_up>  s     CU1a[ 14a3DEFCU1a[ 14a3DEFG 	3FQ		q!A#wz*A1Q3
+B
ABAr*E2B*E2	3r7   c                 &   t        t        t        t        dd            t        t        dd                        t        t        t        t        dd            t        t        dd                        z   D ]  \  }}t        j                  j                  ||dz
  z  dz        }t        j                  j                  ||dz
  z  dz        }t        |      }t        |      }t        t        ||      d       t        t        ||      d        y )Nr^   r         r&   Fr~  r  s          r5   test_correspond_4_and_up_2z)TestCorrespond.test_correspond_4_and_up_2J  s     CU1a[ 14b"3FGHCU1a[ 14b"3FGHI 	3FQ		q!A#wz*A1Q3
+B
ABAr*E2B*E2	3r7   c                     t        dd      D ]M  }t        j                  j                  |d      }t	        |      }t        |      }t        t        |      |       O y )Nr^   r   r   )r	  r-   ra   rc   r$   r	   r   r   )r3   rf   rX   r   rK   s        r5   !test_num_obs_linkage_multi_matrixz0TestCorrespond.test_num_obs_linkage_multi_matrixV  sL    q" 	0A		q!$AaA
A+Q/		0r7   N)ro   rp   rq   rz  r|  r  r  r  rr   r7   r5   rx  rx  +  s    4
&
3
30r7   rx  c                   N    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestIsMonotonicc                 X    t        j                  d      }t        t        t        |       y )Nr.  )r-   r.   r0   r1   r   r*  s     r5   test_is_monotonic_emptyz'TestIsMonotonic.test_is_monotonic_empty`  s    HHVj,2r7   c                 ~    t        j                  g dgt         j                        }t        t	        |      d       y )Nr   r&   333333?r^   r   Tr-   r   r   r   r   r*  s     r5   test_is_monotonic_1x4z%TestIsMonotonic.test_is_monotonic_1x4e  s'    JJ'ryy9\!_d+r7   c                     t        j                  g dg dgt         j                        }t        t	        |      d       y )Nr  )r^   rv   皙?rv   r   Tr  r*  s     r5   test_is_monotonic_2x4_Tz'TestIsMonotonic.test_is_monotonic_2x4_Tj  s/    JJ&(/1yy:\!_d+r7   c                     t        j                  g dg dgt         j                        }t        t	        |      d       y )N)r   r&   r  r^   )r^   rv   r  rv   r   Fr  r*  s     r5   test_is_monotonic_2x4_Fz'TestIsMonotonic.test_is_monotonic_2x4_Fp  s/    JJ&(/1yy:\!_e,r7   c                     t        j                  g dg dg dgt         j                        }t        t	        |      d       y )Nr  r^   rv   r  r^   r   r   g333333?r   r   Tr  r*  s     r5   test_is_monotonic_3x4_Tz'TestIsMonotonic.test_is_monotonic_3x4_Tv  s4    JJ&&(/1yy: 	\!_d+r7   c                     t        j                  g dg dg dgt         j                        }t        t	        |      d       y )Nr  )r^   rv   皙?r^   r  r   Fr  r*  s     r5   test_is_monotonic_3x4_F1z(TestIsMonotonic.test_is_monotonic_3x4_F1}  4    JJ&&(/1yy: 	\!_e,r7   c                     t        j                  g dg dg dgt         j                        }t        t	        |      d       y )N)r   r&   g?r^   r  r  r   Fr  r*  s     r5   test_is_monotonic_3x4_F2z(TestIsMonotonic.test_is_monotonic_3x4_F2  r  r7   c                     t        j                  g dg dg dgt         j                        }t        t	        |      d       y )Nr  r  )r   r   r  r   r   Fr  r*  s     r5   test_is_monotonic_3x4_F3z(TestIsMonotonic.test_is_monotonic_3x4_F3  r  r7   c                 b    t        t        j                  d      }t        t	        |      d       y Nr   Tr	   r'   rI   r   r   r*  s     r5    test_is_monotonic_tdist_linkage1z0TestIsMonotonic.test_is_monotonic_tdist_linkage1  s%     '..9\!_d+r7   c                 l    t        t        j                  d      }d|d<   t        t	        |      d       y )Nr   r   )r^   r^   Fr  r*  s     r5    test_is_monotonic_tdist_linkage2z0TestIsMonotonic.test_is_monotonic_tdist_linkage2  s.     '..9#\!_e,r7   c                 f    t         j                  }t        |d      }t        t	        |      d       y r  )r'   r   r	   r   r   )r3   rX   rK   s      r5   test_is_monotonic_Q_linkagez+TestIsMonotonic.test_is_monotonic_Q_linkage  s)      ##Ax \!_d+r7   N)ro   rp   rq   r  r  r  r  r  r  r  r  r  r  r  rr   r7   r5   r  r  _  s9    3
,
,-,---,-,r7   r  c                   $    e Zd Zd Zd Zd Zd Zy)TestMaxDistsc                 x    t        j                  dt         j                        }t        t        t
        |       y r]  )r-   r.   r   r0   r1   r   r*  s     r5   test_maxdists_empty_linkagez(TestMaxDists.test_maxdists_empty_linkage  s"    HHV299-j(A.r7   c                     t        j                  g dgt         j                        }t        |      }t	        |      }t        ||d       y )Nr   r&   r  r   r   r_   rF   )r-   r   r   r   calculate_maximum_distancesr   )r3   rK   MD
expectedMDs       r5   !test_maxdists_one_cluster_linkagez.TestMaxDists.test_maxdists_one_cluster_linkage  s8    JJ'ryy9a[03
JU3r7   c                 4    dD ]  }| j                  |        y Nr   r<   rP   rN   rO   )check_maxdists_Q_linkager@   s     r5   test_maxdists_Q_linkagez$TestMaxDists.test_maxdists_Q_linkage  s    J 	2F))&1	2r7   c                     t         j                  }t        ||      }t        |      }t	        |      }t        ||d       y Nr_   rF   )r'   r   r	   r   r  r   )r3   rA   rX   rK   r  r  s         r5   r  z%TestMaxDists.check_maxdists_Q_linkage  s8    ##Ava[03
JU3r7   N)ro   rp   rq   r  r  r  r  rr   r7   r5   r  r    s    /
424r7   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestMaxInconstsc                     t        j                  dt         j                        }t        j                  dt         j                        }t        t        t
        ||       y r]  )r-   r.   r   r0   r1   r   r3   rK   rF  s      r5   test_maxinconsts_empty_linkagez.TestMaxInconsts.test_maxinconsts_empty_linkage  s8    HHV299-HHV299-j+q!4r7   c                     t        j                  g dgt         j                        }t         j                  j	                  dd      }t        t        t        ||       y Nr  r   r^   r   )r-   r   r   ra   rc   r0   r1   r   r  s      r5   test_maxinconsts_difrow_linkagez/TestMaxInconsts.test_maxinconsts_difrow_linkage  s=     JJ'ryy9IINN1a j+q!4r7   c                     t        j                  g dgt         j                        }t        j                  g dgt         j                        }t        ||      }t	        ||      }t        ||d       y )Nr  r   r   r   r   r  r_   rF   )r-   r   r   r   !calculate_maximum_inconsistenciesr   )r3   rK   rF  r  r  s        r5   $test_maxinconsts_one_cluster_linkagez4TestMaxInconsts.test_maxinconsts_one_cluster_linkage  sT    JJ'ryy9JJ'ryy9A6q!<
JU3r7   c                 4    dD ]  }| j                  |        y r  )check_maxinconsts_Q_linkager@   s     r5   test_maxinconsts_Q_linkagez*TestMaxInconsts.test_maxinconsts_Q_linkage  s    J 	5F,,V4	5r7   c                     t         j                  }t        ||      }t        |      }t	        ||      }t        ||      }t        ||d       y r  )r'   r   r	   r   r   r  r   )r3   rA   rX   rK   rF  r  r  s          r5   r  z+TestMaxInconsts.check_maxinconsts_Q_linkage  sF    ##AvOA6q!<
JU3r7   N)ro   rp   rq   r  r  r  r  r  rr   r7   r5   r  r    s    55454r7   r  c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestMaxRStatc                 4    dD ]  }| j                  |        y )N)gffffff
@r}   r   )check_maxRstat_invalid_indexr3   r  s     r5   test_maxRstat_invalid_indexz(TestMaxRStat.test_maxRstat_invalid_index  s     	1A--a0	1r7   c                 "   t        j                  g dgt         j                        }t        j                  g dgt         j                        }t        |t              rt        t        t        |||       y t        t        t        |||       y )Nr  r   r  )	r-   r   r   
isinstancer(  r0   r1   r   r)  r3   r  rK   rF  s       r5   r  z)TestMaxRStat.check_maxRstat_invalid_index  sZ    JJ'ryy9JJ'ryy9a*h1a8)Xq!Q7r7   c                 F    t        d      D ]  }| j                  |        y Nr   )r	  check_maxRstat_empty_linkager  s     r5   test_maxRstat_empty_linkagez(TestMaxRStat.test_maxRstat_empty_linkage  s#    q 	1A--a0	1r7   c                     t        j                  dt         j                        }t        j                  dt         j                        }t        t        t
        |||       y r]  )r-   r.   r   r0   r1   r   r  s       r5   r  z)TestMaxRStat.check_maxRstat_empty_linkage  s:    HHV299-HHV299-j(Aq!4r7   c                 F    t        d      D ]  }| j                  |        y r  )r	  check_maxRstat_difrow_linkager  s     r5   test_maxRstat_difrow_linkagez)TestMaxRStat.test_maxRstat_difrow_linkage  s#    q 	2A..q1	2r7   c                     t        j                  g dgt         j                        }t         j                  j	                  dd      }t        t        t        |||       y r  )r-   r   r   ra   rc   r0   r1   r   r  s       r5   r  z*TestMaxRStat.check_maxRstat_difrow_linkage  s?     JJ'ryy9IINN1a j(Aq!4r7   c                 F    t        d      D ]  }| j                  |        y r  )r	  "check_maxRstat_one_cluster_linkager  s     r5   !test_maxRstat_one_cluster_linkagez.TestMaxRStat.test_maxRstat_one_cluster_linkage  s#    q 	7A33A6	7r7   c                     t        j                  g dgt         j                        }t        j                  g dgt         j                        }t        ||d      }t	        ||d      }t        ||d       y )Nr  r   r  r&   r_   rF   )r-   r   r   r   r  r   )r3   r  rK   rF  r  r  s         r5   r  z/TestMaxRStat.check_maxRstat_one_cluster_linkage  sX    JJ'ryy9JJ'ryy9aA6q!Q?
JU3r7   c                 V    dD ]$  }t        d      D ]  }| j                  ||        & y )Nr  r   )r	  check_maxRstat_Q_linkage)r3   rA   r  s      r5   test_maxRstat_Q_linkagez$TestMaxRStat.test_maxRstat_Q_linkage  s4    J 	9F1X 9--fa89	9r7   c                     t         j                  }t        ||      }t        |      }t	        ||d      }t        ||d      }t        ||d       y )Nr&   r_   rF   )r'   r   r	   r   r   r  r   )r3   rA   r  rX   rK   rF  r  r  s           r5   r  z%TestMaxRStat.check_maxRstat_Q_linkage  sJ    ##AvOaA6q!Q?
JU3r7   N)ro   rp   rq   r  r  r  r  r  r  r  r  r  r  rr   r7   r5   r  r    s4    181525749
4r7   r  c                      e Zd Zd Zd Zd Zej                  j                  e	 d      d        Z
ej                  j                  e	 d      d        Zd Zej                  j                  e	 d      d	        Zd
 Zd Zd Zy)TestDendrogramc                 x    t        t        j                  d      }t        |d      }|d   }t	        |g d       y )Nr   Tno_plotleavesr^   r   r&   r   rv   r   )r	   r'   rI   r   r   )r3   rK   rF  r  s       r5   $test_dendrogram_single_linkage_tdistz3TestDendrogram.test_dendrogram_single_linkage_tdist$  s5    '..9q$'8V/0r7   c                 f    t        t        j                  d      }t        t        t
        |d       y )Nr   fooorientation)r	   r'   rI   r0   r1   r   r*  s     r5   test_valid_orientationz%TestDendrogram.test_valid_orientation+  s#    '..9j*aUCr7   c                     t        t        j                  d      }t        j                  g d      }t        ||d      }t        ||j                         d      }||k(  sJ y )Nr   )r&   rv   r^   r,   r   r   T)labelsr  )r	   r'   rI   r-   r   r   tolist)r3   rK   r  result1result2s        r5   test_labels_as_array_or_listz+TestDendrogram.test_labels_as_array_or_list/  sT    '..9,-Qvt<Qv}}E'!!!r7   zno matplotlib)reasonc           	         t        j                  g dg dg dg      }t        j                          t	        j
                  t              5 }t        |t        t        d                   d d d        dt        j                        v sJ t	        j
                  t        d      5  t        |g        d d d        t        j                          y # 1 sw Y   hxY w# 1 sw Y   *xY w)N)r   r&   r   r   )r^   rv   r   r   )r   r   r   r,   d   )r  z.Dimensions of Z and labels must be consistent.)match)r-   r   pltfigurepytestr   r1   r   r  r	  strvalueclose)r3   linkexc_infos      r5   test_valid_label_sizez$TestDendrogram.test_valid_label_size7  s    xx
 
 	

]]:& 	6(tDs$45	6?hnn%& 	& & ]]FH 	( tB'	(
 				6 	6
	( 	(s    C(CCC(c                 4    dD ]  }| j                  |        y )N)topbottomleftright)check_dendrogram_plot)r3   r  s     r5   test_dendrogram_plotz#TestDendrogram.test_dendrogram_plotK  s    = 	4K&&{3	4r7   c                    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        j                         }|j                  d      }t        |||      }t        ||       t        |||dd       |dv r|j                         d   n|j                         d   }t        |j                         d       t        |j                         d       t        |||d       |dv r|j                         d   n|j                         d   }t        |j                         d       t        |||d       |dv r|j                         d   n|j                         d   }t        |j                         d       t        j                          t        ||      }t        j                          t        ||       y )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  r]   Z   )r-  r  leaf_font_sizeleaf_rotation)r
  r  r   )r-  r  r0  )r-  r  r/  r  )r	   r'   rI   r   r  add_subplotr   r   get_xticklabelsget_yticklabelsget_rotationget_sizer  )	r3   r  rK   expectedfigr-  R1	testlabelR2s	            r5   r  z$TestDendrogram.check_dendrogram_plotP  s   '..9"@7799;	=
  67779	;
 :0)M  jjl__S! bk:R" 	1"$B	8 //  ###%a( 	
 	Y++-r2Y'')2.1!#	% //  ###%a( 	
 	Y++-r21"$	& //  ###%a( 	
 	Y'')2.		 {3		R"r7   c           
      j   t        t        j                  d      }t        |ddd      }t	        j
                          t        |dgg dgg dgd	d
gddgddgd       t        |ddd      }t	        j
                          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       y )Nr   r^   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       @@@rA  )r   r!  r"  r#  r>  )r^   r   r&   r   r   )r  r  r  r  r  )r	   r'   rI   r   r   r  r   r  s      r5   test_dendrogram_truncate_modez,TestDendrogram.test_dendrogram_truncate_mode  s    '..9q!Wd;		Qv$<#=$:#;!&$%q6/3Tl 	 q!Wd;		Q'?$<$<$>$@$B %;$<$<$<$> !<#2.L 	r7   c                     t        t        j                  d      }t        g d       t	        |ddd      }t        g d       |d   }t        |g d	       t        d        y )
Nr   )r   mr4   r  Tg   )r  above_threshold_colorcolor_threshold)rE  rr   rD  r4   r  r'  )r   rD  rE  rE  rE  )r	   r'   rI   r   r   r   )r3   rK   rF  r'  s       r5   test_dendrogram_colorsz%TestDendrogram.test_dendrogram_colors  sY    '..934q$-0#G=>|_
Z!:; 	t$r7   c           	          t        j                  g dg dg dg dg dg dg      }t        |d      }t        |d      }g d}|d	   }t	        ||       y )
Nr&   r   r   r   r   r&   r   r^   r   r   r&   r   r   Tr  r  r  r  r  C2rQ  r+  r-   r   r	   r   r   r3   xzrg   
exp_colorscolorss         r5   %test_dendrogram_leaf_colors_zero_distz4TestDendrogram.test_dendrogram_leaf_colors_zero_dist  s\     HHi! " Ax q$'9
&'VZ(r7   c           	          t        j                  g dg dg dg dg dg dg      }t        |d      }t        |d      }g d	}|d
   }t	        ||       y )NrL  )r   r   g?rN  rM  rO  r   Tr  rP  r+  rR  rS  s         r5   test_dendrogram_leaf_colorsz*TestDendrogram.test_dendrogram_leaf_colors  s\     HHi!! " Ax q$'9
&'VZ(r7   N)ro   rp   rq   r  r  r  r  markskipifhave_matplotlibr  r  r  rB  rJ  rX  rZ  rr   r7   r5   r  r  #  s    1D" [[O+OD E& [[O+OD4 E4:#x [[O+OD E:%))r7   r  c                 r   | j                   d   dz   }t        j                  |dz
  f      }t        j                  d      }t        d|dz
        D ]d  }d|d d  | |df   }| |df   }||k\  r|t	        |      |z
     |d<   ||k\  r|t	        |      |z
     |d<   | |df   |d<   |j                         ||<   f |S Nr   r&   rv   r   r^   r  r-   r.   r	  r(  max)rK   rf   Bqr  r  r  s          r5   r  r        	
QA
!A#A
A1a!e_ 	!Aw!Q$19SY]#AaDA:SZ!^$AaDAw!uuw!	 Hr7   c                 r   | j                   d   dz   }t        j                  |dz
  f      }t        j                  d      }t        d|dz
        D ]d  }d|d d  | |df   }| |df   }||k\  r|t	        |      |z
     |d<   ||k\  r|t	        |      |z
     |d<   |||f   |d<   |j                         ||<   f |S r_  ra  )	rK   rF  r  rf   rc  rd  r  r  r  s	            r5   r  r    re  r7   c                  :    t        t        t        ddgddgg       y )Nr   r&   )r   r   r	   rr   r7   r5   <test_unsupported_uncondensed_distance_matrix_linkage_warningrh    s    Aq6Aq6*:;r7   c                      t         j                  j                  j                  D ]   } t	        t
        t        ddgddgg| d       " y )Nr&   	cityblockrA   rW   )rY   cluster	hierarchy_EUCLIDEAN_METHODSr0   r1   r	   r~   s    r5   "test_euclidean_linkage_value_errorro     sA    --))<< 9j'QFQF+;#K	99r7   c                  b    t        dgdd      } t        ddgddggdd      }t        | |       y )Nr&   r   rV   rk  r   )r	   r   )Z1r  s     r5   test_2x2_linkagerr    s7    	!Xk	:B	1a&1a&!(;	GBBr7   c                  "   t         j                  j                  d       d} t         j                  j                  | d      }t        j
                  j                  j                  |      }t        |      }t        ||j                         kD         t        |j                         |j                         kD         t        |j                         |j                         k(         t        |j                         |j                         k7         y )N   2   r   )r-   ra   seedrandnrY   rl  rm  rP   r   r   rt  ru  )r  rX   rK   trees       r5   test_node_comparery    s    IINN2D
		a A$$Q'A1:DD4==?"#DNNt}}./DNN 001DNN/0r7   c            	      j   t         j                  j                  d       d} t         j                  j                  | d      }t        j
                  j                  j                  |      }t        |      }t        |d d df   t        j                  |              t        |d d df   t        j                  |              t        |j                  d      t        j                  | dz
  dd             t        |d d dgf   t        |d	             t        |d d dd
gf   t        |ddg	             t        |d d d
dgf   t        |ddg	             t        |      }t        j                  |D cg c]  }|j                   c}      }t        |d d t        j                   |dg      f   t        |d             t        |d d t        j                   |ddg      f   t        |ddg             t        |d d t        j                   |ddg      f   t        |ddg             y c c}w )Nrt  ru  r   r   r}   r&   r   )
n_clustersir   )height)r-   ra   rv  rw  rY   rl  rm  rP   r   r   aranger.   rb  r!   r   distsearchsorted)r  rX   rK   cutreenodesrr  heightss          r5   test_cut_treer    s   IINN2D
		a A$$Q'Aa[F1ryy/2/A		$(B ;<B4(1";<B9%xq"g'FGC9%xr1g'FG"Ehhe4d		45G2??7QC889!A&(2??7QG<<=!QG,.2??7RG<<=!RG,. 5s   6H0c                  B   t        t        t        j                        t        j                        } t        j                  }t        | |d       t        t        t        j                  d      t        j                        } t        j                  }t        | |d       y )NrE   rF   rP   rU   )r    r	   r'   rI   rm   r   rX   linkage_X_ward_olo)rK   rL   s     r5   rn   rn   2  sv    g&9&@&@A188	:A#==IAyu- 	g&9&;&;VD133	5A#66IAyu-r7   c                     t        j                  g d      } t        |       }|j                         }t	        |d   d       t	        |d   d       |j                          |j                         }t	        |d   d       t	        |d   d       |j                  dd       |j                         }t	        |d   d	       t	        |d   d
       |j                          |j                          |j                  dd       |j                         }t	        |d   d       t	        |d   d       |j                          |j                         }t	        |d   d       t	        |d   d       y )N)r^   r}   r         rv   keyrv   r  r  r&   r}   g      @r^   r   r   r   )r-   r   r%   get_minr   
remove_minchange_value)valuesheappairs      r5   	test_Heapr  @  s%   XX)*F<D<<>Dea g%OO<<>Dea g#a<<>Dea g"OOOOa<<>Dea g"OO<<>Dea g#r7   r`  )Pnumpyr-   numpy.testingr   r   r   r   r  r   r0   scipy.cluster.hierarchyrY   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*   rt   r   r   r   r   r   r   r  rC  r[  rg  rx  r  r  r  r  r  r  r  rh  ro  rr  ry  r  rn   r  rr   r7   r5   <module>r     s  D  N N  * 7 7 7 7 7 7 7 7 ) ) !
JNN5#O
42 42n2 2:H H2 2(- -8/- /-d	  	 G9 G9TJG JGZDB DBN0 04 I  IF10 10hE, E,P4 44!4 !4H;4 ;4|r) r)j$$<9	1.4.$C   Os   .E E'&E'