
    >qjO                     4   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(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;c m<Z= d d	l>m?Z? d
dl@mAZA  G d d      ZB	 d dlCZC eCj                  d       d dlEmFZG dZHej                  j                  ZK e5e       G d d             ZL e5e       G d d             ZM e5e       G d d             ZN e5ee       G d d             ZO e5e       G d d             ZP e5e       G d d             ZQ e5e       G d d             ZR e5e       G d d              ZS e5e       G d! d"             ZT e5e       G d# d$             ZU e5e       G d% d&             ZV e5e e       G d' d(             ZW e5e       G d) d*             ZX e5e       G d+ d,             ZY e5e       G d- d.             ZZ e5e       G d/ d0             Z[ e5e       G d1 d2             Z\ e5e!       G d3 d4             Z]d5 Z^d6efd7Z_ e5e      d8        Z` e5e#      d9        Za e5e$      d:        Zbd; Zcy# eI$ r dZHY 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completeaverageweightedcentroidmedian)Heap)_order_cluster_tree
_hierarchy_EUCLIDEAN_METHODS_LINKAGE_METHODS)pdist)eager_warnsmake_xp_test_casexp_assert_closexp_assert_equalmake_xp_pytest_param_xp_copy_to_numpyLock   )hierarchy_test_datac                       e Zd ZeZeZy)eagerN)__name__
__module____qualname__r   r        k/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/scipy/cluster/hierarchy/tests/test_hierarchy.pyr8   r8   =   s     K'r=   r8   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ej                  j                  deeeeeefD  cg c]  }t7        |       c}}}       d         Zy!c c}}} w )"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      r>   3test_linkage_non_finite_elements_in_distance_matrixz?TestLinkage.test_linkage_non_finite_elements_in_distance_matrixV   s/     JJx3%')*j'1-r=   c                 P    |j                  d      }t        t        t        |       y )Nr   )zerosrK   rL   r	   rM   s      r>   "test_linkage_empty_distance_matrixz.TestLinkage.test_linkage_empty_distance_matrix]   s    HHTNj'1-r=   c                 6    dD ]  }| j                  ||        y )N)r   r"   r#   r$   )check_linkage_tdistrN   rO   methods      r>   test_linkage_tdistzTestLinkage.test_linkage_tdistb   s!    C 	1F$$VR0	1r=   c                     t        |j                  t        j                        |      }t	        t        d|z         }t        ||j                  |      d       y )Nlinkage_ytdist_绽|=atolr	   rI   r6   ytdistgetattrr/   )rN   rY   rO   Z	expectedZs        r>   rW   zTestLinkage.check_linkage_tdistf   sF    BJJ299:FC/1BV1KL	2::i0u=r=   c                 6    dD ]  }| j                  ||        y )N)r%   r&   r   )check_linkage_qrX   s      r>   test_linkage_XzTestLinkage.test_linkage_Xl   s!    4 	-F  ,	-r=   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_ư>r^   	euclidean)metric)r	   rI   r6   Xrb   r/   r,   )rN   rY   rO   rc   rd   rm   rP   s          r>   rf   zTestLinkage.check_linkage_qp   s    BJJ2445v>/1FG	2::i0u=JJ*,,-!K(Av2::i0u=r=   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	   rI   r/   )
rN   rO   rngnrm   drY   code	Z_trivialrc   s
             r>   test_compare_with_trivialz%TestLinkage.test_compare_with_trivial{   s    ii##A&HHQN!H,224 	NLFD"**1a6I

1v.AArzz)45uM	Nr=   c                     t        |j                  t        j                        d      }t	        t        d      }t        ||j                  |      d       y )NT)optimal_orderinglinkage_ytdist_single_olor]   r^   r`   )rN   rO   rc   rd   s       r>   test_optimal_leaf_orderingz&TestLinkage.test_optimal_leaf_ordering   sA    BJJ299:TR/1LM	2::i0u=r=   zmethod,expectr   )r   r5   'e?rp   )rp      r   r   r"   )rp   r   g'e@r   r#   )rp   r   gev @r   r$   r%   r&   r   )rp   r   g@r   c                     |j                  ddgddgddgg      }t        ||      }|j                  ||j                        }t        ||d       y )Nr   r5   rY   dtyperj   r^   )rI   r	   float64r/   )rN   rY   expectrO   rm   rc   s         r>   test_linkage_tieszTestLinkage.test_linkage_ties   sS    " JJR1a&1a&12Af%F"**56.r=   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   r5   rO   )rI   r-   r   r	   rN   rO   rm   s      r>   <test_unsupported_uncondensed_distance_matrix_linkage_warningzHTestLinkage.test_unsupported_uncondensed_distance_matrix_linkage_warning   sC    JJAA'(B/ 	AJ	 	 	s	   >ArY   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)Nr5   	cityblockrY   rl   rI   pytestr   rL   r	   )rN   rY   rO   rm   s       r>   "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 )Nr5   r   rk   r   r   rq   rr   )r	   rI   r/   )rN   rO   Z1Z2s       r>   test_2x2_linkagezTestLinkage.test_2x2_linkage   sJ    RZZ_XkJRZZ!Q!Q 01(;WBU+r=   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   r%   r   r   )rN   rO   valuess      r>   test_centroid_neg_distancez&TestLinkage.test_centroid_neg_distance   s=     J']]:& 	/F:.	/ 	/ 	/s   AAfuncc                     |j                  ddgddgddgg      }|j                  t        t        |      |j                  d            } ||      }t	        ||       y )Nr   r   r5   rk   r   )rI   r	   r2   r9   r/   )rN   r   rO   rm   expectedobserveds         r>   test_wrapperszTestLinkage.test_wrappers   s^     JJR1a&1a&12::%a({S
 7(+r=   N)r9   r:   r;   skip_xp_backendsrQ   rU   rZ   rW   rg   rf   r}   r   r   markparametrizer   r   r*   r   r   r   r"   r#   r$   r%   r&   r   r1   r   ).0r   r1   s   000r>   rA   rA   S   s    k*PQ. R..
1>-	>	N>
 [[_	++- 	.	++- 	.	++- 	.	++- 	.	++- 	.	++- 	.	++- 	./  /! /
 [[X'9:: ;:
,
 k*PQ/ R/ [[!7HhM
 
 !&
,,
s   %DrA   c                       e Zd Zd Zd Zy)TestInconsistentc                 R    t         j                  D ]  }| j                  ||        y N)r6   inconsistent_ytdistcheck_inconsistent_tdist)rN   rO   depths      r>   test_inconsistent_tdistz(TestInconsistent.test_inconsistent_tdist   s'    (<< 	5E))%4	5r=   c                     |j                  t        j                        }t        t	        ||      |j                  t        j
                  |                y r   )rI   r6   linkage_ytdist_singler/   r   r   )rN   r   rO   rc   s       r>   r   z)TestInconsistent.check_inconsistent_tdist   sA    JJ*@@AQ.

#6#J#J5#QR	Tr=   N)r9   r:   r;   r   r   r<   r=   r>   r   r      s    5Tr=   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   r]   r^   )rI   r6   r   r   r/   r   )rN   rO   	expectedMrc   Ms        r>   test_linkage_cophenet_tdist_Zz4TestCopheneticDistance.test_linkage_cophenet_tdist_Z   sP    JJ  9 :	JJ*@@AQK2::irzz:BOr=   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?r<   r]   r^   )rI   r6   r   r   ra   r   r/   )rN   rO   rc   cr   r   	expectedcs          r>   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1r=   rB   rC   rD   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)rG         ?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   rL   r   rI   )rN   rO   arrs      r>   test_gh_22183z$TestCopheneticDistance.test_gh_22183   sb     ""!"!""##$$
& ]]:-EF 	&RZZ_%	& 	& 	&s   A##A,N)r9   r:   r;   r   r   r   r   r<   r=   r>   r   r      s*    P2 k*PQ& R&r=   r   c                       e Zd Zd Zd Zd Zy)TestMLabLinkageConversionc                     |j                  g |j                        }t        t        |      |       t        t	        |      |       y )Nr   )rI   r   r0   r
   r   r   s      r>   "test_mlab_linkage_conversion_emptyz<TestMLabLinkageConversion.test_mlab_linkage_conversion_empty  s7    JJrJ,)!,a0*A.r=   c                    |j                  g dg      }|j                  g dg      }t        t        |      |j                  ||j                        d       t        t	        |      |j                  ||j                        d       y )N)rG   r   r   r   r5   rp   r   r   rq   r   )rI   r/   r
   r   r   )rN   rO   rc   Zms       r>   'test_mlab_linkage_conversion_single_rowzATestMLabLinkageConversion.test_mlab_linkage_conversion_single_row
  so    JJ()*ZZ$)"-rzz!2::z/N"	$*BJJrJ,L"	$r=   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   )   rH   r   )r5      r   )rp   	   r   )   
   r   )r   r        @a@r   )r   r        `k@r   )rG   r        o@r   )r   r        p@r   )r   r        pr@r   r   rq   r   )rI   r   r/   r
   r   )rN   rO   r   rc   s       r>   *test_mlab_linkage_conversion_multiple_rowszDTestMLabLinkageConversion.test_mlab_linkage_conversion_multiple_rows  s    ZZk$k<A BJJ*****	,
  ZZ  ) 	)"-qu=*BJJrJ,L"	$r=   N)r9   r:   r;   r   r   r   r<   r=   r>   r   r     s    /$$r=   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)rI   rb   r6   Q_Xr   r   )rN   r   r   rO   	expectedTrm   Ts          r>   test_fclusterdataz"TestFclusterData.test_fclusterdata%  sX     JJw':K)<STUVWX	JJ*../i15Q	***r=   N)r9   r:   r;   r.   r   r   r   r   r6   fcluster_inconsistentfcluster_distancefcluster_maxclustr   r   r   s   00r>   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   )rI   rb   r6   r   r   r   r   r   )rN   r   r   rO   r   rc   r   s          r>   test_fclusterzTestFcluster.test_fcluster6  s\     JJw':K)<STUVWX	2::15567Q)q1a+,r=   r   c                     |j                  t        j                  |         }t        |j                  t        j                              }t        ||dt        |            }t        t        ||             y )Nmonocritr   r   )	rI   r6   r   r   r   r   r   r   r   rN   r   rO   r   rc   r   s         r>   test_fcluster_monocritz#TestFcluster.test_fcluster_monocritC  s[     JJ2DDQGH	2::15567QZ(1+Fa+,r=   c                     |j                  t        j                  |         }t        |j                  t        j                              }t        ||dt        |            }t        t        ||             y )Nmaxclust_monocritr   )	rI   r6   r   r   r   r   r   r   r   r  s         r>   test_fcluster_maxclust_monocritz,TestFcluster.test_fcluster_maxclust_monocritK  s\     JJ2DDQGH	2::15567Q%88A;Oa+,r=   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 )Nr5   r   rH   r   )r   r   r5   r5   r5   rp   )rp   r5   r5   r   r   )rI   r   r   r   rN   rO   rP   rc   s       r>   test_fcluster_maxclust_gh_12651z,TestFcluster.test_fcluster_maxclust_gh_12651S  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	2r=   N)r9   r:   r;   r.   r   r   r   r   r   r6   r   r   r   r   r   r  r  r	  r   s   00r>   r   r   3  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   rp   r   r5   rq   r   )
r6   r   r,   r	   r   rI   int32r   r/   concat)rN   rO   rm   Yrc   r   Lr   s           r>   test_leaders_singlezTestLeaders.test_leaders_singled  s    ##!HAJQ*2JJqMJJqJ)AqM1B		!f59r=   N)r9   r:   r;   r  r<   r=   r>   r  r  a  s    
:r=   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  )rp   rp   rp   )r   rN   s    r>   test_array_likez TestIsIsomorphic.test_array_liket  s"    Y	222R$$$r=   c                     |j                  g d      }|j                  g d      }t        ||      sJ t        ||      sJ y r  rI   r   rN   rO   abs       r>   test_is_isomorphic_1z%TestIsIsomorphic.test_is_isomorphic_1x  >    JJy!JJy!Q"""Q"""r=   c                     |j                  g d      }|j                  g d      }t        ||      sJ t        ||      sJ y )N)r5   r   r5   )rp   r   rp   r  r  s       r>   test_is_isomorphic_2z%TestIsIsomorphic.test_is_isomorphic_2  r!  r=   c                 d    |j                  g       }|j                  g       }t        ||      sJ y r   r  r  s       r>   test_is_isomorphic_3z%TestIsIsomorphic.test_is_isomorphic_3  s,    JJrNJJrNQ"""r=   c                     |j                  g d      }|j                  g d      }t        ||      sJ t        ||      sJ y )Nr   )r5   r   rp   r  r  s       r>   test_is_isomorphic_4Az&TestIsIsomorphic.test_is_isomorphic_4A  @     JJy!JJy!Q"""Q"""r=   c                     |j                  g d      }|j                  g d      }t        ||      rJ t        ||      rJ y )N)r5   rp   r   r   )r5   r   rp   r   r  r  s       r>   test_is_isomorphic_4Bz&TestIsIsomorphic.test_is_isomorphic_4B  sC     JJ|$JJ|$ A&&& A&&&&r=   c                     |j                  g d      }|j                  g d      }t        ||      sJ t        ||      sJ y )N)r   rp   r   )r   r   rp   r  r  s       r>   test_is_isomorphic_4Cz&TestIsIsomorphic.test_is_isomorphic_4C  r(  r=   	nclusters)rp   r   rH   c                 ,    | j                  d||       y )N  r   is_isomorphic_randpermrN   r-  rO   s      r>   test_is_isomorphic_5z%TestIsIsomorphic.test_is_isomorphic_5  s     	##D)#;r=   c                 0    | j                  d|dd|       y )Nr/  TrH   r   r0  r2  s      r>   test_is_isomorphic_6z%TestIsIsomorphic.test_is_isomorphic_6  s    
 	##D)T1#Dr=   c                 l    |j                  g d      }|j                  g d      }t        ||      rJ y )Nr   r  r  r  s       r>   test_is_isomorphic_7z%TestIsIsomorphic.test_is_isomorphic_7  s1    JJy!JJy! A&&&&r=   c                   t         j                  j                         }t        d      D ]  }|j	                  d||      }|j                  |      }	|	j                  |j                  t         j                              }
|r1|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   )sizer5   )rs   rt   default_rngrangeintegerspermutationtakeastypeintprI   r   )rN   nobsr-  nonisonerrorsrO   rx   _r  pr  qs               r>   r1  z'TestIsIsomorphic.is_isomorphic_randperm  s    ii##%q 	7AQ	5A	*Aqxx()AOOD)!Ag,1$!Ag,9,

1A

1A A&v:666 A&v:666	7r=   N)Fr   )r9   r:   r;   r  r   r#  r%  r'  r*  r,  r   r   r   r3  r5  r7  r1  r<   r=   r>   r  r  q  s{    %####'# [[[)4< 5<
 [[[)4E 5E'7r=   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)rp   rH   F)rp   r   F)r5   r   T)rp   r   Tc                     |j                  g dg dg|j                        }|d |d |f   }t        t        |      |d       |st	        t
        t        |d       y y N)r   r5   r   rp   rH   )r   rp   r   r   r   r   Fcheck_namespaceTthrow)rI   r   r0   r   rK   rL   )rN   nrowncolvalidrO   rc   s         r>   "test_is_valid_linkage_various_sizez5TestIsValidLinkage.test_is_valid_linkage_various_size  sg     JJ))+24**  >eteUdUlO(+UEJ*&6F r=   c                     |j                  g dg dg|j                        }t        t        |      dd       t	        t
        t        |d       y Nr   r5   r   rp   r   rp   r   r   r   FrM  TrO  )rI   int64r0   r   rK   	TypeErrorrN   rO   rc   s      r>   test_is_valid_linkage_int_typez1TestIsValidLinkage.test_is_valid_linkage_int_type  sG    JJ&(/1xx  9(+UEJi!11DAr=   c                     |j                  d|j                        }t        t        |      dd       t	        t
        t        |d       y Nr   r   r   FrM  TrO  )rT   r   r0   r   rK   rL   r[  s      r>   test_is_valid_linkage_emptyz.TestIsValidLinkage.test_is_valid_linkage_empty  s9    HHV2::H.(+UEJj"2ATBr=   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   r5   rp   TFrM  )r;  rs   rt   rv   rI   r	   r0   r   rN   rO   irP   rc   s        r>   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r=   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   rc  r   r5   rp   r   FrM  TrO  r;  rs   rt   rv   rI   r	   xpxatsetr0   r   r   r   rL   r8   rd  s        r>   -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   rc  r   r5   rp   rh  FrM  TrO  ri  rd  s        r>   .test_is_valid_linkage_4_and_up_neg_index_rightzATestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_right  rn  ro  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   rc  r   r5   rp   g      FrM  TrO  ri  rd  s        r>   '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 6ro  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rq  ri  rd  s        r>   )test_is_valid_linkage_4_and_up_neg_countsz<TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_counts  rn  ro  N)r9   r:   r;   r   r   r   rT  r\  r`  rf  rm  rr  ru  rw  r<   r=   r>   rH  rH    sX     [[0 3N OGOGBCN
6
6
6
6r=   rH  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 rV  )rI   rY  r0   r   rK   rZ  rN   rO   Rs      r>   test_is_valid_im_int_typez1TestIsValidInconsistent.test_is_valid_im_int_type  sD    JJ&(/1xx  9AuEiat<r=   rI  rJ  c                     |j                  g dg dg|j                        }|d |d |f   }t        t        |      |d       |st	        t
        t        |d       y y rL  )rI   r   r0   r   rK   rL   )rN   rQ  rR  rS  rO   r|  s         r>   test_is_valid_im_various_sizez5TestIsValidInconsistent.test_is_valid_im_various_size&  sd     JJ))+24**  >eteUdUlOAuE*k1DA r=   c                     |j                  d|j                        }t        t        |      dd       t	        t
        t        |d       y r^  )rT   r   r0   r   rK   rL   r{  s      r>   test_is_valid_im_emptyz.TestIsValidInconsistent.test_is_valid_im_empty1  s6    HHV2::H.AuEj+q=r=   c                     t        ddd      D ]h  }t        j                  j                  ||dz
  z  dz        }t	        |      }t        |      }|j                  |      }t        t        |      dd       j y rb  )	r;  rs   rt   rv   r	   r   rI   r0   r   rN   rO   re  rP   rc   r|  s         r>   test_is_valid_im_4_and_upz1TestIsValidInconsistent.test_is_valid_im_4_and_up7  sj     q"a 	IA		q!A#wz*A
AQA

1AKND%H	I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)Nr   rc  r   r5   rp   r          FrM  TrO  r;  rs   rt   rv   r	   r   rj  rk  rl  rI   r0   r   r   r   rL   r8   r  s         r>   (test_is_valid_im_4_and_up_neg_index_leftz@TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_leftA       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   rc  r   r5   rp   r  FrM  TrO  r  r  s         r>   )test_is_valid_im_4_and_up_neg_index_rightzATestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_rightN  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rt  r  r  s         r>   "test_is_valid_im_4_and_up_neg_distz:TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_dist[  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)r9   r:   r;   r}  r   r   r   r  r  r  r  r  r  r<   r=   r>   ry  ry    sQ    = [[0 3N OBOB>I111r=   ry  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 Nr_  r   )rT   r   rK   rL   r   r[  s      r>   test_num_obs_linkage_emptyz,TestNumObsLinkage.test_num_obs_linkage_emptyl  s$    HHV2::H.j/15r=   c                 d    |j                  g dg|j                        }t        |      dk(  sJ y )NrW  r   rp   rI   r   r   r[  s      r>   test_num_obs_linkage_1x4z*TestNumObsLinkage.test_num_obs_linkage_1x4q  s.    JJ'rzzJ:q!Q&&&r=   c                 j    |j                  g dg dg|j                        }t        |      dk(  sJ y )NrW  rX  r   r   r  r[  s      r>   test_num_obs_linkage_2x4z*TestNumObsLinkage.test_num_obs_linkage_2x4v  s9    JJ&(/1zz  ;q!Q&&&r=   c                     t        ddd      D ]T  }t        j                  j                  ||dz
  z  dz        }|j	                  t        |            }t        |      |k(  rTJ  y )Nr   rc  r   r5   rp   )r;  rs   rt   rv   rI   r	   r   rd  s        r>   test_num_obs_linkage_4_and_upz/TestNumObsLinkage.test_num_obs_linkage_4_and_up|  s^     q"a 	+A		q!A#wz*A

71:&A"1%***	+r=   c                     t        dd      D ]W  }t        j                  j                  |d      }t	        |      }|j                  t        |            }t        |      |k(  rWJ  y )Nrp   r   r   )r;  rs   rt   rv   r,   rI   r	   r   )rN   rO   ry   rm   r  rc   s         r>   !test_num_obs_linkage_multi_matrixz3TestNumObsLinkage.test_num_obs_linkage_multi_matrix  sY    q" 	+A		q!$AaA

71:&A"1%***		+r=   N)r9   r:   r;   r  r  r  r  r  r<   r=   r>   r  r  i  s    6
'
'++r=   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 )NrW  r   r   r5   rq   r   rI   r   r   r   r   r[  s      r>   test_leaves_list_1x4z#TestLeavesList.test_leaves_list_1x4  s6    JJ'rzzJ:
AAU;r=   c                     |j                  g dg dg|j                        }t        |       t        t	        |      g dd       y )NrW  rX  r   )r   r5   rp   rq   r   r  r[  s      r>   test_leaves_list_2x4z#TestLeavesList.test_leaves_list_2x4  s=    JJ&(/1zz  ;
A	>r=   rY   )r   r"   r#   r$   r%   r&   r   c                     t         j                  }|j                  t        ||            }t	        |      }t        |j                         t        |      d       y )Nrq   r   )r6   r   rI   r	   r   r   	pre_orderr   )rN   rY   rO   rm   rc   nodes         r>   test_leaves_list_Qz!TestLeavesList.test_leaves_list_Q  sD      ##JJwq&)*qz(+a.uEr=   c                    t         j                  }|j                  t        |d            }t	        |      }t        |j                         |j                         j                         |j                         j                         z   d       y )Nr   rq   r   )	r6   r   rI   r	   r   r   r  get_left	get_right)rN   rO   rm   rc   r  s        r>   test_Q_subtree_pre_orderz'TestLeavesList.test_Q_subtree_pre_order  sf    ##JJwq(+,qz(224t~~7G7Q7Q7SS"	$r=   N)
r9   r:   r;   r  r  r   r   r   r  r  r<   r=   r>   r  r    s=    <? [[XSUFUF$r=   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 )NrS   r   r_  )rT   r   rK   rL   r   r  s       r>   test_correspond_emptyz$TestCorrespond.test_correspond_empty  s<    HHTH,HHU"**H-j*a3r=   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 )Nrp   r   r5   rc  r   )r;  rs   rt   rv   rI   r	   r   r   rd  s        r>   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!$%		&r=   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 )Nrp   r   r   rH   r5   	listzipr;  rs   rt   rv   rI   r	   r   rN   rO   re  jrP   y2rc   r   s           r>   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(((		)r=   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 )Nrp   r         r5   r  r  s           r>   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(((		)r=   N)r9   r:   r;   r  r  r  r  r<   r=   r>   r  r    s    4&))r=   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  )rT   r   rK   rL   r   r[  s      r>   test_is_monotonic_emptyz'TestIsMonotonic.test_is_monotonic_empty  s$    HHV2::H.j,2r=   c                 ^    |j                  g dg|j                        }t        |      sJ y )Nr   r5   333333?rp   r   rI   r   r   r[  s      r>   test_is_monotonic_1x4z%TestIsMonotonic.test_is_monotonic_1x4  s'    JJ'rzzJ:Ar=   c                 d    |j                  g dg dg|j                        }t        |      sJ y )Nr  )rp   r   皙?r   r   r  r[  s      r>   test_is_monotonic_2x4_Tz'TestIsMonotonic.test_is_monotonic_2x4_T  s2    JJ&(/1zz  ;Ar=   c                 d    |j                  g dg dg|j                        }t        |      rJ y )N)r   r5   r  rp   )rp   r   r  r   r   r  r[  s      r>   test_is_monotonic_2x4_Fz'TestIsMonotonic.test_is_monotonic_2x4_F  s5    JJ&(/1zz  ;?""?r=   c                 j    |j                  g dg dg dg|j                        }t        |      sJ y )Nr  rp   r   r  rp   r   rH   g333333?r   r   r  r[  s      r>   test_is_monotonic_3x4_Tz'TestIsMonotonic.test_is_monotonic_3x4_T  s7    JJ&&(/1zz  ; Ar=   c                 j    |j                  g dg dg dg|j                        }t        |      rJ y )Nr  )rp   r   皙?rp   r  r   r  r[  s      r>   test_is_monotonic_3x4_F1z(TestIsMonotonic.test_is_monotonic_3x4_F1  :    JJ&&(/1zz  ;  ?""?r=   c                 j    |j                  g dg dg dg|j                        }t        |      rJ y )N)r   r5   g?rp   r  r  r   r  r[  s      r>   test_is_monotonic_3x4_F2z(TestIsMonotonic.test_is_monotonic_3x4_F2  r  r=   c                 j    |j                  g dg dg dg|j                        }t        |      rJ y )Nr  r  )r   rH   r  r   r   r  r[  s      r>   test_is_monotonic_3x4_F3z(TestIsMonotonic.test_is_monotonic_3x4_F3  r  r=   c                 p    |j                  t        t        j                  d            }t	        |      sJ y Nr   )rI   r	   r6   ra   r   r[  s      r>    test_is_monotonic_tdist_linkage1z0TestIsMonotonic.test_is_monotonic_tdist_linkage1  s,     JJw2998DEAr=   c                     |j                  t        t        j                  d            }t	        j
                  |      d   j                  d      }t        |      rJ y )Nr   )rp   rp   rG   )rI   r	   r6   ra   rj  rk  rl  r   r[  s      r>    test_is_monotonic_tdist_linkage2z0TestIsMonotonic.test_is_monotonic_tdist_linkage2  sK     JJw2998DEFF1IdO$?""?r=   c                 t    t         j                  }|j                  t        |d            }t	        |      sJ y r  )r6   r   rI   r	   r   )rN   rO   rm   rc   s       r>   test_is_monotonic_Q_linkagez+TestIsMonotonic.test_is_monotonic_Q_linkage&  s0      ##JJwq(+,Ar=   N)r9   r:   r;   r  r  r  r  r  r  r  r  r  r  r  r<   r=   r>   r  r    s9    3

#####r=   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  )rT   r   rK   rL   r   r[  s      r>   test_maxdists_empty_linkagez(TestMaxDists.test_maxdists_empty_linkage1  s$    HHV2::H.j(A.r=   c                     |j                  g dg|j                        }t        |      }t        ||      }t	        ||d       y )Nr   r5   r  r   r   rq   r^   )rI   r   r   calculate_maximum_distancesr/   )rN   rO   rc   MD
expectedMDs        r>   !test_maxdists_one_cluster_linkagez.TestMaxDists.test_maxdists_one_cluster_linkage6  s<    JJ'rzzJ:a[0B7
JU3r=   rY   r   r"   r   r%   r&   c                     t         j                  }|j                  t        ||            }t	        |      }t        ||      }t        ||d       y )Nrq   r^   )r6   r   rI   r	   r   r  r/   )rN   rY   rO   rm   rc   r  r  s          r>   test_maxdists_Q_linkagez$TestMaxDists.test_maxdists_Q_linkage=  sE      ##JJwq&)*a[0B7
JU3r=   N)	r9   r:   r;   r  r  r   r   r   r  r<   r=   r>   r  r  .  s7    /
4 [[FH4H4r=   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  )rT   r   rK   rL   r   rN   rO   rc   r|  s       r>   test_maxinconsts_empty_linkagez.TestMaxInconsts.test_maxinconsts_empty_linkageK  s<    HHV2::H.HHV2::H.j+q!4r=   c                     |j                  g dg|j                        }t        j                  j	                  dd      }|j                  |      }t        t        t        ||       y Nr  r   rp   r   )rI   r   rs   rt   rv   rK   rL   r   r  s       r>   test_maxinconsts_difrow_linkagez/TestMaxInconsts.test_maxinconsts_difrow_linkageQ  sL     JJ'rzzJ:IINN1a JJqMj+q!4r=   c                     |j                  g dg|j                        }|j                  g dg|j                        }t        ||      }t        |||      }t	        ||d       y )Nr  r   r   r   r   r  r   rq   r^   )rI   r   r   !calculate_maximum_inconsistenciesr/   rN   rO   rc   r|  r  r  s         r>   $test_maxinconsts_one_cluster_linkagez4TestMaxInconsts.test_maxinconsts_one_cluster_linkageY  sZ    JJ'rzzJ:JJ'rzzJ:A6q!C
JU3r=   rY   r  c                     t         j                  }t        ||      }|j                  t	        |            }|j                  |      }t        ||      }t        |||      }t        ||d       y )Nr   rq   r^   )r6   r   r	   rI   r   r   r  r/   rN   rY   rO   rm   rc   r|  r  r  s           r>   test_maxinconsts_Q_linkagez*TestMaxInconsts.test_maxinconsts_Q_linkagea  s`      ##AvJJ|A'JJqMA6q!C
JU3r=   N)
r9   r:   r;   r  r  r  r   r   r   r  r<   r=   r>   r  r  H  s<    554 [[FH4H4r=   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   )rI   r   r   r   rZ  r   rL   r  s       r>   test_maxRstat_invalid_indexz(TestMaxRStat.test_maxRstat_invalid_indexq  s    JJ'rzzJ:JJ'rzzJ:]]9% 	 Q3	 ]]:& 	Q2	]]:& 	Q1	 			  	 	 		 	s$   C	C8C'CC$'C0re  r   c                     |j                  d|j                        }|j                  d|j                        }t        t        t        |||       y r  )rT   r   rK   rL   r   rN   re  rO   rc   r|  s        r>   test_maxRstat_empty_linkagez(TestMaxRStat.test_maxRstat_empty_linkage|  s@     HHV2::H.HHV2::H.j(Aq!4r=   c                     |j                  g dg|j                        }t        j                  j	                  dd      }|j                  |      }t        t        t        |||       y r  )rI   r   rs   rt   rv   rK   rL   r   r  s        r>   test_maxRstat_difrow_linkagez)TestMaxRStat.test_maxRstat_difrow_linkage  sN     JJ'rzzJ:IINN1a JJqMj(Aq!4r=   c                     |j                  g dg|j                        }|j                  g dg|j                        }t        ||d      }t        ||d|      }t	        ||d       y )Nr  r   r  r5   rq   r^   )rI   r   r   r  r/   r  s         r>   !test_maxRstat_one_cluster_linkagez.TestMaxRStat.test_maxRstat_one_cluster_linkage  s^    JJ'rzzJ:JJ'rzzJ:aA6q!QC
JU3r=   rY   r  c                     t         j                  }t        ||      }|j                  t	        |            }|j                  |      }t        ||d      }t        ||d|      }t        ||d       y )Nr5   rq   r^   )r6   r   r	   rI   r   r   r  r/   r  s           r>   test_maxRstat_Q_linkagez$TestMaxRStat.test_maxRstat_Q_linkage  sd      ##AvJJ|A'JJqMaA6q!QC
JU3r=   N)r9   r:   r;   r  r   r   r   r;  r  r  r  r  r<   r=   r>   r  r  n  s    	 [[S%(+5 ,5 [[S%(+5 ,54 [[FH4H4r=   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rp   rH   r5   r   r   r   )rI   r	   r6   ra   r   r   )rN   rO   rc   r|  r  s        r>   $test_dendrogram_single_linkage_tdistz3TestDendrogram.test_dendrogram_single_linkage_tdist  s>    JJw2998DEq$'8V/0r=   c                     |j                  t        t        j                  d            }t	        t
        t        |d       y )Nr   fooorientation)rI   r	   r6   ra   rK   rL   r   r[  s      r>   test_valid_orientationz%TestDendrogram.test_valid_orientation  s,    JJw2998DEj*aUCr=   c                     |j                  t        t        j                  d            }g d}t	        ||j                  |      d      }t	        ||d      }||k(  sJ y )Nr   )r5   r   rp   r   r   rH   T)labelsr  )rI   r	   r6   ra   r   )rN   rO   rc   r  result1result2s         r>   test_labels_as_array_or_listz+TestDendrogram.test_labels_as_array_or_list  sV    JJw2998DE#Qrzz&'94HQvt<'!!!r=   zno matplotlibrD   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   r5   r   r   )rp   r   r   rH   )r   rH   r   r   d   )r  z.Dimensions of Z and labels must be consistent.r   )rI   pltfigurer   r   rL   r   r  r;  strvalueclose)rN   rO   linkexc_infos       r>   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,  rG   r   r   rG   )rG   r   r   rG   )rG   r   r   r   rG   r   r   r   r   r   r   r   r   r   r   r   )     F@r1       K@r2  )     A@r3        I@r4  )      9@r5       @E@r6  )r   r        @@r7  )251034r  )r+  r+  r,  r,  r,  r,  
color_listdcoordicoordivlr  leaves_color_list   )axr  r@  ro   Z   )rE  r  leaf_font_sizeleaf_rotation)r&  r'  r   )rE  r  rH  )rE  r  rG  r  )rI   r	   r6   ra   r  r  add_subplotr   rs   r   get_xticklabelsget_yticklabelsget_rotationget_sizer!  )
rN   r  rO   rc   r   figrE  R1	testlabelR2s
             r>   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"r=   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   rp   lastpT)show_contractedr@  r,  )rG   r   r   rG   r0  (2)z(4)r   r   r>  mtica)r+  r,  r,  r,  r-  )rG   r   r   rG   r.  r/  )r3  r3  r1  r1  )r5  r5        D@rX  )r   r        @@@rY  )r8  r9  r:  r;  rV  )rp   rH   r5   r   r   )r+  r+  r,  r,  r,  )	rI   r	   r6   ra   r   r  r!  rs   r   r  s       r>   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 	r=   c                     t               S r   r3   r  s    r>   dendrogram_lockzTestDendrogram.dendrogram_lock9  s	    vr=   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   mrP   kTg   )r  above_threshold_colorcolor_threshold)r`  rr   r^  rP   r_  r?  )r   r^  r`  r`  r`  )rI   r	   r6   ra   r   r   r   )rN   rO   r\  rc   r|  r?  s         r>   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r5   r   r   r   r   r5   r   rp   r   r   r5   r   r   Tr  r,  r+  r+  r,  C2rl  rC  rs   rI   r	   r   r   rN   rO   rm   rc   rz   
exp_colorscolorss          r>   %test_dendrogram_leaf_colors_zero_distz4TestDendrogram.test_dendrogram_leaf_colors_zero_distN  se     JJ	!!!!!# $ JJwq(+,q$'9
&'VZ(r=   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 )Nrg  )r   r   g?ri  rh  rj  r   Tr  rk  rC  rm  rn  s          r>   test_dendrogram_leaf_colorsz*TestDendrogram.test_dendrogram_leaf_colors]  se     JJ	#!!!!# $ JJwq(+,q$'9
&'VZ(r=   N)r9   r:   r;   r  r  r  r   r   skipifhave_matplotlibr$  r   r   rR  rZ  fixturer\  re  rq  rs  r<   r=   r>   r
  r
    s-   1D" [[O+OD E& g! l@ [[O+OD[[],NO<# P E	<#| g" l@ [[O+OD E	> ^^ )"))r=   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   r5   r   )r   rp   )
shaperT   r   r;  rI   rY  rj  rk  rl  max)
rc   rO   ry   Bre  rF  r(  r)  b_leftb_rights
             r>   r  r  m  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'( Hr=   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 rx  )
ry  result_typerT   r;  rI   rY  rj  rk  rl  rz  )rc   r|  r_  rO   ry   r   r{  re  rF  r(  r)  r|  r}  s                r>   r  r    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'( Hr=   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   )
rs   rt   seedrandnrI   r   r   r   r  r  )rO   rA  rm   rc   trees        r>   test_node_comparer    s    IINN2D
		a A


47A1:DD4==?"#DNNt}}./DNN 001DNN/0r=   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 )Nr  r  r   r   rq   F)rr   check_dtyper   r5   rH   )
n_clustersr   ir   )height)rs   rt   r  r  rI   r   r    r/   arangerT   r   rz  r(   distsearchsorted)rO   rA  rm   rc   cutreenodesr  heightss           r>   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 )Nr]   r^   r   rj   )	r!   rI   r	   r6   ra   r   r/   rm   linkage_X_ward_olo)rO   rc   rd   s      r>   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9r=   c                     t        j                  g d      } t        |       }|j                         }t	        |d   d       t	        |d   d       |j                          |j                         }t	        |d   d       t	        |d   d       |j                  dd       |j                         }t	        |d   d	       t	        |d   d
       |j                          |j                          |j                  dd       |j                         }t	        |d   d       t	        |d   d       |j                          |j                         }t	        |d   d       t	        |d   d       y )N)rp   r   r         r   keyr   r   r  r5   r   g      @rp   r   r   r   )rs   rI   r'   get_minr   
remove_minchange_value)r   heappairs      r>   	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#r=   )dnumpyrs   numpy.testingr   r   r   r   r   r   rK   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%   r&   "scipy.cluster.hierarchy._hierarchyr'   'scipy.cluster.hierarchy._hierarchy_implr(   r)   r*   r+   scipy.spatial.distancer,   scipy._lib._array_apir-   r.   r/   r0   r1   r2   scipy._external.array_api_extra	_externalarray_api_extrarj  	threadingr4    r6   r8   
matplotlibusematplotlib.pyplotpyplotr  ru  	Exceptionr   r   rA   r   r   r   r   r   r  r  rH  ry  r  r  r  r  r  r  r  r
  r  r  r  r  r   r  r<   r=   r>   <module>r     sj  D  T T  *3 3 3 3 3 3 3 3 3 4  )L L . -  !( (JNN5#O ;;//  7s, s, s,l < 	T 	T !	T 8&& && &&R $o6$ $ 7$@ < + + !+  8*2 *2 *2Z 7: : : =!R7 R7 "R7j #$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 (): *:$#  Os   %J JJ