
     hm                     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
Z3n# e4$ r dZ3Y nw xY w 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 ZGd;d2ZHd3 ZId4 ZJd5 ZKd6 ZLd7 ZMd8 ZNd9 ZOd: ZPdS )<    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
d	S )
TestLinkagec                     t          j        d          }t           j        |d<   t          t          t
          |           d S )N)   r   )npzerosnanassert_raises
ValueErrorr	   selfys     ^/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/cluster/tests/test_hierarchy.py3test_linkage_non_finite_elements_in_distance_matrixz?TestLinkage.test_linkage_non_finite_elements_in_distance_matrixD   s4     HTNNv!j'1-----    c                 d    t          j        d          }t          t          t          |           d S )Nr   )r-   r.   r0   r1   r	   r2   s     r5   "test_linkage_empty_distance_matrixz.TestLinkage.test_linkage_empty_distance_matrixK   s'    HTNNj'1-----r7   c                 :    dD ]}|                      |           d S )N)r   completeaverageweighted)check_linkage_tdistr3   methods     r5   test_linkage_tdistzTestLinkage.test_linkage_tdistP   s2    C 	- 	-F$$V,,,,	- 	-r7   c                     t          t          j        |          }t          t          d|z             }t	          ||d           d S )Nlinkage_ytdist_绽|=atolr	   r'   ytdistgetattrr   )r3   rA   Z	expectedZs       r5   r?   zTestLinkage.check_linkage_tdistT   sF    '.77/1BV1KLL	95111111r7   c                 :    dD ]}|                      |           d S )N)centroidmedianward)check_linkage_qr@   s     r5   test_linkage_XzTestLinkage.test_linkage_XZ   s2    4 	) 	)F  ((((	) 	)r7   c                 2   t          t          j        |          }t          t          d|z             }t	          ||d           t
          j        j                            t          j        d          }t          ||          }t	          ||d           d S )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^   s    ')622/1FGG	951111M"(()<)>0; ) = =Av95111111r7   c                 6   t           j                            d          }d}|                    |d          }t	          |          }t          j                    D ]>\  }}t          j        |||          }t          ||          }t          ||dd           ?d S )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    i##A&&HHQNN!HH,244 	B 	BLFD"*1a66I6""AIqu5AAAAA	B 	Br7   c                     t          t          j        d          }t          t          d          }t	          ||d           d S )NT)optimal_orderinglinkage_ytdist_single_olorE   rF   rH   )r3   rK   rL   s      r5   test_optimal_leaf_orderingz&TestLinkage.test_optimal_leaf_orderingt   sD    '.FFF/1LMM	95111111r7   N)__name__
__module____qualname__r6   r:   rB   r?   rR   rQ   rj   rn    r7   r5   r*   r*   C   s        . . .. . .
- - -2 2 2) ) )	2 	2 	2	B 	B 	B2 2 2 2 2r7   r*   c                   F   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d	S )
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                 :    dD ]}|                      |           d S Nrw   )check_linkage_tiesr@   s     r5   test_linkage_tiesz!TestLinkageTies.test_linkage_ties   s2    a 	, 	,F##F++++	, 	,r7   c                     t          j        ddgddgddgg          }t          ||          }| j        |         }t	          ||d           d S )Nr   r&   rA   rU   rF   )r-   arrayr	   _expectationsr   )r3   rA   rX   rK   rL   s        r5   rz   z"TestLinkageTies.check_linkage_ties   s^    Hr2hAA/00Af%%%&v.	95111111r7   N)ro   rp   rq   r-   r   r   r{   rz   rr   r7   r5   rt   rt   z   sV       "(1111113 4 4BH3333335 6 6282222224 5 5BH3333335 6 6BH3333335 6 6"(1111113 4 4//////1 2 2 M", , ,2 2 2 2 2r7   rt   c                       e Zd Zd Zd ZdS )TestInconsistentc                 N    t           j        D ]}|                     |           d S N)r'   inconsistent_ytdistcheck_inconsistent_tdist)r3   depths     r5   test_inconsistent_tdistz(TestInconsistent.test_inconsistent_tdist   s5    (< 	1 	1E))%0000	1 	1r7   c                 z    t           j        }t          t          ||          t           j        |                    d S r   )r'   linkage_ytdist_singler   r   r   )r3   r   rK   s      r5   r   z)TestInconsistent.check_inconsistent_tdist   sB    5Q..+?F	H 	H 	H 	H 	Hr7   N)ro   rp   rq   r   r   rr   r7   r5   r   r      s7        1 1 1H H H H Hr7   r   c                       e Zd Zd Zd ZdS )TestCopheneticDistancec                     t          j        g d          }t          j        }t	          |          }t          ||d           d S )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   sP    H 7 7 7 8 8	5QKK95111111r7   c                     t           j        }t          |t           j                  \  }}t	          j        g d          }d}t          ||d           t          ||d           d S )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   sv    5!0788AH 7 7 7 8 8	4	95111195111111r7   N)ro   rp   rq   r   r   rr   r7   r5   r   r      s2        2 2 22 2 2 2 2r7   r   c                        e Zd Zd Zd Zd ZdS )TestMLabLinkageConversionc                     t          j        g           }t          t          g           |           t          t	          g           |           d S r   r-   asarrayr   r
   r   )r3   rX   s     r5   "test_mlab_linkage_conversion_emptyz<TestMLabLinkageConversion.test_mlab_linkage_conversion_empty   sF    JrNN&r**A..._R((!,,,,,r7   c                     t          j        g dg          }g dg}t          t          |          |           t          t	          |          |           d S )N)              ?      @       @r&   r^   rv   r   )r3   rK   Zms      r5   'test_mlab_linkage_conversion_single_rowzATestMLabLinkageConversion.test_mlab_linkage_conversion_single_row   s]    J((()**ii[&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          |          |           d S )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   s    Zkkk$kkk<<<A B BH(((((((((((((((	*
 I' ' ' 	&r**A..._Q'',,,,,r7   N)ro   rp   rq   r   r   r   rr   r7   r5   r   r      sA        - - -- - -- - - - -r7   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestFclusterc                     t           j        D ]}|                     |d           t           j        D ]}|                     |d           t           j        D ]}|                     |d           d S Nr   r[   maxclust)r'   fcluster_inconsistentcheck_fclusterdatafcluster_distancefcluster_maxclustr3   ts     r5   test_fclusterdatazTestFcluster.test_fclusterdata   s    $: 	7 	7A##A~6666$6 	3 	3A##Az2222$6 	3 	3A##Az2222	3 	3r7   c                     t          t          d|z             |         }t          j        }t          |||          }t	          t          ||                     d S N	fcluster_	criterionr   )rJ   r'   Q_Xr   r   r   )r3   r   r   	expectedTrX   Ts         r5   r   zTestFcluster.check_fclusterdata   sV    /y1HII!L	#i1555a++,,,,,r7   c                     t           j        D ]}|                     |d           t           j        D ]}|                     |d           t           j        D ]}|                     |d           d S r   )r'   r   check_fclusterr   r   r   s     r5   test_fclusterzTestFcluster.test_fcluster   s    $: 	3 	3A>2222$6 	/ 	/A:....$6 	/ 	/A:....	/ 	/r7   c                     t          t          d|z             |         }t          t          j                  }t	          |||          }t          t          ||                     d S r   )rJ   r'   r   r   r   r   r   )r3   r   r   r   rK   r   s         r5   r   zTestFcluster.check_fcluster   s_    /y1HII!L	&*++Q)q111a++,,,,,r7   c                     t           j        D ]}|                     |           t           j        D ]}|                     |           d S r   )r'   r   check_fcluster_monocritr    check_fcluster_maxclust_monocritr   s     r5   test_fcluster_monocritz#TestFcluster.test_fcluster_monocrit   s^    $6 	, 	,A((++++$6 	5 	5A11!4444	5 	5r7   c                     t           j        |         }t          t           j                  }t	          ||dt          |                    }t          t          ||                     d S )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   sZ    '9!<	&*++QZ(1++FFFa++,,,,,r7   c                     t           j        |         }t          t           j                  }t	          ||dt          |                    }t          t          ||                     d S )Nmaxclust_monocritr   )r'   r   r   r   r   r   r   r   r   s        r5   r   z-TestFcluster.check_fcluster_maxclust_monocrit   s[    '9!<	&*++Q%88A;;OOOa++,,,,,r7   N)
ro   rp   rq   r   r   r   r   r   r   r   rr   r7   r5   r   r      s}        3 3 3- - -/ / /- - -5 5 5- - -- - - - -r7   r   c                       e Zd Zd ZdS )TestLeadersc                    t           j        }t          |          }t          |          }t	          |dd          }t          j        g d          t          j        g d          f}t          ||          }t          ||           d S )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}    #!HHAJJQ*222(<<<(("(999*=*=>AqMMQr7   N)ro   rp   rq   r   rr   r7   r5   r   r     s#                 r7   r   c                   L    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dS )TestIsIsomorphicc                     g d}g d}t          t          ||                     t          t          ||                     d S )Nr&   r&   r&   )r^   r^   r^   r   r   r3   abs      r5   test_is_isomorphic_1z%TestIsIsomorphic.test_is_isomorphic_1  J    IIIIa##$$$a##$$$$$r7   c                     g d}g d}t          t          ||                     t          t          ||                     d S )N)r&   r   r&   )r^   rv   r^   r   r   s      r5   test_is_isomorphic_2z%TestIsIsomorphic.test_is_isomorphic_2  r   r7   c                 H    g }g }t          t          ||                     d S r   r   r   s      r5   test_is_isomorphic_3z%TestIsIsomorphic.test_is_isomorphic_3  s*    a##$$$$$r7   c                     g d}g d}t          t          ||                     t          t          ||                     d S )Nr   )r&   rv   r^   r   r   s      r5   test_is_isomorphic_4Az&TestIsIsomorphic.test_is_isomorphic_4A%  r   r7   c                     g d}g d}t          t          ||          dk               t          t          ||          dk               d S )N)r&   r^   rv   rv   )r&   rv   r^   rv   Fr   r   s      r5   test_is_isomorphic_4Bz&TestIsIsomorphic.test_is_isomorphic_4B,  sT    LLLLa##u,---a##u,-----r7   c                     g d}g d}t          t          ||                     t          t          ||                     d S )N)r   r^   rv   )r,   rv   r^   r   r   s      r5   test_is_isomorphic_4Cz&TestIsIsomorphic.test_is_isomorphic_4C3  r   r7   c                 <    dD ]}|                      d|           d S )Nr^   rv   r     help_is_isomorphic_randpermr3   ncs     r5   test_is_isomorphic_5z%TestIsIsomorphic.test_is_isomorphic_5:  s6      	7 	7B,,T26666	7 	7r7   c                 @    dD ]}|                      d|dd           d S )Nr   r   Tr   r   r  s     r5   test_is_isomorphic_6z%TestIsIsomorphic.test_is_isomorphic_6@  s>      	@ 	@B,,T2tQ????	@ 	@r7   c                 J    t          t          g dg d                      d S )Nr   r   r   )r3   s    r5   test_is_isomorphic_7z%TestIsIsomorphic.test_is_isomorphic_7G  s+    M)))YYY77788888r7   Fr   c                    t          d          D ]?}t          j        t          j                            |          |z            }t          j        |j        t          j                  }t          j                            |          }t          d|j        d                   D ]}	|||	                  ||	<   |rOt          j                            |          }
||
d|         xx         dz  cc<   ||
d|         xx         |z  cc<   t          t          ||          | k               t          t          ||          | k               Ad S )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 	9 	9A	t,,y899Arw///A	%%i00A1agaj))  1w! -I))$//!AgI,1$!AgI,9,M!Q''J7888M!Q''J78888	9 	9r7   N)Fr   )ro   rp   rq   r   r   r   r   r   r   r  r  r  r   rr   r7   r5   r   r     s        % % %% % %% % %% % %. . .% % %7 7 7@ @ @9 9 99 9 9 9 9 9r7   r   c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestIsValidLinkagec                 F    dD ]\  }}}|                      |||           d S 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[  sC    "> 	H 	HD$44T4GGGG	H 	Hr7   c                     t          j        g dg dgt           j                  }|d |d |f         }t          t	          |          |k               |st          t          t          |d           d S d S 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`  s    J))))))+24)= = =eteUdUlO ##u,--- 	G*&6FFFFFF	G 	Gr7   c                     t          j        g dg dgt                    }t          t	          |          dk               t          t          t          |d           d S 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  sg    J&(/24 4 4 ##u,---i!11DAAAAAAr7   c                     t          j        dt           j                  }t          t	          |          dk               t          t          t          |d           d S 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  sR    HV29--- ##u,---j"2ATBBBBBBr7   c                     t          ddd          D ]Y}t          j                            ||dz
  z  dz            }t	          |          }t          t          |          dk               Zd S 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  sp     q"a 	1 	1A	q!A#wz**A

A$Q''4/0000	1 	1r7   c                 *   t          ddd          D ]}t          j                            ||dz
  z  dz            }t	          |          }d||dz  df<   t          t          |          dk               t          t          t          |d	
           d S )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~       q"a 	G 	GA	q!A#wz**A

AAad1fI$Q''50111*&6FFFFF	G 	Gr7   c                 *   t          ddd          D ]}t          j                            ||dz
  z  dz            }t	          |          }d||dz  df<   t          t          |          dk               t          t          t          |d	           d S 
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 ]}t          j                            ||dz
  z  dz            }t	          |          }d||dz  df<   t          t          |          dk               t          t          t          |d	           d S 
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  s     q"a 	G 	GA	q!A#wz**A

AAad1fI$Q''50111*&6FFFFF	G 	Gr7   c                 *   t          ddd          D ]}t          j                            ||dz
  z  dz            }t	          |          }d||dz  df<   t          t          |          dk               t          t          t          |d	           d S 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  s        H H H
G G GB B BC C C1 1 1G G GG G GG G GG 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
d	S )
TestIsValidInconsistentc                     t          j        g dg dgt                    }t          t	          |          dk               t          t          t          |d           d S r%  )r-   r   r(  r   r   r0   r)  r3   Rs     r5   test_is_valid_im_int_typez1TestIsValidInconsistent.test_is_valid_im_int_type  sc    J&(/24 4 4A%'(((iat<<<<<<r7   c                 F    dD ]\  }}}|                      |||           d S r  )check_is_valid_im_various_sizer  s       r5   test_is_valid_im_various_sizez5TestIsValidInconsistent.test_is_valid_im_various_size  sC    "> 	C 	CD$//dEBBBB	C 	Cr7   c                     t          j        g dg dgt           j                  }|d |d |f         }t          t	          |          |k               |st          t          t          |d           d S d S r!  )r-   r   r   r   r   r0   r1   )r3   r  r  r  rF  s        r5   rI  z6TestIsValidInconsistent.check_is_valid_im_various_size  s    J))))))+24)= = =eteUdUlOA%'((( 	B*k1DAAAAAA	B 	Br7   c                     t          j        dt           j                  }t          t	          |          dk               t          t          t          |d           d S r-  )r-   r.   r   r   r   r0   r1   rE  s     r5   test_is_valid_im_emptyz.TestIsValidInconsistent.test_is_valid_im_empty  sN    HV29---A%'(((j+q======r7   c                     t          ddd          D ]h}t          j                            ||dz
  z  dz            }t	          |          }t          |          }t          t          |          dk               id S 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  sx     q"a 	, 	,A	q!A#wz**A

AQAKNNd*++++		, 	,r7   c                 H   t          ddd          D ]}t          j                            ||dz
  z  dz            }t	          |          }t          |          }d||dz  df<   t          t          |          dk               t          t          t          |d	
           d S )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 	BA	q!A#wz**A

AQAAad1fIKNNe+,,,*k1DAAAAA	B 	Br7   c                 H   t          ddd          D ]}t          j                            ||dz
  z  dz            }t	          |          }t          |          }d||dz  df<   t          t          |          dk               t          t          t          |d	           d S )
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                 H   t          ddd          D ]}t          j                            ||dz
  z  dz            }t	          |          }t          |          }d||dz  df<   t          t          |          dk               t          t          t          |d	           d S 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 C C
B B B> > >, , ,	B 	B 	B	B 	B 	B	B 	B 	B 	B 	Br7   rC  c                   &    e Zd Zd Zd Zd Zd ZdS )TestNumObsLinkagec                 |    t          j        dt           j                  }t          t          t
          |           d S Nr.  r   )r-   r.   r   r0   r1   r   r*  s     r5   test_num_obs_linkage_emptyz,TestNumObsLinkage.test_num_obs_linkage_empty  s0    HV29---j/155555r7   c                     t          j        g dgt           j                  }t          t	          |          d           d S )Nr&  r   r^   r-   r   r   r   r   r*  s     r5   test_num_obs_linkage_1x4z*TestNumObsLinkage.test_num_obs_linkage_1x4  s=    J'ry999_Q''+++++r7   c                     t          j        g dg dgt           j                  }t          t	          |          d           d S )Nr&  r'  r   rv   r`  r*  s     r5   test_num_obs_linkage_2x4z*TestNumObsLinkage.test_num_obs_linkage_2x4  sM    J&(/1y: : :_Q''+++++r7   c                     t          ddd          D ]V}t          j                            ||dz
  z  dz            }t	          |          }t          t          |          |           Wd S )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  sl     q"a 	0 	0A	q!A#wz**A

A++Q////	0 	0r7   N)ro   rp   rq   r^  ra  rc  re  rr   r7   r5   r[  r[    sP        6 6 6
, , ,
, , ,0 0 0 0 0r7   r[  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestLeavesListc                     t          j        g dgt           j                  }t          |           t	          t          |          ddg           d S )Nr&  r   r   r&   r-   r   r   r   r   r   r*  s     r5   test_leaves_list_1x4z#TestLeavesList.test_leaves_list_1x4	  sJ    J'ry999


[^^aV,,,,,r7   c                     t          j        g dg dgt           j                  }t          |           t	          t          |          g d           d S )Nr&  r'  r   )r   r&   r^   ri  r*  s     r5   test_leaves_list_2x4z#TestLeavesList.test_leaves_list_2x4  sZ    J&(/1y: : :


[^^YYY/////r7   c                 :    dD ]}|                      |           d S ry   )check_leaves_list_Qr@   s     r5   test_leaves_list_Qz!TestLeavesList.test_leaves_list_Q  s4    ) 	- 	-F$$V,,,,	- 	-r7   c                     t           j        }t          ||          }t          |          }t	          |                                t          |                     d S r   )r'   r   r	   r   r   	pre_orderr   )r3   rA   rX   rK   nodes        r5   rn  z"TestLeavesList.check_leaves_list_Q  sJ    #AvqzzT^^%%{1~~66666r7   c                 6   t           j        }t          |d          }t          |          }t	          |                                |                                                                |                                                                z              d S )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  qzzT^^%%(A(A(C(C*...*:*:*D*D*F*F)G 	I 	I 	I 	I 	Ir7   N)ro   rp   rq   rj  rl  ro  rn  rv  rr   r7   r5   rg  rg    sd        - - -0 0 0- - -
7 7 7I I I I Ir7   rg  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestCorrespondc                     t          j        d          }t          j        d          }t          t          t          ||           d S )Nr9   r.  )r-   r.   r0   r1   r   )r3   r4   rK   s      r5   test_correspond_emptyz$TestCorrespond.test_correspond_empty,  s6    HTNNHUOOj*a33333r7   c                    t          dd          D ]V}t          j                            ||dz
  z  dz            }t	          |          }t          t          ||                     Wt          ddd          D ]V}t          j                            ||dz
  z  dz            }t	          |          }t          t          ||                     Wd S )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                            ||dz
  z  dz            }t          j                            ||dz
  z  dz            }t          |          }t          |          }t          t          ||          d           t          t          ||          d           d S )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[[ 1 14a3D3DEEFFCU1a[[ 1 14a3D3DEEFFG 	3 	3FQ	q!A#wz**A1Q3
++B

ABAr**E222B**E2222	3 	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                            ||dz
  z  dz            }t          j                            ||dz
  z  dz            }t          |          }t          |          }t          t          ||          d           t          t          ||          d           d S )Nr^   r         r&   Fr~  r  s          r5   test_correspond_4_and_up_2z)TestCorrespond.test_correspond_4_and_up_2J  s    CU1a[[ 1 14b"3F3FGGHHCU1a[[ 1 14b"3F3FGGHHI 	3 	3FQ	q!A#wz**A1Q3
++B

ABAr**E222B**E2222	3 	3r7   c                     t          dd          D ]]}t          j                            |d          }t	          |          }t          |          }t          t          |          |           ^d S )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  si    q" 	0 	0A	q!$$AaA

A++Q////		0 	0r7   N)ro   rp   rq   rz  r|  r  r  r  rr   r7   r5   rx  rx  +  s_        4 4 4
& 
& 
&
3 
3 
3
3 
3 
30 0 0 0 0r7   rx  c                   P    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dS )TestIsMonotonicc                 d    t          j        d          }t          t          t          |           d S )Nr.  )r-   r.   r0   r1   r   r*  s     r5   test_is_monotonic_emptyz'TestIsMonotonic.test_is_monotonic_empty`  s)    HVj,22222r7   c                     t          j        g dgt           j                  }t          t	          |          d           d S )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;    J'ry999\!__d+++++r7   c                     t          j        g dg dgt           j                  }t          t	          |          d           d S )Nr  )r^   rv   皙?rv   r   Tr  r*  s     r5   test_is_monotonic_2x4_Tz'TestIsMonotonic.test_is_monotonic_2x4_Tj  sK    J&(/1y: : :\!__d+++++r7   c                     t          j        g dg dgt           j                  }t          t	          |          d           d S )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  sK    J&(/1y: : :\!__e,,,,,r7   c                     t          j        g dg dg dgt           j                  }t          t	          |          d           d S )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  sT    J&&(/1y: : : 	\!__d+++++r7   c                     t          j        g dg dg dgt           j                  }t          t	          |          d           d S )Nr  )r^   rv   皙?r^   r  r   Fr  r*  s     r5   test_is_monotonic_3x4_F1z(TestIsMonotonic.test_is_monotonic_3x4_F1}  T    J&&(/1y: : : 	\!__e,,,,,r7   c                     t          j        g dg dg dgt           j                  }t          t	          |          d           d S )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           d S )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                 t    t          t          j        d          }t          t	          |          d           d S Nr   Tr	   r'   rI   r   r   r*  s     r5    test_is_monotonic_tdist_linkage1z0TestIsMonotonic.test_is_monotonic_tdist_linkage1  s3     '.99\!__d+++++r7   c                 ~    t          t          j        d          }d|d<   t          t	          |          d           d S )Nr   r   )r^   r^   Fr  r*  s     r5    test_is_monotonic_tdist_linkage2z0TestIsMonotonic.test_is_monotonic_tdist_linkage2  s<     '.99#\!__e,,,,,r7   c                 x    t           j        }t          |d          }t          t	          |          d           d S r  )r'   r   r	   r   r   )r3   rX   rK   s      r5   test_is_monotonic_Q_linkagez+TestIsMonotonic.test_is_monotonic_Q_linkage  s7      #Ax  \!__d+++++r7   N)ro   rp   rq   r  r  r  r  r  r  r  r  r  r  r  rr   r7   r5   r  r  _  s        3 3 3
, , ,
, , ,- - -, , ,- - -- - -- - -, , ,- - -, , , , ,r7   r  c                   &    e Zd Zd Zd Zd Zd ZdS )TestMaxDistsc                 |    t          j        dt           j                  }t          t          t
          |           d S r]  )r-   r.   r   r0   r1   r   r*  s     r5   test_maxdists_empty_linkagez(TestMaxDists.test_maxdists_empty_linkage  s0    HV29---j(A.....r7   c                     t          j        g dgt           j                  }t          |          }t	          |          }t          ||d           d S )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  sR    J'ry999a[[033
JU333333r7   c                 :    dD ]}|                      |           d S Nr   r<   rP   rN   rO   )check_maxdists_Q_linkager@   s     r5   test_maxdists_Q_linkagez$TestMaxDists.test_maxdists_Q_linkage  s2    J 	2 	2F))&1111	2 	2r7   c                     t           j        }t          ||          }t          |          }t	          |          }t          ||d           d S Nr_   rF   )r'   r   r	   r   r  r   )r3   rA   rX   rK   r  r  s         r5   r  z%TestMaxDists.check_maxdists_Q_linkage  sL    #Ava[[033
JU333333r7   N)ro   rp   rq   r  r  r  r  rr   r7   r5   r  r    sP        / / /
4 4 42 2 24 4 4 4 4r7   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestMaxInconstsc                     t          j        dt           j                  }t          j        dt           j                  }t          t          t
          ||           d S r]  )r-   r.   r   r0   r1   r   r3   rK   rF  s      r5   test_maxinconsts_empty_linkagez.TestMaxInconsts.test_maxinconsts_empty_linkage  sH    HV29---HV29---j+q!44444r7   c                     t          j        g dgt           j                  }t           j                            dd          }t          t          t          ||           d S Nr  r   r^   r   )r-   r   r   ra   rc   r0   r1   r   r  s      r5   test_maxinconsts_difrow_linkagez/TestMaxInconsts.test_maxinconsts_difrow_linkage  sP     J'ry999INN1a  j+q!44444r7   c                     t          j        g dgt           j                  }t          j        g dgt           j                  }t          ||          }t	          ||          }t          ||d           d S )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  su    J'ry999J'ry999A6q!<<
JU333333r7   c                 :    dD ]}|                      |           d S r  )check_maxinconsts_Q_linkager@   s     r5   test_maxinconsts_Q_linkagez*TestMaxInconsts.test_maxinconsts_Q_linkage  s2    J 	5 	5F,,V4444	5 	5r7   c                     t           j        }t          ||          }t          |          }t	          ||          }t          ||          }t          ||d           d S r  )r'   r   r	   r   r   r  r   )r3   rA   rX   rK   rF  r  r  s          r5   r  z+TestMaxInconsts.check_maxinconsts_Q_linkage  s]    #AvOOA6q!<<
JU333333r7   N)ro   rp   rq   r  r  r  r  r  rr   r7   r5   r  r    s_        5 5 55 5 54 4 45 5 54 4 4 4 4r7   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
 ZdS )TestMaxRStatc                 :    dD ]}|                      |           d S )N)gffffff
@r}   r   )check_maxRstat_invalid_indexr3   r  s     r5   test_maxRstat_invalid_indexz(TestMaxRStat.test_maxRstat_invalid_index  s2     	1 	1A--a0000	1 	1r7   c                 4   t          j        g dgt           j                  }t          j        g dgt           j                  }t          |t                    rt          t          t          |||           d S t          t          t          |||           d S )Nr  r   r  )	r-   r   r   
isinstancer(  r0   r1   r   r)  r3   r  rK   rF  s       r5   r  z)TestMaxRStat.check_maxRstat_invalid_index  s    J'ry999J'ry999a 	8*h1a88888)Xq!Q77777r7   c                 T    t          d          D ]}|                     |           d S Nr   )r	  check_maxRstat_empty_linkager  s     r5   test_maxRstat_empty_linkagez(TestMaxRStat.test_maxRstat_empty_linkage  s8    q 	1 	1A--a0000	1 	1r7   c                     t          j        dt           j                  }t          j        dt           j                  }t          t          t
          |||           d S r]  )r-   r.   r   r0   r1   r   r  s       r5   r  z)TestMaxRStat.check_maxRstat_empty_linkage  sJ    HV29---HV29---j(Aq!44444r7   c                 T    t          d          D ]}|                     |           d S r  )r	  check_maxRstat_difrow_linkager  s     r5   test_maxRstat_difrow_linkagez)TestMaxRStat.test_maxRstat_difrow_linkage  s8    q 	2 	2A..q1111	2 	2r7   c                     t          j        g dgt           j                  }t           j                            dd          }t          t          t          |||           d S r  )r-   r   r   ra   rc   r0   r1   r   r  s       r5   r  z*TestMaxRStat.check_maxRstat_difrow_linkage  sR     J'ry999INN1a  j(Aq!44444r7   c                 T    t          d          D ]}|                     |           d S r  )r	  "check_maxRstat_one_cluster_linkager  s     r5   !test_maxRstat_one_cluster_linkagez.TestMaxRStat.test_maxRstat_one_cluster_linkage  s8    q 	7 	7A33A6666	7 	7r7   c                     t          j        g dgt           j                  }t          j        g dgt           j                  }t          ||d          }t	          ||d          }t          ||d           d S )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  sy    J'ry999J'ry999aA6q!Q??
JU333333r7   c                 `    dD ]*}t          d          D ]}|                     ||           +d S )Nr  r   )r	  check_maxRstat_Q_linkage)r3   rA   r  s      r5   test_maxRstat_Q_linkagez$TestMaxRStat.test_maxRstat_Q_linkage  sN    J 	9 	9F1XX 9 9--fa88889	9 	9r7   c                     t           j        }t          ||          }t          |          }t	          ||d          }t          ||d          }t          ||d           d S )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  sa    #AvOOaA6q!Q??
JU333333r7   N)ro   rp   rq   r  r  r  r  r  r  r  r  r  r  rr   r7   r5   r  r    s        1 1 18 8 81 1 15 5 52 2 25 5 57 7 74 4 49 9 9
4 4 4 4 4r7   r  c                      e Zd Zd Zd Zd Zej                            e	 d          d             Z
ej                            e	 d          d             Zd Zej                            e	 d          d	             Zd
 Zd Zd ZdS )TestDendrogramc                     t          t          j        d          }t          |d          }|d         }t	          |g d           d S )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$  sM    '.99q$'''8V///00000r7   c                 t    t          t          j        d          }t          t          t
          |d           d S )Nr   fooorientation)r	   r'   rI   r0   r1   r   r*  s     r5   test_valid_orientationz%TestDendrogram.test_valid_orientation+  s2    '.99j*aUCCCCCCr7   c                     t          t          j        d          }t          j        g d          }t          ||d          }t          ||                                d          }||k    sJ d S )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/  sr    '.99,,,--Qvt<<<Qv}}EE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            n# 1 swxY w Y   dt          |j                  v sJ t	          j        t          d          5  t          |g            d d d            n# 1 swxY w Y   t          j                     d S )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~   xNNNNNN
  
 	
]:&& 	6(tDs$4$45555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6?hn%%& & & & ]FH H H 	( 	( tB''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(
 		s$   
,BB	B CC"%C"c                 :    dD ]}|                      |           d S )N)topbottomleftright)check_dendrogram_plot)r3   r  s     r5   test_dendrogram_plotz#TestDendrogram.test_dendrogram_plotK  s2    = 	4 	4K&&{3333	4 	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                    }|                    d          }t          |||          }t          ||           t          |||dd           |dv r|                                d         n|	                                d         }t          |
                                d           t          |                                d           t          |||d           |dv r|                                d         n|	                                d         }t          |
                                d           t          |||d           |dv r|                                d         n|	                                d         }t          |                                d           t          j                     t          ||          }t          j                     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  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9"@"@"@777777999999;;;	=
  655777777777999	;
 :99000)M)M)M   jll__S!! bk:::R""" 	1"$B	8 	8 	8 	8 ///   ####%%a( 	
 	Y++--r222Y''))2...1!#	% 	% 	% 	% ///   ####%%a( 	
 	Y++--r2221"$	& 	& 	& 	& ///   ####%%a( 	
 	Y''))2...	 {333	R"""""r7   c           
         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           d S )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  sI   '.99q!Wd;;;	Qv$<$<$<#=$:$:$:#;!&$%q6/3Tl  	 	 	 q!Wd;;;	Q'?'?'?$<$<$<$<$<$<$>$>$>$@$@$@$B %;$:$:$<$<$<$<$<$<$<$<$<$> !< ; ;#2??.L.L.L  	 	 	 	 	r7   c                     t          t          j        d          }t          g d           t	          |ddd          }t          g d           |d         }t          |g d	           t          d            d S )
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  s    '.99333444q$-0#G G 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	          ||           d S )
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     Hiiiiiiiiiiiii! " " Ax  q$'''99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	          ||           d S )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     Hiii!kkiiiiiiii! " " Ax  q$'''99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 1 1D D D" " " [O+ODD  ED& [O+ODD4 4 ED4:# :# :#x [O+ODD  ED:% % %) ) )) ) ) ) )r7   r  c                    | j         d         dz   }t          j        |dz
  f          }t          j        d          }t          d|dz
            D ]}d|d d <   | |df         }| |df         }||k    r|t	          |          |z
           |d<   ||k    r|t	          |          |z
           |d<   | |df         |d<   |                                ||<   |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$199SYY]#AaDA::SZZ!^$AaDAw!uuww!Hr7   rv   c                    | j         d         dz   }t          j        |dz
  f          }t          j        d          }t          d|dz
            D ]}d|d d <   | |df         }| |df         }||k    r|t	          |          |z
           |d<   ||k    r|t	          |          |z
           |d<   |||f         |d<   |                                ||<   |S r_  ra  )	rK   rF  r  rf   rc  rd  r  r  r  s	            r5   r  r    re  r7   c                 \    t          j        | |z
                                            |k     S r   )r-   absrb  )r   r   tols      r5   
within_tolrj    s%    6!a%==$$r7   c                  H    t          t          t          ddgddgg           d S )Nr   r&   )r   r   r	   rr   r7   r5   <test_unsupported_uncondensed_distance_matrix_linkage_warningrl     s'    Aq6Aq6*:;;;;;r7   c                      t           j        j        j        D ]&} t	          t
          t          ddgddgg| d           'd S )Nr&   	cityblockrA   rW   )rY   cluster	hierarchy_EUCLIDEAN_METHODSr0   r1   r	   r~   s    r5   "test_euclidean_linkage_value_errorrs    sW    -)< 9 9j'QFQF+;#K	9 	9 	9 	9 	99 9r7   c                  |    t          dgdd          } t          ddgddggdd          }t          | |           d S )Nr&   r   rV   ro  r   )r	   r   )Z1r  s     r5   test_2x2_linkagerv  
  sO    	!Xk	:	:	:B	1a&1a&!(;	G	G	GBBr7   c                     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-   ra   seedrandnrY   rp  rq  rP   r   r   rt  ru  )r  rX   rK   trees       r5   test_node_comparer}    s    INN2D
	a  A$$Q''A1::DD4==??"###DNNt}}.///DNN 0 00111DNN/00000r7   c            	         t           j                            d           d} t           j                            | d          }t          j        j                            |          }t          |          }t          |d d df         t          j
        |                      t          |d d df         t          j        |                      t          |                    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 |D                       }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                     d S )Nrx  ry  r   r   r}   r&   r   )
n_clustersir   c                     g | ]	}|j         
S rr   )dist).0rr  s     r5   
<listcomp>z!test_cut_tree.<locals>.<listcomp>,  s    444d	444r7   )height)r-   ra   rz  r{  rY   rp  rq  rP   r   r   aranger.   rb  r!   r   searchsorted)r  rX   rK   cutreenodesheightss         r5   test_cut_treer    sW   INN2D
	a  A$$Q''Aa[[F1ry///2///A	$(B ; ;<<<B4(1";";";<<<B9%xq"g'F'F'FGGGC9%xr1g'F'F'FGGG""Eh44e44455G2?7QC8889!A&&&( ( (2?7QG<<<=!QG,,,. . .2?7RG<<<=!RG,,,. . . . .r7   c                  D   t          t          t          j                  t          j                  } t          j        }t          | |d           t          t          t          j        d          t          j                  } t          j        }t          | |d           d S )NrE   rF   rP   rU   )r    r	   r'   rI   rm   r   rX   linkage_X_ward_olo)rK   rL   s     r5   rn   rn   6  s    g&9&@AA18	: 	:A#=IAyu---- 	g&9&;VDD13	5 	5A#6IAyu------r7   c                     t          j        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)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  D  s   X)))**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`  )Q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  rj  rl  rs  rv  r}  r  rn   r  rr   r7   r5   <module>r     s  D     N N N N N N N N N N N N  * * * * * *    7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ) ( ( ( ( ( ) ) ) ) ) ) ! ! ! ! ! !
JN5######OO   OOO42 42 42 42 42 42 42 42n2 2 2 2 2 2 2 2:H H H H H H H H2 2 2 2 2 2 2 2(- - - - - - - -8/- /- /- /- /- /- /- /-d	  	  	  	  	  	  	  	 G9 G9 G9 G9 G9 G9 G9 G9TJG JG JG JG JG JG JG JGZDB DB DB DB DB DB DB DBN0 0 0 0 0 0 0 04 I  I  I  I  I  I  I  IF10 10 10 10 10 10 10 10hE, E, E, E, E, E, E, E,P4 4 4 4 4 4 4 44!4 !4 !4 !4 !4 !4 !4 !4H;4 ;4 ;4 ;4 ;4 ;4 ;4 ;4|r) r) r) r) r) r) r) r)j  $   $% % %< < <9 9 9  	1 	1 	1. . .4. . .$ $ $ $ $s   .B BB