
    Џkhj                        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;jx                  d       d dl=m>Z? dZ@ej                  j                  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[y# eA$ r dZ@Y w xY w)=    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y)eagerN)__name__
__module____qualname__r   r        ^/var/www/teggl/fontify/venv/lib/python3.12/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                  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                  j                  de      d        Zd Z edd      d        Zy) TestLinkage	jax.numpy$Can't raise inside jax.pure_callbackreasonc                 t    |j                  |j                  gdgdz  z         }t        t        t        |       y )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                 P    |j                  d      }t        t        t        |       y )Nr   )zerosrD   rE   r	   rF   s      r7   "test_linkage_empty_distance_matrixz.TestLinkage.test_linkage_empty_distance_matrixY   s    HHTNj'1-r6   c                 6    dD ]  }| j                  ||        y )N)r   completeaverageweighted)check_linkage_tdistrG   rH   methods      r7   test_linkage_tdistzTestLinkage.test_linkage_tdist^   s!    C 	1F$$VR0	1r6   c                     t        |j                  t        j                        |      }t	        t        d|z         }t        ||j                  |      d       y )Nlinkage_ytdist_绽|=atolr	   rB   r/   ytdistgetattrr*   )rG   rU   rH   Z	expectedZs        r7   rS   zTestLinkage.check_linkage_tdistb   sF    BJJ299:FC/1BV1KL	2::i0u=r6   c                 6    dD ]  }| j                  ||        y )N)centroidmedianr   )check_linkage_qrT   s      r7   test_linkage_XzTestLinkage.test_linkage_Xh   s!    4 	-F  ,	-r6   c                 `   t        |j                  t        j                        |      }t	        t        d|z         }t        ||j                  |      d       |j                  t        j                        }t        |d      }t        ||      }t        ||j                  |      d       y )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45v>/1FG	2::i0u=JJ*,,-!K(Av2::i0u=r6   c                 X   t         j                  j                  d      }d}|j                  |d      }t	        |      }t        j                         D ]U  \  }}t        j                  |||      }t        |j                  |      |      }	t        |	|j                  |      dd       W y )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    ii##A&HHQN!H,224 	NLFD"**1a6I

1v.AArzz)45uM	Nr6   c                     t        |j                  t        j                        d      }t	        t        d      }t        ||j                  |      d       y )NT)optimal_orderinglinkage_ytdist_single_olorY   rZ   r\   )rG   rH   r_   r`   s       r7   test_optimal_leaf_orderingz&TestLinkage.test_optimal_leaf_ordering   sA    BJJ299:TR/1LM	2::i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                     |j                  ddgddgddgg      }t        ||      }|j                  ||j                        }t        ||d       y )Nr   r.   rU   dtyperh   rZ   )rB   r	   float64r*   )rG   rU   expectrH   rk   r_   s         r7   test_linkage_tieszTestLinkage.test_linkage_ties   sS    " JJR1a&1a&12Af%F"**56.r6   c                     |j                  ddgddgg      }t        |t              5  t        |       d d d        y # 1 sw Y   y xY w)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   sC    JJAA'(N+ 	AJ	 	 	s	   =ArU   c                     |j                  ddgddgg      }t        j                  t              5  t	        ||d       d d d        y # 1 sw Y   y xY w)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   sJ    JJAA'(]]:& 	:Af[9	: 	: 	:s   A		Ac                     t        |j                  dg      dd      }t        |j                  ddgddgg      dd      }t        ||d       y )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RZZ!Q!Q 01(;WBU+r6   c                     |j                  g d      }t        j                  t              5  t	        |d       d d d        y # 1 sw Y   y xY w)N)r   r   r   rb   r   r   )rG   rH   valuess      r7   test_centroid_neg_distancez&TestLinkage.test_centroid_neg_distance   s=     J']]:& 	/F:.	/ 	/ 	/s   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   s?    k*PQ. R..
1>-	>	N>
 [[_	++- 	.	++- 	.	++- 	.	++- 	.	++- 	.	++- 	.	++- 	./  /! /
 [[X'9:: ;:
,
 k*PQ/ R/r6   r:   c                       e Zd Zd Zd Zy)TestInconsistentc                 R    t         j                  D ]  }| j                  ||        y N)r/   inconsistent_ytdistcheck_inconsistent_tdist)rG   rH   depths      r7   test_inconsistent_tdistz(TestInconsistent.test_inconsistent_tdist   s'    (<< 	5E))%4	5r6   c                     |j                  t        j                        }t        t	        ||      |j                  t        j
                  |                y r   )rB   r/   linkage_ytdist_singler*   r   r   )rG   r   rH   r_   s       r7   r   z)TestInconsistent.check_inconsistent_tdist   sA    JJ*@@AQ.

#6#J#J5#QR	Tr6   N)r2   r3   r4   r   r   r5   r6   r7   r   r      s    5Tr6   r   c                   8    e Zd Zd Zd Z edd      d        Zy)TestCopheneticDistancec                     |j                  g d      }|j                  t        j                        }t        |      }t	        ||j                  ||j
                        d       y )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   sP    JJ  9 :	JJ*@@AQK2::irzz:BOr6   c                 P   |j                  t        j                        }t        ||j                  t        j                              \  }}|j                  g d|j
                        }|j                  d|j
                        d   }t        ||d       t        ||d       y )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!RZZ(;(B(BCDAJJ  9@B

  L	JJ?rzzJRSUV	95195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        |j	                  |             d d d        y # 1 sw Y   y xY w)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   sb     ""!"!""##$$
& ]]:-EF 	&RZZ_%	& 	& 	&s   A##A,N)r2   r3   r4   r   r   r   r   r5   r6   r7   r   r      s*    P2 k*PQ& R&r6   r   c                       e Zd Zd Zd Zd Zy)TestMLabLinkageConversionc                     |j                  g |j                        }t        t        |      |       t        t	        |      |       y )Nr   )rB   r   r+   r
   r   r   s      r7   "test_mlab_linkage_conversion_emptyz<TestMLabLinkageConversion.test_mlab_linkage_conversion_empty   s7    JJrJ,)!,a0*A.r6   c                    |j                  g dg      }|j                  g dg      }t        t        |      |j                  ||j                        d       t        t	        |      |j                  ||j                        d       y )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   so    JJ()*ZZ$)"-rzz!2::z/N"	$*BJJrJ,L"	$r6   c                 .   |j                  g dg dg dg dg dg      }|j                  g dg dg dg d	g d
g|j                        }t        t        |      |d       t        t	        |      |j                  ||j                        d       y )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k$k<A BJJ*****	,
  ZZ  ) 	)"-qu=*BJJrJ,L"	$r6   N)r2   r3   r4   r   r   r   r5   r6   r7   r   r      s    /$$r6   r   c                   >   e Zd Z ee      ej                  j                  dej                  D  cg c]  }d|f c}} ej                  D  cg c]  }d|f c}} z   ej                  D  cg c]  }d|f c}} z         d               Zyc c}} w c c}} w c c}} w )TestFclusterDatacriterion,tr   distancemaxclustc                     |j                  t        t        d|z         |         }|j                  t        j                        }t	        |||      }t        ||      sJ y N	fcluster_	criteriont)rB   r^   r/   Q_Xr   r   )rG   r   r   rH   	expectedTrk   Ts          r7   test_fclusterdataz"TestFclusterData.test_fclusterdata  sX     JJw':K)<STUVWX	JJ*../i15Q	***r6   N)r2   r3   r4   r)   r   r   r   r   r/   fcluster_inconsistentfcluster_distancefcluster_maxclustr   .0r   s   00r7   r   r     s     }%[[]&9&O&OP.!	P$7$I$I
JqJ?
J	K$7$I$I
JqJ?
J	K
+ &+	 	Q
J
Js   BB-Br   c                   @   e Zd Z eee      ej                  j                  de	j                  D  cg c]  }d|f c}} e	j                  D  cg c]  }d|f c}} z   e	j                  D  cg c]  }d|f c}} z         d               Z eeee      ej                  j                  de	j                        d               Z eeee      ej                  j                  de	j                        d               Z ee      d	        Zy
c c}} w c c}} w c c}} w )TestFclusterr   r   r   r   c                     |j                  t        t        d|z         |         }t        |j                  t        j                              }t        |||      }t        t        ||             y r   )rB   r^   r/   r   r   r   r   r   )rG   r   r   rH   r   r_   r   s          r7   test_fclusterzTestFcluster.test_fcluster"  s\     JJw':K)<STUVWX	2::15567Q)q1a+,r6   r   c                     |j                  t        j                  |         }t        |j                  t        j                              }t        ||dt        |            }t        t        ||             y )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/  s[     JJ2DDQGH	2::15567QZ(1+Fa+,r6   c                     |j                  t        j                  |         }t        |j                  t        j                              }t        ||dt        |            }t        t        ||             y )Nmaxclust_monocritr   )	rB   r/   r   r   r   r   r   r   r   r   s         r7   test_fcluster_maxclust_monocritz,TestFcluster.test_fcluster_maxclust_monocrit7  s\     JJ2DDQGH	2::15567Q%88A;Oa+,r6   c                    |j                  dgdgdgg      }t        |      }t        t        |dd      |j                  g d             t        t        |dd      |j                  g d             t        t        |d	d      |j                  g d
             t        t        |dd      |j                  g d
             y )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#'1I8AjA::i0	28AjA::i0	28AjA::i0	28AjA::i0	2r6   N)r2   r3   r4   r)   r   r   r   r   r   r/   r   r   r   r   r   r   r   r  r   s   00r7   r   r     s,    v}-[[]&9&O&OP.!	P$7$I$I
JqJ?
J	K$7$I$I
JqJ?
J	K
- .- v}h7[[S"5"G"GH- I 8- v}h7[[S"5"G"GH- I 8- v
2 
29 	Q
J
Js   DD.Dr   c                       e Zd Zd Zy)TestLeadersc                 X   t         j                  }t        |      }t        |      }t	        |dd      }|j                  |      }|j                  ||j                        }t        ||      }|j                  g d|j                        }t        |j                  |      |d       y )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    ##!HAJQ*2JJqMJJqJ)AqM1B		!f5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                  j                  dg d	      d
        Ze
j                  j                  dg d	      d        Zd ZddZy)TestIsIsomorphicc                 D    t        g dg d      sJ t        g g       sJ y Nr   )rn   rn   rn   )r   rG   s    r7   test_array_likez TestIsIsomorphic.test_array_like`  s"    Y	222R$$$r6   c                     |j                  g d      }|j                  g d      }t        ||      sJ t        ||      sJ y r  rB   r   rG   rH   abs       r7   test_is_isomorphic_1z%TestIsIsomorphic.test_is_isomorphic_1d  >    JJy!JJy!Q"""Q"""r6   c                     |j                  g d      }|j                  g d      }t        ||      sJ t        ||      sJ y )N)r.   r   r.   )rn   r   rn   r  r  s       r7   test_is_isomorphic_2z%TestIsIsomorphic.test_is_isomorphic_2k  r  r6   c                 d    |j                  g       }|j                  g       }t        ||      sJ y r   r  r  s       r7   test_is_isomorphic_3z%TestIsIsomorphic.test_is_isomorphic_3r  s,    JJrNJJrNQ"""r6   c                     |j                  g d      }|j                  g d      }t        ||      sJ t        ||      sJ y )Nr   )r.   r   rn   r  r  s       r7   test_is_isomorphic_4Az&TestIsIsomorphic.test_is_isomorphic_4Ax  @     JJy!JJy!Q"""Q"""r6   c                     |j                  g d      }|j                  g d      }t        ||      rJ t        ||      rJ y )N)r.   rn   r   r   )r.   r   rn   r   r  r  s       r7   test_is_isomorphic_4Bz&TestIsIsomorphic.test_is_isomorphic_4B  sC     JJ|$JJ|$ A&&& A&&&&r6   c                     |j                  g d      }|j                  g d      }t        ||      sJ t        ||      sJ y )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                 ,    | j                  d||       y )N  rH   is_isomorphic_randpermrG   r%  rH   s      r7   test_is_isomorphic_5z%TestIsIsomorphic.test_is_isomorphic_5  s     	##D)#;r6   c                 0    | j                  d|dd|       y )Nr'  TrA   r(  r)  r+  s      r7   test_is_isomorphic_6z%TestIsIsomorphic.test_is_isomorphic_6  s    
 	##D)T1#Dr6   c                 l    |j                  g d      }|j                  g d      }t        ||      rJ y )Nr   r   r  r  s       r7   test_is_isomorphic_7z%TestIsIsomorphic.test_is_isomorphic_7  s1    JJy!JJy! A&&&&r6   c                z   t        d      D ],  }t        j                  j                  |      |z  j	                  t
              }t        j                  |j                  t
              }t        j                  j                  |      }	t        d|j                  d         D ]  }
|	||
      ||
<    |r?t        j                  j                  |      }||d| xx   dz  cc<   ||d| xx   |z  cc<   |j                  |      }|j                  |      }t        ||      | k(  sJ t        ||      | k(  r-J  y )Nr   r   r   r.   )rangerq   rr   rt   astypeintrM   sizepermutationshaperB   r   )rG   nobsr%  nonisonerrorsrH   _r  r  PiQs               r7   r*  z'TestIsIsomorphic.is_isomorphic_randperm  s   q 	7A%	199#>As+A		%%i0A1aggaj) 1w!II))$/!Ag,1$!Ag,9,

1A

1A A&v:666 A&v:666	7r6   N)Fr   )r2   r3   r4   r  r  r  r  r  r"  r$  r   r   r   r,  r.  r0  r*  r5   r6   r7   r  r  ]  s{    %####'# [[[)4< 5<
 [[[)4E 5E'7r6   r  c                   ~    e Zd Zej                  j                  dg d      d        Zd Zd Zd Z	d Z
d Zd	 Zd
 Zy)TestIsValidLinkagenrow, ncol, valid)rn   rA   F)rn   r   F)r.   r   T)rn   r   Tc                     |j                  g dg dg|j                        }|d |d |f   }t        t        |      |d       |st	        t
        t        |d       y y 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  sg     JJ))+24**  >eteUdUlO(+UEJ*&6F r6   c                     |j                  g dg dg|j                        }t        t        |      dd       t	        t
        t        |d       y Nr   r.   r   rn   r   rn   r   r   r   FrE  TrG  )rB   int64r+   r   rD   	TypeErrorrG   rH   r_   s      r7   test_is_valid_linkage_int_typez1TestIsValidLinkage.test_is_valid_linkage_int_type  sG    JJ&(/1xx  9(+UEJi!11DAr6   c                     |j                  d|j                        }t        t        |      dd       t	        t
        t        |d       y Nr   r   r   FrE  TrG  )rM   r   r+   r   rD   rE   rS  s      r7   test_is_valid_linkage_emptyz.TestIsValidLinkage.test_is_valid_linkage_empty  s9    HHV2::H.(+UEJj"2ATBr6   c                     t        ddd      D ]l  }t        j                  j                  ||dz
  z  dz        }|j	                  t        |            }|j	                  |      }t        t        |      dd       n y 	Nr      r   r.   rn   TFrE  )r2  rq   rr   rt   rB   r	   r+   r   rG   rH   r=  rI   r_   s        r7   test_is_valid_linkage_4_and_upz1TestIsValidLinkage.test_is_valid_linkage_4_and_up  sl     q"a 	NA		q!A#wz*A

71:&A

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

71:&A

1Aq	!Q$'"&&r*A,Q/Nz* 6&&q&56 6	66 6    C##C,	c                    t        ddd      D ]  }t        j                  j                  ||dz
  z  dz        }|j	                  t        |            }|j	                  |      }t        j                  |      |dz  df   j                  d      }t        t        |      dd       t        j                  t              5  t        j                  |d	
       d d d         y # 1 sw Y   xY wNr   r[  r   r.   rn   r_  FrE  TrG  r`  r\  s        r7   .test_is_valid_linkage_4_and_up_neg_index_rightzATestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_right  re  rf  c                    t        ddd      D ]  }t        j                  j                  ||dz
  z  dz        }|j	                  t        |            }|j	                  |      }t        j                  |      |dz  df   j                  d      }t        t        |      dd       t        j                  t              5  t        j                  |d	
       d d d         y # 1 sw Y   xY wNr   r[  r   r.   rn   g      FrE  TrG  r`  r\  s        r7   'test_is_valid_linkage_4_and_up_neg_distz:TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_dist  s     q"a 	6A		q!A#wz*A

71:&A

1Aq	!Q$'"&&t,A,Q/Nz* 6&&q&56 6	66 6rf  c                    t        ddd      D ]  }t        j                  j                  ||dz
  z  dz        }|j	                  t        |            }|j	                  |      }t        j                  |      |dz  df   j                  d      }t        t        |      dd       t        j                  t              5  t        j                  |d	
       d d d         y # 1 sw Y   xY wrh  r`  r\  s        r7   )test_is_valid_linkage_4_and_up_neg_countsz<TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_counts  re  rf  N)r2   r3   r4   r   r   r   rL  rT  rX  r]  rd  ri  rl  rn  r5   r6   r7   r@  r@    sX     [[0 3N OGOGBCN
6
6
6
6r6   r@  c                   x    e Zd Zd Zej
                  j                  dg d      d        Zd Zd Z	d Z
d Zd	 Zy
)TestIsValidInconsistentc                     |j                  g dg dg|j                        }t        t        |      dd       t	        t
        t        |d       y rN  )rB   rQ  r+   r   rD   rR  rG   rH   Rs      r7   test_is_valid_im_int_typez1TestIsValidInconsistent.test_is_valid_im_int_type  sD    JJ&(/1xx  9AuEiat<r6   rA  rB  c                     |j                  g dg dg|j                        }|d |d |f   }t        t        |      |d       |st	        t
        t        |d       y y rD  )rB   r   r+   r   rD   rE   )rG   rI  rJ  rK  rH   rs  s         r7   test_is_valid_im_various_sizez5TestIsValidInconsistent.test_is_valid_im_various_size  sd     JJ))+24**  >eteUdUlOAuE*k1DA r6   c                     |j                  d|j                        }t        t        |      dd       t	        t
        t        |d       y rV  )rM   r   r+   r   rD   rE   rr  s      r7   test_is_valid_im_emptyz.TestIsValidInconsistent.test_is_valid_im_empty  s6    HHV2::H.AuEj+q=r6   c                     t        ddd      D ]h  }t        j                  j                  ||dz
  z  dz        }t	        |      }t        |      }|j                  |      }t        t        |      dd       j y rZ  )	r2  rq   rr   rt   r	   r   rB   r+   r   rG   rH   r=  rI   r_   rs  s         r7   test_is_valid_im_4_and_upz1TestIsValidInconsistent.test_is_valid_im_4_and_up$  sj     q"a 	IA		q!A#wz*A
AQA

1AKND%H	Ir6   c                    t        ddd      D ]  }t        j                  j                  ||dz
  z  dz        }t	        |      }t        |      }t        j                  |      |dz  df   j                  d      }|j                  |      }t        t        |      dd	       t        j                  t              5  t        j                  |d
       d d d         y # 1 sw Y   xY w)Nr   r[  r   r.   rn   r          FrE  TrG  r2  rq   rr   rt   r	   r   ra  rb  rc  rB   r+   r   r   r   rE   r1   rz  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 	1A		q!A#wz*A
AQAq	!Q$(#''-A

1AKNE5Iz* 1!!!4!01 1	11 1   <CC(	c                    t        ddd      D ]  }t        j                  j                  ||dz
  z  dz        }t	        |      }t        |      }t        j                  |      |dz  df   j                  d      }|j                  |      }t        t        |      dd       t        j                  t              5  t        j                  |d	
       d d d         y # 1 sw Y   xY w)Nr   r[  r   r.   rn   r}  FrE  TrG  r~  rz  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                  j                  ||dz
  z  dz        }t	        |      }t        |      }t        j                  |      |dz  df   j                  d      }|j                  |      }t        t        |      dd       t        j                  t              5  t        j                  |d	
       d d d         y # 1 sw Y   xY wrk  r~  rz  s         r7   "test_is_valid_im_4_and_up_neg_distz:TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_distH  s     q"a 	1A		q!A#wz*A
AQAq	!Q$'"&&t,A

1AKNE5Iz* 1!!!4!01 1	11 1r  N)r2   r3   r4   rt  r   r   r   rv  rx  r{  r  r  r  r5   r6   r7   rp  rp  	  sQ    = [[0 3N OBOB>I111r6   rp  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestNumObsLinkagec                 h    |j                  d|j                        }t        t        t        |       y NrW  r   )rM   r   rD   rE   r   rS  s      r7   test_num_obs_linkage_emptyz,TestNumObsLinkage.test_num_obs_linkage_emptyX  s$    HHV2::H.j/15r6   c                 d    |j                  g dg|j                        }t        |      dk(  sJ y )NrO  r   rn   rB   r   r   rS  s      r7   test_num_obs_linkage_1x4z*TestNumObsLinkage.test_num_obs_linkage_1x4]  s.    JJ'rzzJ:q!Q&&&r6   c                 j    |j                  g dg dg|j                        }t        |      dk(  sJ y )NrO  rP  r   r   r  rS  s      r7   test_num_obs_linkage_2x4z*TestNumObsLinkage.test_num_obs_linkage_2x4b  s9    JJ&(/1zz  ;q!Q&&&r6   c                     t        ddd      D ]T  }t        j                  j                  ||dz
  z  dz        }|j	                  t        |            }t        |      |k(  rTJ  y )Nr   r[  r   r.   rn   )r2  rq   rr   rt   rB   r	   r   r\  s        r7   test_num_obs_linkage_4_and_upz/TestNumObsLinkage.test_num_obs_linkage_4_and_uph  s^     q"a 	+A		q!A#wz*A

71:&A"1%***	+r6   c                     t        dd      D ]W  }t        j                  j                  |d      }t	        |      }|j                  t        |            }t        |      |k(  rWJ  y )Nrn   r   r   )r2  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  sY    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
'
'++r6   r  c                   f    e Zd Zd Zd Zej                  j                  dg d      d        Zd Z	y)TestLeavesListc                     |j                  g dg|j                        }t        |       t        t	        |      ddgd       y )NrO  r   r   r.   ro   r   rB   r   r   r   r   rS  s      r7   test_leaves_list_1x4z#TestLeavesList.test_leaves_list_1x4|  s6    JJ'rzzJ:
AAU;r6   c                     |j                  g dg dg|j                        }t        |       t        t	        |      g dd       y )NrO  rP  r   )r   r.   rn   ro   r   r  rS  s      r7   test_leaves_list_2x4z#TestLeavesList.test_leaves_list_2x4  s=    JJ&(/1zz  ;
A	>r6   rU   )r   rP   rQ   rR   rb   rc   r   c                     t         j                  }|j                  t        ||            }t	        |      }t        |j                         t        |      d       y )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  sD      ##JJwq&)*qz(+a.uEr6   c                    t         j                  }|j                  t        |d            }t	        |      }t        |j                         |j                         j                         |j                         j                         z   d       y )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  sf    ##JJwq(+,qz(224t~~7G7Q7Q7SS"	$r6   N)
r2   r3   r4   r  r  r   r   r   r  r  r5   r6   r7   r  r  y  s=    <? [[XSUFUF$r6   r  c                   $    e Zd Zd Zd Zd Zd Zy)TestCorrespondc                     |j                  d|j                        }|j                  d|j                        }t        t        t        ||       y )NrL   r   rW  )rM   r   rD   rE   r   r   s       r7   test_correspond_emptyz$TestCorrespond.test_correspond_empty  s<    HHTH,HHU"**H-j*a3r6   c                    t        dd      D ]j  }t        j                  j                  ||dz
  z  dz        }|j	                  t        |            }|j	                  |      }t        t        ||             l t        ddd      D ]j  }t        j                  j                  ||dz
  z  dz        }|j	                  t        |            }|j	                  |      }t        t        ||             l y )Nrn   r   r.   r[  r   )r2  rq   rr   rt   rB   r	   r   r   r\  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                  j                  ||dz
  z  dz        }t        j                  j                  ||dz
  z  dz        }|j                  t        |            }|j                  t        |            }|j                  |      }|j                  |      }t        ||      rJ t        ||      sJ  y )Nrn   r   r   rA   r.   	listzipr2  rq   rr   rt   rB   r	   r   rG   rH   r=  jrI   y2r_   r   s           r7   test_correspond_4_and_upz'TestCorrespond.test_correspond_4_and_up  s     CU1a[ 14a3DEFCU1a[ 14a3DEFG 		)FQ		q!A#wz*A1Q3
+B

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

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

1ABB!!R(((!"a(((		)r6   N)r2   r3   r4   r  r  r  r  r5   r6   r7   r  r    s    4&))r6   r  c                   N    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestIsMonotonicc                 h    |j                  d|j                        }t        t        t        |       y r  )rM   r   rD   rE   r   rS  s      r7   test_is_monotonic_emptyz'TestIsMonotonic.test_is_monotonic_empty  s$    HHV2::H.j,2r6   c                 ^    |j                  g dg|j                        }t        |      sJ y )Nr   r.   333333?rn   r   rB   r   r   rS  s      r7   test_is_monotonic_1x4z%TestIsMonotonic.test_is_monotonic_1x4  s'    JJ'rzzJ:Ar6   c                 d    |j                  g dg dg|j                        }t        |      sJ y )Nr  )rn   r   皙?r   r   r  rS  s      r7   test_is_monotonic_2x4_Tz'TestIsMonotonic.test_is_monotonic_2x4_T  s2    JJ&(/1zz  ;Ar6   c                 d    |j                  g dg dg|j                        }t        |      rJ y )N)r   r.   r  rn   )rn   r   r  r   r   r  rS  s      r7   test_is_monotonic_2x4_Fz'TestIsMonotonic.test_is_monotonic_2x4_F  s5    JJ&(/1zz  ;?""?r6   c                 j    |j                  g dg dg dg|j                        }t        |      sJ y )Nr  rn   r   r  rn   r   rA   g333333?r   r   r  rS  s      r7   test_is_monotonic_3x4_Tz'TestIsMonotonic.test_is_monotonic_3x4_T  s7    JJ&&(/1zz  ; Ar6   c                 j    |j                  g dg dg dg|j                        }t        |      rJ y )Nr  )rn   r   皙?rn   r  r   r  rS  s      r7   test_is_monotonic_3x4_F1z(TestIsMonotonic.test_is_monotonic_3x4_F1  :    JJ&&(/1zz  ;  ?""?r6   c                 j    |j                  g dg dg dg|j                        }t        |      rJ y )N)r   r.   g?rn   r  r  r   r  rS  s      r7   test_is_monotonic_3x4_F2z(TestIsMonotonic.test_is_monotonic_3x4_F2  r  r6   c                 j    |j                  g dg dg dg|j                        }t        |      rJ y )Nr  r  )r   rA   r  r   r   r  rS  s      r7   test_is_monotonic_3x4_F3z(TestIsMonotonic.test_is_monotonic_3x4_F3  r  r6   c                 p    |j                  t        t        j                  d            }t	        |      sJ y Nr   )rB   r	   r/   r]   r   rS  s      r7    test_is_monotonic_tdist_linkage1z0TestIsMonotonic.test_is_monotonic_tdist_linkage1  s,     JJw2998DEAr6   c                     |j                  t        t        j                  d            }t	        j
                  |      d   j                  d      }t        |      rJ y )Nr   )rn   rn   r@   )rB   r	   r/   r]   ra  rb  rc  r   rS  s      r7    test_is_monotonic_tdist_linkage2z0TestIsMonotonic.test_is_monotonic_tdist_linkage2  sK     JJw2998DEFF1IdO$?""?r6   c                 t    t         j                  }|j                  t        |d            }t	        |      sJ y r  )r/   r   rB   r	   r   )rG   rH   rk   r_   s       r7   test_is_monotonic_Q_linkagez+TestIsMonotonic.test_is_monotonic_Q_linkage  s0      ##JJwq(+,Ar6   N)r2   r3   r4   r  r  r  r  r  r  r  r  r  r  r  r5   r6   r7   r  r    s9    3

#####r6   r  c                   `    e Zd Zd Zd Zej                  j                  dg d      d        Zy)TestMaxDistsc                 h    |j                  d|j                        }t        t        t        |       y r  )rM   r   rD   rE   r   rS  s      r7   test_maxdists_empty_linkagez(TestMaxDists.test_maxdists_empty_linkage  s$    HHV2::H.j(A.r6   c                     |j                  g dg|j                        }t        |      }t        ||      }t	        ||d       y )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"  s<    JJ'rzzJ:a[0B7
JU3r6   rU   r   rP   r   rb   rc   c                     t         j                  }|j                  t        ||            }t	        |      }t        ||      }t        ||d       y )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)  sE      ##JJwq&)*a[0B7
JU3r6   N)	r2   r3   r4   r  r  r   r   r   r  r5   r6   r7   r  r    s7    /
4 [[FH4H4r6   r  c                   f    e Zd Zd Zd Zd Zej                  j                  dg d      d        Z	y)TestMaxInconstsc                     |j                  d|j                        }|j                  d|j                        }t        t        t        ||       y r  )rM   r   rD   rE   r   rG   rH   r_   rs  s       r7   test_maxinconsts_empty_linkagez.TestMaxInconsts.test_maxinconsts_empty_linkage7  s<    HHV2::H.HHV2::H.j+q!4r6   c                     |j                  g dg|j                        }t        j                  j	                  dd      }|j                  |      }t        t        t        ||       y Nr  r   rn   r   )rB   r   rq   rr   rt   rD   rE   r   r  s       r7   test_maxinconsts_difrow_linkagez/TestMaxInconsts.test_maxinconsts_difrow_linkage=  sL     JJ'rzzJ:IINN1a JJqMj+q!4r6   c                     |j                  g dg|j                        }|j                  g dg|j                        }t        ||      }t        |||      }t	        ||d       y )Nr  r   r   r   r   r  r(  ro   rZ   )rB   r   r   !calculate_maximum_inconsistenciesr*   rG   rH   r_   rs  r  r  s         r7   $test_maxinconsts_one_cluster_linkagez4TestMaxInconsts.test_maxinconsts_one_cluster_linkageE  sZ    JJ'rzzJ:JJ'rzzJ:A6q!C
JU3r6   rU   r  c                     t         j                  }t        ||      }|j                  t	        |            }|j                  |      }t        ||      }t        |||      }t        ||d       y )Nr(  ro   rZ   )r/   r   r	   rB   r   r   r  r*   rG   rU   rH   rk   r_   rs  r  r  s           r7   test_maxinconsts_Q_linkagez*TestMaxInconsts.test_maxinconsts_Q_linkageM  s`      ##AvJJ|A'JJqMA6q!C
JU3r6   N)
r2   r3   r4   r  r  r  r   r   r   r  r5   r6   r7   r  r  4  s<    554 [[FH4H4r6   r  c                       e Zd Zd Zej
                  j                  d ed            d        Zej
                  j                  d ed            d        Z	d Z
ej
                  j                  dg d      d	        Zy
)TestMaxRStatc                    |j                  g dg|j                        }|j                  g dg|j                        }t        j                  t              5  t        ||d       d d d        t        j                  t              5  t        ||d       d d d        t        j                  t              5  t        ||d       d d d        y # 1 sw Y   hxY w# 1 sw Y   ExY w# 1 sw Y   y xY w)Nr  r   r  gffffff
@r   r   )rB   r   r   r   rR  r   rE   r  s       r7   test_maxRstat_invalid_indexz(TestMaxRStat.test_maxRstat_invalid_index]  s    JJ'rzzJ:JJ'rzzJ:]]9% 	 Q3	 ]]:& 	Q2	]]:& 	Q1	 			  	 	 		 	s$   C	C8C'CC$'C0r=  r   c                     |j                  d|j                        }|j                  d|j                        }t        t        t        |||       y r  )rM   r   rD   rE   r   rG   r=  rH   r_   rs  s        r7   test_maxRstat_empty_linkagez(TestMaxRStat.test_maxRstat_empty_linkageh  s@     HHV2::H.HHV2::H.j(Aq!4r6   c                     |j                  g dg|j                        }t        j                  j	                  dd      }|j                  |      }t        t        t        |||       y r  )rB   r   rq   rr   rt   rD   rE   r   r  s        r7   test_maxRstat_difrow_linkagez)TestMaxRStat.test_maxRstat_difrow_linkageo  sN     JJ'rzzJ:IINN1a JJqMj(Aq!4r6   c                     |j                  g dg|j                        }|j                  g dg|j                        }t        ||d      }t        ||d|      }t	        ||d       y )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'rzzJ:JJ'rzzJ:aA6q!QC
JU3r6   rU   r  c                     t         j                  }t        ||      }|j                  t	        |            }|j                  |      }t        ||d      }t        ||d|      }t        ||d       y )Nr.   ro   rZ   )r/   r   r	   rB   r   r   r  r*   r  s           r7   test_maxRstat_Q_linkagez$TestMaxRStat.test_maxRstat_Q_linkage  sd      ##AvJJ|A'JJqMaA6q!QC
JU3r6   N)r2   r3   r4   r  r   r   r   r2  r  r  r  r  r5   r6   r7   r  r  Z  s    	 [[S%(+5 ,5 [[S%(+5 ,54 [[FH4H4r6   r  c                      e Zd Zd Zd Zd Zej                  j                  e	 d      d        Z
 edd       ed	d
      ej                  j                  e	 d      ej                  j                  dg d      d                             Z edd       ed	d
      ej                  j                  e	 d      d                      Zej                  d        Zd Zd Zd Zy)TestDendrogramc                     |j                  t        t        j                  d            }t	        |d      }|d   }t        |g d       y )Nr   Tno_plotleavesrn   rA   r.   r   r   r   )rB   r	   r/   r]   r   r   )rG   rH   r_   rs  r  s        r7   $test_dendrogram_single_linkage_tdistz3TestDendrogram.test_dendrogram_single_linkage_tdist  s>    JJw2998DEq$'8V/0r6   c                     |j                  t        t        j                  d            }t	        t
        t        |d       y )Nr   fooorientation)rB   r	   r/   r]   rD   rE   r   rS  s      r7   test_valid_orientationz%TestDendrogram.test_valid_orientation  s,    JJw2998DEj*aUCr6   c                     |j                  t        t        j                  d            }g d}t	        ||j                  |      d      }t	        ||d      }||k(  sJ y )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  sV    JJw2998DE#Qrzz&'94HQvt<'!!!r6   zno matplotlibr=   c           	         |j                  g dg dg dg      }t        j                          t        j                  t
              5 }t        |t        t        d                   d d d        dt        j                        v sJ t        j                  t
        d      5  t        |g        d d d        t        j                          y # 1 sw Y   hxY w# 1 sw Y   *xY w)N)r   r.   r   r   )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  r2  strvalueclose)rG   rH   linkexc_infos       r7   test_valid_label_sizez$TestDendrogram.test_valid_label_size  s    zz
 
 	

]]:& 	6(tDs$45	6?hnn%& 	& & ]]FH 	( tB'	(
 				6 	6
	( 	(s    C$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                 H   |j                  t        t        j                  d            }g dg dg dg dg dg dgg dg d	g d
g dg dgg dg dg dd}t	        j
                         }|j                  d      }t        |||      }t        j                   |d         |d<   t        ||       t        |||dd       |dv r|j                         d   n|j                         d   }t        |j                         d       t        |j                         d       t        |||d       |dv r|j                         d   n|j                         d   }t        |j                         d       t        |||d       |dv r|j                         d   n|j                         d   }t        |j                         d       t	        j                          t        ||      }	t	        j                          t        j                   |	d         |	d<   t        |	|       y )Nr   )C1C0r#  r#  r#  r@   r   r   r@   )r@   r   r   r@   )r@   r   r   r   r@   r   r   r   r   r   r   r   r   r   r   r   )     F@r(       K@r)  )     A@r*        I@r+  )      9@r,       @E@r-  )r   r        @@r.  )251034r  )r"  r"  r#  r#  r#  r#  
color_listdcoordicoordivlr  leaves_color_list   )axr  r7  rm   Z   )r<  r  leaf_font_sizeleaf_rotation)r  r  r   )r<  r  r?  )r<  r  r>  r
  )rB   r	   r/   r]   r  r  add_subplotr   rq   r   get_xticklabelsget_yticklabelsget_rotationget_sizer  )
rG   r  rH   r_   expectedfigr<  R1	testlabelR2s
             r7   test_dendrogram_plotz#TestDendrogram.test_dendrogram_plot  s    JJw2998DE"@7799;	=
  67779	;
 :0)M  jjl__S! bk:zz"X,/8R" 	1"$B	8 //  ###%a( 	
 	Y++-r2Y'')2.1!#	% //  ###%a( 	
 	Y++-r21"$	& //  ###%a( 	
 	Y'')2.		 {3		zz"X,/8R"r6   c           
         |j                  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       y )Nr   rn   lastpT)show_contractedr7  r#  )r@   r   r   r@   r'  (2)z(4)r   r   r5  mtica)r"  r#  r#  r#  r$  )r@   r   r   r@   r%  r&  )r*  r*  r(  r(  )r,  r,        D@rP  )r   r        @@@rQ  )r/  r0  r1  r2  rN  )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998DEq!Wd;		jj8-(Qv$<#=$:#;!&$%q6/3Tl 	 q!Wd;		jj8-(Q'?$<$<$>$@$B %;$<$<$<$> !<#2.L 	r6   c                     t               S r   r,   r  s    r7   dendrogram_lockzTestDendrogram.dendrogram_lock%  s	    vr6   c                    |j                  t        t        j                  d            }|5  t	        g d       t        |ddd      }t	        g d       |d   }t        |g d	       t	        d        d d d        y # 1 sw Y   y xY w)
Nr   )r   mrI   kTg   )r  above_threshold_colorcolor_threshold)rX  rr   rV  rI   rW  r6  )r   rV  rX  rX  rX  )rB   r	   r/   r]   r   r   r   )rG   rH   rT  r_   rs  r6  s         r7   test_dendrogram_colorsz%TestDendrogram.test_dendrogram_colors)  sz    JJw2998DE 	)"#781d14cKA"#AB<J%>? #4(	) 	) 	)s   AA==Bc           	          t        j                  g dg dg dg dg dg dg      }|j                  t        |d            }t        |d      }g d}|d	   }t	        ||       y )
Nr.   r   r   r   r   r.   r   rn   r   r   r.   r   r   Tr  r#  r"  r"  r#  C2rd  r:  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:  se     JJ	!!!!!# $ JJwq(+,q$'9
&'VZ(r6   c           	          t        j                  g dg dg dg dg dg dg      }|j                  t        |d            }t        |d      }g d	}|d
   }t	        ||       y )Nr_  )r   r   g?ra  r`  rb  r   Tr  rc  r:  re  rf  s          r7   test_dendrogram_leaf_colorsz*TestDendrogram.test_dendrogram_leaf_colorsI  se     JJ	#!!!!# $ JJwq(+,q$'9
&'VZ(r6   N)r2   r3   r4   r  r  r  r   r   skipifhave_matplotlibr  r   r   rJ  rR  fixturerT  r]  ri  rk  r5   r6   r7   r  r    s-   1D" [[O+OD E& g! l@ [[O+OD[[],NO<# P E	<#| g" l@ [[O+OD E	> ^^ )"))r6   r  c                    | j                   d   dz   }|j                  |dz
  f| j                        }t        d|dz
        D ]  }|j                  d      }| |df   }| |df   }||k\  rH||j	                  ||j
                        |z
     }t        j                  |d      j                  |      }||k\  rH||j	                  ||j
                        |z
     }	t        j                  |d      j                  |	      }t        j                  |d      j                  | |df         }t        j                  ||      j                  |j                  |            } |S Nr   r.   r   )r   rn   )
r7  rM   r   r2  rB   rQ  ra  rb  rc  max)
r_   rH   rw   Br=  qr  r   b_leftb_rights
             r7   r  r  Y  s<   	
QA
!A#qww'A1a!e_ (HHTNAw!Q$19rzz$bhhz7!;<Fq!  (AA:

5
9A=>Gq!  )AFF1aLQq!tW%FF1aLRVVAY'( Hr6   r   c                    | j                   d   dz   }|j                  | |      }|j                  |dz
  f|      }t        d|dz
        D ]  }|j                  d      }| |df   }	| |df   }
|	|k\  rH||j	                  |	|j
                        |z
     }t        j                  |d      j                  |      }|
|k\  rH||j	                  |
|j
                        |z
     }t        j                  |d      j                  |      }t        j                  |d      j                  |||f         }t        j                  ||      j                  |j                  |            } |S rp  )
r7  result_typerM   r2  rB   rQ  ra  rb  rc  rq  )r_   rs  rW  rH   rw   r   rr  r=  rs  r  r   rt  ru  s                r7   r  r  l  sH   	
QANN1a E
!A#u%A1a!e_ (HHTNAw!Q$19rzz$bhhz7!;<Fq!  (AA:

5
9A=>Gq!  )AFF1aLQq!tW%FF1aLRVVAY'( Hr6   c                    t         j                  j                  d       d}t         j                  j                  |d      }| j	                  t        |            }t        |      }t        ||j                         kD         t        |j                         |j                         kD         t        |j                         |j                         k(         t        |j                         |j                         k7         y )N   2   r   )
rq   rr   seedrandnrB   r   r   r   r  r  )rH   r8  rk   r_   trees        r7   test_node_comparer~    s    IINN2D
		a A


47A1:DD4==?"#DNNt}}./DNN 001DNN/0r6   c           	      ~   t         j                  j                  d       d}t         j                  j                  |d      }| j	                  t        |            }t        |      }t        |d d df   | j                  |      dd       t        |d d df   | j                  |      dd       t        t        j                  |      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        |      }| j	                  |D cg c]  }|j                   c}      }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       y c c}w )Nry  rz  r   r   ro   F)rp   check_dtyper   r.   rA   )
n_clustersr   ir   )height)rq   rr   r{  r|  rB   r   r    r*   arangerM   r   rq  r"   distsearchsorted)rH   r8  rk   r_   cutreenodesr  heightss           r7   test_cut_treer    s   IINN2D
		a A


47Aa[F F1a4L"))D/5QF1b5M288D>5QF#''*BIIdQhB,GHF1rd7OXaA%>UKF1r3i<((1!R*IPUVF1sBi<((1"a*IPUV"Ejj6$))67GF1boogs;;<Qq)7F1boog2w??@Q2w/e=F1boogAw??@QAw/e= 7s   :H:c                    t        | j                  t        t        j                              | j                  t        j                              }t        j
                  }t        || j                  |      d       t        | j                  t        t        j                  d            | j                  t        j                              }t        j                  }t        || j                  |      d       y )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1D1K1K)LM jj)<)C)CD	FA#==IArzz),59 	bjj1D1F1F)OP jj)<)>)>?	AA#66IArzz),59r6   z"`Heap` only supports NumPy backend)np_onlyr>   c                    | j                  g d      }t        |      }|j                         }t        |d   d       t        |d   d       |j	                          |j                         }t        |d   d       t        |d   d       |j                  dd       |j                         }t        |d   d	       t        |d   d
       |j	                          |j	                          |j                  dd       |j                         }t        |d   d       t        |d   d       |j	                          |j                         }t        |d   d       t        |d   d       y )N)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_extrara  	threadingr-    r/   r1   
matplotlibusematplotlib.pyplotpyplotr  rm  	Exceptionr   r   r:   r   r   r   r   r   r  r  r@  rp  r  r  r  r  r  r  r  r  r  r  r~  r  r   r  r5   r6   r7   <module>r     sc  D  T T  *K K K K K K K K * (E E ( (  !( (JNN5#O ;;//  7c/ c/ c/L < 	T 	T !	T 8&& && &&R $o6$ $ 7$@ < + + !+  8*2 *2 *2Z 7: : : =!S7 S7 "S7l #$Q6 Q6 %Q6h ;I1 I1  I1X +  +F ;($ $ )$D :0) 0) 0)f < F F !FR 84 4 42 ;"4 "4  "4J 8/4 /4 /4d :H) H) H)V& /0B ( 7	1 	1 8= =6 (): *: $'KL$ M$a#  Os   I< <JJ