
    Yhj                     l   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
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&m'Z'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1 d dl2m3c m4Z5 d dl6m7Z7 d	d
l8m9Z9  G d d          Z:	 d dl;Z; e;j<        d           d dl=m>Z? dZ@n# eA$ r dZ@Y nw xY wejB        jC        ZC e/e           G d d                      ZD e/e           G d d                      ZE e/e           G d d                      ZF e/ee           G d d                      ZG e/e           G d d                      ZH e/e           G d d                      ZI e/e           G d d                      ZJ e/e           G d d                      ZK e/e           G d  d!                      ZL e/e           G d" d#                      ZM G d$ d%          ZN e/e e           G d& d'                      ZO e/e           G d( d)                      ZP e/e           G d* d+                      ZQ e/e           G d, d-                      ZR e/e           G d. d/                      ZS e/e           G d0 d1                      ZT e/e!           G d2 d3                      ZUd4 ZVd5efd6ZW e/e          d7             ZX e/e#          d8             ZY e/e$          d9             ZZ eCdd:;          d<             Z[dS )=    N)assert_allcloseassert_equalassert_array_equalassert_)raises)ClusterWarninglinkagefrom_mlab_linkageto_mlab_linkagenum_obs_linkageinconsistentcophenetfclusterdatafclusteris_isomorphicsingleward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_EUCLIDEAN_METHODS_LINKAGE_METHODS)Heap)pdist)eager_warnsmake_xp_test_casexp_assert_closexp_assert_equalLock   )hierarchy_test_datac                       e Zd ZeZeZdS )eagerN)__name__
__module____qualname__r   r        t/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/scipy/cluster/tests/test_hierarchy.pyr1   r1   9   s         K'r6   r1   AggTFc                      e Zd Z edd          d             Zd Zd Zd Zd Zd	 Z	d
 Z
d Zej                            ddg dg dgfdg dg dgfdg dg dgfdg dg dgfdg dg dgfdg dg dgfdg dg dgfg          d             Zd Zej                            de          d             Zd Z edd          d             ZdS ) TestLinkage	jax.numpy$Can't raise inside jax.pure_callbackreasonc                     |                     |j        gdgdz  z             }t          t          t          |           d S )N           )asarraynanassert_raises
ValueErrorr	   selfxpys      r7   3test_linkage_non_finite_elements_in_distance_matrixz?TestLinkage.test_linkage_non_finite_elements_in_distance_matrixR   s<     JJx3%')**j'1-----r6   c                 f    |                     d          }t          t          t          |           d S )Nr   )zerosrD   rE   r	   rF   s      r7   "test_linkage_empty_distance_matrixz.TestLinkage.test_linkage_empty_distance_matrixY   s)    HHTNNj'1-----r6   c                 <    dD ]}|                      ||           d S )N)r   completeaverageweighted)check_linkage_tdistrG   rH   methods      r7   test_linkage_tdistzTestLinkage.test_linkage_tdist^   s4    C 	1 	1F$$VR0000	1 	1r6   c                     t          |                    t          j                  |          }t	          t          d|z             }t          ||                    |          d           d S )Nlinkage_ytdist_绽|=atolr	   rB   r/   ytdistgetattrr*   )rG   rU   rH   Z	expectedZs        r7   rS   zTestLinkage.check_linkage_tdistb   s^    BJJ29::FCC/1BV1KLL	2::i00u======r6   c                 <    dD ]}|                      ||           d S )N)centroidmedianr   )check_linkage_qrT   s      r7   test_linkage_XzTestLinkage.test_linkage_Xh   s4    4 	- 	-F  ,,,,	- 	-r6   c                    t          |                    t          j                  |          }t	          t          d|z             }t          ||                    |          d           |                    t          j                  }t          |d          }t          ||          }t          ||                    |          d           d S )N
linkage_X_ư>rZ   	euclidean)metric)r	   rB   r/   Xr^   r*   r'   )rG   rU   rH   r_   r`   rk   rI   s          r7   rd   zTestLinkage.check_linkage_ql   s    BJJ2455v>>/1FGG	2::i00u====JJ*,--!K(((Av2::i00u======r6   c                    t           j                            d          }d}|                    |d          }t	          |          }t          j                    D ]d\  }}t          j        |||          }t          |	                    |          |          }	t          |	|	                    |          dd           ed S )Nr         g+=V瞯<)rtolr[   )nprandomRandomStaterandr'   r%   itemsr#   r	   rB   r*   )
rG   rH   rngnrk   drU   code	Z_trivialr_   s
             r7   test_compare_with_trivialz%TestLinkage.test_compare_with_trivialw   s    i##A&&HHQNN!HH,244 	N 	NLFD"*1a66I

1v..AArzz)445uMMMMM	N 	Nr6   c                     t          |                    t          j                  d          }t	          t          d          }t          ||                    |          d           d S )NT)optimal_orderinglinkage_ytdist_single_olorY   rZ   r\   )rG   rH   r_   r`   s       r7   test_optimal_leaf_orderingz&TestLinkage.test_optimal_leaf_ordering   s\    BJJ29::TRRR/1LMM	2::i00u======r6   zmethod,expectr   )r   r.   'e?rn   )rn      r   r   rP   )rn   r   g'e@r   rQ   )rn   r   gev @r   rR   rb   rc   r   )rn   r   g@r   c                     |                     ddgddgddgg          }t          ||          }|                     ||j                  }t          ||d           d S )Nr   r.   rU   dtyperh   rZ   )rB   r	   float64r*   )rG   rU   expectrH   rk   r_   s         r7   test_linkage_tieszTestLinkage.test_linkage_ties   sl    " JJR1a&1a&122Af%%%F"*556......r6   c                     |                     ddgddgg          }t          |t                    5  t          |           d d d            d S # 1 swxY w Y   d S )Nr   r.   )rB   r(   r   r	   rG   rH   rk   s      r7   <test_unsupported_uncondensed_distance_matrix_linkage_warningzHTestLinkage.test_unsupported_uncondensed_distance_matrix_linkage_warning   s    JJAA'((N++ 	 	AJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAArU   c                     |                     ddgddgg          }t          j        t                    5  t	          ||d           d d d            d S # 1 swxY w Y   d S )Nr.   	cityblockrU   rj   rB   pytestr   rE   r	   )rG   rU   rH   rk   s       r7   "test_euclidean_linkage_value_errorz.TestLinkage.test_euclidean_linkage_value_error   s    JJAA'((]:&& 	: 	:Af[9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   AAAc                     t          |                    dg          dd          }t          |                    ddgddgg          dd          }t          ||d           d S )Nr.   r   ri   r   r   ro   rp   )r	   rB   r*   )rG   rH   Z1Z2s       r7   test_2x2_linkagezTestLinkage.test_2x2_linkage   sj    RZZ__XkJJJRZZ!Q!Q 011(;WWWBU++++++r6   c                     |                     g d          }t          j        t                    5  t	          |d           d d d            d S # 1 swxY w Y   d S )N)r   r   r   rb   r   r   )rG   rH   valuess      r7   test_centroid_neg_distancez&TestLinkage.test_centroid_neg_distance   s     JJJ'']:&& 	/ 	/F:....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   AAAN)r2   r3   r4   skip_xp_backendsrJ   rN   rV   rS   re   rd   r{   r   r   markparametrizer   r   r$   r   r   r   r5   r6   r7   r:   r:   O   s9        k*PQQQ. . RQ.. . .
1 1 1> > >- - -	> 	> 	>	N 	N 	N> > >
 [_	++++++- 	.	++++++- 	.	++++++- 	.	++++++- 	.	++++++- 	.	++++++- 	.	++++++- 	./   / /!  /  
 [X'9::: : ;::
, , ,
 k*PQQQ/ / RQ/ / /r6   r:   c                       e Zd Zd Zd ZdS )TestInconsistentc                 P    t           j        D ]}|                     ||           d S N)r/   inconsistent_ytdistcheck_inconsistent_tdist)rG   rH   depths      r7   test_inconsistent_tdistz(TestInconsistent.test_inconsistent_tdist   s7    (< 	5 	5E))%4444	5 	5r6   c                     |                     t          j                  }t          t	          ||          |                     t          j        |                              d S r   )rB   r/   linkage_ytdist_singler*   r   r   )rG   r   rH   r_   s       r7   r   z)TestInconsistent.check_inconsistent_tdist   s\    JJ*@AAQ..

#6#J5#QRR	T 	T 	T 	T 	Tr6   N)r2   r3   r4   r   r   r5   r6   r7   r   r      s7        5 5 5T T T T Tr6   r   c                   F    e Zd Zd Zd Z edd          d             ZdS )TestCopheneticDistancec                     |                     g d          }|                     t          j                  }t          |          }t	          ||                     ||j                  d           d S )N  '     r   r   r   r   r   r   r   r         r   r   r   rY   rZ   )rB   r/   r   r   r*   r   )rG   rH   	expectedMr_   Ms        r7   test_linkage_cophenet_tdist_Zz4TestCopheneticDistance.test_linkage_cophenet_tdist_Z   sq    JJ  9  9  9 : :	JJ*@AAQKK2::irz:BBOOOOOOr6   c                 l   |                     t          j                  }t          ||                     t          j                            \  }}|                     g d|j                  }|                     d|j                  d         }t          ||d           t          ||d           d S )Nr   r   g*ɻ2Qz?r5   rY   rZ   )rB   r/   r   r   r]   r   r*   )rG   rH   r_   cr   r   	expectedcs          r7   test_linkage_cophenet_tdist_Z_Yz6TestCopheneticDistance.test_linkage_cophenet_tdist_Z_Y   s    JJ*@AA!RZZ(;(BCCDDAJJ  9  9  9@B
  L L	JJ?rzJRRSUV	95111195111111r6   r;   r<   r=   c                     g dg dg dg dg dg dg dg dg d	g d
g dg}t          j        t          d          5  t          |                    |                     d d d            d S # 1 swxY w Y   d S )N)r@         ?r          @)r         (@r         @)r         @r   r   )      @g      ,@r   r   )      @      @r   r   )       @g      0@r   r   )      "@      $@r   r   )g      &@g      2@r   r   )g      *@      .@r   r   )g      1@g      4@r   g      @@)g      3@g      5@r   r   zexcessive observationsmatch)r   r   rE   r   rB   )rG   rH   arrs      r7   test_gh_22183z$TestCopheneticDistance.test_gh_22183   s    "!!"""!!!"""!!!""""""######$$$$$$
& ]:-EFFF 	& 	&RZZ__%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   #A//A36A3N)r2   r3   r4   r   r   r   r   r5   r6   r7   r   r      sc        P P P2 2 2 k*PQQQ& & RQ& & &r6   r   c                        e Zd Zd Zd Zd ZdS )TestMLabLinkageConversionc                     |                     g |j                  }t          t          |          |           t          t	          |          |           d S )Nr   )rB   r   r+   r
   r   r   s      r7   "test_mlab_linkage_conversion_emptyz<TestMLabLinkageConversion.test_mlab_linkage_conversion_empty   sP    JJrJ,,)!,,a000**A.....r6   c                 J   |                     g dg          }|                     g dg          }t          t          |          |                     ||j                  d           t          t	          |          |                     ||j                  d           d S )N)r@   r   r   r   r.   rn   r   r   ro   r   )rB   r*   r
   r   r   )rG   rH   r_   Zms       r7   'test_mlab_linkage_conversion_single_rowzATestMLabLinkageConversion.test_mlab_linkage_conversion_single_row   s    JJ((()**ZZ$$)"--rzz!2:z/N/N"	$ 	$ 	$ 	$**BJJrJ,L,L"	$ 	$ 	$ 	$ 	$ 	$r6   c                 T   |                     g dg dg dg dg dg          }|                     g dg dg dg d	g d
g|j                  }t          t          |          |d           t          t	          |          |                     ||j                  d           d S )N)r      r   )   rA   r   )r.      r   )rn   	   r   )   
   r   )r   r        @a@r   )r   r        `k@r   )r@   r        o@r   )r   r        p@r   )r   r        pr@r   r   ro   r   )rB   r   r*   r
   r   )rG   rH   r   r_   s       r7   *test_mlab_linkage_conversion_multiple_rowszDTestMLabLinkageConversion.test_mlab_linkage_conversion_multiple_rows   s    ZZkkk$kkk<<<A B BJJ***************	,
  Z  ) ) 	)"--qu====**BJJrJ,L,L"	$ 	$ 	$ 	$ 	$ 	$r6   N)r2   r3   r4   r   r   r   r5   r6   r7   r   r      sA        / / /$ $ $$ $ $ $ $r6   r   c                       e Zd Z ee          ej                            dd ej	        D             d ej
        D             z   d ej        D             z             d                         ZdS )TestFclusterDatacriterion,tc                     g | ]}d |fS r   r5   .0ts     r7   
<listcomp>zTestFclusterData.<listcomp>      PPP.!	PPPr6   c                     g | ]}d |fS distancer5   r   s     r7   r   zTestFclusterData.<listcomp>      
J
J
JqJ?
J
J
Jr6   c                     g | ]}d |fS maxclustr5   r   s     r7   r   zTestFclusterData.<listcomp>  r   r6   c                     |                     t          t          d|z             |                   }|                     t          j                  }t	          |||          }t          ||          sJ d S N	fcluster_	criterionr   )rB   r^   r/   Q_Xr   r   )rG   r   r   rH   	expectedTrk   Ts          r7   test_fclusterdataz"TestFclusterData.test_fclusterdata  sp     JJw':K)<STTUVWXX	JJ*.//i1555Q	*******r6   N)r2   r3   r4   r)   r   r   r   r   r/   fcluster_inconsistentfcluster_distancefcluster_maxclustr   r5   r6   r7   r   r     s         }%%[]PP&9&OPPP
J
J$7$I
J
J
J	K
J
J$7$I
J
J
J	K 
+ +  &%+ + +r6   r   c                      e Zd Z eee          ej                            dd e	j
        D             d e	j        D             z   d e	j        D             z             d                         Z eeee          ej                            de	j                  d                         Z eeee          ej                            de	j                  d                         Z ee          d	             Zd
S )TestFclusterr   c                     g | ]}d |fS r   r5   r   s     r7   r   zTestFcluster.<listcomp>$  r   r6   c                     g | ]}d |fS r   r5   r   s     r7   r   zTestFcluster.<listcomp>%  r   r6   c                     g | ]}d |fS r   r5   r   s     r7   r   zTestFcluster.<listcomp>&  r   r6   c                    |                     t          t          d|z             |                   }t          |                     t          j                            }t          |||          }t          t          ||                     d S r   )rB   r^   r/   r   r   r   r   r   )rG   r   r   rH   r   r_   r   s          r7   test_fclusterzTestFcluster.test_fcluster"  sz     JJw':K)<STTUVWXX	2::156677Q)q111a++,,,,,r6   r   c                 "   |                     t          j        |                   }t          |                     t          j                            }t          ||dt          |                    }t          t          ||                     d S )Nmonocritr   r  )	rB   r/   r   r   r   r   r   r   r   rG   r   rH   r   r_   r   s         r7   test_fcluster_monocritz#TestFcluster.test_fcluster_monocrit/  su     JJ2DQGHH	2::156677QZ(1++FFFa++,,,,,r6   c                 "   |                     t          j        |                   }t          |                     t          j                            }t          ||dt          |                    }t          t          ||                     d S )Nmaxclust_monocritr  )	rB   r/   r   r   r   r   r   r   r   r  s         r7   test_fcluster_maxclust_monocritz,TestFcluster.test_fcluster_maxclust_monocrit7  sv     JJ2DQGHH	2::156677Q%88A;;OOOa++,,,,,r6   c                    |                     dgdgdgg          }t          |          }t          t          |dd          |                     g d                     t          t          |dd          |                     g d                     t          t          |d	d          |                     g d
                     t          t          |dd          |                     g d
                     d S )Nr.   r   rA   r   )r   r   r.   r.   r.   rn   )rn   r.   r.   r   r   )rB   r   r   r   rG   rH   rI   r_   s       r7   test_fcluster_maxclust_gh_12651z,TestFcluster.test_fcluster_maxclust_gh_12651?  s   JJaS1#''1II8AjAAA::iii00	2 	2 	28AjAAA::iii00	2 	2 	28AjAAA::iii00	2 	2 	28AjAAA::iii00	2 	2 	2 	2 	2r6   N)r2   r3   r4   r)   r   r   r   r   r   r/   r   r   r   r  r   r  r	  r  r5   r6   r7   r   r     sj        v}--[]PP&9&OPPP
J
J$7$I
J
J
J	K
J
J$7$I
J
J
J	K 
- -  .-- v}h77[S"5"GHH- - IH 87- v}h77[S"5"GHH- - IH 87- v
2 
2 
2 
2 
2r6   r   c                       e Zd Zd ZdS )TestLeadersc                    t           j        }t          |          }t          |          }t	          |dd          }|                    |          }|                    ||j                  }t          ||          }|                    g d|j                  }t          |	                    |          |d           d S )Nr   r   r   r   )5   7   8   rn   r   r.   ro   r   )
r/   r   r'   r	   r   rB   int32r   r*   concat)rG   rH   rk   Yr_   r   Lr   s           r7   test_leaders_singlezTestLeaders.test_leaders_singleP  s    #!HHAJJQ*222JJqMMJJqJ))AqMM111BB		!f5999999r6   N)r2   r3   r4   r  r5   r6   r7   r  r  M  s#        
: 
: 
: 
: 
:r6   r  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
j                            dg d	          d
             Ze
j                            dg d	          d             Zd ZddZdS )TestIsIsomorphicc                 V    t          g dg d          sJ t          g g           sJ d S Nr  )rn   rn   rn   )r   rG   s    r7   test_array_likez TestIsIsomorphic.test_array_like`  s<    YYY			22222R$$$$$$$r6   c                     |                     g d          }|                     g d          }t          ||          sJ t          ||          sJ d S r  rB   r   rG   rH   abs       r7   test_is_isomorphic_1z%TestIsIsomorphic.test_is_isomorphic_1d  ^    JJyyy!!JJyyy!!Q"""""Q"""""""r6   c                     |                     g d          }|                     g d          }t          ||          sJ t          ||          sJ d S )N)r.   r   r.   )rn   r   rn   r   r!  s       r7   test_is_isomorphic_2z%TestIsIsomorphic.test_is_isomorphic_2k  r%  r6   c                 ~    |                     g           }|                     g           }t          ||          sJ d S r   r   r!  s       r7   test_is_isomorphic_3z%TestIsIsomorphic.test_is_isomorphic_3r  s<    JJrNNJJrNNQ"""""""r6   c                     |                     g d          }|                     g d          }t          ||          sJ t          ||          sJ d S )Nr   )r.   r   rn   r   r!  s       r7   test_is_isomorphic_4Az&TestIsIsomorphic.test_is_isomorphic_4Ax  `     JJyyy!!JJyyy!!Q"""""Q"""""""r6   c                     |                     g d          }|                     g d          }t          ||          rJ t          ||          rJ d S )N)r.   rn   r   r   )r.   r   rn   r   r   r!  s       r7   test_is_isomorphic_4Bz&TestIsIsomorphic.test_is_isomorphic_4B  s`     JJ|||$$JJ|||$$ A&&&&& A&&&&&&&r6   c                     |                     g d          }|                     g d          }t          ||          sJ t          ||          sJ d S )N)r   rn   r   )r   r   rn   r   r!  s       r7   test_is_isomorphic_4Cz&TestIsIsomorphic.test_is_isomorphic_4C  r,  r6   	nclusters)rn   r   rA   c                 6    |                      d||           d S )N  rH   is_isomorphic_randpermrG   r1  rH   s      r7   test_is_isomorphic_5z%TestIsIsomorphic.test_is_isomorphic_5  s%     	##D)#;;;;;r6   c                 :    |                      d|dd|           d S )Nr3  TrA   r4  r5  r7  s      r7   test_is_isomorphic_6z%TestIsIsomorphic.test_is_isomorphic_6  s)    
 	##D)T1#DDDDDr6   c                     |                     g d          }|                     g d          }t          ||          rJ d S )Nr   r  r   r!  s       r7   test_is_isomorphic_7z%TestIsIsomorphic.test_is_isomorphic_7  sH    JJyyy!!JJyyy!! A&&&&&&&r6   Fr   c                   t          d          D ]T}t          j                            |          |z                      t
                    }t          j        |j        t
                    }t          j                            |          }	t          d|j	        d                   D ]}
|	||
                  ||
<   |rOt          j                            |          }||d|         xx         dz  cc<   ||d|         xx         |z  cc<   |
                    |          }|
                    |          }t          ||          | k    sJ t          ||          | k    sJ Vd S )Nr   r   r   r.   )rangerq   rr   rt   astypeintrM   sizepermutationshaperB   r   )rG   nobsr1  nonisonerrorsrH   _r"  r#  PiQs               r7   r6  z'TestIsIsomorphic.is_isomorphic_randperm  sX   q 	7 	7A%%	199#>>As+++A	%%i00A1agaj))  1w! -I))$//!AgI,1$!AgI,9,

1A

1A A&&v:6666 A&&v:66666	7 	7r6   N)Fr   )r2   r3   r4   r  r$  r'  r)  r+  r.  r0  r   r   r   r8  r:  r<  r6  r5   r6   r7   r  r  ]  s       % % %# # ## # ## # ## # #' ' '# # # [[)))44< < 54<
 [[)))44E E 54E' ' '7 7 7 7 7 7r6   r  c                       e Zd Zej                            dg d          d             Zd Zd Zd Z	d Z
d Zd	 Zd
 ZdS )TestIsValidLinkagenrow, ncol, valid)rn   rA   F)rn   r   F)r.   r   T)rn   r   Tc                     |                     g dg dg|j                  }|d |d |f         }t          t          |          |d           |st	          t
          t          |d           d S d S N)r   r.   r   rn   rA   )r   rn   r   r   r   r   Fcheck_namespaceTthrow)rB   r   r+   r   rD   rE   )rG   nrowncolvalidrH   r_   s         r7   "test_is_valid_linkage_various_sizez5TestIsValidLinkage.test_is_valid_linkage_various_size  s     JJ))))))+24*  > >eteUdUlO(++UEJJJJ 	G*&6FFFFFF	G 	Gr6   c                     |                     g dg dg|j                  }t          t          |          dd           t	          t
          t          |d           d S Nr   r.   r   rn   r   rn   r   r   r   FrQ  TrS  )rB   int64r+   r   rD   	TypeErrorrG   rH   r_   s      r7   test_is_valid_linkage_int_typez1TestIsValidLinkage.test_is_valid_linkage_int_type  sm    JJ&(/1x  9 9(++UEJJJJi!11DAAAAAAr6   c                     |                     d|j                  }t          t          |          dd           t	          t
          t          |d           d S Nr   r   r   FrQ  TrS  )rM   r   r+   r   rD   rE   r_  s      r7   test_is_valid_linkage_emptyz.TestIsValidLinkage.test_is_valid_linkage_empty  sU    HHV2:H..(++UEJJJJj"2ATBBBBBBr6   c                 *   t          ddd          D ]}t          j                            ||dz
  z  dz            }|                    t          |                    }|                    |          }t          t          |          dd           d S 	Nr      r   r.   rn   TFrQ  )r>  rq   rr   rt   rB   r	   r+   r   rG   rH   rI  rI   r_   s        r7   test_is_valid_linkage_4_and_upz1TestIsValidLinkage.test_is_valid_linkage_4_and_up  s     q"a 	N 	NA	q!A#wz**A

71::&&A

1A,Q//uMMMMM		N 	Nr6   c                 ,   t          ddd          D ] }t          j                            ||dz
  z  dz            }|                    t          |                    }|                    |          }t          j        |          |dz  df                             d          }t          t          |          dd	           t          j        t                    5  t          
                    |d
           d d d            n# 1 swxY w Y   d S )Nr   rg  r   r.   rn   r   FrQ  TrS  r>  rq   rr   rt   rB   r	   xpxatsetr+   r   r   r   rE   r1   rh  s        r7   -test_is_valid_linkage_4_and_up_neg_index_leftz@TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_left  1    q"a 	6 	6A	q!A#wz**A

71::&&A

1Aq		!Q$'"&&r**A,Q//NNNNz** 6 6&&q&5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6   DD	D	c                 ,   t          ddd          D ] }t          j                            ||dz
  z  dz            }|                    t          |                    }|                    |          }t          j        |          |dz  df                             d          }t          t          |          dd           t          j        t                    5  t          
                    |d	
           d d d            n# 1 swxY w Y   d S Nr   rg  r   r.   rn   rk  FrQ  TrS  rl  rh  s        r7   .test_is_valid_linkage_4_and_up_neg_index_rightzATestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_right  rq  rr  c                 ,   t          ddd          D ] }t          j                            ||dz
  z  dz            }|                    t          |                    }|                    |          }t          j        |          |dz  df                             d          }t          t          |          dd           t          j        t                    5  t          
                    |d	
           d d d            n# 1 swxY w Y   d S Nr   rg  r   r.   rn   g      FrQ  TrS  rl  rh  s        r7   'test_is_valid_linkage_4_and_up_neg_distz:TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_dist  s1    q"a 	6 	6A	q!A#wz**A

71::&&A

1Aq		!Q$'"&&t,,A,Q//NNNNz** 6 6&&q&5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6rr  c                 ,   t          ddd          D ] }t          j                            ||dz
  z  dz            }|                    t          |                    }|                    |          }t          j        |          |dz  df                             d          }t          t          |          dd           t          j        t                    5  t          
                    |d	
           d d d            n# 1 swxY w Y   d S rt  rl  rh  s        r7   )test_is_valid_linkage_4_and_up_neg_countsz<TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_counts  rq  rr  N)r2   r3   r4   r   r   r   rX  r`  rd  ri  rp  ru  rx  rz  r5   r6   r7   rL  rL    s         [0 3N 3N 3N O OG GO OGB B BC C CN N N
6 
6 
6
6 
6 
6
6 
6 
6
6 
6 
6 
6 
6r6   rL  c                   ~    e Zd Zd Zej                            dg d          d             Zd Zd Z	d Z
d Zd	 Zd
S )TestIsValidInconsistentc                     |                     g dg dg|j                  }t          t          |          dd           t	          t
          t          |d           d S rZ  )rB   r]  r+   r   rD   r^  rG   rH   Rs      r7   test_is_valid_im_int_typez1TestIsValidInconsistent.test_is_valid_im_int_type  si    JJ&(/1x  9 9AuEEEEiat<<<<<<r6   rM  rN  c                     |                     g dg dg|j                  }|d |d |f         }t          t          |          |d           |st	          t
          t          |d           d S d S rP  )rB   r   r+   r   rD   rE   )rG   rU  rV  rW  rH   r  s         r7   test_is_valid_im_various_sizez5TestIsValidInconsistent.test_is_valid_im_various_size  s     JJ))))))+24*  > >eteUdUlOAuEEEE 	B*k1DAAAAAA	B 	Br6   c                     |                     d|j                  }t          t          |          dd           t	          t
          t          |d           d S rb  )rM   r   r+   r   rD   rE   r~  s      r7   test_is_valid_im_emptyz.TestIsValidInconsistent.test_is_valid_im_empty  sQ    HHV2:H..AuEEEEj+q======r6   c                 "   t          ddd          D ]|}t          j                            ||dz
  z  dz            }t	          |          }t          |          }|                    |          }t          t          |          dd           }d S rf  )	r>  rq   rr   rt   r	   r   rB   r+   r   rG   rH   rI  rI   r_   r  s         r7   test_is_valid_im_4_and_upz1TestIsValidInconsistent.test_is_valid_im_4_and_up$  s     q"a 	I 	IA	q!A#wz**A

AQA

1AKNND%HHHHH	I 	Ir6   c                     t          ddd          D ]}t          j                            ||dz
  z  dz            }t	          |          }t          |          }t          j        |          |dz  df                             d          }|	                    |          }t          t          |          dd	           t          j        t                    5  t                              |d
           d d d            n# 1 swxY w Y   d S )Nr   rg  r   r.   rn   r          FrQ  TrS  r>  rq   rr   rt   r	   r   rm  rn  ro  rB   r+   r   r   r   rE   r1   r  s         r7   (test_is_valid_im_4_and_up_neg_index_leftz@TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_left.  -    q"a 	1 	1A	q!A#wz**A

AQAq		!Q$(#''--A

1AKNNE5IIIIz** 1 1!!!4!0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1	1 	1   DD		D	c                     t          ddd          D ]}t          j                            ||dz
  z  dz            }t	          |          }t          |          }t          j        |          |dz  df                             d          }|	                    |          }t          t          |          dd           t          j        t                    5  t                              |d	
           d d d            n# 1 swxY w Y   d S )Nr   rg  r   r.   rn   r  FrQ  TrS  r  r  s         r7   )test_is_valid_im_4_and_up_neg_index_rightzATestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_right;  r  r  c                     t          ddd          D ]}t          j                            ||dz
  z  dz            }t	          |          }t          |          }t          j        |          |dz  df                             d          }|	                    |          }t          t          |          dd           t          j        t                    5  t                              |d	
           d d d            n# 1 swxY w Y   d S rw  r  r  s         r7   "test_is_valid_im_4_and_up_neg_distz:TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_distH  s-    q"a 	1 	1A	q!A#wz**A

AQAq		!Q$'"&&t,,A

1AKNNE5IIIIz** 1 1!!!4!0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1	1 	1r  N)r2   r3   r4   r  r   r   r   r  r  r  r  r  r  r5   r6   r7   r|  r|  	  s        = = = [0 3N 3N 3N O OB BO OB> > >I I I1 1 11 1 11 1 1 1 1r6   r|  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestNumObsLinkagec                 t    |                     d|j                  }t          t          t          |           d S Nrc  r   )rM   r   rD   rE   r   r_  s      r7   test_num_obs_linkage_emptyz,TestNumObsLinkage.test_num_obs_linkage_emptyX  s1    HHV2:H..j/155555r6   c                 n    |                     g dg|j                  }t          |          dk    sJ d S )Nr[  r   rn   rB   r   r   r_  s      r7   test_num_obs_linkage_1x4z*TestNumObsLinkage.test_num_obs_linkage_1x4]  s?    JJ'rzJ::q!!Q&&&&&&r6   c                 t    |                     g dg dg|j                  }t          |          dk    sJ d S )Nr[  r\  r   r   r  r_  s      r7   test_num_obs_linkage_2x4z*TestNumObsLinkage.test_num_obs_linkage_2x4b  sP    JJ&(/1z  ; ;q!!Q&&&&&&r6   c                     t          ddd          D ]a}t          j                            ||dz
  z  dz            }|                    t          |                    }t          |          |k    sJ bd S )Nr   rg  r   r.   rn   )r>  rq   rr   rt   rB   r	   r   rh  s        r7   test_num_obs_linkage_4_and_upz/TestNumObsLinkage.test_num_obs_linkage_4_and_uph  sy     q"a 	+ 	+A	q!A#wz**A

71::&&A"1%%*****	+ 	+r6   c                     t          dd          D ]h}t          j                            |d          }t	          |          }|                    t          |                    }t          |          |k    sJ id S )Nrn   r   r   )r>  rq   rr   rt   r'   rB   r	   r   )rG   rH   rw   rk   r  r_   s         r7   !test_num_obs_linkage_multi_matrixz3TestNumObsLinkage.test_num_obs_linkage_multi_matrixp  sv    q" 	+ 	+A	q!$$AaA

71::&&A"1%%*****		+ 	+r6   N)r2   r3   r4   r  r  r  r  r  r5   r6   r7   r  r  V  s_        6 6 6
' ' '
' ' '+ + ++ + + + +r6   r  c                   l    e Zd Zd Zd Zej                            dg d          d             Zd Z	dS )TestLeavesListc                     |                     g dg|j                  }t          |           t          t	          |          ddgd           d S )Nr[  r   r   r.   ro   r   rB   r   r   r   r   r_  s      r7   test_leaves_list_1x4z#TestLeavesList.test_leaves_list_1x4|  sP    JJ'rzJ::


AAU;;;;;;r6   c                     |                     g dg dg|j                  }t          |           t          t	          |          g dd           d S )Nr[  r\  r   )r   r.   rn   ro   r   r  r_  s      r7   test_leaves_list_2x4z#TestLeavesList.test_leaves_list_2x4  sa    JJ&(/1z  ; ;


A			>>>>>>r6   rU   )r   rP   rQ   rR   rb   rc   r   c                     t           j        }|                    t          ||                    }t	          |          }t          |                                t          |          d           d S )Nro   r   )r/   r   rB   r	   r   r   	pre_orderr   )rG   rU   rH   rk   r_   nodes         r7   test_leaves_list_Qz!TestLeavesList.test_leaves_list_Q  s]      #JJwq&))**qzz((+a..uEEEEEEr6   c                 `   t           j        }|                    t          |d                    }t	          |          }t          |                                |                                                                |                                                                z   d           d S )Nr   ro   r   )	r/   r   rB   r	   r   r   r  get_left	get_right)rG   rH   rk   r_   r  s        r7   test_Q_subtree_pre_orderz'TestLeavesList.test_Q_subtree_pre_order  s    #JJwq(++,,qzz((2244t~~7G7G7Q7Q7S7SS"	$ 	$ 	$ 	$ 	$ 	$r6   N)
r2   r3   r4   r  r  r   r   r   r  r  r5   r6   r7   r  r  y  s        < < <? ? ? [XSSSU UF FU UF$ $ $ $ $r6   r  c                   &    e Zd Zd Zd Zd Zd ZdS )TestCorrespondc                     |                     d|j                  }|                     d|j                  }t          t          t          ||           d S )NrL   r   rc  )rM   r   rD   rE   r   r  s       r7   test_correspond_emptyz$TestCorrespond.test_correspond_empty  sJ    HHTH,,HHU"*H--j*a33333r6   c                 D   t          dd          D ]~}t          j                            ||dz
  z  dz            }|                    t          |                    }|                    |          }t          t          ||                     t          ddd          D ]~}t          j                            ||dz
  z  dz            }|                    t          |                    }|                    |          }t          t          ||                     d S )Nrn   r   r.   rg  r   )r>  rq   rr   rt   rB   r	   r   r   rh  s        r7   test_correspond_2_and_upz'TestCorrespond.test_correspond_2_and_up  s     q! 	& 	&A	q!A#wz**A

71::&&A

1AJq!$$%%%%q"a 	& 	&A	q!A#wz**A

71::&&A

1AJq!$$%%%%		& 	&r6   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          ||          rJ t          ||          rJ d S )Nrn   r   r   rA   r.   	listzipr>  rq   rr   rt   rB   r	   r   rG   rH   rI  jrI   y2r_   r   s           r7   test_correspond_4_and_upz'TestCorrespond.test_correspond_4_and_up  sG    CU1a[[ 1 14a3D3DEEFFCU1a[[ 1 14a3D3DEEFFG 		) 		)FQ	q!A#wz**A1Q3
++B

71::&&AGBKK((B

1ABB!!R(((((!"a((((((		) 		)r6   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          ||          rJ t          ||          rJ d S )Nrn   r         r.   r  r  s           r7   test_correspond_4_and_up_2z)TestCorrespond.test_correspond_4_and_up_2  sG    CU1a[[ 1 14b"3F3FGGHHCU1a[[ 1 14b"3F3FGGHHI 		) 		)FQ	q!A#wz**A1Q3
++B

71::&&AGBKK((B

1ABB!!R(((((!"a((((((		) 		)r6   N)r2   r3   r4   r  r  r  r  r5   r6   r7   r  r    sP        4 4 4& & &) ) )) ) ) ) )r6   r  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                 t    |                     d|j                  }t          t          t          |           d S r  )rM   r   rD   rE   r   r_  s      r7   test_is_monotonic_emptyz'TestIsMonotonic.test_is_monotonic_empty  s1    HHV2:H..j,22222r6   c                 f    |                     g dg|j                  }t          |          sJ d S )Nr   r.   333333?rn   r   rB   r   r   r_  s      r7   test_is_monotonic_1x4z%TestIsMonotonic.test_is_monotonic_1x4  s8    JJ'rzJ::Ar6   c                 l    |                     g dg dg|j                  }t          |          sJ d S )Nr  )rn   r   皙?r   r   r  r_  s      r7   test_is_monotonic_2x4_Tz'TestIsMonotonic.test_is_monotonic_2x4_T  sI    JJ&(/1z  ; ;Ar6   c                 l    |                     g dg dg|j                  }t          |          rJ d S )N)r   r.   r  rn   )rn   r   r  r   r   r  r_  s      r7   test_is_monotonic_2x4_Fz'TestIsMonotonic.test_is_monotonic_2x4_F  sI    JJ&(/1z  ; ;??"""""r6   c                 r    |                     g dg dg dg|j                  }t          |          sJ d S )Nr  rn   r   r  rn   r   rA   g333333?r   r   r  r_  s      r7   test_is_monotonic_3x4_Tz'TestIsMonotonic.test_is_monotonic_3x4_T  sR    JJ&&(/1z  ; ; Ar6   c                 r    |                     g dg dg dg|j                  }t          |          rJ d S )Nr  )rn   r   皙?rn   r  r   r  r_  s      r7   test_is_monotonic_3x4_F1z(TestIsMonotonic.test_is_monotonic_3x4_F1  R    JJ&&(/1z  ; ;  ??"""""r6   c                 r    |                     g dg dg dg|j                  }t          |          rJ d S )N)r   r.   g?rn   r  r  r   r  r_  s      r7   test_is_monotonic_3x4_F2z(TestIsMonotonic.test_is_monotonic_3x4_F2  r  r6   c                 r    |                     g dg dg dg|j                  }t          |          rJ d S )Nr  r  )r   rA   r  r   r   r  r_  s      r7   test_is_monotonic_3x4_F3z(TestIsMonotonic.test_is_monotonic_3x4_F3  r  r6   c                     |                     t          t          j        d                    }t	          |          sJ d S Nr   )rB   r	   r/   r]   r   r_  s      r7    test_is_monotonic_tdist_linkage1z0TestIsMonotonic.test_is_monotonic_tdist_linkage1  s;     JJw298DDEEAr6   c                     |                     t          t          j        d                    }t	          j        |          d                             d          }t          |          rJ d S )Nr   )rn   rn   r@   )rB   r	   r/   r]   rm  rn  ro  r   r_  s      r7    test_is_monotonic_tdist_linkage2z0TestIsMonotonic.test_is_monotonic_tdist_linkage2  sZ     JJw298DDEEF1IIdO$$??"""""r6   c                     t           j        }|                    t          |d                    }t	          |          sJ d S r  )r/   r   rB   r	   r   )rG   rH   rk   r_   s       r7   test_is_monotonic_Q_linkagez+TestIsMonotonic.test_is_monotonic_Q_linkage  s?      #JJwq(++,,Ar6   N)r2   r3   r4   r  r  r  r  r  r  r  r  r  r  r  r5   r6   r7   r  r    s        3 3 3
  
  # # #  # # ## # ## # #  # # #    r6   r  c                   f    e Zd Zd Zd Zej                            dg d          d             ZdS )TestMaxDistsc                 t    |                     d|j                  }t          t          t          |           d S r  )rM   r   rD   rE   r   r_  s      r7   test_maxdists_empty_linkagez(TestMaxDists.test_maxdists_empty_linkage  s1    HHV2:H..j(A.....r6   c                     |                     g dg|j                  }t          |          }t          ||          }t	          ||d           d S )Nr   r.   r  r   r   ro   rZ   )rB   r   r   calculate_maximum_distancesr*   )rG   rH   r_   MD
expectedMDs        r7   !test_maxdists_one_cluster_linkagez.TestMaxDists.test_maxdists_one_cluster_linkage"  sU    JJ'rzJ::a[[0B77
JU333333r6   rU   r   rP   r   rb   rc   c                     t           j        }|                    t          ||                    }t	          |          }t          ||          }t          ||d           d S )Nro   rZ   )r/   r   rB   r	   r   r  r*   )rG   rU   rH   rk   r_   r  r  s          r7   test_maxdists_Q_linkagez$TestMaxDists.test_maxdists_Q_linkage)  s\      #JJwq&))**a[[0B77
JU333333r6   N)	r2   r3   r4   r  r  r   r   r   r  r5   r6   r7   r  r    sr        / / /
4 4 4 [FFFH H4 4H H4 4 4r6   r  c                   l    e Zd Zd Zd Zd Zej                            dg d          d             Z	dS )TestMaxInconstsc                     |                     d|j                  }|                     d|j                  }t          t          t          ||           d S r  )rM   r   rD   rE   r   rG   rH   r_   r  s       r7   test_maxinconsts_empty_linkagez.TestMaxInconsts.test_maxinconsts_empty_linkage7  sJ    HHV2:H..HHV2:H..j+q!44444r6   c                     |                     g dg|j                  }t          j                            dd          }|                     |          }t          t          t          ||           d S Nr  r   rn   r   )rB   r   rq   rr   rt   rD   rE   r   r  s       r7   test_maxinconsts_difrow_linkagez/TestMaxInconsts.test_maxinconsts_difrow_linkage=  s`     JJ'rzJ::INN1a  JJqMMj+q!44444r6   c                     |                     g dg|j                  }|                     g dg|j                  }t          ||          }t          |||          }t	          ||d           d S )Nr  r   r   r   r   r  r4  ro   rZ   )rB   r   r   !calculate_maximum_inconsistenciesr*   rG   rH   r_   r  r  r  s         r7   $test_maxinconsts_one_cluster_linkagez4TestMaxInconsts.test_maxinconsts_one_cluster_linkageE  s|    JJ'rzJ::JJ'rzJ::A6q!CCC
JU333333r6   rU   r  c                    t           j        }t          ||          }|                    t	          |                    }|                    |          }t          ||          }t          |||          }t          ||d           d S )Nr4  ro   rZ   )r/   r   r	   rB   r   r   r  r*   rG   rU   rH   rk   r_   r  r  r  s           r7   test_maxinconsts_Q_linkagez*TestMaxInconsts.test_maxinconsts_Q_linkageM  s      #AvJJ|A''JJqMMA6q!CCC
JU333333r6   N)
r2   r3   r4   r  r  r  r   r   r   r  r5   r6   r7   r  r  4  s        5 5 55 5 54 4 4 [FFFH H4 4H H4 4 4r6   r  c                      e Zd Zd Zej                            d ed                    d             Zej                            d ed                    d             Z	d Z
ej                            dg d          d	             Zd
S )TestMaxRStatc                    |                     g dg|j                  }|                     g dg|j                  }t          j        t                    5  t          ||d           d d d            n# 1 swxY w Y   t          j        t                    5  t          ||d           d d d            n# 1 swxY w Y   t          j        t                    5  t          ||d           d d d            d S # 1 swxY w Y   d S )Nr  r   r  gffffff
@r   r   )rB   r   r   r   r^  r   rE   r  s       r7   test_maxRstat_invalid_indexz(TestMaxRStat.test_maxRstat_invalid_index]  s   JJ'rzJ::JJ'rzJ::]9%% 	  	 Q3	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 ]:&& 	 	Q2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:&& 	 	Q1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   A66A:=A:B88B<?B<C;;C?C?rI  r   c                     |                     d|j                  }|                     d|j                  }t          t          t          |||           d S r  )rM   r   rD   rE   r   rG   rI  rH   r_   r  s        r7   test_maxRstat_empty_linkagez(TestMaxRStat.test_maxRstat_empty_linkageh  sN     HHV2:H..HHV2:H..j(Aq!44444r6   c                     |                     g dg|j                  }t          j                            dd          }|                     |          }t          t          t          |||           d S r  )rB   r   rq   rr   rt   rD   rE   r   r  s        r7   test_maxRstat_difrow_linkagez)TestMaxRStat.test_maxRstat_difrow_linkageo  sb     JJ'rzJ::INN1a  JJqMMj(Aq!44444r6   c                     |                     g dg|j                  }|                     g dg|j                  }t          ||d          }t          ||d|          }t	          ||d           d S )Nr  r   r  r.   ro   rZ   )rB   r   r   r  r*   r  s         r7   !test_maxRstat_one_cluster_linkagez.TestMaxRStat.test_maxRstat_one_cluster_linkagex  s}    JJ'rzJ::JJ'rzJ::aA6q!QCC
JU333333r6   rU   r  c                    t           j        }t          ||          }|                    t	          |                    }|                    |          }t          ||d          }t          ||d|          }t          ||d           d S )Nr.   ro   rZ   )r/   r   r	   rB   r   r   r  r*   r  s           r7   test_maxRstat_Q_linkagez$TestMaxRStat.test_maxRstat_Q_linkage  s      #AvJJ|A''JJqMMaA6q!QCC
JU333333r6   N)r2   r3   r4   r  r   r   r   r>  r  r  r	  r  r5   r6   r7   r   r   Z  s        	 	 	 [S%%((++5 5 ,+5 [S%%((++5 5 ,+54 4 4 [FFFH H4 4H H4 4 4r6   r   c                      e Zd Zd Zd Zd Zej                            e	 d          d             Z
 edd           ed	d
          ej                            e	 d          ej                            dg d          d                                                 Z edd           ed	d
          ej                            e	 d          d                                     Zej        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rn   rA   r.   r   r   r   )rB   r	   r/   r]   r   r   )rG   rH   r_   r  r  s        r7   $test_dendrogram_single_linkage_tdistz3TestDendrogram.test_dendrogram_single_linkage_tdist  sY    JJw298DDEEq$'''8V///00000r6   c                     |                     t          t          j        d                    }t	          t
          t          |d           d S )Nr   fooorientation)rB   r	   r/   r]   rD   rE   r   r_  s      r7   test_valid_orientationz%TestDendrogram.test_valid_orientation  s>    JJw298DDEEj*aUCCCCCCr6   c                     |                     t          t          j        d                    }g d}t	          ||                     |          d          }t	          ||d          }||k    sJ d S )Nr   )r.   r   rn   r   r   rA   T)labelsr  )rB   r	   r/   r]   r   )rG   rH   r_   r  result1result2s         r7   test_labels_as_array_or_listz+TestDendrogram.test_labels_as_array_or_list  sw    JJw298DDEE###Qrzz&'9'94HHHQvt<<<'!!!!!!r6   zno matplotlibr=   c           	         |                     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   )rn   r   r   rA   )r   rA   r   r   d   )r  z.Dimensions of Z and labels must be consistent.r   )rB   pltfigurer   r   rE   r   r  r>  strvalueclose)rG   rH   linkexc_infos       r7   test_valid_label_sizez$TestDendrogram.test_valid_label_size  s   zz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#torchzFMPL 3.9.2 & torch DeprecationWarning from __array_wrap__ and NumPy 2.0z
dask.arrayz.dask.array has bad interaction with matplotlibr  )topbottomleftrightc                 (   |                     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          j         |d                   |d<   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          j         |	d                   |	d<   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   r   )     F@r4       K@r5  )     A@r6        I@r7  )      9@r8       @E@r9  )r   r        @@r:  )251034r  )r.  r.  r/  r/  r/  r/  
color_listdcoordicoordivlr  leaves_color_list   )axr  rC  rm   Z   )rH  r  leaf_font_sizeleaf_rotation)r)  r*  r   )rH  r  rK  )rH  r  rJ  r  )rB   r	   r/   r]   r   r!  add_subplotr   rq   r   get_xticklabelsget_yticklabelsget_rotationget_sizer$  )
rG   r  rH   r_   expectedfigrH  R1	testlabelR2s
             r7   test_dendrogram_plotz#TestDendrogram.test_dendrogram_plot  s    JJw298DDEE"@"@"@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:::z"X,//8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	z"X,//8R"""""r6   c           
      "   |                     t          t          j        d                    }t	          |ddd          }t          j                     t          j         |d                   |d<   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          j         |d                   |d<   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   rn   lastpT)show_contractedrC  r/  )r@   r   r   r@   r3  (2)z(4)r   r   rA  mtica)r.  r/  r/  r/  r0  )r@   r   r   r@   r1  r2  )r6  r6  r4  r4  )r8  r8        D@r\  )r   r        @@@r]  )r;  r<  r=  r>  rZ  )rn   rA   r.   r   r   )r.  r.  r/  r/  r/  )	rB   r	   r/   r]   r   r   r$  rq   r   r  s       r7   test_dendrogram_truncate_modez,TestDendrogram.test_dendrogram_truncate_mode  s    JJw298DDEEq!Wd;;;	j8--(Qv$<$<$<#=$:$:$:#;!&$%q6/3Tl  	 	 	 q!Wd;;;	j8--(Q'?'?'?$<$<$<$<$<$<$>$>$>$@$@$@$B %;$:$:$<$<$<$<$<$<$<$<$<$> !< ; ;#2??.L.L.L  	 	 	 	 	r6   c                     t                      S r   r,   r  s    r7   dendrogram_lockzTestDendrogram.dendrogram_lock%  s    vvr6   c                 R   |                     t          t          j        d                    }|5  t	          g d           t          |ddd          }t	          g d           |d         }t          |g d	           t	          d            d d d            d S # 1 swxY w Y   d S )
Nr   )r   mrI   kTg   )r  above_threshold_colorcolor_threshold)rd  rr   rb  rI   rc  rB  )r   rb  rd  rd  rd  )rB   r	   r/   r]   r   r   r   )rG   rH   r`  r_   r  rB  s         r7   test_dendrogram_colorsz%TestDendrogram.test_dendrogram_colors)  s   JJw298DDEE 	) 	)"#7#7#78881d14cK K KA"#A#A#ABBB<J%>%>%>??? #4(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   ABB #B 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   rn   r   r   r.   r   r   Tr  r/  r.  r.  r/  C2rp  rF  rq   rB   r	   r   r   rG   rH   rk   r_   rx   
exp_colorscolorss          r7   %test_dendrogram_leaf_colors_zero_distz4TestDendrogram.test_dendrogram_leaf_colors_zero_dist:  s     J			!		!		!		!		!		# $ $ JJwq(++,,q$'''999
&'VZ(((((r6   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 )Nrk  )r   r   g?rm  rl  rn  r   Tr  ro  rF  rq  rr  s          r7   test_dendrogram_leaf_colorsz*TestDendrogram.test_dendrogram_leaf_colorsI  s     J			#!		!		!		!		# $ $ JJwq(++,,q$'''999
&'VZ(((((r6   N)r2   r3   r4   r  r  r  r   r   skipifhave_matplotlibr'  r   r   rV  r^  fixturer`  ri  ru  rw  r5   r6   r7   r  r    s       1 1 1D D D" " " [O+ODD  ED& g!   l@   [O+ODD[],N,N,NOO<# <# PO ED 	 <#| g"   l@   [O+ODD  ED 	 > ^  ^) ) )") ) )) ) ) ) )r6   r  c                 
   | j         d         dz   }|                    |dz
  f| j                  }t          d|dz
            D ]=}|                    d          }| |df         }| |df         }||k    rM||                    ||j                  |z
           }t          j        |d                              |          }||k    rM||                    ||j                  |z
           }	t          j        |d                              |	          }t          j        |d                              | |df                   }t          j        ||                              |	                    |                    }?|S Nr   r.   r   )r   rn   )
rC  rM   r   r>  rB   r]  rm  rn  ro  max)
r_   rH   rw   BrI  qr+  r,  b_leftb_rights
             r7   r  r  Y  sS   	
QA
!A#qw''A1a!e__ ( (HHTNNAw!Q$199rzz$bhz77!;<Fq!  ((AA::

5
99A=>Gq!  ))AF1aLLQq!tW%%F1aLLRVVAYY''Hr6   r   c                 ,   | j         d         dz   }|                    | |          }|                    |dz
  f|          }t          d|dz
            D ]=}|                    d          }| |df         }	| |df         }
|	|k    rM||                    |	|j                  |z
           }t          j        |d                              |          }|
|k    rM||                    |
|j                  |z
           }t          j        |d                              |          }t          j        |d                              |||f                   }t          j        ||                              |	                    |                    }?|S r|  )
rC  result_typerM   r>  rB   r]  rm  rn  ro  r}  )r_   r  rc  rH   rw   r   r~  rI  r  r+  r,  r  r  s                r7   r  r  l  sd   	
QANN1a  E
!A#u%%A1a!e__ ( (HHTNNAw!Q$199rzz$bhz77!;<Fq!  ((AA::

5
99A=>Gq!  ))AF1aLLQq!tW%%F1aLLRVVAYY''Hr6   c                 ~   t           j                            d           d}t           j                            |d          }|                     t          |                    }t          |          }t          ||                                k               t          |	                                |                                k               t          |	                                |	                                k               t          |	                                |                                k               d S )N   2   r   )
rq   rr   seedrandnrB   r   r   r   r  r  )rH   rD  rk   r_   trees        r7   test_node_comparer    s    INN2D
	a  A


477A1::DD4==??"###DNNt}}.///DNN 0 00111DNN/00000r6   c           	      8   t           j                            d           d}t           j                            |d          }|                     t          |                    }t          |          }t          |d d df         |                     |          dd           t          |d d df         | 	                    |          dd           t          t          j        |                              d          t          j        |d	z
  dd                     t          |d d d
gf         t          |d          d           t          |d d d
dgf         t          |ddg          d           t          |d d dd
gf         t          |ddg          d           t          |          }|                     d |D                       }t          |d d t          j        |dg          f         t          |d          d           t          |d d t          j        |ddg          f         t          |ddg          d           t          |d d t          j        |ddg          f         t          |ddg          d           d S )Nr  r  r   r   ro   F)rp   check_dtyper   r.   rA   )
n_clustersr   ir   c                     g | ]	}|j         
S r5   )dist)r   r  s     r7   r   z!test_cut_tree.<locals>.<listcomp>  s    666$)666r6   )height)rq   rr   r  r  rB   r   r    r*   arangerM   r   r}  r"   searchsorted)rH   rD  rk   r_   cutreenodesheightss          r7   test_cut_treer    s   INN2D
	a  A


477Aa[[F F111a4L"))D//5QQQQF111b5M288D>>5QQQQF##''**BIdQhB,G,GHHHF111rd7OXaA%>%>%>UKKKKF111r3i<((1!R*I*I*IPUVVVVF111sBi<((1"a*I*I*IPUVVVV""Ejj6666677GF111bogs;;;<Qq)))7 7 7 7F111bog2w???@Q2w///e= = = =F111bogAw???@QAw///e= = = = = =r6   c                 (   t          |                     t          t          j                            |                     t          j                            }t          j        }t          ||                     |          d           t          |                     t          t          j        d                    |                     t          j                            }t          j        }t          ||                     |          d           d S )NrY   rZ   r   rh   )	r!   rB   r	   r/   r]   r~   r*   rk   linkage_X_ward_olo)rH   r_   r`   s      r7   r   r     s     	bjj1D1K)L)LMM jj)<)CDD	F 	FA#=IArzz),,59999 	bjj1D1F)O)OPP jj)<)>??	A 	AA#6IArzz),,5999999r6   z"`Heap` only supports NumPy backend)np_onlyr>   c                    |                      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)rn   r   r         r   keyr   r#  r  r.   r   g      @rn   r   r   r   )rB   r&   get_minr   
remove_minchange_value)rH   r   heappairs       r7   	test_Heapr    s   ZZ+++,,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#####r6   )\numpyrq   numpy.testingr   r   r   r   r   r   rD   scipy.cluster.hierarchyr   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$   r%   scipy.cluster._hierarchyr&   scipy.spatial.distancer'   scipy._lib._array_apir(   r)   r*   r+   scipy._lib.array_api_extra_libarray_api_extrarm  	threadingr-    r/   r1   
matplotlibusematplotlib.pyplotpyplotr   ry  	Exceptionr   r   r:   r   r   r   r   r   r  r  rL  r|  r  r  r  r  r  r  r   r  r  r  r  r  r   r  r5   r6   r7   <module>r     s  D     T T T T T T T T T T T T  * * * * * *K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K * ) ) ) ) ) ( ( ( ( ( (E E E E E E E E E E E E ( ( ( ( ( ( ( ( (       ! ! ! ! ! !( ( ( ( ( ( ( (JN5######OO   OOO ;/  7c/ c/ c/ c/ c/ c/ c/ c/L <  	T 	T 	T 	T 	T 	T 	T ! 	T 8&& && && && && && && &&R $o66$ $ $ $ $ $ $ 76$@ <  + + + + + + + ! +  8*2 *2 *2 *2 *2 *2 *2 *2Z 7: : : : : : : : =!!S7 S7 S7 S7 S7 S7 S7 "!S7l #$$Q6 Q6 Q6 Q6 Q6 Q6 Q6 %$Q6h ;I1 I1 I1 I1 I1 I1 I1  I1X +  +  +  +  +  +  +  +F ;(($ $ $ $ $ $ $ )($D :0) 0) 0) 0) 0) 0) 0) 0)f <  F F F F F F F ! FR 84 4 4 4 4 4 4 42 ;"4 "4 "4 "4 "4 "4 "4  "4J 8/4 /4 /4 /4 /4 /4 /4 /4d :H) H) H) H) H) H) H) H)V  & /0B    ( 7	1 	1 	1 8= = =6 ()): : *): $'KLLL$ $ ML$ $ $s   B3 3B=<B=