
    5[g                     0   d dl Zd dlmZmZmZmZ d dlZd dlmZ	 d dl
Zd dl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d	d
l1m2Z2 	 d dl3Z3 e3jh                  d       d dl5m6Z7 dZ8e-ejt                  jw                  d      gZ<ejt                  jz                  Z= G d d      Z> e=d       G d d             Z? e=d       G d d             Z@ e=d       G d d             ZA G d d      ZB e=d       G d d             ZC e=d       G d d             ZD e=ddg       G d  d!             ZE e=d       G d" d#             ZF e=d       G d$ d%             ZG G d& d'      ZH e=d       G d( d)             ZI e=d       G d* d+             ZJ e=d       G d, d-             ZK e=d       G d. d/             ZL G d0 d1      ZM G d2 d3      ZN e=d       G d4 d5             ZOd6 ZPd7efd8ZQ e=d      d9        ZRd: ZS e=d      d;        ZT e=d      d<        ZU e=dd=g      d>        ZV e=d      d?        ZW e=dd@g      dA        ZXy# e9$ r dZ8Y w xY w)B    N)assert_allcloseassert_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   )hierarchy_test_dataAggTFskip_xp_backendsc                       e Zd Z ed      d        Z ed      d        Z ed      d        Zd Z ed      d        Zd Z	 ed      d	        Z
 ed      d
        Zy)TestLinkageTcpu_onlyc                 t    |j                  |j                  gdgdz  z         }t        t        t        |       y )N           )asarraynanassert_raises
ValueErrorr	   selfxpys      ]/var/www/html/bid-api/venv/lib/python3.12/site-packages/scipy/cluster/tests/test_hierarchy.py3test_linkage_non_finite_elements_in_distance_matrixz?TestLinkage.test_linkage_non_finite_elements_in_distance_matrixK   s/     JJx3%')*j'1-    c                 P    |j                  d      }t        t        t        |       y )Nr   )zerosr6   r7   r	   r8   s      r<   "test_linkage_empty_distance_matrixz.TestLinkage.test_linkage_empty_distance_matrixR   s     HHTNj'1-r>   c                 6    dD ]  }| j                  ||        y )N)r   completeaverageweighted)check_linkage_tdistr9   r:   methods      r<   test_linkage_tdistzTestLinkage.test_linkage_tdistX   s    CF$$VR0 Dr>   c                     t        |j                  t        j                        |      }t	        t        d|z         }t        ||j                  |      d       y )Nlinkage_ytdist_绽|=atolr	   r4   r*   ytdistgetattrr'   )r9   rI   r:   Z	expectedZs        r<   rG   zTestLinkage.check_linkage_tdist]   sF    BJJ299:FC/1BV1KL	2::i0u=r>   c                 6    dD ]  }| j                  ||        y )N)centroidmedianward)check_linkage_qrH   s      r<   test_linkage_XzTestLinkage.test_linkage_Xc   s    4F  , 5r>   c                    t        |j                  t        j                        |      }t	        t        d|z         }t        ||j                  |      d       t        j                  j                  j                  t        j                  d      }t        |j                  |      |      }t        ||j                  |      d       y )N
linkage_X_ư>rN   	euclidean)metric)
r	   r4   r*   XrR   r'   scipyspatialdistancer$   )r9   rI   r:   rS   rT   r;   s         r<   rY   zTestLinkage.check_linkage_qh   s    BJJ2445v>/1FG	2::i0u=MM""(()<)>)>0; ) =BJJqM6*2::i0u=r>   c                 X   t         j                  j                  d      }d}|j                  |d      }t	        |      }t        j                         D ]U  \  }}t        j                  |||      }t        |j                  |      |      }	t        |	|j                  |      dd       W y )Nr         g+=V瞯<)rtolrO   )nprandomRandomStaterandr$   r#   itemsr"   r	   r4   r'   )
r9   r:   rngnr`   drI   code	Z_trivialrS   s
             r<   test_compare_with_trivialz%TestLinkage.test_compare_with_trivials   s    ii##A&HHQN!H,224LFD"**1a6I

1v.AArzz)45uM 5r>   c                     t        |j                  t        j                        d      }t	        t        d      }t        ||j                  |      d       y )NT)optimal_orderinglinkage_ytdist_single_olorM   rN   rP   )r9   r:   rS   rT   s       r<   test_optimal_leaf_orderingz&TestLinkage.test_optimal_leaf_ordering   sA    BJJ299:TR/1LM	2::i0u=r>   N)__name__
__module____qualname__r,   r=   rB   rJ   rG   rZ   rY   rs   rw    r>   r<   r.   r.   I   s    t$. %. t$. %.
 t$1 %1> t$- %-	> t$	N %	N t$> %>r>   r.   r/   c                   `   e Zd Z ej                  g dg dg       ej                  g dg dg       ej                  g dg dg       ej                  g dg dg       ej                  g dg dg       ej                  g dg dg       ej                  g dg dg      dZd Zd Zy	)
TestLinkageTies)r   r)   'e?rf   )rf      r~   r   )rf   r   g'e@r   )rf   r   gev @r   )rf   r   g@r   r   rD   rE   rF   rV   rW   rX   c                 6    dD ]  }| j                  ||        y Nr   )check_linkage_tiesrH   s      r<   test_linkage_tiesz!TestLinkageTies.test_linkage_ties   s    5F##FB/5r>   c                     |j                  ddgddgddgg      }t        ||      }| j                  |   }t        ||j                  |      d       y )Nr   r)   )rI   r]   rN   )r4   r	   _expectationsr'   )r9   rI   r:   r`   rS   rT   s         r<   r   z"TestLinkageTies.check_linkage_ties   sT    JJR1a&1a&12Af%&&v.	2::i0u=r>   N)rx   ry   rz   ri   arrayr   r   r   r{   r>   r<   r}   r}      s     "((113 4BHH335 6288224 5BHH335 6BHH335 6"((113 4//1 2M"0
>r>   r}   c                       e Zd Zd Zd Zy)TestInconsistentc                 R    t         j                  D ]  }| j                  ||        y N)r*   inconsistent_ytdistcheck_inconsistent_tdist)r9   r:   depths      r<   test_inconsistent_tdistz(TestInconsistent.test_inconsistent_tdist   s"    (<<E))%4 =r>   c                     |j                  t        j                        }t        t	        ||      |j                  t        j
                  |                y r   )r4   r*   linkage_ytdist_singler'   r   r   )r9   r   r:   rS   s       r<   r   z)TestInconsistent.check_inconsistent_tdist   sA    JJ*@@AQ.

#6#J#J5#QR	Tr>   N)rx   ry   rz   r   r   r{   r>   r<   r   r      s    5Tr>   r   c                       e Zd Zd Zd Zy)TestCopheneticDistancec                     |j                  g d      }|j                  t        j                        }t        |      }t	        ||j                  ||j
                        d       y )N  '     r   r   r   r   r   r   r   r         r   r   dtyperM   rN   )r4   r*   r   r   r'   float64)r9   r:   	expectedMrS   Ms        r<   test_linkage_cophenet_tdist_Zz4TestCopheneticDistance.test_linkage_cophenet_tdist_Z   sP    JJ  9 :	JJ*@@AQK2::irzz:BOr>   c                 P   |j                  t        j                        }t        ||j                  t        j                              \  }}|j                  g d|j
                        }|j                  d|j
                        d   }t        ||d       t        ||d       y )Nr   r   g*ɻ2Qz?r{   rM   rN   )r4   r*   r   r   rQ   r   r'   )r9   r:   rS   cr   r   	expectedcs          r<   test_linkage_cophenet_tdist_Z_Yz6TestCopheneticDistance.test_linkage_cophenet_tdist_Z_Y   s    JJ*@@A!RZZ(;(B(BCDAJJ  9@B

  L	JJ?rzzJRSUV	951951r>   N)rx   ry   rz   r   r   r{   r>   r<   r   r      s    P2r>   r   c                   N    e Zd Zd Z ed      d        Z ed      d        Zy)TestMLabLinkageConversionc                     |j                  g |j                        }t        t        |      |       t        t	        |      |       y )Nr   )r4   r   r(   r
   r   )r9   r:   r`   s      r<   "test_mlab_linkage_conversion_emptyz<TestMLabLinkageConversion.test_mlab_linkage_conversion_empty   s7    JJrJ,)!,a0*A.r>   Tr/   c                    |j                  g dg      }|j                  g dg      }t        t        |      |j                  ||j                        d       t        t	        |      |j                  ||j                        d       y )N)r2         ?      @       @r)   rf   r   r   rg   rh   )r4   r'   r
   r   r   )r9   r:   rS   Zms       r<   'test_mlab_linkage_conversion_single_rowzATestMLabLinkageConversion.test_mlab_linkage_conversion_single_row   sq     JJ()*ZZ$)"-rzz!2::z/N"	$*BJJrJ,L"	$r>   c                 .   |j                  g dg dg dg dg dg      }|j                  g dg dg dg d	g d
g|j                        }t        t        |      |d       t        t	        |      |j                  ||j                        d       y )N)r      r   )   r3   r   )r)      r   )rf   	   r   )   
   r   )r         @     @a@r   )r         @     `k@r   )r2   g      @     o@r   )r   g       @     p@r   )      @g      "@     pr@r   r   rg   r   )r4   r   r'   r
   r   )r9   r:   r   rS   s       r<   *test_mlab_linkage_conversion_multiple_rowszDTestMLabLinkageConversion.test_mlab_linkage_conversion_multiple_rows   s     ZZk$k<A BJJ*****	,
  ZZ  ) 	)"-qu=*BJJrJ,L"	$r>   N)rx   ry   rz   r   r,   r   r   r{   r>   r<   r   r      s9    / t$$ %$ t$$ %$r>   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestFclusterc                     t         j                  D ]  }| j                  |d|        t         j                  D ]  }| j                  |d|        t         j                  D ]  }| j                  |d|        y Nr   rc   maxclust)r*   fcluster_inconsistentcheck_fclusterdatafcluster_distancefcluster_maxclustr9   r:   ts      r<   test_fclusterdatazTestFcluster.test_fclusterdata   sh    $::A##A~r: ;$66A##Az26 7$66A##Az26 7r>   c                     |j                  t        t        d|z         |         }|j                  t        j                        }t	        |||      }t        t        ||             y N	fcluster_	criterionr   )r4   rR   r*   Q_Xr   r   r   )r9   r   r   r:   	expectedTr`   Ts          r<   r   zTestFcluster.check_fclusterdata   sU    JJw':K)<STUVWX	JJ*../i15a+,r>   c                     t         j                  D ]  }| j                  |d|        t         j                  D ]  }| j                  |d|        t         j                  D ]  }| j                  |d|        y r   )r*   r   check_fclusterr   r   r   s      r<   test_fclusterzTestFcluster.test_fcluster   sh    $::A>26 ;$66A:r2 7$66A:r2 7r>   c                     |j                  t        t        d|z         |         }t        |j                  t        j                              }t        |||      }t        t        ||             y r   )r4   rR   r*   r   r   r   r   r   )r9   r   r   r:   r   rS   r   s          r<   r   zTestFcluster.check_fcluster  sZ    JJw':K)<STUVWX	2::15567Q)q1a+,r>   c                     t         j                  D ]  }| j                  ||        t         j                  D ]  }| j	                  ||        y r   )r*   r   check_fcluster_monocritr    check_fcluster_maxclust_monocritr   s      r<   test_fcluster_monocritz#TestFcluster.test_fcluster_monocrit  sB    $66A((B/ 7$66A11!R8 7r>   c                     |j                  t        j                  |         }t        |j                  t        j                              }t        ||dt        |            }t        t        ||             y )Nmonocritr   r   )	r4   r*   r   r   r   r   r   r   r   r9   r   r:   r   rS   r   s         r<   r   z$TestFcluster.check_fcluster_monocrit  sY    JJ2DDQGH	2::15567QZ(1+Fa+,r>   c                     |j                  t        j                  |         }t        |j                  t        j                              }t        ||dt        |            }t        t        ||             y )Nmaxclust_monocritr   )	r4   r*   r   r   r   r   r   r   r   r   s         r<   r   z-TestFcluster.check_fcluster_maxclust_monocrit  sZ    JJ2DDQGH	2::15567Q%88A;Oa+,r>   N)
rx   ry   rz   r   r   r   r   r   r   r   r{   r>   r<   r   r      s%    7-3-9--r>   r   c                       e Zd Zd Zy)TestLeadersc                    t         j                  }t        |      }|j                  |      }t	        |      }t        |dd      }|j                  g d      |j                  g d      f}|j                  ||j                        }t        ||      }t        t        j                  |      t        j                  |      d       y )	Nr   r   r   )5   7   8   )rf   r   r)   r   rg   r   )r*   r   r$   r4   r	   r   int32r   r   ri   concatenate)r9   r:   r`   YrS   r   LrightLs           r<   test_leaders_singlezTestLeaders.test_leaders_single"  s    ##!HJJqMAJQ*2**\*BJJy,ABJJqJ)AqMq)2>>&+ANr>   N)rx   ry   rz   r   r{   r>   r<   r   r     s    
Or>   r   z+`is_isomorphic` only supports NumPy backendnp_onlyreasonsc                   l    e Zd Z eddg      d        Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd ZddZy)TestIsIsomorphicTz,array-likes only supported for NumPy backendr   c                 D    t        g dg d      sJ t        g g       sJ y Nr)   r)   r)   )rf   rf   rf   )r   )r9   r:   s     r<   test_array_likez TestIsIsomorphic.test_array_like3  s$     Y	222R$$$r>   c                     |j                  g d      }|j                  g d      }t        ||      sJ t        ||      sJ y r   r4   r   r9   r:   abs       r<   test_is_isomorphic_1z%TestIsIsomorphic.test_is_isomorphic_19  >    JJy!JJy!Q"""Q"""r>   c                     |j                  g d      }|j                  g d      }t        ||      sJ t        ||      sJ y )N)r)   r   r)   )rf   r   rf   r   r   s       r<   test_is_isomorphic_2z%TestIsIsomorphic.test_is_isomorphic_2@  r   r>   c                 d    |j                  g       }|j                  g       }t        ||      sJ y r   r   r   s       r<   test_is_isomorphic_3z%TestIsIsomorphic.test_is_isomorphic_3G  s,    JJrNJJrNQ"""r>   c                     |j                  g d      }|j                  g d      }t        ||      sJ t        ||      sJ y )Nr   )r)   r   rf   r   r   s       r<   test_is_isomorphic_4Az&TestIsIsomorphic.test_is_isomorphic_4AM  @     JJy!JJy!Q"""Q"""r>   c                     |j                  g d      }|j                  g d      }t        ||      du sJ t        ||      du sJ y )N)r)   rf   r   r   )r)   r   rf   r   Fr   r   s       r<   test_is_isomorphic_4Bz&TestIsIsomorphic.test_is_isomorphic_4BU  sJ     JJ|$JJ|$Q"e+++Q"e+++r>   c                     |j                  g d      }|j                  g d      }t        ||      sJ t        ||      sJ y )N)r   rf   r   )r   r   rf   r   r   s       r<   test_is_isomorphic_4Cz&TestIsIsomorphic.test_is_isomorphic_4C]  r  r>   c                 :    dD ]  }| j                  d||        y )Nrf   r   r3     r:   help_is_isomorphic_randpermr9   r:   ncs      r<   test_is_isomorphic_5z%TestIsIsomorphic.test_is_isomorphic_5e  s#     B,,T2",= r>   c                 >    dD ]  }| j                  d|dd|        y )Nr  r  Tr3   r  r  r  s      r<   test_is_isomorphic_6z%TestIsIsomorphic.test_is_isomorphic_6k  s'     B,,T2tQ2,F r>   c                 l    |j                  g d      }|j                  g d      }t        ||      rJ y )Nr   r   r   r   s       r<   test_is_isomorphic_7z%TestIsIsomorphic.test_is_isomorphic_7r  s1    JJy!JJy! A&&&&r>   c                z   t        d      D ],  }t        j                  j                  |      |z  j	                  t
              }t        j                  |j                  t
              }t        j                  j                  |      }	t        d|j                  d         D ]  }
|	||
      ||
<    |r?t        j                  j                  |      }||d| xx   dz  cc<   ||d| xx   |z  cc<   |j                  |      }|j                  |      }t        ||      | k(  sJ t        ||      | k(  r-J  y )Nr   r   r   r)   )rangeri   rj   rl   astypeintrA   sizepermutationshaper4   r   )r9   nobs	nclustersnonisonerrorsr:   kr   r   PiQs               r<   r  z,TestIsIsomorphic.help_is_isomorphic_randpermx  s   qA%	199#>As+A		%%i0A1aggaj)1w! *II))$/!Ag,1$!Ag,9,

1A

1A A&v:666 A&v:666 r>   N)Fr   )rx   ry   rz   r,   r   r   r  r  r  r  r
  r  r  r  r  r{   r>   r<   r   r   /  sX     d NOQ%Q%####,#>G'7r>   r   c                       e Zd Zd Zd Zd Zd Zd Z eddgd	      d
        Z	 eddgd	      d        Z
 eddgd	      d        Z eddgd	      d        Zy)TestIsValidLinkagec                 B    dD ]  \  }}}| j                  ||||        y N))rf   r3   F)rf   r   F)r)   r   T)rf   r   T)#check_is_valid_linkage_various_sizer9   r:   nrowncolvalids        r<   "test_is_valid_linkage_various_sizez5TestIsValidLinkage.test_is_valid_linkage_various_size  s)    ">D$44T4K">r>   c                     |j                  g dg dg|j                        }|d |d |f   }t        t        |      |k(         |st	        t
        t        |d       y y N)r   r)   r   rf   r3   )r   rf   r   r   r   r   Tthrow)r4   r   r   r   r6   r7   )r9   r-  r.  r/  r:   rS   s         r<   r+  z6TestIsValidLinkage.check_is_valid_linkage_various_size  sf    JJ))+24**  >eteUdUlO #u,-*&6F r>   c                     |j                  g dg dg|j                        }t        t        |      du        t	        t
        t        |d       y Nr   r)   r   rf   r   rf   r   r   r   FTr3  )r4   int64r   r   r6   	TypeErrorr9   r:   rS   s      r<   test_is_valid_linkage_int_typez1TestIsValidLinkage.test_is_valid_linkage_int_type  sH    JJ&(/1xx  9 #u,-i!11DAr>   c                     |j                  d|j                        }t        t        |      du        t	        t
        t        |d       y Nr   r   r   FTr3  )rA   r   r   r   r6   r7   r;  s      r<   test_is_valid_linkage_emptyz.TestIsValidLinkage.test_is_valid_linkage_empty  s:    HHV2::H. #u,-j"2ATBr>   c                     t        ddd      D ]\  }t        j                  j                  ||dz
  z  dz        }|j	                  |      }t        |      }t        t        |      du        ^ y Nr      r   r)   rf   T)r  ri   rj   rl   r4   r	   r   r   r9   r:   r%  r;   rS   s        r<   test_is_valid_linkage_4_and_upz1TestIsValidLinkage.test_is_valid_linkage_4_and_up  s]     q"aA		q!A#wz*A

1A
A$Q'4/0	 !r>   	jax.numpy)jax arrays do not support item assignmentTr   r0   c                    t        ddd      D ]}  }t        j                  j                  ||dz
  z  dz        }|j	                  |      }t        |      }d||dz  df<   t        t        |      du        t        t        t        |d	
        y )Nr   rC  r   r)   rf   r   FTr3  
r  ri   rj   rl   r4   r	   r   r   r6   r7   rD  s        r<   -test_is_valid_linkage_4_and_up_neg_index_leftz@TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_left  }     q"aA		q!A#wz*A

1A
AAad1fI$Q'501*&6F !r>   c                    t        ddd      D ]}  }t        j                  j                  ||dz
  z  dz        }|j	                  |      }t        |      }d||dz  df<   t        t        |      du        t        t        t        |d	        y 
Nr   rC  r   r)   rf   rJ  FTr3  rK  rD  s        r<   .test_is_valid_linkage_4_and_up_neg_index_rightzATestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_right  rM  r>   c                    t        ddd      D ]}  }t        j                  j                  ||dz
  z  dz        }|j	                  |      }t        |      }d||dz  df<   t        t        |      du        t        t        t        |d	        y 
Nr   rC  r   r)   rf   g      FTr3  rK  rD  s        r<   'test_is_valid_linkage_4_and_up_neg_distz:TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_dist  s}     q"aA		q!A#wz*A

1A
AAad1fI$Q'501*&6F !r>   c                    t        ddd      D ]}  }t        j                  j                  ||dz
  z  dz        }|j	                  |      }t        |      }d||dz  df<   t        t        |      du        t        t        t        |d	        y rO  rK  rD  s        r<   )test_is_valid_linkage_4_and_up_neg_countsz<TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_counts  rM  r>   N)rx   ry   rz   r0  r+  r<  r@  rE  r,   rL  rP  rS  rU  r{   r>   r<   r(  r(    s    L
GBC1 kJK#%	G%	G kJK#%	G%	G kJK#%	G%	G kJK#%	G%	Gr>   r(  c                       e Zd Zd Zd Zd Zd Zd Z eddgd	      d
        Z	 eddgd	      d        Z
 eddgd	      d        Zy)TestIsValidInconsistentc                     |j                  g dg dg|j                        }t        t        |      du        t	        t
        t        |d       y r6  )r4   r9  r   r   r6   r:  r9   r:   Rs      r<   test_is_valid_im_int_typez1TestIsValidInconsistent.test_is_valid_im_int_type  sE    JJ&(/1xx  9A%'(iat<r>   c                 B    dD ]  \  }}}| j                  ||||        y r*  )check_is_valid_im_various_sizer,  s        r<   test_is_valid_im_various_sizez5TestIsValidInconsistent.test_is_valid_im_various_size  s)    ">D$//dE2F">r>   c                     |j                  g dg dg|j                        }|d |d |f   }t        t        |      |k(         |st	        t
        t        |d       y y r2  )r4   r   r   r   r6   r7   )r9   r-  r.  r/  r:   rZ  s         r<   r]  z6TestIsValidInconsistent.check_is_valid_im_various_size  sc    JJ))+24**  >eteUdUlOA%'(*k1DA r>   c                     |j                  d|j                        }t        t        |      du        t	        t
        t        |d       y r>  )rA   r   r   r   r6   r7   rY  s      r<   test_is_valid_im_emptyz.TestIsValidInconsistent.test_is_valid_im_empty  s7    HHV2::H.A%'(j+q=r>   c                     t        ddd      D ]g  }t        j                  j                  ||dz
  z  dz        }|j	                  |      }t        |      }t        |      }t        t        |      du        i y rB  )	r  ri   rj   rl   r4   r	   r   r   r   r9   r:   r%  r;   rS   rZ  s         r<   test_is_valid_im_4_and_upz1TestIsValidInconsistent.test_is_valid_im_4_and_up  sd     q"aA		q!A#wz*A

1A
AQAKNd*+ !r>   rF  rG  TrH  c                 4   t        ddd      D ]  }t        j                  j                  ||dz
  z  dz        }|j	                  |      }t        |      }t        |      }d||dz  df<   t        t        |      du        t        t        t        |d	
        y )Nr   rC  r   r)   rf          r   FTr3  r  ri   rj   rl   r4   r	   r   r   r   r6   r7   rc  s         r<   (test_is_valid_im_4_and_up_neg_index_leftz@TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_left       q"aA		q!A#wz*A

1A
AQAAad1fIKNe+,*k1DA !r>   c                 4   t        ddd      D ]  }t        j                  j                  ||dz
  z  dz        }|j	                  |      }t        |      }t        |      }d||dz  df<   t        t        |      du        t        t        t        |d	        y )
Nr   rC  r   r)   rf   rf  FTr3  rg  rc  s         r<   )test_is_valid_im_4_and_up_neg_index_rightzATestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_right!  ri  r>   c                 4   t        ddd      D ]  }t        j                  j                  ||dz
  z  dz        }|j	                  |      }t        |      }t        |      }d||dz  df<   t        t        |      du        t        t        t        |d	        y rR  rg  rc  s         r<   "test_is_valid_im_4_and_up_neg_distz:TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_dist0  ri  r>   N)rx   ry   rz   r[  r^  r]  ra  rd  r,   rh  rk  rm  r{   r>   r<   rW  rW    s    =G
B>, kJK#%
B%
B kJK#%
B%
B kJK#%
B%
Br>   rW  c                   T    e Zd Z ed      d        Zd Zd Z ed      d        Zy)TestNumObsLinkageTr/   c                 h    |j                  d|j                        }t        t        t        |       y Nr?  r   )rA   r   r6   r7   r   r;  s      r<   test_num_obs_linkage_emptyz,TestNumObsLinkage.test_num_obs_linkage_emptyB  s&     HHV2::H.j/15r>   c                 n    |j                  g dg|j                        }t        t        |      d       y )Nr7  r   rf   r4   r   r   r   r;  s      r<   test_num_obs_linkage_1x4z*TestNumObsLinkage.test_num_obs_linkage_1x4H  s*    JJ'rzzJ:_Q'+r>   c                 t    |j                  g dg dg|j                        }t        t        |      d       y )Nr7  r8  r   r   rt  r;  s      r<   test_num_obs_linkage_2x4z*TestNumObsLinkage.test_num_obs_linkage_2x4M  s5    JJ&(/1zz  ;_Q'+r>   c                     t        ddd      D ][  }t        j                  j                  ||dz
  z  dz        }|j	                  |      }t        |      }t        t        |      |       ] y )Nr   rC  r   r)   rf   )r  ri   rj   rl   r4   r	   r   r   rD  s        r<   test_num_obs_linkage_4_and_upz/TestNumObsLinkage.test_num_obs_linkage_4_and_upS  sY     q"aA		q!A#wz*A

1A
A+Q/	 !r>   N)rx   ry   rz   r,   rr  ru  rw  ry  r{   r>   r<   ro  ro  @  s<    t$6 %6
,
, t$0 %0r>   ro  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestLeavesListc                     |j                  g dg|j                        }t        |       t        t	        |      ddgd       y )Nr7  r   r   r)   rg   r   r4   r   r   r   r   r;  s      r<   test_leaves_list_1x4z#TestLeavesList.test_leaves_list_1x4a  s6    JJ'rzzJ:
AAU;r>   c                     |j                  g dg dg|j                        }t        |       t        t	        |      g dd       y )Nr7  r8  r   )r   r)   rf   rg   r   r}  r;  s      r<   test_leaves_list_2x4z#TestLeavesList.test_leaves_list_2x4g  s=    JJ&(/1zz  ;
A	>r>   c                 6    dD ]  }| j                  ||        y r   )check_leaves_list_QrH   s      r<   test_leaves_list_Qz!TestLeavesList.test_leaves_list_Qn  s    )F$$VR0)r>   c                     |j                  t        j                        }t        ||      }t	        |      }t        |j                         t        |      d       y )Nrg   r   )r4   r*   r   r	   r   r   	pre_orderr   )r9   rI   r:   r`   rS   nodes         r<   r  z"TestLeavesList.check_leaves_list_Qs  sC    JJ*../Avqz(+a.uEr>   c                    |j                  t        j                        }t        |d      }t	        |      }t        |j                         |j                         j                         |j                         j                         z   d       y )Nr   rg   r   )	r4   r*   r   r	   r   r   r  get_left	get_right)r9   r:   r`   rS   r  s        r<   test_Q_subtree_pre_orderz'TestLeavesList.test_Q_subtree_pre_orderz  sj    JJ*../Ax qz(4==?+D+D+F-1^^-=-G-G-I,J"	$r>   N)rx   ry   rz   r~  r  r  r  r  r{   r>   r<   r{  r{  ^  s    <?1
F$r>   r{  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestCorrespondc                     |j                  d|j                        }|j                  d|j                        }t        t        t        ||       y )Nr@   r   r?  )rA   r   r6   r7   r   )r9   r:   r;   rS   s       r<   test_correspond_emptyz$TestCorrespond.test_correspond_empty  s<    HHTH,HHU"**H-j*a3r>   c                    t        dd      D ][  }t        j                  j                  ||dz
  z  dz        }|j	                  |      }t        |      }t        t        ||             ] t        ddd      D ][  }t        j                  j                  ||dz
  z  dz        }|j	                  |      }t        |      }t        t        ||             ] y )Nrf   r   r)   rC  r   )r  ri   rj   rl   r4   r	   r   r   rD  s        r<   test_correspond_2_and_upz'TestCorrespond.test_correspond_2_and_up  s     q!A		q!A#wz*A

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

1A
AJq!$%	 !r>   c                 J   t        t        t        t        dd            t        t        dd                        t        t        t        t        dd            t        t        dd                        z   D ]  \  }}t        j                  j                  ||dz
  z  dz        }t        j                  j                  ||dz
  z  dz        }|j                  |      }|j                  |      }t        |      }t        |      }t        ||      rJ t        ||      sJ  y )Nrf   r   r   r3   r)   	listzipr  ri   rj   rl   r4   r	   r   r9   r:   r%  jr;   y2rS   Z2s           r<   test_correspond_4_and_upz'TestCorrespond.test_correspond_4_and_up  s     CU1a[ 14a3DEFCU1a[ 14a3DEFGFQ		q!A#wz*A1Q3
+B

1ABB
AB!!R(((!"a(((Gr>   c                 J   t        t        t        t        dd            t        t        dd                        t        t        t        t        dd            t        t        dd                        z   D ]  \  }}t        j                  j                  ||dz
  z  dz        }t        j                  j                  ||dz
  z  dz        }|j                  |      }|j                  |      }t        |      }t        |      }t        ||      rJ t        ||      sJ  y )Nrf   r         r)   r  r  s           r<   test_correspond_4_and_up_2z)TestCorrespond.test_correspond_4_and_up_2  s     CU1a[ 14b"3FGHCU1a[ 14b"3FGHIFQ		q!A#wz*A1Q3
+B

1ABB
AB!!R(((!"a(((Ir>   c                     t        dd      D ]^  }t        j                  j                  |d      }t	        |      }|j                  |      }t        |      }t        t        |      |       ` y )Nrf   r   r   )	r  ri   rj   rl   r$   r4   r	   r   r   )r9   r:   ro   r`   r   rS   s         r<   !test_num_obs_linkage_multi_matrixz0TestCorrespond.test_num_obs_linkage_multi_matrix  sT    q"A		q!$AaA

1A
A+Q/ r>   N)rx   ry   rz   r  r  r  r  r  r{   r>   r<   r  r    s    4&))0r>   r  c                   l    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z ed
dgd      d        Zd Zy)TestIsMonotonicc                 h    |j                  d|j                        }t        t        t        |       y rq  )rA   r   r6   r7   r   r;  s      r<   test_is_monotonic_emptyz'TestIsMonotonic.test_is_monotonic_empty  s$    HHV2::H.j,2r>   c                 ^    |j                  g dg|j                        }t        |      sJ y )Nr   r)   333333?rf   r   r4   r   r   r;  s      r<   test_is_monotonic_1x4z%TestIsMonotonic.test_is_monotonic_1x4  s'    JJ'rzzJ:Ar>   c                 d    |j                  g dg dg|j                        }t        |      sJ y )Nr  )rf   r   皙?r   r   r  r;  s      r<   test_is_monotonic_2x4_Tz'TestIsMonotonic.test_is_monotonic_2x4_T  s2    JJ&(/1zz  ;Ar>   c                 d    |j                  g dg dg|j                        }t        |      rJ y )N)r   r)   r  rf   )rf   r   r  r   r   r  r;  s      r<   test_is_monotonic_2x4_Fz'TestIsMonotonic.test_is_monotonic_2x4_F  s5    JJ&(/1zz  ;?""?r>   c                 j    |j                  g dg dg dg|j                        }t        |      sJ y )Nr  rf   r   r  rf   r   r3   g333333?r   r   r  r;  s      r<   test_is_monotonic_3x4_Tz'TestIsMonotonic.test_is_monotonic_3x4_T  s7    JJ&&(/1zz  ; Ar>   c                 j    |j                  g dg dg dg|j                        }t        |      rJ y )Nr  )rf   r   皙?rf   r  r   r  r;  s      r<   test_is_monotonic_3x4_F1z(TestIsMonotonic.test_is_monotonic_3x4_F1  :    JJ&&(/1zz  ;  ?""?r>   c                 j    |j                  g dg dg dg|j                        }t        |      rJ y )N)r   r)   g?rf   r  r  r   r  r;  s      r<   test_is_monotonic_3x4_F2z(TestIsMonotonic.test_is_monotonic_3x4_F2  r  r>   c                 j    |j                  g dg dg dg|j                        }t        |      rJ y )Nr  r  )r   r3   r  r   r   r  r;  s      r<   test_is_monotonic_3x4_F3z(TestIsMonotonic.test_is_monotonic_3x4_F3  r  r>   c                 p    t        |j                  t        j                        d      }t	        |      sJ y Nr   r	   r4   r*   rQ   r   r;  s      r<    test_is_monotonic_tdist_linkage1z0TestIsMonotonic.test_is_monotonic_tdist_linkage1  s,     BJJ299:HEAr>   rF  rG  TrH  c                 z    t        |j                  t        j                        d      }d|d<   t	        |      rJ y )Nr   r2   )rf   rf   r  r;  s      r<    test_is_monotonic_tdist_linkage2z0TestIsMonotonic.test_is_monotonic_tdist_linkage2  s8     BJJ299:HE#?""?r>   c                 t    |j                  t        j                        }t        |d      }t	        |      sJ y r  )r4   r*   r   r	   r   )r9   r:   r`   rS   s       r<   test_is_monotonic_Q_linkagez+TestIsMonotonic.test_is_monotonic_Q_linkage  s1     JJ*../Ax Ar>   N)rx   ry   rz   r  r  r  r  r  r  r  r  r  r,   r  r  r{   r>   r<   r  r    sX    3

#### kJK#%#%#r>   r  c                   `    e Zd Zd Z eddgd      d        Z eddgd      d        Zd Zy	)
TestMaxDistsc                 h    |j                  d|j                        }t        t        t        |       y rq  )rA   r   r6   r7   r   r;  s      r<   test_maxdists_empty_linkagez(TestMaxDists.test_maxdists_empty_linkage  s$    HHV2::H.j(A.r>   rF  rG  TrH  c                     |j                  g dg|j                        }t        |      }t        ||      }t	        ||d       y )Nr   r)   r  r   r   rg   rN   )r4   r   r   calculate_maximum_distancesr'   )r9   r:   rS   MD
expectedMDs        r<   !test_maxdists_one_cluster_linkagez.TestMaxDists.test_maxdists_one_cluster_linkage  s>    
 JJ'rzzJ:a[0B7
JU3r>   c                 6    dD ]  }| j                  ||        y Nr   rD   rX   rV   rW   )check_maxdists_Q_linkagerH   s      r<   test_maxdists_Q_linkagez$TestMaxDists.test_maxdists_Q_linkage   s      KF))&"5 Kr>   c                     |j                  t        j                        }t        ||      }t	        |      }t        ||      }t        ||d       y )Nrg   rN   )r4   r*   r   r	   r   r  r'   )r9   rI   r:   r`   rS   r  r  s          r<   r  z%TestMaxDists.check_maxdists_Q_linkage'  sD    JJ*../Ava[0B7
JU3r>   N)rx   ry   rz   r  r,   r  r  r  r{   r>   r<   r  r    sT    /
 kJK#%4%4 kJK#%6%64r>   r  c                   ~    e Zd Z ed      d        Zd Z eddgd      d        Z eddgd      d	        Zd
 Zy)TestMaxInconstsTr/   c                     |j                  d|j                        }|j                  d|j                        }t        t        t        ||       y rq  )rA   r   r6   r7   r   r9   r:   rS   rZ  s       r<   test_maxinconsts_empty_linkagez.TestMaxInconsts.test_maxinconsts_empty_linkage2  s>     HHV2::H.HHV2::H.j+q!4r>   c                     |j                  g dg|j                        }t        j                  j	                  dd      }|j                  |      }t        t        t        ||       y Nr  r   rf   r   )r4   r   ri   rj   rl   r6   r7   r   r  s       r<   test_maxinconsts_difrow_linkagez/TestMaxInconsts.test_maxinconsts_difrow_linkage9  sL     JJ'rzzJ:IINN1a JJqMj+q!4r>   rF  rG  rH  c                     |j                  g dg|j                        }|j                  g dg|j                        }t        ||      }t        |||      }t	        ||d       y )Nr  r   r   r   r   r  r  rg   rN   )r4   r   r   !calculate_maximum_inconsistenciesr'   )r9   r:   rS   rZ  r  r  s         r<   $test_maxinconsts_one_cluster_linkagez4TestMaxInconsts.test_maxinconsts_one_cluster_linkageA  s\    
 JJ'rzzJ:JJ'rzzJ:A6q!C
JU3r>   c                 6    dD ]  }| j                  ||        y r  )check_maxinconsts_Q_linkagerH   s      r<   test_maxinconsts_Q_linkagez*TestMaxInconsts.test_maxinconsts_Q_linkageL  s      KF,,VR8 Kr>   c                     |j                  t        j                        }t        ||      }t	        |      }t        ||      }t        |||      }t        ||d       y )Nr  rg   rN   )r4   r*   r   r	   r   r   r  r'   )r9   rI   r:   r`   rS   rZ  r  r  s           r<   r  z+TestMaxInconsts.check_maxinconsts_Q_linkageS  sR    JJ*../AvOA6q!C
JU3r>   N)	rx   ry   rz   r,   r  r  r  r  r  r{   r>   r<   r  r  0  sk    t$5 %55 kJK#%4%4 kJK#%9%94r>   r  c                       e Zd Zd Zd Z ed      d        Zd Zd Zd Z	 ed	d
gd      d        Z
d Z ed	d
gd      d        Zd Zy)TestMaxRStatc                 6    dD ]  }| j                  ||        y )N)gffffff
@r   r   )check_maxRstat_invalid_indexr9   r:   r%  s      r<   test_maxRstat_invalid_indexz(TestMaxRStat.test_maxRstat_invalid_index_  s    A--a4 r>   c                    |j                  g dg|j                        }|j                  g dg|j                        }t        |t              rt	        t
        t        |||       y t	        t        t        |||       y )Nr  r   r  )r4   r   
isinstancer  r6   r7   r   r:  r9   r%  r:   rS   rZ  s        r<   r  z)TestMaxRStat.check_maxRstat_invalid_indexc  s^    JJ'rzzJ:JJ'rzzJ:a*h1a8)Xq!Q7r>   Tr/   c                 H    t        d      D ]  }| j                  ||        y Nr   )r  check_maxRstat_empty_linkager  s      r<   test_maxRstat_empty_linkagez(TestMaxRStat.test_maxRstat_empty_linkagel  s     qA--a4 r>   c                     |j                  d|j                        }|j                  d|j                        }t        t        t        |||       y rq  )rA   r   r6   r7   r   r  s        r<   r  z)TestMaxRStat.check_maxRstat_empty_linkageq  s>    HHV2::H.HHV2::H.j(Aq!4r>   c                 H    t        d      D ]  }| j                  ||        y r  )r  check_maxRstat_difrow_linkager  s      r<   test_maxRstat_difrow_linkagez)TestMaxRStat.test_maxRstat_difrow_linkagew  s     qA..q"5 r>   c                     |j                  g dg|j                        }t        j                  j	                  dd      }|j                  |      }t        t        t        |||       y r  )r4   r   ri   rj   rl   r6   r7   r   r  s        r<   r  z*TestMaxRStat.check_maxRstat_difrow_linkage{  sN     JJ'rzzJ:IINN1a JJqMj(Aq!4r>   rF  rG  rH  c                 H    t        d      D ]  }| j                  ||        y r  )r  "check_maxRstat_one_cluster_linkager  s      r<   !test_maxRstat_one_cluster_linkagez.TestMaxRStat.test_maxRstat_one_cluster_linkage  s"     qA33Ar: r>   c                     |j                  g dg|j                        }|j                  g dg|j                        }t        ||d      }t        ||d|      }t	        ||d       y )Nr  r   r  r)   rg   rN   )r4   r   r   r  r'   )r9   r%  r:   rS   rZ  r  r  s          r<   r  z/TestMaxRStat.check_maxRstat_one_cluster_linkage  s^    JJ'rzzJ:JJ'rzzJ:aA6q!QC
JU3r>   c                 X    dD ]%  }t        d      D ]  }| j                  |||        ' y )Nr  r   )r  check_maxRstat_Q_linkage)r9   r:   rI   r%  s       r<   test_maxRstat_Q_linkagez$TestMaxRStat.test_maxRstat_Q_linkage  s0     KF1X--fa<  Kr>   c                     |j                  t        j                        }t        ||      }t	        |      }t        ||d      }t        ||d|      }t        ||d       y )Nr)   rg   rN   )r4   r*   r   r	   r   r   r  r'   )	r9   rI   r%  r:   r`   rS   rZ  r  r  s	            r<   r  z%TestMaxRStat.check_maxRstat_Q_linkage  sV    JJ*../AvOaA6q!QC
JU3r>   N)rx   ry   rz   r  r  r,   r  r  r  r  r  r  r  r  r{   r>   r<   r  r  ]  s    58 t$5 %5565 kJK#%;%;4 kJK#%=%=
4r>   r  c                      e Zd Zd Zd Zd Zej                  j                  e	 d      d        Z
ej                  j                  e	 d      d        Zd Zej                  j                  e	 d      d	        Zd
 Zd Zd Zy)TestDendrogramc                     t        |j                  t        j                        d      }t	        |d      }|d   }t        |g d       y )Nr   Tno_plotleavesrf   r3   r)   r   r   r   )r	   r4   r*   rQ   r   r   )r9   r:   rS   rZ  r  s        r<   $test_dendrogram_single_linkage_tdistz3TestDendrogram.test_dendrogram_single_linkage_tdist  s>    BJJ299:HEq$'8V/0r>   c                     t        |j                  t        j                        d      }t	        t
        t        |d       y )Nr   fooorientation)r	   r4   r*   rQ   r6   r7   r   r;  s      r<   test_valid_orientationz%TestDendrogram.test_valid_orientation  s,    BJJ299:HEj*aUCr>   c                     t        |j                  t        j                        d      }g d}t	        ||j                  |      d      }t	        ||d      }||k(  sJ y )Nr   )r)   r   rf   r   r   r3   T)labelsr   )r	   r4   r*   rQ   r   )r9   r:   rS   r
  result1result2s         r<   test_labels_as_array_or_listz+TestDendrogram.test_labels_as_array_or_list  sV    BJJ299:HE#Qrzz&'94HQvt<'!!!r>   zno matplotlib)reasonc           	         |j                  g dg dg dg      }t        j                          t        j                  t
              5 }t        |t        t        d                   d d d        dt        j                        v sJ t        j                  t
        d      5  t        |g        d d d        t        j                          y # 1 sw Y   hxY w# 1 sw Y   *xY w)N)r   r)   r   r   )rf   r   r   r3   )r   r3   r   r   d   )r
  z.Dimensions of Z and labels must be consistent.)match)r4   pltfigurepytestr   r7   r   r  r  strvalueclose)r9   r:   linkexc_infos       r<   test_valid_label_sizez$TestDendrogram.test_valid_label_size  s    zz
 
 	

]]:&(tDs$45 '?hnn%& 	& & ]]FH tB'H
 			 '&
H Hs    C$CCC$c                 6    dD ]  }| j                  ||        y )N)topbottomleftright)check_dendrogram_plot)r9   r:   r  s      r<   test_dendrogram_plotz#TestDendrogram.test_dendrogram_plot  s    =K&&{B7 >r>   c                 H   t        |j                  t        j                        d      }g dg dg dg dg dg dgg dg d	g d
g dg dgg dg dg dd}t	        j
                         }|j                  d      }t        |||      }t        j                  |d         |d<   t        ||       t        |||dd       |dv r|j                         d   n|j                         d   }t        |j                         d       t        |j                         d       t        |||d       |dv r|j                         d   n|j                         d   }t        |j                         d       t        |||d       |dv r|j                         d   n|j                         d   }t        |j                         d       t	        j                          t        ||      }	t	        j                          t        j                  |	d         |	d<   t        |	|       y )Nr   )C1C0r$  r$  r$  r2   r   r   r2   )r2   r   r   r2   )r2   r   r   r   r2   r   r   r   r   r   r   r   r   r         .@r)  )     F@r*       K@r+  )     A@r,        I@r-  )      9@r.       @E@r/  )      $@r0       @@r1  )251034r  )r#  r#  r$  r$  r$  r$  
color_listdcoordicoordivlr  leaves_color_list   )axr  r:  re   Z   )r?  r  leaf_font_sizeleaf_rotation)r  r  r   )r?  r  rB  )r?  r  rA  r  )r	   r4   r*   rQ   r  r  add_subplotr   ri   r   get_xticklabelsget_yticklabelsget_rotationget_sizer  )
r9   r  r:   rS   expectedfigr?  R1	testlabelR2s
             r<   r   z$TestDendrogram.check_dendrogram_plot  s   BJJ299:HE"@7799;	=
  67779	;
 :0)M  jjl__S! bk:zz"X,/8R" 	1"$B	8 //  ###%a( 	
 	Y++-r2Y'')2.1!#	% //  ###%a( 	
 	Y++-r21"$	& //  ###%a( 	
 	Y'')2.		 {3		zz"X,/8R"r>   c           
         t        |j                  t        j                        d      }t	        |ddd      }t        j                          t        j                  |d         |d<   t        |dgg dgg d	gd
dgddgddgd       t	        |ddd      }t        j                          t        j                  |d         |d<   t        |g dg dg dg dg dgg d	g dg dg dgg dg dg dd       y )Nr   rf   lastpT)show_contractedr:  r$  )r2   r   r   r2   r(  (2)z(4)r   r   r8  mtica)r#  r$  r$  r$  r%  )r2   r   r   r2   r&  r'  )r,  r,  r*  r*  )r.  r.        D@rR  )r0  r0       @@@rS  )r2  r3  r4  r5  rP  )rf   r3   r)   r   r   )r#  r#  r$  r$  r$  )	r	   r4   r*   rQ   r   r  r  ri   r   r  s       r<   test_dendrogram_truncate_modez,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 	r>   c                     t        |j                  t        j                        d      }t	        g d       t        |ddd      }t	        g d       |d   }t        |g d	       t	        d        y )
Nr   )r   mr;   r#  Tg   )r   above_threshold_colorcolor_threshold)rW  rr   rV  r;   r#  r9  )r   rV  rW  rW  rW  )r	   r4   r*   rQ   r   r   r   )r9   r:   rS   rZ  r9  s        r<   test_dendrogram_colorsz%TestDendrogram.test_dendrogram_colors1  sb    BJJ299:HE34q$-0#G=>|_
Z!:; 	t$r>   c           	          |j                  g dg dg dg dg dg dg      }t        |d      }t        |d      }g d}|d	   }t        ||       y )
Nr)   r   r   r   r   r)   r   rf   r   r   r)   r   r   Tr  r$  r#  r#  r$  C2rc  r=  r4   r	   r   r   r9   r:   xzrp   
exp_colorscolorss          r<   %test_dendrogram_leaf_colors_zero_distz4TestDendrogram.test_dendrogram_leaf_colors_zero_dist@  s\     JJ	!!!!!# $ Ax q$'9
&'VZ(r>   c           	          |j                  g dg dg dg dg dg dg      }t        |d      }t        |d      }g d	}|d
   }t        ||       y )Nr^  )r   r   g?r`  r_  ra  r   Tr  rb  r=  rd  re  s          r<   test_dendrogram_leaf_colorsz*TestDendrogram.test_dendrogram_leaf_colorsO  s\     JJ	#!!!!# $ Ax q$'9
&'VZ(r>   N)rx   ry   rz   r  r  r  r  markskipifhave_matplotlibr  r!  r   rT  r\  rj  rl  r{   r>   r<   r  r    s    1D" [[O+OD E& [[O+OD8 E8<#| [[O+OD E>%))r>   r  c                    | j                   d   dz   }|j                  |dz
  f| j                        }|j                  d      }t        d|dz
        D ]  }d|d d  | |df   }| |df   }||k\  r&||j	                  ||j
                        |z
     |d<   ||k\  r&||j	                  ||j
                        |z
     |d<   | |df   |d<   |j                  |      ||<    |S Nr   r)   r   )r   r2   rf   )r  rA   r   r  r4   r9  max)rS   r:   ro   Bqr%  r  r  s           r<   r  r  _  s    	
QA
!A#qww'A
A1a!e_!Aw!Q$19RZZBHHZ59:AaDA:RZZRXXZ6:;AaDAw!vvay!  Hr>   r   c                    | j                   d   dz   }|j                  | |      }|j                  |dz
  f|      }|j                  d      }t        d|dz
        D ]  }d|d d  | |df   }	| |df   }
|	|k\  r&||j	                  |	|j
                        |z
     |d<   |
|k\  r&||j	                  |
|j
                        |z
     |d<   |||f   |d<   |j                  |      ||<    |S rq  )r  result_typerA   r  r4   r9  rr  )rS   rZ  r#  r:   ro   r   rs  rt  r%  r  r  s              r<   r  r  q  s    	
QANN1a E
!A#u%A
A1a!e_!Aw!Q$19RZZBHHZ59:AaDA:RZZRXXZ6:;AaDAw!vvay!  Hr>   c           	      X    t        t        t        | j                  ddgddgg             y )Nr   r)   )r   r   r	   r4   r  s    r<   <test_unsupported_uncondensed_distance_matrix_linkage_warningrx    s$    "**q!fq!f5E*FGr>   c           
          t         j                  j                  j                  D ]/  }t	        t
        t        | j                  ddgddgg      |d       1 y )Nr)   	cityblockrI   r_   )ra   cluster	hierarchy_EUCLIDEAN_METHODSr6   r7   r	   r4   )r:   rI   s     r<   "test_euclidean_linkage_value_errorr    sE    --))<<j'2::1v1v6F+G#K	9 =r>   c                     t        | j                  dg      dd      }t        | j                  ddgddgg      dd      }t        ||d       y )Nr)   r   r^   r{  r   rg   r   )r	   r4   r'   )r:   Z1r  s      r<   test_2x2_linkager    sJ    	QC+	FB	aVaV,-h{	SBB'r>   c                 D   t         j                  j                  d       d}t         j                  j                  |d      }| j	                  |      }t
        j                  j                  j                  |      }t        |      }t        ||j                         kD         t        |j                         |j                         kD         t        |j                         |j                         k(         t        |j                         |j                         k7         y )N   2   r   )ri   rj   seedrandnr4   ra   r|  r}  rX   r   r   r  r  )r:   r  r`   rS   trees        r<   test_node_comparer    s    IINN2D
		a A


1A$$Q'A1:DD4==?"#DNNt}}./DNN 001DNN/0r>   z%`cut_tree` uses non-standard indexingc           	         t         j                  j                  d       d}t         j                  j                  |d      }| j	                  |      }t
        j                  j                  j                  |      }t        |      }t        |d d df   | j                  |      dd       t        |d d df   | j                  |      dd       t        t        j                  |      j                  d      t        j                  |d	z
  dd             t        |d d d
gf   t        |d      d       t        |d d d
dgf   t        |ddg      d       t        |d d dd
gf   t        |ddg      d       t        |      }| j	                  |D cg c]  }|j                    c}      }t        |d d t        j"                  |dg      f   t        |d      d       t        |d d t        j"                  |ddg      f   t        |ddg      d       t        |d d t        j"                  |ddg      f   t        |ddg      d       y c c}w )Nr  r  r   r   rg   F)rh   check_dtyper   r)   r3   )
n_clustersr   ir   )height)ri   rj   r  r  r4   ra   r|  r}  rX   r   r'   arangerA   r   rr  r!   distsearchsorted)r:   r  r`   rS   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   Ic                    t        t        | j                  t        j                              | j                  t        j                              }t        j
                  }t        || j                  |      d       t        t        | j                  t        j                        d      | j                  t        j                              }t        j                  }t        || j                  |      d       y )NrM   rN   rX   r]   )	r    r	   r4   r*   rQ   rv   r'   r`   linkage_X_ward_olo)r:   rS   rT   s      r<   rw   rw     s     	gbjj1D1K1K&LM jj)<)C)CD	FA#==IArzz),59 	gbjj1D1F1F&GP jj)<)>)>?	AA#66IArzz),59r>   z"`Heap` only supports NumPy backendc                    | j                  g d      }t        |      }|j                         }t        |d   d       t        |d   d       |j	                          |j                         }t        |d   d       t        |d   d       |j                  dd       |j                         }t        |d   d	       t        |d   d
       |j	                          |j	                          |j                  dd       |j                         }t        |d   d       t        |d   d       |j	                          |j                         }t        |d   d       t        |d   d       y )N)rf   r   r         r   keyr   r  r  r)   r   g      @rf   r   r   r   )r4   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#r>   )Ynumpyri   numpy.testingr   r   r   r   r  r   r6   scipy.cluster.hierarchyra   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(    r*   
matplotlibusematplotlib.pyplotpyplotr  ro  	Exceptionrm  usefixtures
pytestmarkr,   r.   r}   r   r   r   r   r   r   r(  rW  ro  r{  r  r  r  r  r  r  r  r  rx  r  r  r  r  rw   r  r{   r>   r<   <module>r     s\  D  N N  * 7 7 7 7 7 7 7 7 ) ) / B !
JNN5#O
 #FKK$;$;<N$OP
;;// :> :>z 4 > > !>> 4 	T 	T !	T 4 2 2 !2*$ $D 4 0- 0- !0-f 4 O O !O $IJLV7 V7LV7r 4 \G \G !\G~ 4 RB RB !RBj0 0< 4 "$ "$ !"$J 4 90 90 !90x 4 I I !IX 4 4 4 !4B*4 *4ZD4 D4N 4 w) w) !w)t$ /0B & 4 H !H9 4 ( !( 4 
1 !
1 $)P(QR= S=8 4 : !: $)M(NO$ P$a$  Os   <J
 
JJ