
    (ph                        S SK rS SKJrJrJrJrJr  S SKrS SKJ	r
  S SK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(  S SK)J*r*  S SK+J,r,  S SK-J.r.  S SK/J0r0J1r1  S S	K2J3r3  S
SK4J5r5   S SK6r6\6Rn                  " S5        S SK8J9r:  Sr;\.\Rz                  R}                  S5      /r?\Rz                  R                  r@ " S S5      rA\@" SS9 " S S5      5       rB\@" SS9 " S S5      5       rC\@" SS9 " S S5      5       rD " S S5      rE\@" SS9 " S S5      5       rF\@" SS9 " S S5      5       rG\@" SSS 9 " S! S"5      5       rH\@" SS9 " S# S$5      5       rI\@" SS9 " S% S&5      5       rJ " S' S(5      rK\@" SS9 " S) S*5      5       rL\@" SS9 " S+ S,5      5       rM\@" SS9 " S- S.5      5       rN\@" SS9 " S/ S05      5       rO " S1 S25      rP " S3 S45      rQ\@" SS9 " S5 S65      5       rRS7 rSS8\4S9 jrT\Rz                  R                  \@" SS9S: 5       5       rVS; rW\@" SS9S< 5       rX\@" SS9S= 5       rY\@" SS>S 9S? 5       rZ\@" SS9S@ 5       r[\@" SSAS 9SB 5       r\\@" SS9SC 5       r]g! \< a    Sr; GNf = f)D    N)assert_allcloseassert_equalassert_array_equalassert_assert_warns)raises)ClusterWarninglinkagefrom_mlab_linkageto_mlab_linkagenum_obs_linkageinconsistentcophenetfclusterdatafclusteris_isomorphicsingleleaders
correspondis_monotonicmaxdistsmaxinconstsmaxRstatis_valid_linkageis_valid_imto_treeleaves_list
dendrogramset_link_color_palettecut_treeoptimal_leaf_ordering_order_cluster_tree
_hierarchy_LINKAGE_METHODS)pdist)Heap)array_api_compatible)xp_assert_closexp_assert_equalLock   )hierarchy_test_dataAggTFskip_xp_backendsc                       \ rS rSr\" SS9S 5       r\" SS9S 5       r\" SS9S 5       rS r\" SS9S 5       r	S	 r
\" SS9S
 5       r\" SS9S 5       rSrg)TestLinkageL   Tcpu_onlyc                 t    UR                  UR                  /S/S-  -   5      n[        [        [        U5        g )N           )asarraynanassert_raises
ValueErrorr
   selfxpys      U/var/www/html/venv/lib/python3.13/site-packages/scipy/cluster/tests/test_hierarchy.py3test_linkage_non_finite_elements_in_distance_matrix?TestLinkage.test_linkage_non_finite_elements_in_distance_matrixN   s/     JJx3%')*j'1-    c                 P    UR                  S5      n[        [        [        U5        g )Nr   )zerosr:   r;   r
   r<   s      r@   "test_linkage_empty_distance_matrix.TestLinkage.test_linkage_empty_distance_matrixU   s     HHTNj'1-rC   c                 8    S H  nU R                  X!5        M     g )N)r   completeaverageweighted)check_linkage_tdistr=   r>   methods      r@   test_linkage_tdistTestLinkage.test_linkage_tdist[   s    CF$$V0 DrC   c                     [        UR                  [        R                  5      U5      n[	        [        SU-   5      n[        X2R                  U5      SS9  g )Nlinkage_ytdist_绽|=atolr
   r8   r-   ytdistgetattrr(   )r=   rO   r>   Z	expectedZs        r@   rM   TestLinkage.check_linkage_tdist`   sD    BJJ299:FC/1BV1KL	::i0u=rC   c                 8    S H  nU R                  X!5        M     g )N)centroidmedianward)check_linkage_qrN   s      r@   test_linkage_XTestLinkage.test_linkage_Xf   s    4F  , 5rC   c                    [        UR                  [        R                  5      U5      n[	        [        SU-   5      n[        X2R                  U5      SS9  [        R                  R                  R                  [        R                  SS9n[        UR                  U5      U5      n[        X2R                  U5      SS9  g )N
linkage_X_ư>rU   	euclidean)metric)
r
   r8   r-   XrY   r(   scipyspatialdistancer%   )r=   rO   r>   rZ   r[   r?   s         r@   ra   TestLinkage.check_linkage_qk   s    BJJ2445v>/1FG	::i0u=MM""(()<)>)>0; ) =BJJqM6*::i0u=rC   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瞯<)rtolrV   )nprandomRandomStaterandr%   r$   itemsr#   r
   r8   r(   )
r=   r>   rngnri   drO   code	Z_trivialrZ   s
             r@   test_compare_with_trivial%TestLinkage.test_compare_with_trivialv   s    ii##A&HHQN!H,224LF"**16I

1v.AAzz)45uM 5rC   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_olorT   rU   rW   )r=   r>   rZ   r[   s       r@   test_optimal_leaf_ordering&TestLinkage.test_optimal_leaf_ordering   s?    BJJ299:TR/1LM	::i0u=rC    N)__name__
__module____qualname____firstlineno__r/   rA   rG   rP   rM   rb   ra   r}   r   __static_attributes__r   rC   r@   r1   r1   L   s    t$. %. t$. %.
 t$1 %1> t$- %-	> t$	N %	N t$> %>rC   r1   r3   c                   h   \ rS rSr\R
                  " / SQ/ SQ/5      \R
                  " / SQ/ SQ/5      \R
                  " / SQ/ SQ/5      \R
                  " / SQ/ SQ/5      \R
                  " / SQ/ SQ/5      \R
                  " / SQ/ SQ/5      \R
                  " / SQ/ SQ/5      S.rS rS	 rS
r	g)TestLinkageTies   )r   r,   'e?rp   )rp      r   r   )rp   r   g'e@r   )rp   r   gev @r   )rp   r   g@r   r   rJ   rK   rL   r^   r_   r`   c                 8    S H  nU R                  X!5        M     g Nr   )check_linkage_tiesrN   s      r@   test_linkage_ties!TestLinkageTies.test_linkage_ties   s    5F##F/5rC   c                     UR                  SS/SS/SS//5      n[        X1S9nU R                  U   n[        XBR                  U5      SS9  g )Nr   r,   rO   rf   rU   )r8   r
   _expectationsr(   )r=   rO   r>   ri   rZ   r[   s         r@   r   "TestLinkageTies.check_linkage_ties   sP    JJR1a&1a&12A%&&v.	::i0u=rC   r   N)
r   r   r   r   rs   arrayr   r   r   r   r   rC   r@   r   r      s     ((113 4HH335 688224 5HH335 6HH335 6((113 4//1 2M"0
>rC   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)r=   r>   depths      r@   test_inconsistent_tdist(TestInconsistent.test_inconsistent_tdist   s     (<<E))%4 =rC   c                     UR                  [        R                  5      n[        [	        X15      UR                  [        R
                  U   5      5        g r   )r8   r-   linkage_ytdist_singler(   r   r   )r=   r   r>   rZ   s       r@   r   )TestInconsistent.check_inconsistent_tdist   s?    JJ*@@AQ.

#6#J#J5#QR	TrC   r   N)r   r   r   r   r   r   r   r   rC   r@   r   r      s    5TrC   r   c                   &    \ rS rSrS rS rS 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   dtyperT   rU   )r8   r-   r   r   r(   float64)r=   r>   	expectedMrZ   Ms        r@   test_linkage_cophenet_tdist_Z4TestCopheneticDistance.test_linkage_cophenet_tdist_Z   sL    JJ  9 :	JJ*@@AQK::izz:BOrC   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?r   rT   rU   )r8   r-   r   r   rX   r   r(   )r=   r>   rZ   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1rC   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)r6         ?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)pytestr   r;   r   r8   )r=   r>   arrs      r@   test_gh_22183$TestCopheneticDistance.test_gh_22183   sZ    
 ""!"!""##$$
& ]]:-EFRZZ_% GFFs   A!!
A/r   N)r   r   r   r   r   r   r   r   r   rC   r@   r   r      s    P2&rC   r   c                   J    \ rS rSrS r\" SS9S 5       r\" SS9S 5       rSrg)	TestMLabLinkageConversion   c                     UR                  / UR                  S9n[        [        U5      U5        [        [	        U5      U5        g )Nr   )r8   r   r)   r   r   )r=   r>   ri   s      r@   "test_mlab_linkage_conversion_empty<TestMLabLinkageConversion.test_mlab_linkage_conversion_empty   s7    JJrJ,)!,a0*A.rC   Tr3   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)r6   r   r   r   r,   rp   r   r   rq   rr   )r8   r(   r   r   r   )r=   r>   rZ   Zms       r@   'test_mlab_linkage_conversion_single_rowATestMLabLinkageConversion.test_mlab_linkage_conversion_single_row   sm     JJ()*ZZ$)"-rzz!::z/N"	$*BJJrJ,L"	$rC   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   )   r7   r   )r,      r   )rp   	   r   )   
   r   )r   r        @a@r   )r   r        `k@r   )r6   r        o@r   )r   r        p@r   )r   r        pr@r   r   rq   r   )r8   r   r(   r   r   )r=   r>   r   rZ   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"	$rC   r   N)	r   r   r   r   r   r/   r   r   r   r   rC   r@   r   r      s9    / t$$ %$ t$$ %$rC   r   c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)TestFclusteri  c                     [         R                   H  nU R                  USU5        M     [         R                   H  nU R                  USU5        M     [         R                   H  nU R                  USU5        M     g Nr   rl   maxclust)r-   fcluster_inconsistentcheck_fclusterdatafcluster_distancefcluster_maxclustr=   r>   ts      r@   test_fclusterdataTestFcluster.test_fclusterdata  sh    $::A##A~r: ;$66A##Az26 7$66A##Az26 7rC   c                     UR                  [        [        SU-   5      U   5      nUR                  [        R                  5      n[	        XRUS9n[        [        Xd5      5        g N	fcluster_	criterionr   )r8   rY   r-   Q_Xr   r   r   )r=   r   r   r>   	expectedTri   Ts          r@   r   TestFcluster.check_fclusterdata  sQ    JJw':K)<STUVWX	JJ*../15a+,rC   c                     [         R                   H  nU R                  USU5        M     [         R                   H  nU R                  USU5        M     [         R                   H  nU R                  USU5        M     g r   )r-   r   check_fclusterr   r   r   s      r@   test_fclusterTestFcluster.test_fcluster  sh    $::A>26 ;$66A:r2 7$66A:r2 7rC   c                     UR                  [        [        SU-   5      U   5      n[        UR                  [        R                  5      5      n[        XRUS9n[        [        Xd5      5        g r   )r8   rY   r-   r   r   r   r   r   )r=   r   r   r>   r   rZ   r   s          r@   r  TestFcluster.check_fcluster  sV    JJw':K)<STUVWX	2::15567Qq1a+,rC   c                     [         R                   H  nU R                  X!5        M     [         R                   H  nU R	                  X!5        M     g r   )r-   r   check_fcluster_monocritr    check_fcluster_maxclust_monocritr   s      r@   test_fcluster_monocrit#TestFcluster.test_fcluster_monocrit"  s>    $66A((/ 7$66A11!8 7rC   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  )	r8   r-   r   r   r   r   r   r   r   r=   r   r>   r   rZ   r   s         r@   r  $TestFcluster.check_fcluster_monocrit(  sU    JJ2DDQGH	2::15567QZ(1+Fa+,rC   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  )	r8   r-   r   r   r   r   r   r   r   r  s         r@   r	  -TestFcluster.check_fcluster_maxclust_monocrit.  sV    JJ2DDQGH	2::15567Q%88A;Oa+,rC   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   r7   r   )r   r   r,   r,   r,   rp   )rp   r,   r,   r   r   )r8   r   r   r   r=   r>   r?   rZ   s       r@   test_fcluster_maxclust_gh_12651,TestFcluster.test_fcluster_maxclust_gh_126514  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	2rC   r   N)r   r   r   r   r   r   r  r  r
  r  r	  r  r   r   rC   r@   r   r     s*    7-3-9--
2rC   r   c                       \ rS rSrS rSrg)TestLeadersiA  c                    [         R                  n[        U5      nUR                  U5      n[	        U5      n[        USSS9nUR                  / SQ5      UR                  / SQ5      4nUR                  XQR                  S9n[        XE5      n[        [        R                  " U5      [        R                  " U5      SS9  g )	Nr   r   r   )5   7   8   )rp   r   r,   r   rq   r   )r-   r   r%   r8   r
   r   int32r   r   rs   concatenate)r=   r>   ri   YrZ   r   LrightLs           r@   test_leaders_singleTestLeaders.test_leaders_singleD  s    ##!HJJqMAJQ*2**\*BJJy,ABJJqJ)AMq)2>>&+ANrC   r   N)r   r   r   r   r$  r   r   rC   r@   r  r  A  s    
OrC   r  z+`is_isomorphic` only supports NumPy backendnp_onlyreasonc                   n    \ 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S rS rSS jrSrg)TestIsIsomorphiciQ  Tz,array-likes only supported for NumPy backendr&  c                 X    [        / SQ/ SQ5      (       d   e[        / / 5      (       d   eg Nr  )rp   rp   rp   )r   )r=   r>   s     r@   test_array_like TestIsIsomorphic.test_array_likeU  s*     Y	2222R$$$$rC   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       d   e[        X25      (       d   eg r,  r8   r   r=   r>   abs       r@   test_is_isomorphic_1%TestIsIsomorphic.test_is_isomorphic_1[  @    JJy!JJy!Q""""Q""""rC   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,   )rp   r   rp   r0  r1  s       r@   test_is_isomorphic_2%TestIsIsomorphic.test_is_isomorphic_2b  r6  rC   c                 l    UR                  / 5      nUR                  / 5      n[        X#5      (       d   eg r   r0  r1  s       r@   test_is_isomorphic_3%TestIsIsomorphic.test_is_isomorphic_3i  s-    JJrNJJrNQ""""rC   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       d   e[        X25      (       d   eg )Nr   )r,   r   rp   r0  r1  s       r@   test_is_isomorphic_4A&TestIsIsomorphic.test_is_isomorphic_4Ao  B     JJy!JJy!Q""""Q""""rC   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      SL d   e[        X25      SL d   eg )N)r,   rp   r   r   )r,   r   rp   r   Fr0  r1  s       r@   test_is_isomorphic_4B&TestIsIsomorphic.test_is_isomorphic_4Bw  sF     JJ|$JJ|$Q"e+++Q"e+++rC   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       d   e[        X25      (       d   eg )N)r   rp   r   )r   r   rp   r0  r1  s       r@   test_is_isomorphic_4C&TestIsIsomorphic.test_is_isomorphic_4C  r@  rC   c                 6    S H  nU R                  SX!S9  M     g )Nrp   r   r7     r>   help_is_isomorphic_randpermr=   r>   ncs      r@   test_is_isomorphic_5%TestIsIsomorphic.test_is_isomorphic_5  s!     B,,T2,= rC   c           	      <    S H  nU R                  SUSSUS9  M     g )NrH  rI  Tr7   rJ  rK  rM  s      r@   test_is_isomorphic_6%TestIsIsomorphic.test_is_isomorphic_6  s'     B,,T2tQ2,F rC   c                 t    UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       a   eg )Nr   r  r0  r1  s       r@   test_is_isomorphic_7%TestIsIsomorphic.test_is_isomorphic_7  s2    JJy!JJy! &&&&&rC   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,   )rangers   rt   rv   astypeintrF   sizepermutationshaper8   r   )r=   nobs	nclustersnonisonerrorsr>   kr2  r3  PiQs               r@   rL  ,TestIsIsomorphic.help_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 rC   r   N)Fr   )r   r   r   r   r/   r-  r4  r8  r;  r>  rB  rE  rO  rR  rU  rL  r   r   rC   r@   r*  r*  Q  sU     dKM%M%####,#>G'7rC   r*  c                       \ rS rSrS rS rS rS rS r\	" SSS	9S
 5       r
\	" SSS	9S 5       r\	" SSS	9S 5       r\	" SSS	9S 5       rSrg)TestIsValidLinkagei  c                 @    S H  u  p#nU R                  X#XA5        M     g N))rp   r7   F)rp   r   F)r,   r   T)rp   r   T)#check_is_valid_linkage_various_sizer=   r>   nrowncolvalids        r@   "test_is_valid_linkage_various_size5TestIsValidLinkage.test_is_valid_linkage_various_size  s#    ">D44TK">rC   c                     UR                  / SQ/ SQ/UR                  S9nUS U2S U24   n[        [        U5      U:H  5        U(       d  [	        [
        [        USS9  g g N)r   r,   r   rp   r7   )r   rp   r   r   r   r   Tthrow)r8   r   r   r   r:   r;   )r=   rm  rn  ro  r>   rZ   s         r@   rk  6TestIsValidLinkage.check_is_valid_linkage_various_size  sf    JJ))+24**  >eteUdUlO #u,-*&6F rC   c                     UR                  / SQ/ SQ/UR                  S9n[        [        U5      SL 5        [	        [
        [        USS9  g Nr   r,   r   rp   r   rp   r   r   r   FTrt  )r8   int64r   r   r:   	TypeErrorr=   r>   rZ   s      r@   test_is_valid_linkage_int_type1TestIsValidLinkage.test_is_valid_linkage_int_type  sH    JJ&(/1xx  9 #u,-i!11DArC   c                     UR                  SUR                  S9n[        [        U5      SL 5        [	        [
        [        USS9  g Nr   r   r   FTrt  )rF   r   r   r   r:   r;   r}  s      r@   test_is_valid_linkage_empty.TestIsValidLinkage.test_is_valid_linkage_empty  s:    HHV2::H. #u,-j"2ATBrC   c                     [        SSS5       H\  n[        R                  R                  X"S-
  -  S-  5      nUR	                  U5      n[        U5      n[        [        U5      SL 5        M^     g Nr      r   r,   rp   T)rX  rs   rt   rv   r8   r
   r   r   r=   r>   rd  r?   rZ   s        r@   test_is_valid_linkage_4_and_up1TestIsValidLinkage.test_is_valid_linkage_4_and_up  s[     q"aA		qA#wz*A

1A
A$Q'4/0	 !rC   	jax.numpy)jax arrays do not support item assignmentr(  c                    [        SSS5       Hy  n[        R                  R                  X"S-
  -  S-  5      nUR	                  U5      n[        U5      nSXBS-  S4'   [        [        U5      SL 5        [        [        [        US	S
9  M{     g )Nr   r  r   r,   rp   r   FTrt  
rX  rs   rt   rv   r8   r
   r   r   r:   r;   r  s        r@   -test_is_valid_linkage_4_and_up_neg_index_left@TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_left  y    
 q"aA		qA#wz*A

1A
AAd1fI$Q'501*&6F !rC   c                    [        SSS5       Hy  n[        R                  R                  X"S-
  -  S-  5      nUR	                  U5      n[        U5      nSXBS-  S4'   [        [        U5      SL 5        [        [        [        USS	9  M{     g 
Nr   r  r   r,   rp   r  FTrt  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  rC   c                    [        SSS5       Hy  n[        R                  R                  X"S-
  -  S-  5      nUR	                  U5      n[        U5      nSXBS-  S4'   [        [        U5      SL 5        [        [        [        USS	9  M{     g 
Nr   r  r   r,   rp   g      FTrt  r  r  s        r@   'test_is_valid_linkage_4_and_up_neg_dist:TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_dist  sy    
 q"aA		qA#wz*A

1A
AAd1fI$Q'501*&6F !rC   c                    [        SSS5       Hy  n[        R                  R                  X"S-
  -  S-  5      nUR	                  U5      n[        U5      nSXBS-  S4'   [        [        U5      SL 5        [        [        [        USS	9  M{     g 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  rC   r   N)r   r   r   r   rp  rk  r~  r  r  r/   r  r  r  r  r   r   rC   r@   rh  rh    s    L
GBC1 kHJ	GJ	G kHJ	GJ	G kHJ	GJ	G kHJ	GJ	GrC   rh  c                       \ rS rSrS rS rS rS rS r\	" SSS	9S
 5       r
\	" SSS	9S 5       r\	" SSS	9S 5       rSrg)TestIsValidInconsistenti  c                     UR                  / SQ/ SQ/UR                  S9n[        [        U5      SL 5        [	        [
        [        USS9  g rx  )r8   r{  r   r   r:   r|  r=   r>   Rs      r@   test_is_valid_im_int_type1TestIsValidInconsistent.test_is_valid_im_int_type  sE    JJ&(/1xx  9A%'(iat<rC   c                 @    S H  u  p#nU R                  X#XA5        M     g rj  )check_is_valid_im_various_sizerl  s        r@   test_is_valid_im_various_size5TestIsValidInconsistent.test_is_valid_im_various_size  s#    ">D//EF">rC   c                     UR                  / SQ/ SQ/UR                  S9nUS U2S U24   n[        [        U5      U:H  5        U(       d  [	        [
        [        USS9  g g rs  )r8   r   r   r   r:   r;   )r=   rm  rn  ro  r>   r  s         r@   r  6TestIsValidInconsistent.check_is_valid_im_various_size  sc    JJ))+24**  >eteUdUlOA%'(*k1DA rC   c                     UR                  SUR                  S9n[        [        U5      SL 5        [	        [
        [        USS9  g r  )rF   r   r   r   r:   r;   r  s      r@   test_is_valid_im_empty.TestIsValidInconsistent.test_is_valid_im_empty   s7    HHV2::H.A%'(j+q=rC   c                     [        SSS5       Hg  n[        R                  R                  X"S-
  -  S-  5      nUR	                  U5      n[        U5      n[        U5      n[        [        U5      SL 5        Mi     g r  )	rX  rs   rt   rv   r8   r
   r   r   r   r=   r>   rd  r?   rZ   r  s         r@   test_is_valid_im_4_and_up1TestIsValidInconsistent.test_is_valid_im_4_and_up&  sb     q"aA		qA#wz*A

1A
AQAKNd*+ !rC   r  r  r  c                 .   [        SSS5       H  n[        R                  R                  X"S-
  -  S-  5      nUR	                  U5      n[        U5      n[        U5      nSXRS-  S4'   [        [        U5      SL 5        [        [        [        US	S
9  M     g )Nr   r  r   r,   rp          r   FTrt  rX  rs   rt   rv   r8   r
   r   r   r   r:   r;   r  s         r@   (test_is_valid_im_4_and_up_neg_index_left@TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_left0       q"aA		qA#wz*A

1A
AQAAd1fIKNe+,*k1DA !rC   c                 .   [        SSS5       H  n[        R                  R                  X"S-
  -  S-  5      nUR	                  U5      n[        U5      n[        U5      nSXRS-  S4'   [        [        U5      SL 5        [        [        [        USS	9  M     g )
Nr   r  r   r,   rp   r  FTrt  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  rC   c                 .   [        SSS5       H  n[        R                  R                  X"S-
  -  S-  5      nUR	                  U5      n[        U5      n[        U5      nSXRS-  S4'   [        [        U5      SL 5        [        [        [        USS	9  M     g r  r  r  s         r@   "test_is_valid_im_4_and_up_neg_dist:TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_distJ  r  rC   r   N)r   r   r   r   r  r  r  r  r  r/   r  r  r  r   r   rC   r@   r  r    sz    =G
B>, k*UV
B W
B k*UV
B W
B k*UV
B W
BrC   r  c                   P    \ rS rSr\" SS9S 5       rS rS r\" SS9S 5       rSr	g	)
TestNumObsLinkageiX  Tr3   c                 b    UR                  SUR                  S9n[        [        [        U5        g Nr  r   )rF   r   r:   r;   r   r}  s      r@   test_num_obs_linkage_empty,TestNumObsLinkage.test_num_obs_linkage_emptyZ  s&     HHV2::H.j/15rC   c                 h    UR                  / SQ/UR                  S9n[        [        U5      S5        g )Nry  r   rp   r8   r   r   r   r}  s      r@   test_num_obs_linkage_1x4*TestNumObsLinkage.test_num_obs_linkage_1x4`  s*    JJ'rzzJ:_Q'+rC   c                 n    UR                  / SQ/ SQ/UR                  S9n[        [        U5      S5        g )Nry  rz  r   r   r  r}  s      r@   test_num_obs_linkage_2x4*TestNumObsLinkage.test_num_obs_linkage_2x4e  s5    JJ&(/1zz  ;_Q'+rC   c                     [        SSS5       H[  n[        R                  R                  X"S-
  -  S-  5      nUR	                  U5      n[        U5      n[        [        U5      U5        M]     g )Nr   r  r   r,   rp   )rX  rs   rt   rv   r8   r
   r   r   r  s        r@   test_num_obs_linkage_4_and_up/TestNumObsLinkage.test_num_obs_linkage_4_and_upk  sW     q"aA		qA#wz*A

1A
A+Q/	 !rC   r   N)
r   r   r   r   r/   r  r  r  r  r   r   rC   r@   r  r  X  s<    t$6 %6
,
, t$0 %0rC   r  c                   2    \ rS rSrS rS rS rS rS rSr	g)	TestLeavesListiv  c                     UR                  / SQ/UR                  S9n[        U5        [        [	        U5      SS/SS9  g )Nry  r   r   r,   rq   r   r8   r   r   r   r   r}  s      r@   test_leaves_list_1x4#TestLeavesList.test_leaves_list_1x4y  s6    JJ'rzzJ:
AAU;rC   c                     UR                  / SQ/ SQ/UR                  S9n[        U5        [        [	        U5      / SQSS9  g )Nry  rz  r   )r   r,   rp   rq   r   r  r}  s      r@   test_leaves_list_2x4#TestLeavesList.test_leaves_list_2x4  s=    JJ&(/1zz  ;
A	>rC   c                 8    S H  nU R                  X!5        M     g r   )check_leaves_list_QrN   s      r@   test_leaves_list_Q!TestLeavesList.test_leaves_list_Q  s    )F$$V0)rC   c                     UR                  [        R                  5      n[        X15      n[	        U5      n[        UR                  5       [        U5      SS9  g )Nrq   r   )r8   r-   r   r
   r   r   	pre_orderr   )r=   rO   r>   ri   rZ   nodes         r@   r  "TestLeavesList.check_leaves_list_Q  sA    JJ*../Aqz(+a.uErC   c                    UR                  [        R                  5      n[        US5      n[	        U5      n[        UR                  5       UR                  5       R                  5       UR                  5       R                  5       -   SS9  g )Nr   rq   r   )	r8   r-   r   r
   r   r   r  get_left	get_right)r=   r>   ri   rZ   r  s        r@   test_Q_subtree_pre_order'TestLeavesList.test_Q_subtree_pre_order  sj    JJ*../Ax qz(4==?+D+D+F-1^^-=-G-G-I,J"	$rC   r   N)
r   r   r   r   r  r  r  r  r  r   r   rC   r@   r  r  v  s    <?1
F$rC   r  c                   2    \ rS 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 )NrE   r   r  )rF   r   r:   r;   r   r  s       r@   test_correspond_empty$TestCorrespond.test_correspond_empty  s:    HHTH,HHU"**H-j*a3rC   c                    [        SS5       HZ  n[        R                  R                  X"S-
  -  S-  5      nUR	                  U5      n[        U5      n[        [        XC5      5        M\     [        SSS5       HZ  n[        R                  R                  X"S-
  -  S-  5      nUR	                  U5      n[        U5      n[        [        XC5      5        M\     g )Nrp   r   r,   r  r   )rX  rs   rt   rv   r8   r
   r   r   r  s        r@   test_correspond_2_and_up'TestCorrespond.test_correspond_2_and_up  s     q!A		qA#wz*A

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

1A
AJq$%	 !rC   c                 X   [        [        [        [        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      nUR                  U5      n[        U5      n[        U5      n[        Xe5      (       a   e[        Xt5      (       d  M   e   g )Nrp   r   r   r7   r,   	listziprX  rs   rt   rv   r8   r
   r   r=   r>   rd  jr?   y2rZ   Z2s           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

1ABB
AB!!((((!"((((GrC   c                 X   [        [        [        [        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      nUR                  U5      n[        U5      n[        U5      n[        Xe5      (       a   e[        Xt5      (       d  M   e   g )Nrp   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

1ABB
AB!!((((!"((((IrC   c                     [        SS5       H_  n[        R                  R                  US5      n[	        U5      nUR                  U5      n[        U5      n[        [        U5      U5        Ma     g )Nrp   r   r   )	rX  rs   rt   rv   r%   r8   r
   r   r   )r=   r>   ry   ri   r!  rZ   s         r@   !test_num_obs_linkage_multi_matrix0TestCorrespond.test_num_obs_linkage_multi_matrix  sT    q"A		q!$AaA

1A
A+Q/ rC   r   N)
r   r   r   r   r  r  r  r  r  r   r   rC   r@   r  r    s    4&))0rC   r  c                   j    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 r\" SSS9S 5       rS rSrg)TestIsMonotonici  c                 b    UR                  SUR                  S9n[        [        [        U5        g r  )rF   r   r:   r;   r   r}  s      r@   test_is_monotonic_empty'TestIsMonotonic.test_is_monotonic_empty  s$    HHV2::H.j,2rC   c                 b    UR                  / SQ/UR                  S9n[        U5      (       d   eg )Nr   r,   333333?rp   r   r8   r   r   r}  s      r@   test_is_monotonic_1x4%TestIsMonotonic.test_is_monotonic_1x4  s)    JJ'rzzJ:ArC   c                 h    UR                  / SQ/ SQ/UR                  S9n[        U5      (       d   eg )Nr  )rp   r   皙?r   r   r  r}  s      r@   test_is_monotonic_2x4_T'TestIsMonotonic.test_is_monotonic_2x4_T  s4    JJ&(/1zz  ;ArC   c                 h    UR                  / SQ/ SQ/UR                  S9n[        U5      (       a   eg )N)r   r,   r  rp   )rp   r   r  r   r   r  r}  s      r@   test_is_monotonic_2x4_F'TestIsMonotonic.test_is_monotonic_2x4_F  s7    JJ&(/1zz  ;??""?rC   c                 n    UR                  / SQ/ SQ/ SQ/UR                  S9n[        U5      (       d   eg )Nr  rp   r   r  rp   r   r7   g333333?r   r   r  r}  s      r@   test_is_monotonic_3x4_T'TestIsMonotonic.test_is_monotonic_3x4_T  s9    JJ&&(/1zz  ; ArC   c                 n    UR                  / SQ/ SQ/ SQ/UR                  S9n[        U5      (       a   eg )Nr  )rp   r   皙?rp   r  r   r  r}  s      r@   test_is_monotonic_3x4_F1(TestIsMonotonic.test_is_monotonic_3x4_F1  <    JJ&&(/1zz  ;  ??""?rC   c                 n    UR                  / SQ/ SQ/ SQ/UR                  S9n[        U5      (       a   eg )N)r   r,   g?rp   r  r  r   r  r}  s      r@   test_is_monotonic_3x4_F2(TestIsMonotonic.test_is_monotonic_3x4_F2   r  rC   c                 n    UR                  / SQ/ SQ/ SQ/UR                  S9n[        U5      (       a   eg )Nr  r  )r   r7   r  r   r   r  r}  s      r@   test_is_monotonic_3x4_F3(TestIsMonotonic.test_is_monotonic_3x4_F3  r  rC   c                 z    [        UR                  [        R                  5      S5      n[	        U5      (       d   eg Nr   r
   r8   r-   rX   r   r}  s      r@    test_is_monotonic_tdist_linkage10TestIsMonotonic.test_is_monotonic_tdist_linkage1  s.     BJJ299:HEArC   r  r  r  c                     [        UR                  [        R                  5      S5      nSUS'   [	        U5      (       a   eg )Nr   r6   )rp   rp   r#  r}  s      r@    test_is_monotonic_tdist_linkage20TestIsMonotonic.test_is_monotonic_tdist_linkage2  s:     BJJ299:HE#??""?rC   c                 ~    UR                  [        R                  5      n[        US5      n[	        U5      (       d   eg r"  )r8   r-   r   r
   r   )r=   r>   ri   rZ   s       r@   test_is_monotonic_Q_linkage+TestIsMonotonic.test_is_monotonic_Q_linkage  s3     JJ*../Ax ArC   r   N)r   r   r   r   r  r  r  r  r  r  r  r  r$  r/   r'  r*  r   r   rC   r@   r   r     sQ    3

#### k*UV# W#rC   r   c                   T    \ rS rSrS r\" SSS9S 5       r\" SSS9S 5       rS rS	r	g
)TestMaxDistsi$  c                 b    UR                  SUR                  S9n[        [        [        U5        g r  )rF   r   r:   r;   r   r}  s      r@   test_maxdists_empty_linkage(TestMaxDists.test_maxdists_empty_linkage'  s$    HHV2::H.j(A.rC   r  r  r  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   rq   rU   )r8   r   r   calculate_maximum_distancesr(   )r=   r>   rZ   MD
expectedMDs        r@   !test_maxdists_one_cluster_linkage.TestMaxDists.test_maxdists_one_cluster_linkage,  s:     JJ'rzzJ:a[07
U3rC   c                 8    S H  nU R                  X!5        M     g Nr   rJ   r`   r^   r_   )check_maxdists_Q_linkagerN   s      r@   test_maxdists_Q_linkage$TestMaxDists.test_maxdists_Q_linkage4  s    JF))&5 KrC   c                     UR                  [        R                  5      n[        X15      n[	        U5      n[        XB5      n[        XVSS9  g )Nrq   rU   )r8   r-   r   r
   r   r3  r(   )r=   rO   r>   ri   rZ   r4  r5  s          r@   r;  %TestMaxDists.check_maxdists_Q_linkage9  s>    JJ*../Aa[07
U3rC   r   N)
r   r   r   r   r/  r/   r6  r<  r;  r   r   rC   r@   r-  r-  $  sF    /
 k*UV4 W4 k*UV6 W64rC   r-  c                   p    \ rS rSr\" SS9S 5       rS r\" SSSS9S	 5       r\" SSSS9S
 5       rS r	Sr
g)TestMaxInconstsiB  Tr3   c                     UR                  SUR                  S9nUR                  SUR                  S9n[        [        [        X#5        g r  )rF   r   r:   r;   r   r=   r>   rZ   r  s       r@   test_maxinconsts_empty_linkage.TestMaxInconsts.test_maxinconsts_empty_linkageD  s<     HHV2::H.HHV2::H.j+q4rC   c                     UR                  / SQ/UR                  S9n[        R                  R	                  SS5      nUR                  U5      n[        [        [        X#5        g Nr2  r   rp   r   )r8   r   rs   rt   rv   r:   r;   r   rC  s       r@   test_maxinconsts_difrow_linkage/TestMaxInconsts.test_maxinconsts_difrow_linkageK  sJ     JJ'rzzJ:IINN1a JJqMj+q4rC   r  r  r(  r4   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 )Nr2  r   r   r   r   r  rJ  rq   rU   )r8   r   r   !calculate_maximum_inconsistenciesr(   )r=   r>   rZ   r  r4  r5  s         r@   $test_maxinconsts_one_cluster_linkage4TestMaxInconsts.test_maxinconsts_one_cluster_linkageS  sV     JJ'rzzJ:JJ'rzzJ:6qC
U3rC   c                 8    S H  nU R                  X!5        M     g r9  )check_maxinconsts_Q_linkagerN   s      r@   test_maxinconsts_Q_linkage*TestMaxInconsts.test_maxinconsts_Q_linkage]  s     KF,,V8 KrC   c                     UR                  [        R                  5      n[        X15      n[	        U5      n[        XE5      n[        XEUS9n[        XgSS9  g )NrJ  rq   rU   )r8   r-   r   r
   r   r   rM  r(   )r=   rO   r>   ri   rZ   r  r4  r5  s           r@   rQ  +TestMaxInconsts.check_maxinconsts_Q_linkagec  sJ    JJ*../AO6qC
U3rC   r   N)r   r   r   r   r/   rD  rH  rN  rR  rQ  r   r   rC   r@   rA  rA  B  se    t$5 %55 k*U#%4%4 k*U#%9%94rC   rA  c                       \ rS rSrS rS r\" SS9S 5       rS rS r	S	 r
\" S
SSS9S 5       rS r\" S
SSS9S 5       rS rSrg)TestMaxRStatim  c                 8    S H  nU R                  X!5        M     g )N)gffffff
@r   r   )check_maxRstat_invalid_indexr=   r>   rd  s      r@   test_maxRstat_invalid_index(TestMaxRStat.test_maxRstat_invalid_indexo  s    A--a4 rC   c                     UR                  / SQ/UR                  S9nUR                  / SQ/UR                  S9n[        U[        5      (       a  [	        [
        [        X4U5        g [	        [        [        X4U5        g )Nr2  r   rL  )r8   r   
isinstancerZ  r:   r;   r   r|  r=   rd  r>   rZ   r  s        r@   rY  )TestMaxRStat.check_maxRstat_invalid_indexs  s]    JJ'rzzJ:JJ'rzzJ:a*ha8)XqQ7rC   Tr3   c                 J    [        S5       H  nU R                  X!5        M     g Nr   )rX  check_maxRstat_empty_linkagerZ  s      r@   test_maxRstat_empty_linkage(TestMaxRStat.test_maxRstat_empty_linkage|  s    qA--a4 rC   c                     UR                  SUR                  S9nUR                  SUR                  S9n[        [        [        X4U5        g r  )rF   r   r:   r;   r   r_  s        r@   rc  )TestMaxRStat.check_maxRstat_empty_linkage  s<    HHV2::H.HHV2::H.j(A!4rC   c                 J    [        S5       H  nU R                  X!5        M     g rb  )rX  check_maxRstat_difrow_linkagerZ  s      r@   test_maxRstat_difrow_linkage)TestMaxRStat.test_maxRstat_difrow_linkage  s    qA..q5 rC   c                     UR                  / SQ/UR                  S9n[        R                  R	                  SS5      nUR                  U5      n[        [        [        X4U5        g rG  )r8   r   rs   rt   rv   r:   r;   r   r_  s        r@   ri  *TestMaxRStat.check_maxRstat_difrow_linkage  sL     JJ'rzzJ:IINN1a JJqMj(A!4rC   r  r  rJ  c                 J    [        S5       H  nU R                  X!5        M     g rb  )rX  "check_maxRstat_one_cluster_linkagerZ  s      r@   !test_maxRstat_one_cluster_linkage.TestMaxRStat.test_maxRstat_one_cluster_linkage  s      qA33A: rC   c                     UR                  / SQ/UR                  S9nUR                  / SQ/UR                  S9n[        X4S5      n[        X4SU5      n[	        XVSS9  g )Nr2  r   rL  r,   rq   rU   )r8   r   r   rM  r(   )r=   rd  r>   rZ   r  r4  r5  s          r@   ro  /TestMaxRStat.check_maxRstat_one_cluster_linkage  sX    JJ'rzzJ:JJ'rzzJ:aA6qQC
U3rC   c                 ^    S H'  n[        S5       H  nU R                  X#U5        M     M)     g )Nr:  r   )rX  check_maxRstat_Q_linkage)r=   r>   rO   rd  s       r@   test_maxRstat_Q_linkage$TestMaxRStat.test_maxRstat_Q_linkage  s.     KF1X--f<  KrC   c                     UR                  [        R                  5      n[        XA5      n[	        U5      n[        XVS5      n[        XVSU5      n[        XxSS9  g )Nr,   rq   rU   )r8   r-   r   r
   r   r   rM  r(   )	r=   rO   rd  r>   ri   rZ   r  r4  r5  s	            r@   ru  %TestMaxRStat.check_maxRstat_Q_linkage  sN    JJ*../AOaA6qQC
U3rC   r   N)r   r   r   r   r[  rY  r/   rd  rc  rj  ri  rp  ro  rv  ru  r   r   rC   r@   rW  rW  m  s    58 t$5 %5565 k*U#%;%;4 k*U#%=%=
4rC   rW  c                   h   \ rS rSrS rS rS r\R                  R                  \
(       + SS9S 5       r\" SS	S9\R                  R                  \
(       + SS9S
 5       5       rS r\" SS	S9\R                  R                  \
(       + SS9S 5       5       r\R                   S 5       rS rS rS rSrg)TestDendrogrami  c                     [        UR                  [        R                  5      S5      n[	        USS9nUS   n[        U/ SQ5        g )Nr   Tno_plotleavesrp   r7   r,   r   r   r   )r
   r8   r-   rX   r   r   )r=   r>   rZ   r  r  s        r@   $test_dendrogram_single_linkage_tdist3TestDendrogram.test_dendrogram_single_linkage_tdist  s>    BJJ299:HEq$'8V/0rC   c                 ~    [        UR                  [        R                  5      S5      n[	        [
        [        USS9  g )Nr   fooorientation)r
   r8   r-   rX   r:   r;   r   r}  s      r@   test_valid_orientation%TestDendrogram.test_valid_orientation  s,    BJJ299:HEj*aUCrC   c                     [        UR                  [        R                  5      S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   rp   r   r   r7   T)labelsr~  )r
   r8   r-   rX   r   )r=   r>   rZ   r  result1result2s         r@   test_labels_as_array_or_list+TestDendrogram.test_labels_as_array_or_list  sP    BJJ299:HE#Qzz&'94HQt<!!!rC   zno matplotlibr  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   )rp   r   r   r7   )r   r7   r   r   d   )r  z.Dimensions of Z and labels must be consistent.r   )r8   pltfigurer   r   r;   r   r  rX  strvalueclose)r=   r>   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.0c                 8    S H  nU R                  X!5        M     g )N)topbottomleftright)check_dendrogram_plot)r=   r>   r  s      r@   test_dendrogram_plot#TestDendrogram.test_dendrogram_plot  s     >K&&{7 >rC   c                 2   [        UR                  [        R                  5      S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  r6   r   r   r6   )r6   r   r   r6   )r6   r   r   r   r6   r   r   r   r   r   r   r   r   r   r   r   )     F@r       K@r  )     A@r        I@r  )      9@r       @E@r  )r   r        @@r  )251034r  )r  r  r  r  r  r  
color_listdcoordicoordivlr  leaves_color_list   )axr  r  ro   Z   )r  r  leaf_font_sizeleaf_rotation)r  r  r   )r  r  r  )r  r  r  r  )r
   r8   r-   rX   r  r  add_subplotr   rs   r   get_xticklabelsget_yticklabelsget_rotationget_sizer  )
r=   r  r>   rZ   expectedfigr  R1	testlabelR2s
             r@   r  $TestDendrogram.check_dendrogram_plot  s   BJJ299:H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"rC   c           
         [        UR                  [        R                  5      S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   rp   lastpT)show_contractedr  r  )r6   r   r   r6   r  (2)z(4)r   r   r  mtica)r  r  r  r  r  )r6   r   r   r6   r  r  )r  r  r  r  )r  r        D@r  )r   r        @@@r  )r  r  r  r  r  )rp   r7   r,   r   r   )r  r  r  r  r  )	r
   r8   r-   rX   r   r  r  rs   r   rC  s       r@   test_dendrogram_truncate_mode,TestDendrogram.test_dendrogram_truncate_mode#  s     BJJ299:HEq!Wd;		jj8-(Qv$<#=$:#;!&$%q6/3Tl 	 q!Wd;		jj8-(Q'?$<$<$>$@$B %;$<$<$<$> !<#2.L 	rC   c                     [        5       $ r   r*   )r=   s    r@   dendrogram_lockTestDendrogram.dendrogram_lockG  s	    vrC   c                    [        UR                  [        R                  5      S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   mr?   rb  Tg   )r~  above_threshold_colorcolor_threshold)r  rr   r  r?   rb  r  )r   r  r  r  r  )r
   r8   r-   rX   r   r   r   )r=   r>   r  rZ   r  r  s         r@   test_dendrogram_colors%TestDendrogram.test_dendrogram_colorsK  so    BJJ299:HE"#781d.13HA"#AB<J%>? #4( __s   AA::
Bc           	          UR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        US5      n[        USS9n/ SQnUS	   n[        Xe5        g )
Nr,   r   r   r   r   r,   r   rp   r   r   r,   r   r   Tr}  r  r  r  r  C2r  r  r8   r
   r   r   r=   r>   xzrz   
exp_colorscolorss          r@   %test_dendrogram_leaf_colors_zero_dist4TestDendrogram.test_dendrogram_leaf_colors_zero_dist\  sZ     JJ	!!!!!# $ Ax q$'9
&'V(rC   c           	          UR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        US5      n[        USS9n/ S	QnUS
   n[        Xe5        g )Nr  )r   r   g?r  r  r  r   Tr}  r  r  r  r  s          r@   test_dendrogram_leaf_colors*TestDendrogram.test_dendrogram_leaf_colorsk  sZ     JJ	#!!!!# $ Ax q$'9
&'V(rC   r   N)r   r   r   r   r  r  r  r   markskipifhave_matplotlibr  r/   r  r  r  fixturer  r  r  r  r   r   rC   r@   r{  r{    s    1D" [[O+OD E& g! [[O+OD8 E	
8<#| g" [[O+OD E	
> ^^ )"))rC   r{  c                    U R                   S   S-   nUR                  US-
  4U R                  S9nUR                  S5      n[        SUS-
  5       H|  nSUS S & XS4   nXS4   nXb:  a!  X1R	                  XaR
                  S9U-
     US'   Xr:  a!  X1R	                  XqR
                  S9U-
     US'   XS4   US'   UR                  U5      X5'   M~     U$ Nr   r,   r   )r   r6   rp   )r]  rF   r   rX  r8   r{  max)rZ   r>   ry   Bqrd  r  r  s           r@   r3  r3  {  s    	
QA
!A#qww'A
A1a!e_!AwQ$9ZZHHZ59:AaD:ZZXXZ6:;AaDAw!vvay  HrC   r   c                    U R                   S   S-   nUR                  X5      nUR                  US-
  4US9nUR                  S5      n[        SUS-
  5       H|  nSUS S & XS4   n	XS4   n
X:  a!  XcR	                  XR
                  S9U-
     US'   X:  a!  XcR	                  XR
                  S9U-
     US'   XU4   US'   UR                  U5      Xh'   M~     U$ r  )r]  result_typerF   rX  r8   r{  r  )rZ   r  rb  r>   ry   r   r  r  rd  r  r  s              r@   rM  rM    s    	
QANN1 E
!A#u%A
A1a!e_!AwQ$9ZZHHZ59:AaD:ZZXXZ6:;AaDAw!vvay  HrC   c           	      X    [        [        [        U R                  SS/SS//5      5        g )Nr   r,   )r   r	   r
   r8   rJ  s    r@   <test_unsupported_uncondensed_distance_matrix_linkage_warningr     s&     "**q!fq!f5E*FGrC   c           
          [         R                  R                  R                   H-  n[	        [
        [        U R                  SS/SS//5      USS9  M/     g )Nr,   	cityblockrO   rh   )rj   cluster	hierarchy_EUCLIDEAN_METHODSr:   r;   r
   r8   )r>   rO   s     r@   "test_euclidean_linkage_value_errorr    sE    --))<<j'2::1v1v6F+G#K	9 =rC   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   rg   r  r   rq   r   )r
   r8   r(   )r>   Z1r  s      r@   test_2x2_linkager
    sH    	QC+	FB	aVaV,-h{	SBB'rC   c                 B   [         R                  R                  S5        Sn[         R                  R                  US5      nU R	                  U5      n[
        R                  R                  R                  U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   )rs   rt   seedrandnr8   rj   r  r  r`   r   r   r  r  )r>   r^  ri   rZ   trees        r@   test_node_comparer    s    IINN2D
		a A


1A$$Q'A1:DD==?"#DNNt}}./DNN 001DNN/0rC   z%`cut_tree` uses non-standard indexingc           	      x   [         R                  R                  S5        Sn[         R                  R                  US5      nU R	                  U5      n[
        R                  R                  R                  U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   rq   F)rr   check_dtyper   r,   r7   )
n_clustersr   ir   )height)rs   rt   r  r  r8   rj   r  r  r`   r    r(   arangerF   r   r  r"   distsearchsorted)r>   r^  ri   rZ   cutreenodesr  heightss           r@   test_cut_treer    s   IINN2D
		a A


1A$$Q'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   H7c                    [        [        U R                  [        R                  5      5      U R                  [        R                  5      5      n[        R
                  n[        XR                  U5      SS9  [        [        U R                  [        R                  5      S5      U R                  [        R                  5      5      n[        R                  n[        XR                  U5      SS9  g )NrT   rU   r`   rf   )	r!   r
   r8   r-   rX   r   r(   ri   linkage_X_ward_olo)r>   rZ   r[   s      r@   r   r     s     	gbjj1D1K1K&LM jj)<)C)CD	FA#==IAzz),59 	gbjj1D1F1F&GP jj)<)>)>?	AA#66IAzz),59rC   z"`Heap` only supports NumPy backendc                    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)rp   r   r         r   keyr   r  r!  r,   r   g      @rp   r   r   r   )r8   r&   get_minr   
remove_minchange_value)r>   values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#rC   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   r^   r   )r8   r   r   r;   r
   )r>   r&  s     r@   test_centroid_neg_distancer+    s4     ZZ
#F	z	"z* 
#	"	"s   A
A)^numpyrs   numpy.testingr   r   r   r   r   r   r   r:   scipy.cluster.hierarchyrj   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   scipy.spatial.distancer%   scipy.cluster._hierarchyr&   scipy.conftestr'   scipy._lib._array_apir(   r)   	threadingr+    r-   
matplotlibusematplotlib.pyplotpyplotr  r  	Exceptionr  usefixtures
pytestmarkr/   r1   r   r   r   r   r   r  r*  rh  r  r  r  r  r   r-  rA  rW  r{  r3  rM  thread_unsafer   r  r
  r  r  r   r)  r+  r   rC   r@   <module>r=     s  D ) )  * 7 7 7 7 7 7 7 7 ) ) / B  !
NN5#O
 #FKK$;$;<N$OP
;;// :> :>z 4 > > !>> 4 	T 	T !	T 4 %& %& !%&P$ $D 4 <2 <2 !<2~ 4 O O !O $FHV7 V7HV7r 4 XG XG !XGv 4 LB LB !LB^0 0< 4 "$ "$ !"$J 4 90 90 !90x 4 G G !GT 4 4 4 !4:(4 (4VB4 B4J 4 E) E) !E)P$ /0B & 4 H ! H9 4 ( !( 4 
1 !
1 $'NO= P=8 4 : !: $'KL$ M$@ 4 + !+W&  Os   I< <JJ