
    9ij                        S SK rS SKJrJrJrJr  S SKrS SKJr	  S SK
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(  S SK)J*r*  S SK+J,r,  S SK-J.r.J/r/J0r0J1r1  S SK2J3s  J4r5  S SK6J7r7  S	S
K8J9r9   " S S5      r: S SK;r;\;Rx                  " S5        S SK=J>r?  Sr@\R                  R                  rC\/" \5       " S S5      5       rD\/" \5       " S S5      5       rE\/" \5       " S S5      5       rF\/" \\5       " S S5      5       rG\/" \5       " S S5      5       rH\/" \5       " S S5      5       rI\/" \5       " S S5      5       rJ\/" \5       " S S5      5       rK\/" \5       " S  S!5      5       rL\/" \5       " S" S#5      5       rM " S$ S%5      rN\/" \ \5       " S& S'5      5       rO\/" \5       " S( S)5      5       rP\/" \5       " S* S+5      5       rQ\/" \5       " S, S-5      5       rR\/" \5       " S. S/5      5       rS\/" \5       " S0 S15      5       rT\/" \!5       " S2 S35      5       rUS4 rVS5\4S6 jrW\/" \5      S7 5       rX\/" \#5      S8 5       rY\/" \$5      S9 5       rZ\C" SS:S;9S< 5       r[g! \A a    Sr@ GNf = f)=    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                       \ rS rSr\r\rSrg)eager9    N)__name__
__module____qualname____firstlineno__r   r   __static_attributes__r3       b/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/scipy/cluster/tests/test_hierarchy.pyr1   r1   9   s     K'r9   r1   AggTFc                      \ rS rSr\" SSS9S 5       rS rS rS rS	 r	S
 r
S rS r\R                  R                  SS/ SQ/ SQ/4S/ SQ/ SQ/4S/ SQ/ SQ/4S/ SQ/ SQ/4S/ SQ/ SQ/4S/ SQ/ SQ/4S/ SQ/ SQ/4/5      S 5       rS r\R                  R                  S\5      S 5       rS r\" SSS9S 5       rS rg!)"TestLinkageO   	jax.numpy$Can't raise inside jax.pure_callbackreasonc                 t    UR                  UR                  /S/S-  -   5      n[        [        [        U5        g )N           )asarraynanassert_raises
ValueErrorr	   selfxpys      r:   3test_linkage_non_finite_elements_in_distance_matrix?TestLinkage.test_linkage_non_finite_elements_in_distance_matrixR   s/     JJx3%')*j'1-r9   c                 P    UR                  S5      n[        [        [        U5        g )Nr   )zerosrH   rI   r	   rJ   s      r:   "test_linkage_empty_distance_matrix.TestLinkage.test_linkage_empty_distance_matrixY   s    HHTNj'1-r9   c                 8    S H  nU R                  X!5        M     g )N)r   completeaverageweighted)check_linkage_tdistrK   rL   methods      r:   test_linkage_tdistTestLinkage.test_linkage_tdist^   s    CF$$V0 Dr9   c                     [        UR                  [        R                  5      U5      n[	        [        SU-   5      n[        X2R                  U5      SS9  g )Nlinkage_ytdist_绽|=atolr	   rF   r/   ytdistgetattrr*   )rK   r[   rL   Z	expectedZs        r:   rY   TestLinkage.check_linkage_tdistb   sD    BJJ299:FC/1BV1KL	::i0u=r9   c                 8    S H  nU R                  X!5        M     g )N)centroidmedianr   )check_linkage_qrZ   s      r:   test_linkage_XTestLinkage.test_linkage_Xh   s    4F  , 5r9   c                 H   [        UR                  [        R                  5      U5      n[	        [        SU-   5      n[        X2R                  U5      SS9  UR                  [        R                  5      n[        USS9n[        Xa5      n[        X2R                  U5      SS9  g )N
linkage_X_ư>ra   	euclidean)metric)r	   rF   r/   Xre   r*   r'   )rK   r[   rL   rf   rg   rt   rM   s          r:   rl   TestLinkage.check_linkage_ql   s    BJJ2445v>/1FG	::i0u=JJ*,,-!K(A::i0u=r9   c                 T   [         R                  R                  S5      nSnUR                  US5      n[	        U5      n[
        R                  " 5        HQ  u  pg[        R                  " XSU5      n[        UR                  U5      U5      n	[        XR                  U5      SSS9  MS     g )Nr         g+=V瞯<)rtolrb   )nprandomRandomStaterandr'   r%   itemsr#   r	   rF   r*   )
rK   rL   rngnrt   dr[   code	Z_trivialrf   s
             r:   test_compare_with_trivial%TestLinkage.test_compare_with_trivialw   s    ii##A&HHQN!H,224LF"**16I

1v.AAzz)45uM 5r9   c                     [        UR                  [        R                  5      SS9n[	        [        S5      n[        X!R                  U5      SS9  g )NT)optimal_orderinglinkage_ytdist_single_olor`   ra   rc   )rK   rL   rf   rg   s       r:   test_optimal_leaf_ordering&TestLinkage.test_optimal_leaf_ordering   s?    BJJ299:TR/1LM	::i0u=r9   zmethod,expectr   )r   r.   'e?rx   )rx      r   r   rV   )rx   r   g'e@r   rW   )rx   r   gev @r   rX   rj   rk   r   )rx   r   g@r   c                     UR                  SS/SS/SS//5      n[        XAS9nUR                  X#R                  S9n[        XRSS9  g )Nr   r.   r[   dtyperq   ra   )rF   r	   float64r*   )rK   r[   expectrL   rt   rf   s         r:   test_linkage_tiesTestLinkage.test_linkage_ties   sM    " JJR1a&1a&12A%F**5.r9   c                     UR                  SS/SS//5      n[        U[        5         [        U5        S S S 5        g ! , (       d  f       g = f)Nr   r.   )rF   r(   r   r	   rK   rL   rt   s      r:   <test_unsupported_uncondensed_distance_matrix_linkage_warningHTestLinkage.test_unsupported_uncondensed_distance_matrix_linkage_warning   s:    JJAA'(N+AJ ,++s	   =
Ar[   c                     UR                  SS/SS//5      n[        R                  " [        5         [	        X1SS9  S S S 5        g ! , (       d  f       g = f)Nr.   	cityblockr[   rs   rF   pytestr   rI   r	   )rK   r[   rL   rt   s       r:   "test_euclidean_linkage_value_error.TestLinkage.test_euclidean_linkage_value_error   s?    JJAA'(]]:&A[9 '&&s   A
Ac                     [        UR                  S/5      SSS9n[        UR                  SS/SS//5      SSS9n[        X#SS9  g )Nr.   r   rr   r   r   ry   rz   )r	   rF   r*   )rK   rL   Z1Z2s       r:   test_2x2_linkageTestLinkage.test_2x2_linkage   sH    RZZ_XkJRZZ!Q!Q 01(;WU+r9   c                     UR                  / SQ5      n[        R                  " [        5         [	        USS9  S S S 5        g ! , (       d  f       g = f)N)r   r   r   rj   r   r   )rK   rL   valuess      r:   test_centroid_neg_distance&TestLinkage.test_centroid_neg_distance   s4     J']]:&F:. '&&s   A
Ar3   N)r4   r5   r6   r7   skip_xp_backendsrN   rS   r\   rY   rm   rl   r   r   r   markparametrizer   r   r$   r   r   r   r8   r3   r9   r:   r=   r=   O   s?    k*PQ. R..
1>-	>	N>
 [[_	++- 	.	++- 	.	++- 	.	++- 	.	++- 	.	++- 	.	++- 	./  /! /
 [[X'9:: ;:
,
 k*PQ/ R/r9   r=   c                        \ rS rSrS rS rSrg)TestInconsistent   c                 T    [         R                   H  nU R                  X!5        M     g N)r/   inconsistent_ytdistcheck_inconsistent_tdist)rK   rL   depths      r:   test_inconsistent_tdist(TestInconsistent.test_inconsistent_tdist   s     (<<E))%4 =r9   c                     UR                  [        R                  5      n[        [	        X15      UR                  [        R
                  U   5      5        g r   )rF   r/   linkage_ytdist_singler*   r   r   )rK   r   rL   rf   s       r:   r   )TestInconsistent.check_inconsistent_tdist   s?    JJ*@@AQ.

#6#J#J5#QR	Tr9   r3   N)r4   r5   r6   r7   r   r   r8   r3   r9   r:   r   r      s    5Tr9   r   c                   :    \ rS rSrS rS r\" SSS9S 5       rSrg	)
TestCopheneticDistance   c                     UR                  / SQ5      nUR                  [        R                  5      n[        U5      n[	        XAR                  X!R
                  S9SS9  g )N  '     r   r   r   r   r   r   r   r         r   r   r   r`   ra   )rF   r/   r   r   r*   r   )rK   rL   	expectedMrf   Ms        r:   test_linkage_cophenet_tdist_Z4TestCopheneticDistance.test_linkage_cophenet_tdist_Z   sL    JJ  9 :	JJ*@@AQK::izz:BOr9   c                 0   UR                  [        R                  5      n[        X!R                  [        R                  5      5      u  p4UR                  / SQUR
                  S9nUR                  SUR
                  S9S   n[        X6SS9  [        XESS9  g )Nr   r   g*ɻ2Qz?r3   r`   ra   )rF   r/   r   r   rd   r   r*   )rK   rL   rf   cr   r   	expectedcs          r:   test_linkage_cophenet_tdist_Z_Y6TestCopheneticDistance.test_linkage_cophenet_tdist_Z_Y   s    JJ*@@A!ZZ(;(B(BCDJJ  9@B

  L	JJ?rzzJRSUV	5151r9   r?   r@   rA   c                     / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/n[         R                  " [        SS9   [        UR	                  U5      5        S S S 5        g ! , (       d  f       g = f)N)rD         ?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   rI   r   rF   )rK   rL   arrs      r:   test_gh_22183$TestCopheneticDistance.test_gh_22183   sZ     ""!"!""##$$
& ]]:-EFRZZ_% GFFs   A!!
A/r3   N)	r4   r5   r6   r7   r   r   r   r   r8   r3   r9   r:   r   r      s*    P2 k*PQ& R&r9   r   c                   &    \ rS rSrS rS rS rSrg)TestMLabLinkageConversion   c                     UR                  / UR                  S9n[        [        U5      U5        [        [	        U5      U5        g )Nr   )rF   r   r+   r
   r   r   s      r:   "test_mlab_linkage_conversion_empty<TestMLabLinkageConversion.test_mlab_linkage_conversion_empty   s7    JJrJ,)!,a0*A.r9   c                     UR                  / SQ/5      nUR                  / SQ/5      n[        [        U5      UR                  X!R                  S9SS9  [        [	        U5      UR                  X1R                  S9SS9  g )N)rD   r   r   r   r.   rx   r   r   ry   r   )rF   r*   r
   r   r   )rK   rL   rf   Zms       r:   'test_mlab_linkage_conversion_single_rowATestMLabLinkageConversion.test_mlab_linkage_conversion_single_row   sk    JJ()*ZZ$)"-rzz!::z/N"	$*BJJrJ,L"	$r9   c                    UR                  / SQ/ SQ/ SQ/ SQ/ SQ/5      nUR                  / SQ/ SQ/ SQ/ S	Q/ S
Q/UR                  S9n[        [        U5      USS9  [        [	        U5      UR                  X!R                  S9SS9  g )N)r      r   )   rE   r   )r.      r   )rx   	   r   )   
   r   )r   r        @a@r   )r   r        `k@r   )rD   r        o@r   )r   r        p@r   )r   r        pr@r   r   ry   r   )rF   r   r*   r
   r   )rK   rL   r   rf   s       r:   *test_mlab_linkage_conversion_multiple_rowsDTestMLabLinkageConversion.test_mlab_linkage_conversion_multiple_rows   s    ZZk$k<A BJJ*****	,
  ZZ  ) 	)"-qu=*BJJrJ,L"	$r9   r3   N)r4   r5   r6   r7   r   r   r   r8   r3   r9   r:   r   r      s    /$$r9   r   c                   X   \ rS rSr\" \5      \R                  R                  S\	R                   V Vs/ s H  nSU4PM	     snn \	R                   V Vs/ s H  nSU4PM	     snn -   \	R                   V Vs/ s H  nSU4PM	     snn -   5      S 5       5       rSrgs  snn f s  snn f s  snn f )	TestFclusterDatai  criterion,tr   distancemaxclustc                     UR                  [        [        SU-   5      U   5      nUR                  [        R                  5      n[	        XRUS9n[        Xd5      (       d   eg N	fcluster_	criteriont)rF   re   r/   Q_Xr   r   )rK   r  r  rL   	expectedTrt   Ts          r:   test_fclusterdata"TestFclusterData.test_fclusterdata  sW     JJw':K)<STUVWX	JJ*../15Q****r9   r3   N)r4   r5   r6   r7   r)   r   r   r   r   r/   fcluster_inconsistentfcluster_distancefcluster_maxclustr  r8   .0r  s   00r:   r   r     s     }%[[]&9&O&OP&O.!	&OP$7$I$I
J$IqJ?$I
J	K$7$I$I
J$IqJ?$I
J	K
+ &+	 	Q
J
Js   BB 5B&r   c                   Z   \ rS rSr\" \\5      \R                  R                  S\
R                   V Vs/ s H  nSU4PM	     snn \
R                   V Vs/ s H  nSU4PM	     snn -   \
R                   V Vs/ s H  nSU4PM	     snn -   5      S 5       5       r\" \\\5      \R                  R                  S\
R                  5      S 5       5       r\" \\\5      \R                  R                  S\
R                  5      S	 5       5       r\" \5      S
 5       rSrgs  snn f s  snn f s  snn f )TestFclusteri  r   r   r   r   c                     UR                  [        [        SU-   5      U   5      n[        UR                  [        R                  5      5      n[        XRUS9n[        [        Xd5      5        g r   )rF   re   r/   r   r  r   r   r   )rK   r  r  rL   r  rf   r  s          r:   test_fclusterTestFcluster.test_fcluster"  sX     JJw':K)<STUVWX	2::15567Qq1a+,r9   r  c                     UR                  [        R                  U   5      n[        UR                  [        R                  5      5      n[        XAS[        U5      S9n[        [        XS5      5        g )Nmonocritr  r  )	rF   r/   r  r   r  r   r   r   r   rK   r  rL   r  rf   r  s         r:   test_fcluster_monocrit#TestFcluster.test_fcluster_monocrit/  sW     JJ2DDQGH	2::15567QZ(1+Fa+,r9   c                     UR                  [        R                  U   5      n[        UR                  [        R                  5      5      n[        XAS[        U5      S9n[        [        XS5      5        g )Nmaxclust_monocritr  )	rF   r/   r  r   r  r   r   r   r   r  s         r:   test_fcluster_maxclust_monocrit,TestFcluster.test_fcluster_maxclust_monocrit7  sX     JJ2DDQGH	2::15567Q%88A;Oa+,r9   c                 x   UR                  S/S/S//5      n[        U5      n[        [        USSS9UR                  / SQ5      5        [        [        USSS9UR                  / SQ5      5        [        [        US	SS9UR                  / S
Q5      5        [        [        USSS9UR                  / S
Q5      5        g )Nr.   r   rE   r   )r  r  r.   r.   r.   rx   )rx   r.   r.   r   r   )rF   r   r   r   rK   rL   rM   rf   s       r:   test_fcluster_maxclust_gh_12651,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	2r9   r3   N)r4   r5   r6   r7   r)   r   r   r   r   r   r/   r
  r  r  r  r   r  r  r!  r8   r  s   00r:   r  r    s>    v}-[[]&9&O&OP&O.!	&OP$7$I$I
J$IqJ?$I
J	K$7$I$I
J$IqJ?$I
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!6D'r  c                       \ rS rSrS rSrg)TestLeadersiM  c                 <   [         R                  n[        U5      n[        U5      n[	        USSS9nUR                  U5      nUR                  XQR                  S9n[        XE5      nUR                  / SQUR                  S9n[        UR                  U5      USS9  g )Nr   r   r  r   )5   7   8   rx   r   r.   ry   r   )
r/   r  r'   r	   r   rF   int32r   r*   concat)rK   rL   rt   Yrf   r  Lr   s           r:   test_leaders_singleTestLeaders.test_leaders_singleP  s    ##!HAJQ*2JJqMJJqJ)AM1B		!f59r9   r3   N)r4   r5   r6   r7   r-  r8   r3   r9   r:   r$  r$  M  s    
:r9   r$  c                       \ rS rSrS rS rS rS rS rS r	S r
\R                  R                  S	/ S
Q5      S 5       r\R                  R                  S	/ S
Q5      S 5       rS rSS jrSrg)TestIsIsomorphici]  c                 X    [        / SQ/ SQ5      (       d   e[        / / 5      (       d   eg Nr  )rx   rx   rx   )r   rK   s    r:   test_array_like TestIsIsomorphic.test_array_like`  s(    Y	2222R$$$$r9   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       d   e[        X25      (       d   eg r2  rF   r   rK   rL   abs       r:   test_is_isomorphic_1%TestIsIsomorphic.test_is_isomorphic_1d  @    JJy!JJy!Q""""Q""""r9   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       d   e[        X25      (       d   eg )N)r.   r   r.   )rx   r   rx   r7  r8  s       r:   test_is_isomorphic_2%TestIsIsomorphic.test_is_isomorphic_2k  r=  r9   c                 l    UR                  / 5      nUR                  / 5      n[        X#5      (       d   eg r   r7  r8  s       r:   test_is_isomorphic_3%TestIsIsomorphic.test_is_isomorphic_3r  s-    JJrNJJrNQ""""r9   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       d   e[        X25      (       d   eg )Nr   )r.   r   rx   r7  r8  s       r:   test_is_isomorphic_4A&TestIsIsomorphic.test_is_isomorphic_4Ax  B     JJy!JJy!Q""""Q""""r9   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       a   e[        X25      (       a   eg )N)r.   rx   r   r   )r.   r   rx   r   r7  r8  s       r:   test_is_isomorphic_4B&TestIsIsomorphic.test_is_isomorphic_4B  sE     JJ|$JJ|$ &&&& &&&&&r9   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       d   e[        X25      (       d   eg )N)r   rx   r   )r   r   rx   r7  r8  s       r:   test_is_isomorphic_4C&TestIsIsomorphic.test_is_isomorphic_4C  rG  r9   	nclusters)rx   r   rE   c                 $    U R                  SXS9  g )N  rL   is_isomorphic_randpermrK   rN  rL   s      r:   test_is_isomorphic_5%TestIsIsomorphic.test_is_isomorphic_5  s     	##D)#;r9   c                 *    U R                  SUSSUS9  g )NrP  TrE   rQ  rR  rT  s      r:   test_is_isomorphic_6%TestIsIsomorphic.test_is_isomorphic_6  s    
 	##D)T1#Dr9   c                 t    UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       a   eg )Nr   r  r7  r8  s       r:   test_is_isomorphic_7%TestIsIsomorphic.test_is_isomorphic_7  s2    JJy!JJy! &&&&&r9   c                   [        S5       GH6  n[        R                  R                  U5      U-  R	                  [
        5      n[        R                  " UR                  [
        S9n[        R                  R                  U5      n	[        SUR                  S   5       H  n
XU
      X'   M     U(       a=  [        R                  R                  U5      nXSU ==   S-  ss'   XSU ==   U-  ss'   UR                  U5      nUR                  U5      n[        Xx5      U(       + :X  d   e[        X5      U(       + :X  a  GM7   e   g )Nr   r   r   r.   )ranger{   r|   r~   astypeintrR   sizepermutationshaperF   r   )rK   nobsrN  nonisonerrorsrL   _r9  r:  PiQs               r:   rS  'TestIsIsomorphic.is_isomorphic_randperm  s    qA%	199#>As+A		%%i0A1aggaj)1w *II))$/Ag,1$Ag,9,

1A

1A &v:666 &v:666 r9   r3   N)Fr   )r4   r5   r6   r7   r4  r;  r?  rB  rE  rI  rL  r   r   r   rU  rX  r[  rS  r8   r3   r9   r:   r0  r0  ]  s{    %####'# [[[)4< 5<
 [[[)4E 5E'7r9   r0  c                       \ rS rSr\R
                  R                  S/ SQ5      S 5       rS rS r	S r
S rS	 rS
 rS rSrg)TestIsValidLinkagei  nrow, ncol, valid)rx   rE   F)rx   r   F)r.   r   T)rx   r   Tc                     UR                  / SQ/ SQ/UR                  S9nUS U2S U24   n[        [        U5      USS9  U(       d  [	        [
        [        USS9  g g N)r   r.   r   rx   rE   )r   rx   r   r   r   r   Fcheck_namespaceTthrow)rF   r   r+   r   rH   rI   )rK   nrowncolvalidrL   rf   s         r:   "test_is_valid_linkage_various_size5TestIsValidLinkage.test_is_valid_linkage_various_size  sg     JJ))+24**  >eteUdUlO(+UEJ*&6F r9   c                     UR                  / SQ/ SQ/UR                  S9n[        [        U5      SSS9  [	        [
        [        USS9  g Nr   r.   r   rx   r   rx   r   r   r   Frr  Trt  )rF   int64r+   r   rH   	TypeErrorrK   rL   rf   s      r:   test_is_valid_linkage_int_type1TestIsValidLinkage.test_is_valid_linkage_int_type  sG    JJ&(/1xx  9(+UEJi!11DAr9   c                     UR                  SUR                  S9n[        [        U5      SSS9  [	        [
        [        USS9  g Nr   r   r   Frr  Trt  )rR   r   r+   r   rH   rI   r  s      r:   test_is_valid_linkage_empty.TestIsValidLinkage.test_is_valid_linkage_empty  s9    HHV2::H.(+UEJj"2ATBr9   c                     [        SSS5       Hi  n[        R                  R                  X"S-
  -  S-  5      nUR	                  [        U5      5      nUR	                  U5      n[        [        U5      SSS9  Mk     g 	Nr      r   r.   rx   TFrr  )r^  r{   r|   r~   rF   r	   r+   r   rK   rL   ri  rM   rf   s        r:   test_is_valid_linkage_4_and_up1TestIsValidLinkage.test_is_valid_linkage_4_and_up  sc     q"aA		qA#wz*A

71:&A

1A,Q/uM	 !r9   c                    [        SSS5       H  n[        R                  R                  X"S-
  -  S-  5      nUR	                  [        U5      5      nUR	                  U5      n[        R                  " U5      US-  S4   R                  S5      n[        [        U5      SSS	9  [        R                  " [        5         [        R                  US
S9  S S S 5        M     g ! , (       d  f       M  = f)Nr   r  r   r.   rx   r   Frr  Trt  r^  r{   r|   r~   rF   r	   xpxatsetr+   r   r   r   rI   r1   r  s        r:   -test_is_valid_linkage_4_and_up_neg_index_left@TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_left       q"aA		qA#wz*A

71:&A

1Aq	!Q$'"&&r*A,Q/Nz*&&q&5 +* ! +*   >C  
C/	c                    [        SSS5       H  n[        R                  R                  X"S-
  -  S-  5      nUR	                  [        U5      5      nUR	                  U5      n[        R                  " U5      US-  S4   R                  S5      n[        [        U5      SSS9  [        R                  " [        5         [        R                  US	S
9  S S S 5        M     g ! , (       d  f       M  = fNr   r  r   r.   rx   r  Frr  Trt  r  r  s        r:   .test_is_valid_linkage_4_and_up_neg_index_rightATestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_right  r  r  c                    [        SSS5       H  n[        R                  R                  X"S-
  -  S-  5      nUR	                  [        U5      5      nUR	                  U5      n[        R                  " U5      US-  S4   R                  S5      n[        [        U5      SSS9  [        R                  " [        5         [        R                  US	S
9  S S S 5        M     g ! , (       d  f       M  = fNr   r  r   r.   rx   g      Frr  Trt  r  r  s        r:   'test_is_valid_linkage_4_and_up_neg_dist:TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_dist  s     q"aA		qA#wz*A

71:&A

1Aq	!Q$'"&&t,A,Q/Nz*&&q&5 +* ! +*r  c                    [        SSS5       H  n[        R                  R                  X"S-
  -  S-  5      nUR	                  [        U5      5      nUR	                  U5      n[        R                  " U5      US-  S4   R                  S5      n[        [        U5      SSS9  [        R                  " [        5         [        R                  US	S
9  S S S 5        M     g ! , (       d  f       M  = fr  r  r  s        r:   )test_is_valid_linkage_4_and_up_neg_counts<TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_counts  r  r  r3   N)r4   r5   r6   r7   r   r   r   ry  r  r  r  r  r  r  r  r8   r3   r9   r:   rm  rm    sX     [[0 3N OGOGBCN
6
6
6
6r9   rm  c                       \ rS rSrS r\R                  R                  S/ SQ5      S 5       rS r	S r
S rS	 rS
 rSrg)TestIsValidInconsistenti	  c                     UR                  / SQ/ SQ/UR                  S9n[        [        U5      SSS9  [	        [
        [        USS9  g r|  )rF   r  r+   r   rH   r  rK   rL   Rs      r:   test_is_valid_im_int_type1TestIsValidInconsistent.test_is_valid_im_int_type  sD    JJ&(/1xx  9AuEiat<r9   rn  ro  c                     UR                  / SQ/ SQ/UR                  S9nUS U2S U24   n[        [        U5      USS9  U(       d  [	        [
        [        USS9  g g rq  )rF   r   r+   r   rH   rI   )rK   rv  rw  rx  rL   r  s         r:   test_is_valid_im_various_size5TestIsValidInconsistent.test_is_valid_im_various_size  sd     JJ))+24**  >eteUdUlOAuE*k1DA r9   c                     UR                  SUR                  S9n[        [        U5      SSS9  [	        [
        [        USS9  g r  )rR   r   r+   r   rH   rI   r  s      r:   test_is_valid_im_empty.TestIsValidInconsistent.test_is_valid_im_empty  s6    HHV2::H.AuEj+q=r9   c                     [        SSS5       He  n[        R                  R                  X"S-
  -  S-  5      n[	        U5      n[        U5      nUR                  U5      n[        [        U5      SSS9  Mg     g r  )	r^  r{   r|   r~   r	   r   rF   r+   r   rK   rL   ri  rM   rf   r  s         r:   test_is_valid_im_4_and_up1TestIsValidInconsistent.test_is_valid_im_4_and_up$  sa     q"aA		qA#wz*A
AQA

1AKND%H !r9   c                    [        SSS5       H  n[        R                  R                  X"S-
  -  S-  5      n[	        U5      n[        U5      n[        R                  " U5      US-  S4   R                  S5      nUR                  U5      n[        [        U5      SSS	9  [        R                  " [        5         [        R                  US
S9  S S S 5        M     g ! , (       d  f       M  = f)Nr   r  r   r.   rx   r          Frr  Trt  r^  r{   r|   r~   r	   r   r  r  r  rF   r+   r   r   r   rI   r1   r  s         r:   (test_is_valid_im_4_and_up_neg_index_left@TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_left.       q"aA		qA#wz*A
AQAq	!Q$(#''-A

1AKNE5Iz*!!!4!0 +* ! +*   :C
C+	c                    [        SSS5       H  n[        R                  R                  X"S-
  -  S-  5      n[	        U5      n[        U5      n[        R                  " U5      US-  S4   R                  S5      nUR                  U5      n[        [        U5      SSS9  [        R                  " [        5         [        R                  US	S
9  S S S 5        M     g ! , (       d  f       M  = f)Nr   r  r   r.   rx   r  Frr  Trt  r  r  s         r:   )test_is_valid_im_4_and_up_neg_index_rightATestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_right;  r  r  c                    [        SSS5       H  n[        R                  R                  X"S-
  -  S-  5      n[	        U5      n[        U5      n[        R                  " U5      US-  S4   R                  S5      nUR                  U5      n[        [        U5      SSS9  [        R                  " [        5         [        R                  US	S
9  S S S 5        M     g ! , (       d  f       M  = fr  r  r  s         r:   "test_is_valid_im_4_and_up_neg_dist:TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_distH  s     q"aA		qA#wz*A
AQAq	!Q$'"&&t,A

1AKNE5Iz*!!!4!0 +* ! +*r  r3   N)r4   r5   r6   r7   r  r   r   r   r  r  r  r  r  r  r8   r3   r9   r:   r  r  	  sQ    = [[0 3N OBOB>I111r9   r  c                   2    \ rS rSrS rS rS rS rS rSr	g)	TestNumObsLinkageiV  c                 b    UR                  SUR                  S9n[        [        [        U5        g Nr  r   )rR   r   rH   rI   r   r  s      r:   test_num_obs_linkage_empty,TestNumObsLinkage.test_num_obs_linkage_emptyX  s$    HHV2::H.j/15r9   c                 `    UR                  / SQ/UR                  S9n[        U5      S:X  d   eg )Nr}  r   rx   rF   r   r   r  s      r:   test_num_obs_linkage_1x4*TestNumObsLinkage.test_num_obs_linkage_1x4]  s.    JJ'rzzJ:q!Q&&&r9   c                 f    UR                  / SQ/ SQ/UR                  S9n[        U5      S:X  d   eg )Nr}  r~  r   r   r  r  s      r:   test_num_obs_linkage_2x4*TestNumObsLinkage.test_num_obs_linkage_2x4b  s9    JJ&(/1zz  ;q!Q&&&r9   c                     [        SSS5       HU  n[        R                  R                  X"S-
  -  S-  5      nUR	                  [        U5      5      n[        U5      U:X  a  MU   e   g )Nr   r  r   r.   rx   )r^  r{   r|   r~   rF   r	   r   r  s        r:   test_num_obs_linkage_4_and_up/TestNumObsLinkage.test_num_obs_linkage_4_and_uph  sW     q"aA		qA#wz*A

71:&A"1%*** !r9   c                     [        SS5       HY  n[        R                  R                  US5      n[	        U5      nUR                  [        U5      5      n[        U5      U:X  a  MY   e   g )Nrx   r   r   )r^  r{   r|   r~   r'   rF   r	   r   )rK   rL   r   rt   r+  rf   s         r:   !test_num_obs_linkage_multi_matrix3TestNumObsLinkage.test_num_obs_linkage_multi_matrixp  sT    q"A		q!$AaA

71:&A"1%***	 r9   r3   N)
r4   r5   r6   r7   r  r  r  r  r  r8   r3   r9   r:   r  r  V  s    6
'
'++r9   r  c                   n    \ rS rSrS rS r\R                  R                  S/ SQ5      S 5       r	S r
Srg	)
TestLeavesListiy  c                     UR                  / SQ/UR                  S9n[        U5        [        [	        U5      SS/SS9  g )Nr}  r   r   r.   ry   r   rF   r   r   r   r   r  s      r:   test_leaves_list_1x4#TestLeavesList.test_leaves_list_1x4|  s6    JJ'rzzJ:
AAU;r9   c                     UR                  / SQ/ SQ/UR                  S9n[        U5        [        [	        U5      / SQSS9  g )Nr}  r~  r   )r   r.   rx   ry   r   r  r  s      r:   test_leaves_list_2x4#TestLeavesList.test_leaves_list_2x4  s=    JJ&(/1zz  ;
A	>r9   r[   )r   rV   rW   rX   rj   rk   r   c                     [         R                  nUR                  [        X15      5      n[	        U5      n[        UR                  5       [        U5      SS9  g )Nry   r   )r/   r  rF   r	   r   r   	pre_orderr   )rK   r[   rL   rt   rf   nodes         r:   test_leaves_list_Q!TestLeavesList.test_leaves_list_Q  sB      ##JJwq)*qz(+a.uEr9   c                    [         R                  nUR                  [        US5      5      n[	        U5      n[        UR                  5       UR                  5       R                  5       UR                  5       R                  5       -   SS9  g )Nr   ry   r   )	r/   r  rF   r	   r   r   r  get_left	get_right)rK   rL   rt   rf   r  s        r:   test_Q_subtree_pre_order'TestLeavesList.test_Q_subtree_pre_order  sf    ##JJwq(+,qz(224t~~7G7Q7Q7SS"	$r9   r3   N)r4   r5   r6   r7   r  r  r   r   r   r  r  r8   r3   r9   r:   r  r  y  s=    <? [[XSUFUF$r9   r  c                   ,    \ rS rSrS rS rS rS rSrg)TestCorrespondi  c                     UR                  SUR                  S9nUR                  SUR                  S9n[        [        [        X25        g )NrQ   r   r  )rR   r   rH   rI   r   r   s       r:   test_correspond_empty$TestCorrespond.test_correspond_empty  s:    HHTH,HHU"**H-j*a3r9   c                    [        SS5       Hi  n[        R                  R                  X"S-
  -  S-  5      nUR	                  [        U5      5      nUR	                  U5      n[        [        XC5      5        Mk     [        SSS5       Hi  n[        R                  R                  X"S-
  -  S-  5      nUR	                  [        U5      5      nUR	                  U5      n[        [        XC5      5        Mk     g )Nrx   r   r.   r  r   )r^  r{   r|   r~   rF   r	   r   r   r  s        r:   test_correspond_2_and_up'TestCorrespond.test_correspond_2_and_up  s     q!A		qA#wz*A

71:&A

1AJq$%	 
 q"aA		qA#wz*A

71:&A

1AJq$%	 !r9   c                    [        [        [        [        SS5      5      [        [        SS5      5      5      5      [        [        [        [        SS5      5      [        [        SS5      5      5      5      -    H  u  p#[        R                  R                  X"S-
  -  S-  5      n[        R                  R                  X3S-
  -  S-  5      nUR                  [        U5      5      nUR                  [        U5      5      nUR                  U5      nUR                  U5      n[        Xe5      (       a   e[        Xt5      (       d  M   e   g )Nrx   r   r   rE   r.   	listzipr^  r{   r|   r~   rF   r	   r   rK   rL   ri  jrM   y2rf   r   s           r:   test_correspond_4_and_up'TestCorrespond.test_correspond_4_and_up  s     CU1a[ 14a3DEFCU1a[ 14a3DEFGFQ		qA#wz*AQ3
+B

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

1ABB!!((((!"((((Gr9   c                    [        [        [        [        SS5      5      [        [        SS5      5      5      5      [        [        [        [        SS5      5      [        [        SS5      5      5      5      -    H  u  p#[        R                  R                  X"S-
  -  S-  5      n[        R                  R                  X3S-
  -  S-  5      nUR                  [        U5      5      nUR                  [        U5      5      nUR                  U5      nUR                  U5      n[        Xe5      (       a   e[        Xt5      (       d  M   e   g )Nrx   r         r.   r  r  s           r:   test_correspond_4_and_up_2)TestCorrespond.test_correspond_4_and_up_2  s     CU1a[ 14b"3FGHCU1a[ 14b"3FGHIFQ		qA#wz*AQ3
+B

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

1ABB!!((((!"((((Ir9   r3   N)	r4   r5   r6   r7   r  r  r  r  r8   r3   r9   r:   r  r    s    4&))r9   r  c                   V    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)TestIsMonotonici  c                 b    UR                  SUR                  S9n[        [        [        U5        g r  )rR   r   rH   rI   r   r  s      r:   test_is_monotonic_empty'TestIsMonotonic.test_is_monotonic_empty  s$    HHV2::H.j,2r9   c                 b    UR                  / SQ/UR                  S9n[        U5      (       d   eg )Nr   r.   333333?rx   r   rF   r   r   r  s      r:   test_is_monotonic_1x4%TestIsMonotonic.test_is_monotonic_1x4  s)    JJ'rzzJ:Ar9   c                 h    UR                  / SQ/ SQ/UR                  S9n[        U5      (       d   eg )Nr  )rx   r   皙?r   r   r  r  s      r:   test_is_monotonic_2x4_T'TestIsMonotonic.test_is_monotonic_2x4_T  s4    JJ&(/1zz  ;Ar9   c                 h    UR                  / SQ/ SQ/UR                  S9n[        U5      (       a   eg )N)r   r.   r
  rx   )rx   r   r  r   r   r  r  s      r:   test_is_monotonic_2x4_F'TestIsMonotonic.test_is_monotonic_2x4_F  s7    JJ&(/1zz  ;??""?r9   c                 n    UR                  / SQ/ SQ/ SQ/UR                  S9n[        U5      (       d   eg )Nr  rx   r   r
  rx   r   rE   g333333?r   r   r  r  s      r:   test_is_monotonic_3x4_T'TestIsMonotonic.test_is_monotonic_3x4_T  s9    JJ&&(/1zz  ; Ar9   c                 n    UR                  / SQ/ SQ/ SQ/UR                  S9n[        U5      (       a   eg )Nr  )rx   r   皙?rx   r  r   r  r  s      r:   test_is_monotonic_3x4_F1(TestIsMonotonic.test_is_monotonic_3x4_F1  <    JJ&&(/1zz  ;  ??""?r9   c                 n    UR                  / SQ/ SQ/ SQ/UR                  S9n[        U5      (       a   eg )N)r   r.   g?rx   r  r  r   r  r  s      r:   test_is_monotonic_3x4_F2(TestIsMonotonic.test_is_monotonic_3x4_F2  r  r9   c                 n    UR                  / SQ/ SQ/ SQ/UR                  S9n[        U5      (       a   eg )Nr  r  )r   rE   r  r   r   r  r  s      r:   test_is_monotonic_3x4_F3(TestIsMonotonic.test_is_monotonic_3x4_F3  r  r9   c                 z    UR                  [        [        R                  S5      5      n[	        U5      (       d   eg Nr   )rF   r	   r/   rd   r   r  s      r:    test_is_monotonic_tdist_linkage10TestIsMonotonic.test_is_monotonic_tdist_linkage1  s.     JJw2998DEAr9   c                     UR                  [        [        R                  S5      5      n[        R
                  " U5      S   R                  S5      n[        U5      (       a   eg )Nr   )rx   rx   rD   )rF   r	   r/   rd   r  r  r  r   r  s      r:    test_is_monotonic_tdist_linkage20TestIsMonotonic.test_is_monotonic_tdist_linkage2  sM     JJw2998DEFF1IdO$??""?r9   c                 ~    [         R                  nUR                  [        US5      5      n[	        U5      (       d   eg r!  )r/   r  rF   r	   r   )rK   rL   rt   rf   s       r:   test_is_monotonic_Q_linkage+TestIsMonotonic.test_is_monotonic_Q_linkage  s2      ##JJwq(+,Ar9   r3   N)r4   r5   r6   r7   r  r  r  r  r  r  r  r  r"  r%  r(  r8   r3   r9   r:   r  r    s9    3

#####r9   r  c                   h    \ rS rSrS rS r\R                  R                  S/ SQ5      S 5       r	Sr
g)	TestMaxDistsi  c                 b    UR                  SUR                  S9n[        [        [        U5        g r  )rR   r   rH   rI   r   r  s      r:   test_maxdists_empty_linkage(TestMaxDists.test_maxdists_empty_linkage  s$    HHV2::H.j(A.r9   c                 ~    UR                  / SQ/UR                  S9n[        U5      n[        X!5      n[	        X4SS9  g )Nr   r.   r  r   r   ry   ra   )rF   r   r   calculate_maximum_distancesr*   )rK   rL   rf   MD
expectedMDs        r:   !test_maxdists_one_cluster_linkage.TestMaxDists.test_maxdists_one_cluster_linkage"  s8    JJ'rzzJ:a[07
U3r9   r[   r   rV   r   rj   rk   c                     [         R                  nUR                  [        X15      5      n[	        U5      n[        XB5      n[        XVSS9  g )Nry   ra   )r/   r  rF   r	   r   r1  r*   )rK   r[   rL   rt   rf   r2  r3  s          r:   test_maxdists_Q_linkage$TestMaxDists.test_maxdists_Q_linkage)  s?      ##JJwq)*a[07
U3r9   r3   N)r4   r5   r6   r7   r-  r4  r   r   r   r8  r8   r3   r9   r:   r+  r+    s7    /
4 [[FH4H4r9   r+  c                   n    \ rS rSrS rS rS r\R                  R                  S/ SQ5      S 5       r
Srg	)
TestMaxInconstsi4  c                     UR                  SUR                  S9nUR                  SUR                  S9n[        [        [        X#5        g r  )rR   r   rH   rI   r   rK   rL   rf   r  s       r:   test_maxinconsts_empty_linkage.TestMaxInconsts.test_maxinconsts_empty_linkage7  s:    HHV2::H.HHV2::H.j+q4r9   c                     UR                  / SQ/UR                  S9n[        R                  R	                  SS5      nUR                  U5      n[        [        [        X#5        g Nr0  r   rx   r   )rF   r   r{   r|   r~   rH   rI   r   r=  s       r:   test_maxinconsts_difrow_linkage/TestMaxInconsts.test_maxinconsts_difrow_linkage=  sJ     JJ'rzzJ:IINN1a JJqMj+q4r9   c                     UR                  / SQ/UR                  S9nUR                  / SQ/UR                  S9n[        X#5      n[        X#US9n[	        XESS9  g )Nr0  r   r   r   r   r  rQ  ry   ra   )rF   r   r   !calculate_maximum_inconsistenciesr*   rK   rL   rf   r  r2  r3  s         r:   $test_maxinconsts_one_cluster_linkage4TestMaxInconsts.test_maxinconsts_one_cluster_linkageE  sT    JJ'rzzJ:JJ'rzzJ:6qC
U3r9   r[   r6  c                     [         R                  n[        X15      nUR                  [	        U5      5      nUR                  U5      n[        XE5      n[        XEUS9n[        XgSS9  g )NrQ  ry   ra   )r/   r  r	   rF   r   r   rF  r*   rK   r[   rL   rt   rf   r  r2  r3  s           r:   test_maxinconsts_Q_linkage*TestMaxInconsts.test_maxinconsts_Q_linkageM  sX      ##AJJ|A'JJqM6qC
U3r9   r3   N)r4   r5   r6   r7   r>  rB  rH  r   r   r   rL  r8   r3   r9   r:   r;  r;  4  s<    554 [[FH4H4r9   r;  c                      \ rS rSrS r\R                  R                  S\" S5      5      S 5       r	\R                  R                  S\" S5      5      S 5       r
S r\R                  R                  S/ S	Q5      S
 5       rSrg)TestMaxRStatiZ  c                    UR                  / SQ/UR                  S9nUR                  / SQ/UR                  S9n[        R                  " [        5         [        X#S5        S S S 5        [        R                  " [        5         [        X#S5        S S S 5        [        R                  " [        5         [        X#S5        S S S 5        g ! , (       d  f       Nm= f! , (       d  f       NO= f! , (       d  f       g = f)Nr0  r   rE  gffffff
@r   r   )rF   r   r   r   r  r   rI   r=  s       r:   test_maxRstat_invalid_index(TestMaxRStat.test_maxRstat_invalid_index]  s    JJ'rzzJ:JJ'rzzJ:]]9%Q3 &]]:&Q2 ']]:&Q1 '&	 &%&&&&s$   C	C3C+	
C
C(+
C9ri  r   c                     UR                  SUR                  S9nUR                  SUR                  S9n[        [        [        X4U5        g r  )rR   r   rH   rI   r   rK   ri  rL   rf   r  s        r:   test_maxRstat_empty_linkage(TestMaxRStat.test_maxRstat_empty_linkageh  s>     HHV2::H.HHV2::H.j(A!4r9   c                     UR                  / SQ/UR                  S9n[        R                  R	                  SS5      nUR                  U5      n[        [        [        X4U5        g rA  )rF   r   r{   r|   r~   rH   rI   r   rT  s        r:   test_maxRstat_difrow_linkage)TestMaxRStat.test_maxRstat_difrow_linkageo  sL     JJ'rzzJ:IINN1a JJqMj(A!4r9   c                     UR                  / SQ/UR                  S9nUR                  / SQ/UR                  S9n[        X#S5      n[        X#SU5      n[	        XESS9  g )Nr0  r   rE  r.   ry   ra   )rF   r   r   rF  r*   rG  s         r:   !test_maxRstat_one_cluster_linkage.TestMaxRStat.test_maxRstat_one_cluster_linkagex  sX    JJ'rzzJ:JJ'rzzJ:aA6qQC
U3r9   r[   r6  c                     [         R                  n[        X15      nUR                  [	        U5      5      nUR                  U5      n[        XES5      n[        XESU5      n[        XgSS9  g )Nr.   ry   ra   )r/   r  r	   rF   r   r   rF  r*   rK  s           r:   test_maxRstat_Q_linkage$TestMaxRStat.test_maxRstat_Q_linkage  s\      ##AJJ|A'JJqMaA6qQC
U3r9   r3   N)r4   r5   r6   r7   rQ  r   r   r   r^  rU  rX  r[  r^  r8   r3   r9   r:   rO  rO  Z  s    	 [[S%(+5 ,5 [[S%(+5 ,54 [[FH4H4r9   rO  c                      \ rS rSrS rS rS r\R                  R                  \
(       + SS9S 5       r\" SS	S9\" S
SS9\R                  R                  \
(       + SS9\R                  R                  S/ SQ5      S 5       5       5       5       r\" SS	S9\" S
SS9\R                  R                  \
(       + SS9S 5       5       5       r\R                   S 5       rS rS rS rSrg)TestDendrogrami  c                     UR                  [        [        R                  S5      5      n[	        USS9nUS   n[        U/ SQ5        g )Nr   Tno_plotleavesrx   rE   r.   r   r   r   )rF   r	   r/   rd   r   r   )rK   rL   rf   r  re  s        r:   $test_dendrogram_single_linkage_tdist3TestDendrogram.test_dendrogram_single_linkage_tdist  s>    JJw2998DEq$'8V/0r9   c                 ~    UR                  [        [        R                  S5      5      n[	        [
        [        USS9  g )Nr   fooorientation)rF   r	   r/   rd   rH   rI   r   r  s      r:   test_valid_orientation%TestDendrogram.test_valid_orientation  s,    JJw2998DEj*aUCr9   c                     UR                  [        [        R                  S5      5      n/ SQn[	        X!R                  U5      SS9n[	        X#SS9nXE:X  d   eg )Nr   )r.   r   rx   r   r   rE   T)labelsrd  )rF   r	   r/   rd   r   )rK   rL   rf   rp  result1result2s         r:   test_labels_as_array_or_list+TestDendrogram.test_labels_as_array_or_list  sP    JJw2998DE#Qzz&'94HQt<!!!r9   zno matplotlibrA   c           	         UR                  / SQ/ SQ/ SQ/5      n[        R                  " 5         [        R                  " [
        5       n[        U[        [        S5      5      S9  S S S 5        S[        WR                  5      ;   d   e[        R                  " [
        SS9   [        U/ S9  S S S 5        [        R                  " 5         g ! , (       d  f       Nk= f! , (       d  f       N5= f)N)r   r.   r   r   )rx   r   r   rE   )r   rE   r   r   d   )rp  z.Dimensions of Z and labels must be consistent.r   )rF   pltfigurer   r   rI   r   r  r^  strvalueclose)rK   rL   linkexc_infos       r:   test_valid_label_size$TestDendrogram.test_valid_label_size  s    zz
 
 	

]]:&(tDs$45 '?hnn%& 	& & ]]FH tB'H
 			 '&
H H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 matplotlibrl  )topbottomleftrightc                 2   UR                  [        [        R                  S5      5      n/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ// SQ/ S	Q/ S
Q/ SQ/ SQ// SQ/ SQ/ SQS.n[        R
                  " 5       nUR                  S5      n[        X6US9n[        R                   " US   5      US'   [        Xt5        [        X6USSS9  US;   a  UR                  5       S   OUR                  5       S   n[        UR                  5       S5        [        UR                  5       S5        [        X6USS9  US;   a  UR                  5       S   OUR                  5       S   n[        UR                  5       S5        [        X6USS9  US;   a  UR                  5       S   OUR                  5       S   n[        UR                  5       S5        [        R                  " 5         [        X1S9n	[        R                  " 5         [        R                   " U	S   5      U	S'   [        X5        g )Nr   )C1C0r  r  r  rD   r   r   rD   )rD   r   r   rD   )rD   r   r   r   rD   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4rf  )r  r  r  r  r  r  
color_listdcoordicoordivlre  leaves_color_list   )axrl  r  rw   Z   )r  rl  leaf_font_sizeleaf_rotation)r  r  r   )r  rl  r  )r  rl  r  rk  )rF   r	   r/   rd   rw  rx  add_subplotr   r{   r   get_xticklabelsget_yticklabelsget_rotationget_sizer{  )
rK   rl  rL   rf   expectedfigr  R1	testlabelR2s
             r:   test_dendrogram_plot#TestDendrogram.test_dendrogram_plot  s    JJw2998DE"@7799;	=
  67779	;
 :0)M  jjl__S! k: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"r9   c           
         UR                  [        [        R                  S5      5      n[	        USSSS9n[
        R                  " 5         [        R                   " US   5      US'   [        US// SQ// S	Q/S
S/SS/SS/S.5        [	        USSSS9n[
        R                  " 5         [        R                   " US   5      US'   [        U/ SQ/ SQ/ SQ/ SQ/ SQ// S	Q/ SQ/ SQ/ SQ// SQ/ SQ/ SQS.5        g )Nr   rx   lastpT)show_contractedr  r  )rD   r   r   rD   r  (2)z(4)r   r   r  mtica)r  r  r  r  r  )rD   r   r   rD   r  r  )r  r  r  r  )r  r        D@r  )r   r        @@@r  )r  r  r  r  r  )rx   rE   r.   r   r   )r  r  r  r  r  )	rF   r	   r/   rd   r   rw  r{  r{   r   r=  s       r:   test_dendrogram_truncate_mode,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 	r9   c                     [        5       $ r   r,   r3  s    r:   dendrogram_lockTestDendrogram.dendrogram_lock%  s	    vr9   c                    UR                  [        [        R                  S5      5      nU   [	        / SQ5        [        USSSS9n[	        / SQ5        US   n[        U/ S	Q5        [	        S 5        S S S 5        g ! , (       d  f       g = f)
Nr   )r   mrM   kTg   )rd  above_threshold_colorcolor_threshold)r  rr   r  rM   r  r  )r   r  r  r  r  )rF   r	   r/   rd   r   r   r   )rK   rL   r  rf   r  r  s         r:   test_dendrogram_colors%TestDendrogram.test_dendrogram_colors)  so    JJw2998DE"#781d14cKA"#AB<J%>? #4( __s   AA::
Bc           	          [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      nUR                  [        US5      5      n[        USS9n/ SQnUS	   n[	        Xe5        g )
Nr.   r   r   r   r   r.   r   rx   r   r   r.   r   r   Trc  r  r  r  r  C2r  r  r{   rF   r	   r   r   rK   rL   rt   rf   r   
exp_colorscolorss          r:   %test_dendrogram_leaf_colors_zero_dist4TestDendrogram.test_dendrogram_leaf_colors_zero_dist:  sc     JJ	!!!!!# $ JJwq(+,q$'9
&'V(r9   c           	          [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      nUR                  [        US5      5      n[        USS9n/ S	QnUS
   n[	        Xe5        g )Nr  )r   r   g?r  r  r  r   Trc  r  r  r  r  s          r:   test_dendrogram_leaf_colors*TestDendrogram.test_dendrogram_leaf_colorsI  sc     JJ	#!!!!# $ JJwq(+,q$'9
&'V(r9   r3   N)r4   r5   r6   r7   rg  rm  rs  r   r   skipifhave_matplotlibr~  r   r   r  r  fixturer  r  r  r  r8   r3   r9   r:   ra  ra    s-   1D" [[O+OD E& g! l@ [[O+OD[[],NO<# P E	<#| g" l@ [[O+OD E	> ^^ )"))r9   ra  c                    U R                   S   S-   nUR                  US-
  4U R                  S9n[        SUS-
  5       GH  nUR                  S5      nXS4   nXS4   nXb:  aD  X1R	                  XaR
                  S9U-
     n[        R                  " US5      R                  U5      nXr:  aD  X1R	                  XqR
                  S9U-
     n	[        R                  " US5      R                  U	5      n[        R                  " US5      R                  XS4   5      n[        R                  " X45      R                  UR                  U5      5      nGM     U$ Nr   r.   r   )r   rx   )
rc  rR   r   r^  rF   r  r  r  r  max)
rf   rL   r   Bri  qr  r  b_leftb_rights
             r:   r1  r1  Y  s#   	
QA
!A#qww'A1a!e_HHTNAwQ$9zz$hhz7!;<Fq!  (A:

5
9A=>Gq!  )AFF1aLQ!tW%FF1LRVVAY'  Hr9   r   c                    U R                   S   S-   nUR                  X5      nUR                  US-
  4US9n[        SUS-
  5       GH  nUR                  S5      nXS4   n	XS4   n
X:  aD  XcR	                  XR
                  S9U-
     n[        R                  " US5      R                  U5      nX:  aD  XcR	                  XR
                  S9U-
     n[        R                  " US5      R                  U5      n[        R                  " US5      R                  XU4   5      n[        R                  " Xg5      R                  UR                  U5      5      nGM     U$ r  )
rc  result_typerR   r^  rF   r  r  r  r  r  )rf   r  r  rL   r   r   r  ri  r  r  r  r  r  s                r:   rF  rF  l  s-   	
QANN1 E
!A#u%A1a!e_HHTNAwQ$9zz$hhz7!;<Fq!  (A:

5
9A=>Gq!  )AFF1aLQ!tW%FF1LRVVAY'  Hr9   c                    [         R                  R                  S5        Sn[         R                  R                  US5      nU R	                  [        U5      5      n[        U5      n[        XDR                  5       :  5        [        UR                  5       UR                  5       :  5        [        UR                  5       UR                  5       :H  5        [        UR                  5       UR                  5       :g  5        g )N   2   r   )
r{   r|   seedrandnrF   r   r   r   r  r  )rL   rd  rt   rf   trees        r:   test_node_comparer    s    IINN2D
		a A


47A1:DD==?"#DNNt}}./DNN 001DNN/0r9   c           	      8   [         R                  R                  S5        Sn[         R                  R                  US5      nU R	                  [        U5      5      n[        U5      n[        US S 2S4   U R                  U5      SSS9  [        US S 2S4   U R                  U5      SSS9  [        [         R                  " U5      R                  S5      [         R                  " US	-
  SS5      5        [        US S 2S
/4   [        USS9SS9  [        US S 2S
S/4   [        USS/S9SS9  [        US S 2SS
/4   [        USS/S9SS9  [        U5      nU R	                  U Vs/ s H  ofR                  PM     sn5      n[        US S 2[         R                  " US/5      4   [        USS9SS9  [        US S 2[         R                  " USS/5      4   [        USS/S9SS9  [        US S 2[         R                  " USS/5      4   [        USS/S9SS9  g s  snf )Nr  r  r   r   ry   F)rz   check_dtyper   r.   rE   )
n_clustersr   ir   )height)r{   r|   r  r  rF   r   r    r*   arangerR   r   r  r"   distsearchsorted)rL   rd  rt   rf   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                    [        U R                  [        [        R                  5      5      U R                  [        R                  5      5      n[        R
                  n[        XR                  U5      SS9  [        U R                  [        [        R                  S5      5      U R                  [        R                  5      5      n[        R                  n[        XR                  U5      SS9  g )Nr`   ra   r   rq   )	r!   rF   r	   r/   rd   r   r*   rt   linkage_X_ward_olo)rL   rf   rg   s      r:   r   r     s     	bjj1D1K1K)LM jj)<)C)CD	FA#==IAzz),59 	bjj1D1F1F)OP jj)<)>)>?	AA#66IAzz),59r9   z"`Heap` only supports NumPy backend)np_onlyrB   c                    U R                  / SQ5      n[        U5      nUR                  5       n[        US   S5        [        US   S5        UR	                  5         UR                  5       n[        US   S5        [        US   S5        UR                  SS5        UR                  5       n[        US   S	5        [        US   S
5        UR	                  5         UR	                  5         UR                  SS5        UR                  5       n[        US   S5        [        US   S5        UR	                  5         UR                  5       n[        US   S5        [        US   S5        g )N)rx   r   r         r   keyr   rz  r  r.   r   g      @rx   r   r   r   )rF   r&   get_minr   
remove_minchange_value)rL   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#r9   )\numpyr{   numpy.testingr   r   r   r   r   r   rH   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_extrar  	threadingr-    r/   r1   
matplotlibusematplotlib.pyplotpyplotrw  r  	Exceptionr   r   r=   r   r   r   r   r  r$  r0  rm  r  r  r  r  r  r+  r;  rO  ra  r1  rF  r  r  r   r   r3   r9   r:   <module>r     sa  D  T T  *K K K K K K K K * (E E ( (  !( (NN5#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