
    BpjO                     8   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(J)r)  S SK*J+r+  S SK,J-r-J.r.J/r/J0r0  S SK1J2r2  S SK3J4r4J5r5J6r6J7r7J8r8J9r9  S SK:J;s  J<r=  S S	K>J?r?  S
SK@JArA   " S S5      rB S SKCrC\CR                  " S5        S SKEJFrG  SrH\R                  R                  rK\5" \5       " S S5      5       rL\5" \5       " S S5      5       rM\5" \5       " S S5      5       rN\5" \\5       " S S5      5       rO\5" \5       " S S5      5       rP\5" \5       " S S5      5       rQ\5" \5       " S S5      5       rR\5" \5       " S S 5      5       rS\5" \5       " S! S"5      5       rT\5" \5       " S# S$5      5       rU\5" \5       " S% S&5      5       rV\5" \ \5       " S' S(5      5       rW\5" \5       " S) S*5      5       rX\5" \5       " S+ S,5      5       rY\5" \5       " S- S.5      5       rZ\5" \5       " S/ S05      5       r[\5" \5       " S1 S25      5       r\\5" \!5       " S3 S45      5       r]S5 r^S6\4S7 jr_\5" \5      S8 5       r`\5" \#5      S9 5       ra\5" \$5      S: 5       rbS; rcg! \I a    SrH 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completeaverageweightedcentroidmedian)Heap)_order_cluster_tree
_hierarchy_EUCLIDEAN_METHODS_LINKAGE_METHODS)pdist)eager_warnsmake_xp_test_casexp_assert_closexp_assert_equalmake_xp_pytest_param_xp_copy_to_numpyLock   )hierarchy_test_datac                       \ rS rSr\r\rSrg)eager=    N)__name__
__module____qualname____firstlineno__r   r   __static_attributes__r:       h/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/scipy/cluster/hierarchy/tests/test_hierarchy.pyr8   r8   =   s     K'r@   r8   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\R                  R                  S \\\\\\4 V VVs/ s H  n[9        U5      PM     snnn 5      S! 5       rS"rg#s  snnn f )$TestLinkageS   	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      rA   3test_linkage_non_finite_elements_in_distance_matrix?TestLinkage.test_linkage_non_finite_elements_in_distance_matrixV   s/     JJx3%')*j'1-r@   c                 P    UR                  S5      n[        [        [        U5        g )Nr   )zerosrO   rP   r	   rQ   s      rA   "test_linkage_empty_distance_matrix.TestLinkage.test_linkage_empty_distance_matrix]   s    HHTNj'1-r@   c                 8    S H  nU R                  X!5        M     g )N)r   r"   r#   r$   )check_linkage_tdistrR   rS   methods      rA   test_linkage_tdistTestLinkage.test_linkage_tdistb   s    CF$$V0 Dr@   c                     [        UR                  [        R                  5      U5      n[	        [        SU-   5      n[        X2R                  U5      SS9  g )Nlinkage_ytdist_绽|=atolr	   rM   r6   ytdistgetattrr/   )rR   r_   rS   Z	expectedZs        rA   r]   TestLinkage.check_linkage_tdistf   sD    BJJ299:FC/1BV1KL	::i0u=r@   c                 8    S H  nU R                  X!5        M     g )N)r%   r&   r   )check_linkage_qr^   s      rA   test_linkage_XTestLinkage.test_linkage_Xl   s    4F  , 5r@   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_ư>re   	euclidean)metric)r	   rM   r6   Xri   r/   r,   )rR   r_   rS   rj   rk   rv   rT   s          rA   rn   TestLinkage.check_linkage_qp   s    BJJ2445v>/1FG	::i0u=JJ*,,-!K(A::i0u=r@   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瞯<)rtolrf   )nprandomRandomStaterandr,   r+   itemsr)   r	   rM   r/   )
rR   rS   rngnrv   dr_   code	Z_trivialrj   s
             rA   test_compare_with_trivial%TestLinkage.test_compare_with_trivial{   s    ii##A&HHQN!H,224LF"**16I

1v.AAzz)45uM 5r@   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_olord   re   rg   )rR   rS   rj   rk   s       rA   test_optimal_leaf_ordering&TestLinkage.test_optimal_leaf_ordering   s?    BJJ299:TR/1LM	::i0u=r@   zmethod,expectr   )r   r5   'e?rz   )rz      r   r   r"   )rz   r   g'e@r   r#   )rz   r   gev @r   r$   r%   r&   r   )rz   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   r5   r_   dtypers   re   )rM   r	   float64r/   )rR   r_   expectrS   rv   rj   s         rA   test_linkage_tiesTestLinkage.test_linkage_ties   sM    " JJR1a&1a&12A%F**5.r@   c                     UR                  SS/SS//5      n[        [        US9   [        U5        S S S 5        g ! , (       d  f       g = f)Nr   r5   rS   )rM   r-   r   r	   rR   rS   rv   s      rA   <test_unsupported_uncondensed_distance_matrix_linkage_warningHTestLinkage.test_unsupported_uncondensed_distance_matrix_linkage_warning   s:    JJAA'(B/AJ 0//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)Nr5   	cityblockr_   ru   rM   pytestr   rP   r	   )rR   r_   rS   rv   s       rA   "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 )Nr5   r   rt   r   r   r{   r|   )r	   rM   r/   )rR   rS   Z1Z2s       rA   test_2x2_linkageTestLinkage.test_2x2_linkage   sH    RZZ_XkJRZZ!Q!Q 01(;WU+r@   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   r   )rR   rS   valuess      rA   test_centroid_neg_distance&TestLinkage.test_centroid_neg_distance   s4     J']]:&F:. '&&s   A
Afuncc                     UR                  SS/SS/SS//5      nUR                  [        [        U5      UR                  SS95      nU" U5      n[	        XT5        g )Nr   r   r5   rt   r   )rM   r	   r2   r;   r/   )rR   r   rS   rv   expectedobserveds         rA   test_wrappersTestLinkage.test_wrappers   s\     JJR1a&1a&12::%a({S
 7+r@   r:   N)r;   r<   r=   r>   skip_xp_backendsrU   rZ   r`   r]   ro   rn   r   r   r   markparametrizer   r   r*   r   r   r   r"   r#   r$   r%   r&   r   r1   r   r?   ).0r   r1   s   000rA   rD   rD   S   s    k*PQ. R..
1>-	>	N>
 [[_	++- 	.	++- 	.	++- 	.	++- 	.	++- 	.	++- 	.	++- 	./  /! /
 [[X'9:: ;:
,
 k*PQ/ R/ [[!7HhM
M !&M
,,
s   !DrD   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)r6   inconsistent_ytdistcheck_inconsistent_tdist)rR   rS   depths      rA   test_inconsistent_tdist(TestInconsistent.test_inconsistent_tdist   s     (<<E))%4 =r@   c                     UR                  [        R                  5      n[        [	        X15      UR                  [        R
                  U   5      5        g r   )rM   r6   linkage_ytdist_singler/   r   r   )rR   r   rS   rj   s       rA   r   )TestInconsistent.check_inconsistent_tdist   s?    JJ*@@AQ.

#6#J#J5#QR	Tr@   r:   N)r;   r<   r=   r>   r   r   r?   r:   r@   rA   r   r      s    5Tr@   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   rd   re   )rM   r6   r   r   r/   r   )rR   rS   	expectedMrj   Ms        rA   test_linkage_cophenet_tdist_Z4TestCopheneticDistance.test_linkage_cophenet_tdist_Z   sL    JJ  9 :	JJ*@@AQK::izz:BOr@   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:   rd   re   )rM   r6   r   r   rh   r   r/   )rR   rS   rj   cr   r   	expectedcs          rA   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1r@   rF   rG   rH   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)rK         ?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   rP   r   rM   )rR   rS   arrs      rA   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?   r:   r@   rA   r   r      s*    P2 k*PQ& R&r@   r   c                   &    \ rS rSrS rS rS rSrg)TestMLabLinkageConversioni  c                     UR                  / UR                  S9n[        [        U5      U5        [        [	        U5      U5        g )Nr   )rM   r   r0   r
   r   r   s      rA   "test_mlab_linkage_conversion_empty<TestMLabLinkageConversion.test_mlab_linkage_conversion_empty  s7    JJrJ,)!,a0*A.r@   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)rK   r   r   r   r5   rz   r   r   r{   r   )rM   r/   r
   r   r   )rR   rS   rj   Zms       rA   'test_mlab_linkage_conversion_single_rowATestMLabLinkageConversion.test_mlab_linkage_conversion_single_row
  sk    JJ()*ZZ$)"-rzz!::z/N"	$*BJJrJ,L"	$r@   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   )   rL   r   )r5      r   )rz   	   r   )   
   r   )r   r        @a@r   )r   r        `k@r   )rK   r        o@r   )r   r        p@r   )r   r        pr@r   r   r{   r   )rM   r   r/   r
   r   )rR   rS   r   rj   s       rA   *test_mlab_linkage_conversion_multiple_rowsDTestMLabLinkageConversion.test_mlab_linkage_conversion_multiple_rows  s    ZZk$k<A BJJ*****	,
  ZZ  ) 	)"-qu=*BJJrJ,L"	$r@   r:   N)r;   r<   r=   r>   r   r   r  r?   r:   r@   rA   r   r     s    /$$r@   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)rM   ri   r6   Q_Xr   r   )rR   r  r  rS   	expectedTrv   Ts          rA   test_fclusterdata"TestFclusterData.test_fclusterdata%  sW     JJw':K)<STUVWX	JJ*../15Q****r@   r:   N)r;   r<   r=   r>   r.   r   r   r   r   r6   fcluster_inconsistentfcluster_distancefcluster_maxclustr  r?   r   r  s   00rA   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 )TestFclusteri3  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	  )rM   ri   r6   r   r  r   r   r   )rR   r  r  rS   r  rj   r  s          rA   test_fclusterTestFcluster.test_fcluster6  sX     JJw':K)<STUVWX	2::15567Qq1a+,r@   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  )	rM   r6   r  r   r  r   r   r   r   rR   r  rS   r  rj   r  s         rA   test_fcluster_monocrit#TestFcluster.test_fcluster_monocritC  sW     JJ2DDQGH	2::15567QZ(1+Fa+,r@   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  )	rM   r6   r  r   r  r   r   r   r   r  s         rA   test_fcluster_maxclust_monocrit,TestFcluster.test_fcluster_maxclust_monocritK  sX     JJ2DDQGH	2::15567Q%88A;Oa+,r@   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 )Nr5   r   rL   r  )r  r  r5   r5   r5   rz   )rz   r5   r5   r   r   )rM   r   r   r   rR   rS   rT   rj   s       rA   test_fcluster_maxclust_gh_12651,TestFcluster.test_fcluster_maxclust_gh_12651S  s    JJaS1#'1I8AjA::i0	28AjA::i0	28AjA::i0	28AjA::i0	2r@   r:   N)r;   r<   r=   r>   r.   r   r   r   r   r   r6   r  r  r  r  r   r   r$  r)  r?   r  s   00rA   r  r  3  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)TestLeadersia  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   rz   r   r5   r{   r   )
r6   r  r,   r	   r   rM   int32r   r/   concat)rR   rS   rv   Yrj   r  Lr   s           rA   test_leaders_singleTestLeaders.test_leaders_singled  s    ##!HAJQ*2JJqMJJqJ)AM1B		!f59r@   r:   N)r;   r<   r=   r>   r5  r?   r:   r@   rA   r,  r,  a  s    
:r@   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)TestIsIsomorphiciq  c                 X    [        / SQ/ SQ5      (       d   e[        / / 5      (       d   eg Nr'  )rz   rz   rz   )r   rR   s    rA   test_array_like TestIsIsomorphic.test_array_liket  s(    Y	2222R$$$$r@   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       d   e[        X25      (       d   eg r:  rM   r   rR   rS   abs       rA   test_is_isomorphic_1%TestIsIsomorphic.test_is_isomorphic_1x  @    JJy!JJy!Q""""Q""""r@   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       d   e[        X25      (       d   eg )N)r5   r   r5   )rz   r   rz   r?  r@  s       rA   test_is_isomorphic_2%TestIsIsomorphic.test_is_isomorphic_2  rE  r@   c                 l    UR                  / 5      nUR                  / 5      n[        X#5      (       d   eg r   r?  r@  s       rA   test_is_isomorphic_3%TestIsIsomorphic.test_is_isomorphic_3  s-    JJrNJJrNQ""""r@   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       d   e[        X25      (       d   eg )Nr   )r5   r   rz   r?  r@  s       rA   test_is_isomorphic_4A&TestIsIsomorphic.test_is_isomorphic_4A  B     JJy!JJy!Q""""Q""""r@   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       a   e[        X25      (       a   eg )N)r5   rz   r   r   )r5   r   rz   r   r?  r@  s       rA   test_is_isomorphic_4B&TestIsIsomorphic.test_is_isomorphic_4B  sE     JJ|$JJ|$ &&&& &&&&&r@   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       d   e[        X25      (       d   eg )N)r   rz   r   )r   r   rz   r?  r@  s       rA   test_is_isomorphic_4C&TestIsIsomorphic.test_is_isomorphic_4C  rO  r@   	nclusters)rz   r   rL   c                 $    U R                  SXS9  g )N  r   is_isomorphic_randpermrR   rV  rS   s      rA   test_is_isomorphic_5%TestIsIsomorphic.test_is_isomorphic_5  s     	##D)#;r@   c                 *    U R                  SUSSUS9  g )NrX  TrL   r   rY  r[  s      rA   test_is_isomorphic_6%TestIsIsomorphic.test_is_isomorphic_6  s    
 	##D)T1#Dr@   c                 t    UR                  / SQ5      nUR                  / SQ5      n[        X#5      (       a   eg )Nr   r'  r?  r@  s       rA   test_is_isomorphic_7%TestIsIsomorphic.test_is_isomorphic_7  s2    JJy!JJy! &&&&&r@   c                
   [         R                  R                  5       n[        S5       H  nUR	                  SX!S9nUR                  U5      n	U	R                  UR                  [         R                  5      5      n
U(       a/  UR                  U5      nXSU ==   S-  ss'   XSU ==   U-  ss'   UR                  U5      nUR                  U
5      n
[        X5      U(       + :X  d   e[        X5      U(       + :X  a  M   e   g )Nr   r   )sizer5   )r}   r~   default_rngrangeintegerspermutationtakeastypeintprM   r   )rR   nobsrV  nonisonerrorsrS   r   _rA  prB  qs               rA   rZ  'TestIsIsomorphic.is_isomorphic_randperm  s    ii##%qAQ	5A	*Aqxx()AOOD)Ag,1$Ag,9,

1A

1A &v:666 &v:666 r@   r:   N)Fr   )r;   r<   r=   r>   r<  rC  rG  rJ  rM  rQ  rT  r   r   r   r\  r_  rb  rZ  r?   r:   r@   rA   r8  r8  q  s{    %####'# [[[)4< 5<
 [[[)4E 5E'7r@   r8  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)rz   rL   F)rz   r   F)r5   r   T)rz   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   r5   r   rz   rL   )r   rz   r   r   r   r   Fcheck_namespaceTthrow)rM   r   r0   r   rO   rP   )rR   nrowncolvalidrS   rj   s         rA   "test_is_valid_linkage_various_size5TestIsValidLinkage.test_is_valid_linkage_various_size  sg     JJ))+24**  >eteUdUlO(+UEJ*&6F r@   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   r5   r   rz   r   rz   r   r   r   Frz  Tr|  )rM   int64r0   r   rO   	TypeErrorrR   rS   rj   s      rA   test_is_valid_linkage_int_type1TestIsValidLinkage.test_is_valid_linkage_int_type  sG    JJ&(/1xx  9(+UEJi!11DAr@   c                     UR                  SUR                  S9n[        [        U5      SSS9  [	        [
        [        USS9  g Nr   r   r   Frz  Tr|  )rY   r   r0   r   rO   rP   r  s      rA   test_is_valid_linkage_empty.TestIsValidLinkage.test_is_valid_linkage_empty  s9    HHV2::H.(+UEJj"2ATBr@   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   r5   rz   TFrz  )rg  r}   r~   r   rM   r	   r0   r   rR   rS   irT   rj   s        rA   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	 !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   r5   rz   r   Frz  Tr|  rg  r}   r~   r   rM   r	   xpxatsetr0   r   r   r   rP   r8   r  s        rA   -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   r5   rz   r  Frz  Tr|  r  r  s        rA   .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   r5   rz   g      Frz  Tr|  r  r  s        rA   '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        rA   )test_is_valid_linkage_4_and_up_neg_counts<TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_counts  r  r  r:   N)r;   r<   r=   r>   r   r   r   r  r  r  r  r  r  r  r  r?   r:   r@   rA   ru  ru    sX     [[0 3N OGOGBCN
6
6
6
6r@   ru  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  )rM   r  r0   r   rO   r  rR   rS   Rs      rA   test_is_valid_im_int_type1TestIsValidInconsistent.test_is_valid_im_int_type  sD    JJ&(/1xx  9AuEiat<r@   rv  rw  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 ry  )rM   r   r0   r   rO   rP   )rR   r~  r  r  rS   r  s         rA   test_is_valid_im_various_size5TestIsValidInconsistent.test_is_valid_im_various_size&  sd     JJ))+24**  >eteUdUlOAuE*k1DA r@   c                     UR                  SUR                  S9n[        [        U5      SSS9  [	        [
        [        USS9  g r  )rY   r   r0   r   rO   rP   r  s      rA   test_is_valid_im_empty.TestIsValidInconsistent.test_is_valid_im_empty1  s6    HHV2::H.AuEj+q=r@   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  )	rg  r}   r~   r   r	   r   rM   r0   r   rR   rS   r  rT   rj   r  s         rA   test_is_valid_im_4_and_up1TestIsValidInconsistent.test_is_valid_im_4_and_up7  sa     q"aA		qA#wz*A
AQA

1AKND%H !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)Nr   r  r   r5   rz   r          Frz  Tr|  rg  r}   r~   r   r	   r   r  r  r  rM   r0   r   r   r   rP   r8   r  s         rA   (test_is_valid_im_4_and_up_neg_index_left@TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_leftA       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   r5   rz   r  Frz  Tr|  r  r  s         rA   )test_is_valid_im_4_and_up_neg_index_rightATestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_rightN  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         rA   "test_is_valid_im_4_and_up_neg_dist:TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_dist[  s     q"aA		qA#wz*A
AQAq	!Q$'"&&t,A

1AKNE5Iz*!!!4!0 +* ! +*r  r:   N)r;   r<   r=   r>   r  r   r   r   r  r  r  r  r  r  r?   r:   r@   rA   r  r    sQ    = [[0 3N OBOB>I111r@   r  c                   2    \ rS rSrS rS rS rS rS rSr	g)	TestNumObsLinkageii  c                 b    UR                  SUR                  S9n[        [        [        U5        g Nr  r   )rY   r   rO   rP   r   r  s      rA   test_num_obs_linkage_empty,TestNumObsLinkage.test_num_obs_linkage_emptyl  s$    HHV2::H.j/15r@   c                 `    UR                  / SQ/UR                  S9n[        U5      S:X  d   eg )Nr  r   rz   rM   r   r   r  s      rA   test_num_obs_linkage_1x4*TestNumObsLinkage.test_num_obs_linkage_1x4q  s.    JJ'rzzJ:q!Q&&&r@   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      rA   test_num_obs_linkage_2x4*TestNumObsLinkage.test_num_obs_linkage_2x4v  s9    JJ&(/1zz  ;q!Q&&&r@   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   r5   rz   )rg  r}   r~   r   rM   r	   r   r  s        rA   test_num_obs_linkage_4_and_up/TestNumObsLinkage.test_num_obs_linkage_4_and_up|  sW     q"aA		qA#wz*A

71:&A"1%*** !r@   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 )Nrz   r   r   )rg  r}   r~   r   r,   rM   r	   r   )rR   rS   r   rv   r3  rj   s         rA   !test_num_obs_linkage_multi_matrix3TestNumObsLinkage.test_num_obs_linkage_multi_matrix  sT    q"A		q!$AaA

71:&A"1%***	 r@   r:   N)
r;   r<   r=   r>   r  r  r  r  r  r?   r:   r@   rA   r  r  i  s    6
'
'++r@   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	)
TestLeavesListi  c                     UR                  / SQ/UR                  S9n[        U5        [        [	        U5      SS/SS9  g )Nr  r   r   r5   r{   r   rM   r   r   r   r   r  s      rA   test_leaves_list_1x4#TestLeavesList.test_leaves_list_1x4  s6    JJ'rzzJ:
AAU;r@   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   r5   rz   r{   r   r  r  s      rA   test_leaves_list_2x4#TestLeavesList.test_leaves_list_2x4  s=    JJ&(/1zz  ;
A	>r@   r_   )r   r"   r#   r$   r%   r&   r   c                     [         R                  nUR                  [        X15      5      n[	        U5      n[        UR                  5       [        U5      SS9  g )Nr{   r   )r6   r  rM   r	   r   r   	pre_orderr   )rR   r_   rS   rv   rj   nodes         rA   test_leaves_list_Q!TestLeavesList.test_leaves_list_Q  sB      ##JJwq)*qz(+a.uEr@   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   r{   r   )	r6   r  rM   r	   r   r   r  get_left	get_right)rR   rS   rv   rj   r  s        rA   test_Q_subtree_pre_order'TestLeavesList.test_Q_subtree_pre_order  sf    ##JJwq(+,qz(224t~~7G7Q7Q7SS"	$r@   r:   N)r;   r<   r=   r>   r  r  r   r   r   r  r  r?   r:   r@   rA   r  r    s=    <? [[XSUFUF$r@   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 )NrX   r   r  )rY   r   rO   rP   r   r(  s       rA   test_correspond_empty$TestCorrespond.test_correspond_empty  s:    HHTH,HHU"**H-j*a3r@   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 )Nrz   r   r5   r  r   )rg  r}   r~   r   rM   r	   r   r   r  s        rA   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$%	 !r@   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 )Nrz   r   r   rL   r5   	listziprg  r}   r~   r   rM   r	   r   rR   rS   r  jrT   y2rj   r   s           rA   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r@   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 )Nrz   r         r5   r  r  s           rA   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r@   r:   N)	r;   r<   r=   r>   r  r  r   r  r?   r:   r@   rA   r  r    s    4&))r@   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  )rY   r   rO   rP   r   r  s      rA   test_is_monotonic_empty'TestIsMonotonic.test_is_monotonic_empty  s$    HHV2::H.j,2r@   c                 b    UR                  / SQ/UR                  S9n[        U5      (       d   eg )Nr   r5   333333?rz   r   rM   r   r   r  s      rA   test_is_monotonic_1x4%TestIsMonotonic.test_is_monotonic_1x4  s)    JJ'rzzJ:Ar@   c                 h    UR                  / SQ/ SQ/UR                  S9n[        U5      (       d   eg )Nr  )rz   r   皙?r   r   r  r  s      rA   test_is_monotonic_2x4_T'TestIsMonotonic.test_is_monotonic_2x4_T  s4    JJ&(/1zz  ;Ar@   c                 h    UR                  / SQ/ SQ/UR                  S9n[        U5      (       a   eg )N)r   r5   r  rz   )rz   r   r  r   r   r  r  s      rA   test_is_monotonic_2x4_F'TestIsMonotonic.test_is_monotonic_2x4_F  s7    JJ&(/1zz  ;??""?r@   c                 n    UR                  / SQ/ SQ/ SQ/UR                  S9n[        U5      (       d   eg )Nr  rz   r   r  rz   r   rL   g333333?r   r   r  r  s      rA   test_is_monotonic_3x4_T'TestIsMonotonic.test_is_monotonic_3x4_T  s9    JJ&&(/1zz  ; Ar@   c                 n    UR                  / SQ/ SQ/ SQ/UR                  S9n[        U5      (       a   eg )Nr  )rz   r   皙?rz   r  r   r  r  s      rA   test_is_monotonic_3x4_F1(TestIsMonotonic.test_is_monotonic_3x4_F1  <    JJ&&(/1zz  ;  ??""?r@   c                 n    UR                  / SQ/ SQ/ SQ/UR                  S9n[        U5      (       a   eg )N)r   r5   g?rz   r  r  r   r  r  s      rA   test_is_monotonic_3x4_F2(TestIsMonotonic.test_is_monotonic_3x4_F2  r"  r@   c                 n    UR                  / SQ/ SQ/ SQ/UR                  S9n[        U5      (       a   eg )Nr  r  )r   rL   r  r   r   r  r  s      rA   test_is_monotonic_3x4_F3(TestIsMonotonic.test_is_monotonic_3x4_F3  r"  r@   c                 z    UR                  [        [        R                  S5      5      n[	        U5      (       d   eg Nr   )rM   r	   r6   rh   r   r  s      rA    test_is_monotonic_tdist_linkage10TestIsMonotonic.test_is_monotonic_tdist_linkage1  s.     JJw2998DEAr@   c                     UR                  [        [        R                  S5      5      n[        R
                  " U5      S   R                  S5      n[        U5      (       a   eg )Nr   )rz   rz   rK   )rM   r	   r6   rh   r  r  r  r   r  s      rA    test_is_monotonic_tdist_linkage20TestIsMonotonic.test_is_monotonic_tdist_linkage2  sM     JJw2998DEFF1IdO$??""?r@   c                 ~    [         R                  nUR                  [        US5      5      n[	        U5      (       d   eg r*  )r6   r  rM   r	   r   )rR   rS   rv   rj   s       rA   test_is_monotonic_Q_linkage+TestIsMonotonic.test_is_monotonic_Q_linkage&  s2      ##JJwq(+,Ar@   r:   N)r;   r<   r=   r>   r
  r  r  r  r  r   r$  r'  r+  r.  r1  r?   r:   r@   rA   r  r    s9    3

#####r@   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  )rY   r   rO   rP   r   r  s      rA   test_maxdists_empty_linkage(TestMaxDists.test_maxdists_empty_linkage1  s$    HHV2::H.j(A.r@   c                 ~    UR                  / SQ/UR                  S9n[        U5      n[        X!5      n[	        X4SS9  g )Nr   r5   r  r   r   r{   re   )rM   r   r   calculate_maximum_distancesr/   )rR   rS   rj   MD
expectedMDs        rA   !test_maxdists_one_cluster_linkage.TestMaxDists.test_maxdists_one_cluster_linkage6  s8    JJ'rzzJ:a[07
U3r@   r_   r   r"   r   r%   r&   c                     [         R                  nUR                  [        X15      5      n[	        U5      n[        XB5      n[        XVSS9  g )Nr{   re   )r6   r  rM   r	   r   r:  r/   )rR   r_   rS   rv   rj   r;  r<  s          rA   test_maxdists_Q_linkage$TestMaxDists.test_maxdists_Q_linkage=  s?      ##JJwq)*a[07
U3r@   r:   N)r;   r<   r=   r>   r6  r=  r   r   r   rA  r?   r:   r@   rA   r4  r4  .  s7    /
4 [[FH4H4r@   r4  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	)
TestMaxInconstsiH  c                     UR                  SUR                  S9nUR                  SUR                  S9n[        [        [        X#5        g r  )rY   r   rO   rP   r   rR   rS   rj   r  s       rA   test_maxinconsts_empty_linkage.TestMaxInconsts.test_maxinconsts_empty_linkageK  s:    HHV2::H.HHV2::H.j+q4r@   c                     UR                  / SQ/UR                  S9n[        R                  R	                  SS5      nUR                  U5      n[        [        [        X#5        g Nr9  r   rz   r   )rM   r   r}   r~   r   rO   rP   r   rF  s       rA   test_maxinconsts_difrow_linkage/TestMaxInconsts.test_maxinconsts_difrow_linkageQ  sJ     JJ'rzzJ:IINN1a JJqMj+q4r@   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 )Nr9  r   r   r   r   r  r   r{   re   )rM   r   r   !calculate_maximum_inconsistenciesr/   rR   rS   rj   r  r;  r<  s         rA   $test_maxinconsts_one_cluster_linkage4TestMaxInconsts.test_maxinconsts_one_cluster_linkageY  sT    JJ'rzzJ:JJ'rzzJ:6qC
U3r@   r_   r?  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 )Nr   r{   re   )r6   r  r	   rM   r   r   rO  r/   rR   r_   rS   rv   rj   r  r;  r<  s           rA   test_maxinconsts_Q_linkage*TestMaxInconsts.test_maxinconsts_Q_linkagea  sX      ##AJJ|A'JJqM6qC
U3r@   r:   N)r;   r<   r=   r>   rG  rK  rQ  r   r   r   rU  r?   r:   r@   rA   rD  rD  H  s<    554 [[FH4H4r@   rD  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)TestMaxRStatin  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)Nr9  r   rN  gffffff
@r   r   )rM   r   r   r   r  r   rP   rF  s       rA   test_maxRstat_invalid_index(TestMaxRStat.test_maxRstat_invalid_indexq  s    JJ'rzzJ:JJ'rzzJ:]]9%Q3 &]]:&Q2 ']]:&Q1 '&	 &%&&&&s$   C	C3C+	
C
C(+
C9r  r   c                     UR                  SUR                  S9nUR                  SUR                  S9n[        [        [        X4U5        g r  )rY   r   rO   rP   r   rR   r  rS   rj   r  s        rA   test_maxRstat_empty_linkage(TestMaxRStat.test_maxRstat_empty_linkage|  s>     HHV2::H.HHV2::H.j(A!4r@   c                     UR                  / SQ/UR                  S9n[        R                  R	                  SS5      nUR                  U5      n[        [        [        X4U5        g rJ  )rM   r   r}   r~   r   rO   rP   r   r]  s        rA   test_maxRstat_difrow_linkage)TestMaxRStat.test_maxRstat_difrow_linkage  sL     JJ'rzzJ:IINN1a JJqMj(A!4r@   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 )Nr9  r   rN  r5   r{   re   )rM   r   r   rO  r/   rP  s         rA   !test_maxRstat_one_cluster_linkage.TestMaxRStat.test_maxRstat_one_cluster_linkage  sX    JJ'rzzJ:JJ'rzzJ:aA6qQC
U3r@   r_   r?  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 )Nr5   r{   re   )r6   r  r	   rM   r   r   rO  r/   rT  s           rA   test_maxRstat_Q_linkage$TestMaxRStat.test_maxRstat_Q_linkage  s\      ##AJJ|A'JJqMaA6qQC
U3r@   r:   N)r;   r<   r=   r>   rZ  r   r   r   rg  r^  ra  rd  rg  r?   r:   r@   rA   rX  rX  n  s    	 [[S%(+5 ,5 [[S%(+5 ,54 [[FH4H4r@   rX  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rz   rL   r5   r   r   r   )rM   r	   r6   rh   r   r   )rR   rS   rj   r  rn  s        rA   $test_dendrogram_single_linkage_tdist3TestDendrogram.test_dendrogram_single_linkage_tdist  s>    JJw2998DEq$'8V/0r@   c                 ~    UR                  [        [        R                  S5      5      n[	        [
        [        USS9  g )Nr   fooorientation)rM   r	   r6   rh   rO   rP   r   r  s      rA   test_valid_orientation%TestDendrogram.test_valid_orientation  s,    JJw2998DEj*aUCr@   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   )r5   r   rz   r   r   rL   T)labelsrm  )rM   r	   r6   rh   r   )rR   rS   rj   ry  result1result2s         rA   test_labels_as_array_or_list+TestDendrogram.test_labels_as_array_or_list  sP    JJw2998DE#Qzz&'94HQt<!!!r@   zno matplotlibrH   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   r5   r   r   )rz   r   r   rL   )r   rL   r   r   d   )ry  z.Dimensions of Z and labels must be consistent.r   )rM   pltfigurer   r   rP   r   r  rg  strvalueclose)rR   rS   linkexc_infos       rA   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 matplotlibru  )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  rK   r   r   rK   )rK   r   r   rK   )rK   r   r   r   rK   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4ro  )r  r  r  r  r  r  
color_listdcoordicoordivlrn  leaves_color_list   )axru  r  ry   Z   )r  ru  leaf_font_sizeleaf_rotation)r  r  r   )r  ru  r  )r  ru  r  rt  )rM   r	   r6   rh   r  r  add_subplotr   r}   r   get_xticklabelsget_yticklabelsget_rotationget_sizer  )
rR   ru  rS   rj   r   figr  R1	testlabelR2s
             rA   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"r@   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   rz   lastpT)show_contractedr  r  )rK   r   r   rK   r  (2)z(4)r   r   r  mtica)r  r  r  r  r  )rK   r   r   rK   r  r  )r  r  r  r  )r  r        D@r  )r   r        @@@r  )r  r  r  r  r  )rz   rL   r5   r   r   )r  r  r  r  r  )	rM   r	   r6   rh   r   r  r  r}   r   rF  s       rA   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 	r@   c                     [        5       $ r   r3   r;  s    rA   dendrogram_lockTestDendrogram.dendrogram_lock9  s	    vr@   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   mrT   kTg   )rm  above_threshold_colorcolor_threshold)r  rr   r  rT   r  r  )r   r  r  r  r  )rM   r	   r6   rh   r   r   r   )rR   rS   r  rj   r  r  s         rA   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r5   r   r   r   r   r5   r   rz   r   r   r5   r   r   Trl  r  r  r  r  C2r  r  r}   rM   r	   r   r   rR   rS   rv   rj   r   
exp_colorscolorss          rA   %test_dendrogram_leaf_colors_zero_dist4TestDendrogram.test_dendrogram_leaf_colors_zero_distN  sc     JJ	!!!!!# $ JJwq(+,q$'9
&'V(r@   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   Trl  r  r  r  r  s          rA   test_dendrogram_leaf_colors*TestDendrogram.test_dendrogram_leaf_colors]  sc     JJ	#!!!!# $ JJwq(+,q$'9
&'V(r@   r:   N)r;   r<   r=   r>   rp  rv  r|  r   r   skipifhave_matplotlibr  r   r   r  r  fixturer  r  r  r  r?   r:   r@   rA   rj  rj    s-   1D" [[O+OD E& g! l@ [[O+OD[[],NO<# P E	<#| g" l@ [[O+OD E	> ^^ )"))r@   rj  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   r5   r   )r   rz   )
shaperY   r   rg  rM   r  r  r  r  max)
rj   rS   r   Br  rr  r  r  b_leftb_rights
             rA   r:  r:  m  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'  Hr@   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  )
r  result_typerY   rg  rM   r  r  r  r  r  )rj   r  r  rS   r   r   r  r  rr  r  r  r  r  s                rA   rO  rO    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'  Hr@   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randnrM   r   r   r   r  r  )rS   rm  rv   rj   trees        rA   test_node_comparer    s    IINN2D
		a A


47A1:DD==?"#DNNt}}./DNN 001DNN/0r@   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   r{   F)r|   check_dtyper   r5   rL   )
n_clustersr   ir   )height)r}   r~   r  r  rM   r   r    r/   arangerY   r   r  r(   distsearchsorted)rS   rm  rv   rj   cutreenodesr  heightss           rA   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 )Nrd   re   r   rs   )	r!   rM   r	   r6   rh   r   r/   rv   linkage_X_ward_olo)rS   rj   rk   s      rA   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9r@   c                     [         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)rz   r   r         r   keyr   r  r   r5   r   g      @rz   r   r   r   )r}   rM   r'   get_minr   
remove_minchange_value)r   heappairs      rA   	test_Heapr    s%   ZZ+,F<D<<>Dea g%OO<<>Dea g#a<<>Dea g"OOOOa<<>Dea g"OO<<>Dea g#r@   )dnumpyr}   numpy.testingr   r   r   r   r   r   rO   scipy.cluster.hierarchyr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   "scipy.cluster.hierarchy._hierarchyr'   'scipy.cluster.hierarchy._hierarchy_implr(   r)   r*   r+   scipy.spatial.distancer,   scipy._lib._array_apir-   r.   r/   r0   r1   r2   scipy._external.array_api_extra	_externalarray_api_extrar  	threadingr4    r6   r8   
matplotlibusematplotlib.pyplotpyplotr  r  	Exceptionr   r   rD   r   r   r   r  r  r,  r8  ru  r  r  r  r  r  r4  rD  rX  rj  r:  rO  r  r  r   r  r:   r@   rA   <module>r     sh  D  T T  *3 3 3 3 3 3 3 3 3 4  )L L . -  !( (NN5#O ;;//  7s, s, s,l < 	T 	T !	T 8&& && &&R $o6$ $ 7$@ < + + !+  8*2 *2 *2Z 7: : : =!R7 R7 "R7j #$Q6 Q6 %Q6h ;I1 I1  I1X ?# +  + $ +F ;($ $ )$D :0) 0) 0)f < F F !FR 84 4 42 ;"4 "4  "4J 8/4 /4 /4d :H) H) H)V& /0B ( 7	1 	1 8= =6 (): *:$#  Os   %J JJ