
    Ug                     h   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 e3j4        d           d dl5m6Z7 dZ8n# e9$ r dZ8Y nw xY we-ej:        ;                    d          gZ<ej:        j=        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             ZXdS )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dS )TestLinkageTcpu_onlyc                     |                     |j        gdgdz  z             }t          t          t          |           d S )N           )asarraynanassert_raises
ValueErrorr	   selfxpys      a/var/www/surfInsights/venv3-11/lib/python3.11/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                 f    |                     d          }t          t          t          |           d S )Nr   )zerosr6   r7   r	   r8   s      r<   "test_linkage_empty_distance_matrixz.TestLinkage.test_linkage_empty_distance_matrixR   s+     HHTNNj'1-----r>   c                 <    dD ]}|                      ||           d S )N)r   completeaverageweighted)check_linkage_tdistr9   r:   methods      r<   test_linkage_tdistzTestLinkage.test_linkage_tdistX   s4    C 	1 	1F$$VR0000	1 	1r>   c                     t          |                    t          j                  |          }t	          t          d|z             }t          ||                    |          d           d S )Nlinkage_ytdist_绽|=atolr	   r4   r*   ytdistgetattrr'   )r9   rI   r:   Z	expectedZs        r<   rG   zTestLinkage.check_linkage_tdist]   s^    BJJ29::FCC/1BV1KLL	2::i00u======r>   c                 <    dD ]}|                      ||           d S )N)centroidmedianward)check_linkage_qrH   s      r<   test_linkage_XzTestLinkage.test_linkage_Xc   s4    4 	- 	-F  ,,,,	- 	-r>   c                    t          |                    t          j                  |          }t	          t          d|z             }t          ||                    |          d           t          j        j        	                    t          j        d          }t          |                    |          |          }t          ||                    |          d           d S )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55v>>/1FGG	2::i00u====M"(()<)>0; ) = =BJJqMM6**2::i00u======r>   c                    t           j                            d          }d}|                    |d          }t	          |          }t          j                    D ]d\  }}t          j        |||          }t          |	                    |          |          }	t          |	|	                    |          dd           ed S )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    i##A&&HHQNN!HH,244 	N 	NLFD"*1a66I

1v..AArzz)445uMMMMM	N 	Nr>   c                     t          |                    t          j                  d          }t	          t          d          }t          ||                    |          d           d S )NT)optimal_orderinglinkage_ytdist_single_olorM   rN   rP   )r9   r:   rS   rT   s       r<   test_optimal_leaf_orderingz&TestLinkage.test_optimal_leaf_ordering   s\    BJJ29::TRRR/1LMM	2::i0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 %$1> > > t$$$- - %$-	> 	> 	> t$$$	N 	N %$	N t$$$> > %$> > >r>   r.   r/   c                   F   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d	S )
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                 <    dD ]}|                      ||           d S Nr   )check_linkage_tiesrH   s      r<   test_linkage_tiesz!TestLinkageTies.test_linkage_ties   s6    5 	0 	0F##FB////	0 	0r>   c                     |                     ddgddgddgg          }t          ||          }| j        |         }t          ||                     |          d           d S )Nr   r)   )rI   r]   rN   )r4   r	   _expectationsr'   )r9   rI   r:   r`   rS   rT   s         r<   r   z"TestLinkageTies.check_linkage_ties   sl    JJR1a&1a&122Af%%%&v.	2::i00u======r>   N)rx   ry   rz   ri   arrayr   r   r   r{   r>   r<   r}   r}      sX        "(1111113 4 4BH3333335 6 6282222224 5 5BH3333335 6 6BH3333335 6 6"(1111113 4 4//////1 2 2 M"0 0 0
> > > > >r>   r}   c                       e Zd Zd Zd ZdS )TestInconsistentc                 P    t           j        D ]}|                     ||           d S N)r*   inconsistent_ytdistcheck_inconsistent_tdist)r9   r:   depths      r<   test_inconsistent_tdistz(TestInconsistent.test_inconsistent_tdist   s7    (< 	5 	5E))%4444	5 	5r>   c                     |                     t          j                  }t          t	          ||          |                     t          j        |                              d S r   )r4   r*   linkage_ytdist_singler'   r   r   )r9   r   r:   rS   s       r<   r   z)TestInconsistent.check_inconsistent_tdist   s\    JJ*@AAQ..

#6#J5#QRR	T 	T 	T 	T 	Tr>   N)rx   ry   rz   r   r   r{   r>   r<   r   r      s7        5 5 5T T T T Tr>   r   c                       e Zd Zd Zd ZdS )TestCopheneticDistancec                     |                     g d          }|                     t          j                  }t          |          }t	          ||                     ||j                  d           d S )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   sq    JJ  9  9  9 : :	JJ*@AAQKK2::irz:BBOOOOOOr>   c                 l   |                     t          j                  }t          ||                     t          j                            \  }}|                     g d|j                  }|                     d|j                  d         }t          ||d           t          ||d           d S )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A!RZZ(;(BCCDDAJJ  9  9  9@B
  L L	JJ?rzJRRSUV	95111195111111r>   N)rx   ry   rz   r   r   r{   r>   r<   r   r      s5        P P P2 2 2 2 2r>   r   c                   h    e Zd Zd Z ed          d             Z ed          d             ZdS )TestMLabLinkageConversionc                     |                     g |j                  }t          t          |          |           t          t	          |          |           d S )Nr   )r4   r   r(   r
   r   )r9   r:   r`   s      r<   "test_mlab_linkage_conversion_emptyz<TestMLabLinkageConversion.test_mlab_linkage_conversion_empty   sP    JJrJ,,)!,,a000**A.....r>   Tr/   c                 J   |                     g dg          }|                     g dg          }t          t          |          |                     ||j                  d           t          t	          |          |                     ||j                  d           d S )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   s     JJ((()**ZZ$$)"--rzz!2:z/N/N"	$ 	$ 	$ 	$**BJJrJ,L,L"	$ 	$ 	$ 	$ 	$ 	$r>   c                 T   |                     g dg dg dg dg dg          }|                     g dg dg dg d	g d
g|j                  }t          t          |          |d           t          t	          |          |                     ||j                  d           d S )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kkk$kkk<<<A B BJJ***************	,
  Z  ) ) 	)"--qu====**BJJrJ,L,L"	$ 	$ 	$ 	$ 	$ 	$r>   N)rx   ry   rz   r   r,   r   r   r{   r>   r<   r   r      sw        / / / t$$$$ $ %$$ t$$$$ $ %$$ $ $r>   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestFclusterc                     t           j        D ]}|                     |d|           t           j        D ]}|                     |d|           t           j        D ]}|                     |d|           d S Nr   rc   maxclust)r*   fcluster_inconsistentcheck_fclusterdatafcluster_distancefcluster_maxclustr9   r:   ts      r<   test_fclusterdatazTestFcluster.test_fclusterdata   s    $: 	; 	;A##A~r::::$6 	7 	7A##Az26666$6 	7 	7A##Az26666	7 	7r>   c                    |                     t          t          d|z             |                   }|                     t          j                  }t	          |||          }t          t          ||                     d S N	fcluster_	criterionr   )r4   rR   r*   Q_Xr   r   r   )r9   r   r   r:   	expectedTr`   Ts          r<   r   zTestFcluster.check_fclusterdata   sp    JJw':K)<STTUVWXX	JJ*.//i1555a++,,,,,r>   c                     t           j        D ]}|                     |d|           t           j        D ]}|                     |d|           t           j        D ]}|                     |d|           d S r   )r*   r   check_fclusterr   r   r   s      r<   test_fclusterzTestFcluster.test_fcluster   s    $: 	7 	7A>26666$6 	3 	3A:r2222$6 	3 	3A:r2222	3 	3r>   c                    |                     t          t          d|z             |                   }t          |                     t          j                            }t          |||          }t          t          ||                     d S r   )r4   rR   r*   r   r   r   r   r   )r9   r   r   r:   r   rS   r   s          r<   r   zTestFcluster.check_fcluster  sx    JJw':K)<STTUVWXX	2::156677Q)q111a++,,,,,r>   c                     t           j        D ]}|                     ||           t           j        D ]}|                     ||           d S r   )r*   r   check_fcluster_monocritr    check_fcluster_maxclust_monocritr   s      r<   test_fcluster_monocritz#TestFcluster.test_fcluster_monocrit  sb    $6 	0 	0A((B////$6 	9 	9A11!R8888	9 	9r>   c                 "   |                     t          j        |                   }t          |                     t          j                            }t          ||dt          |                    }t          t          ||                     d S )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  ss    JJ2DQGHH	2::156677QZ(1++FFFa++,,,,,r>   c                 "   |                     t          j        |                   }t          |                     t          j                            }t          ||dt          |                    }t          t          ||                     d S )Nmaxclust_monocritr   )	r4   r*   r   r   r   r   r   r   r   r   s         r<   r   z-TestFcluster.check_fcluster_maxclust_monocrit  st    JJ2DQGHH	2::156677Q%88A;;OOOa++,,,,,r>   N)
rx   ry   rz   r   r   r   r   r   r   r   r{   r>   r<   r   r      s}        7 7 7- - -3 3 3- - -9 9 9- - -- - - - -r>   r   c                       e Zd Zd ZdS )TestLeadersc                    t           j        }t          |          }|                    |          }t	          |          }t          |dd          }|                    g d          |                    g d          f}|                    ||j                  }t          ||          }t          t          j
        |          t          j
        |          d           d S )	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    #!HHJJqMMAJJQ*222**\\\**BJJyyy,A,ABJJqJ))AqMMq))2>&+A+ANNNNNNr>   N)rx   ry   rz   r   r{   r>   r<   r   r     s(        
O 
O 
O 
O 
Or>   r   z+`is_isomorphic` only supports NumPy backendnp_onlyreasonsc                   z    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dS )TestIsIsomorphicTz,array-likes only supported for NumPy backendr   c                 V    t          g dg d          sJ t          g g           sJ d S Nr)   r)   r)   )rf   rf   rf   )r   )r9   r:   s     r<   test_array_likez TestIsIsomorphic.test_array_like3  s>     YYY			22222R$$$$$$$r>   c                     |                     g d          }|                     g d          }t          ||          sJ t          ||          sJ d S r   r4   r   r9   r:   abs       r<   test_is_isomorphic_1z%TestIsIsomorphic.test_is_isomorphic_19  ^    JJyyy!!JJyyy!!Q"""""Q"""""""r>   c                     |                     g d          }|                     g d          }t          ||          sJ t          ||          sJ d S )N)r)   r   r)   )rf   r   rf   r   r   s       r<   test_is_isomorphic_2z%TestIsIsomorphic.test_is_isomorphic_2@  r   r>   c                 ~    |                     g           }|                     g           }t          ||          sJ d S r   r   r   s       r<   test_is_isomorphic_3z%TestIsIsomorphic.test_is_isomorphic_3G  s<    JJrNNJJrNNQ"""""""r>   c                     |                     g d          }|                     g d          }t          ||          sJ t          ||          sJ d S )Nr   )r)   r   rf   r   r   s       r<   test_is_isomorphic_4Az&TestIsIsomorphic.test_is_isomorphic_4AM  `     JJyyy!!JJyyy!!Q"""""Q"""""""r>   c                     |                     g d          }|                     g d          }t          ||          du sJ t          ||          du sJ d S )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                     |                     g d          }|                     g d          }t          ||          sJ t          ||          sJ d S )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 ]}|                      d||           d S )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D ]}|                      d|dd|           d S )Nr  r  Tr3   r  r  r  s      r<   test_is_isomorphic_6z%TestIsIsomorphic.test_is_isomorphic_6k  sC      	G 	GB,,T2tQ2,FFFF	G 	Gr>   c                     |                     g d          }|                     g d          }t          ||          rJ d S )Nr   r   r   r   s       r<   test_is_isomorphic_7z%TestIsIsomorphic.test_is_isomorphic_7r  sH    JJyyy!!JJyyy!! A&&&&&&&r>   Fr   c                   t          d          D ]T}t          j                            |          |z                      t
                    }t          j        |j        t
                    }t          j                            |          }	t          d|j	        d                   D ]}
|	||
                  ||
<   |rOt          j                            |          }||d|         xx         dz  cc<   ||d|         xx         |z  cc<   |
                    |          }|
                    |          }t          ||          | k    sJ t          ||          | k    sJ Vd S )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  sX   q 	7 	7A%%	199#>>As+++A	%%i00A1agaj))  1w! -I))$//!AgI,1$!AgI,9,

1A

1A A&&v:6666 A&&v:66666	7 	7r>   N)Fr   )rx   ry   rz   r,   r   r   r  r  r  r  r
  r  r  r  r  r{   r>   r<   r   r   /  s         d NOQ Q Q% %Q Q%# # ## # ## # ## # #, , ,# # #> > >G G G' ' '7 7 7 7 7 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dS )TestIsValidLinkagec                 H    dD ]\  }}}|                      ||||           d S 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  sE    "> 	L 	LD$44T4KKKK	L 	Lr>   c                     |                     g dg dg|j                  }|d |d |f         }t          t          |          |k               |st	          t
          t          |d           d S d S 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  s    JJ))))))+24*  > >eteUdUlO ##u,--- 	G*&6FFFFFF	G 	Gr>   c                     |                     g dg dg|j                  }t          t          |          du            t	          t
          t          |d           d S 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  sk    JJ&(/1x  9 9 ##u,---i!11DAAAAAAr>   c                     |                     d|j                  }t          t          |          du            t	          t
          t          |d           d S 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  sS    HHV2:H.. ##u,---j"2ATBBBBBBr>   c                    t          ddd          D ]l}t          j                            ||dz
  z  dz            }|                    |          }t          |          }t          t          |          du            md S 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 	1 	1A	q!A#wz**A

1A

A$Q''4/0000		1 	1r>   	jax.numpy)jax arrays do not support item assignmentTr   r0   c                 P   t          ddd          D ]}t          j                            ||dz
  z  dz            }|                    |          }t          |          }d||dz  df<   t          t          |          du            t          t          t          |d	
           d S )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 	G 	GA	q!A#wz**A

1A

AAad1fI$Q''50111*&6FFFFF	G 	Gr>   c                 P   t          ddd          D ]}t          j                            ||dz
  z  dz            }|                    |          }t          |          }d||dz  df<   t          t          |          du            t          t          t          |d	           d S 
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                 P   t          ddd          D ]}t          j                            ||dz
  z  dz            }|                    |          }t          |          }d||dz  df<   t          t          |          du            t          t          t          |d	           d S 
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 	G 	GA	q!A#wz**A

1A

AAad1fI$Q''50111*&6FFFFF	G 	Gr>   c                 P   t          ddd          D ]}t          j                            ||dz
  z  dz            }|                    |          }t          |          }d||dz  df<   t          t          |          du            t          t          t          |d	           d S 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(    se       L L L
G G GB B BC C C1 1 1 kJK#% % %	G 	G% %	G kJK#% % %	G 	G% %	G kJK#% % %	G 	G% %	G kJK#% % %	G 	G% %	G 	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dS )TestIsValidInconsistentc                     |                     g dg dg|j                  }t          t          |          du            t	          t
          t          |d           d S r6  )r4   r9  r   r   r6   r:  r9   r:   Rs      r<   test_is_valid_im_int_typez1TestIsValidInconsistent.test_is_valid_im_int_type  sg    JJ&(/1x  9 9A%'(((iat<<<<<<r>   c                 H    dD ]\  }}}|                      ||||           d S r*  )check_is_valid_im_various_sizer,  s        r<   test_is_valid_im_various_sizez5TestIsValidInconsistent.test_is_valid_im_various_size  sE    "> 	G 	GD$//dE2FFFF	G 	Gr>   c                     |                     g dg dg|j                  }|d |d |f         }t          t          |          |k               |st	          t
          t          |d           d S d S r2  )r4   r   r   r   r6   r7   )r9   r-  r.  r/  r:   rZ  s         r<   r]  z6TestIsValidInconsistent.check_is_valid_im_various_size  s    JJ))))))+24*  > >eteUdUlOA%'((( 	B*k1DAAAAAA	B 	Br>   c                     |                     d|j                  }t          t          |          du            t	          t
          t          |d           d S r>  )rA   r   r   r   r6   r7   rY  s      r<   test_is_valid_im_emptyz.TestIsValidInconsistent.test_is_valid_im_empty  sO    HHV2:H..A%'(((j+q======r>   c                     t          ddd          D ]{}t          j                            ||dz
  z  dz            }|                    |          }t          |          }t          |          }t          t          |          du            |d S 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  s     q"a 	, 	,A	q!A#wz**A

1A

AQAKNNd*++++	, 	,r>   rF  rG  TrH  c                 n   t          ddd          D ]}t          j                            ||dz
  z  dz            }|                    |          }t          |          }t          |          }d||dz  df<   t          t          |          du            t          t          t          |d	
           d S )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 	B 	BA	q!A#wz**A

1A

AQAAad1fIKNNe+,,,*k1DAAAAA	B 	Br>   c                 n   t          ddd          D ]}t          j                            ||dz
  z  dz            }|                    |          }t          |          }t          |          }d||dz  df<   t          t          |          du            t          t          t          |d	           d S )
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                 n   t          ddd          D ]}t          j                            ||dz
  z  dz            }|                    |          }t          |          }t          |          }d||dz  df<   t          t          |          du            t          t          t          |d	           d S 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 G G
B B B> > >, , , kJK#% % %
B 
B% %
B kJK#% % %
B 
B% %
B kJK#% % %
B 
B% %
B 
B 
Br>   rW  c                   n    e Zd Z ed          d             Zd Zd Z ed          d             ZdS )TestNumObsLinkageTr/   c                 t    |                     d|j                  }t          t          t          |           d S Nr?  r   )rA   r   r6   r7   r   r;  s      r<   test_num_obs_linkage_emptyz,TestNumObsLinkage.test_num_obs_linkage_emptyB  s3     HHV2:H..j/155555r>   c                 ~    |                     g dg|j                  }t          t          |          d           d S )Nr7  r   rf   r4   r   r   r   r;  s      r<   test_num_obs_linkage_1x4z*TestNumObsLinkage.test_num_obs_linkage_1x4H  s>    JJ'rzJ::_Q''+++++r>   c                     |                     g dg dg|j                  }t          t          |          d           d S )Nr7  r8  r   r   rt  r;  s      r<   test_num_obs_linkage_2x4z*TestNumObsLinkage.test_num_obs_linkage_2x4M  sO    JJ&(/1z  ; ;_Q''+++++r>   c                     t          ddd          D ]k}t          j                            ||dz
  z  dz            }|                    |          }t          |          }t          t          |          |           ld S )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  s{     q"a 	0 	0A	q!A#wz**A

1A

A++Q////		0 	0r>   N)rx   ry   rz   r,   rr  ru  rw  ry  r{   r>   r<   ro  ro  @  s        t$$$6 6 %$6
, , ,
, , , t$$$0 0 %$0 0 0r>   ro  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestLeavesListc                     |                     g dg|j                  }t          |           t          t	          |          ddgd           d S )Nr7  r   r   r)   rg   r   r4   r   r   r   r   r;  s      r<   test_leaves_list_1x4z#TestLeavesList.test_leaves_list_1x4a  sP    JJ'rzJ::


AAU;;;;;;r>   c                     |                     g dg dg|j                  }t          |           t          t	          |          g dd           d S )Nr7  r8  r   )r   r)   rf   rg   r   r}  r;  s      r<   test_leaves_list_2x4z#TestLeavesList.test_leaves_list_2x4g  sa    JJ&(/1z  ; ;


A			>>>>>>r>   c                 <    dD ]}|                      ||           d S r   )check_leaves_list_QrH   s      r<   test_leaves_list_Qz!TestLeavesList.test_leaves_list_Qn  s6    ) 	1 	1F$$VR0000	1 	1r>   c                     |                     t          j                  }t          ||          }t	          |          }t          |                                t          |          d           d S )Nrg   r   )r4   r*   r   r	   r   r   	pre_orderr   )r9   rI   r:   r`   rS   nodes         r<   r  z"TestLeavesList.check_leaves_list_Qs  s\    JJ*.//Avqzz((+a..uEEEEEEr>   c                 `   |                     t          j                  }t          |d          }t	          |          }t          |                                |                                                                |                                                                z   d           d S )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  s    JJ*.//Ax  qzz((4==??+D+D+F+F-1^^-=-=-G-G-I-I,J"	$ 	$ 	$ 	$ 	$ 	$r>   N)rx   ry   rz   r~  r  r  r  r  r{   r>   r<   r{  r{  ^  sb        < < <? ? ?1 1 1
F F F$ $ $ $ $r>   r{  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestCorrespondc                     |                     d|j                  }|                     d|j                  }t          t          t          ||           d S )Nr@   r   r?  )rA   r   r6   r7   r   )r9   r:   r;   rS   s       r<   test_correspond_emptyz$TestCorrespond.test_correspond_empty  sJ    HHTH,,HHU"*H--j*a33333r>   c                    t          dd          D ]k}t          j                            ||dz
  z  dz            }|                    |          }t          |          }t          t          ||                     lt          ddd          D ]k}t          j                            ||dz
  z  dz            }|                    |          }t          |          }t          t          ||                     ld S )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                    t          t          t          t          dd                    t          t          dd                                        t          t          t          t          dd                    t          t          dd                                        z   D ]\  }}t          j                            ||dz
  z  dz            }t          j                            ||dz
  z  dz            }|                    |          }|                    |          }t          |          }t          |          }t          ||          rJ t          ||          rJ d S )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[[ 1 14a3D3DEEFFCU1a[[ 1 14a3D3DEEFFG 		) 		)FQ	q!A#wz**A1Q3
++B

1ABB

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

1ABB

AB!!R(((((!"a((((((		) 		)r>   c                    t          dd          D ]r}t          j                            |d          }t	          |          }|                    |          }t          |          }t          t          |          |           sd S )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  sx    q" 	0 	0A	q!$$AaA

1A

A++Q////	0 	0r>   N)rx   ry   rz   r  r  r  r  r  r{   r>   r<   r  r    s_        4 4 4& & &) ) )) ) )0 0 0 0 0r>   r  c                   z    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dS )TestIsMonotonicc                 t    |                     d|j                  }t          t          t          |           d S rq  )rA   r   r6   r7   r   r;  s      r<   test_is_monotonic_emptyz'TestIsMonotonic.test_is_monotonic_empty  s1    HHV2:H..j,22222r>   c                 f    |                     g dg|j                  }t          |          sJ d S )Nr   r)   333333?rf   r   r4   r   r   r;  s      r<   test_is_monotonic_1x4z%TestIsMonotonic.test_is_monotonic_1x4  s8    JJ'rzJ::Ar>   c                 l    |                     g dg dg|j                  }t          |          sJ d S )Nr  )rf   r   皙?r   r   r  r;  s      r<   test_is_monotonic_2x4_Tz'TestIsMonotonic.test_is_monotonic_2x4_T  sI    JJ&(/1z  ; ;Ar>   c                 l    |                     g dg dg|j                  }t          |          rJ d S )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  sI    JJ&(/1z  ; ;??"""""r>   c                 r    |                     g dg dg dg|j                  }t          |          sJ d S )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  sR    JJ&&(/1z  ; ; Ar>   c                 r    |                     g dg dg dg|j                  }t          |          rJ d S )Nr  )rf   r   皙?rf   r  r   r  r;  s      r<   test_is_monotonic_3x4_F1z(TestIsMonotonic.test_is_monotonic_3x4_F1  R    JJ&&(/1z  ; ;  ??"""""r>   c                 r    |                     g dg dg dg|j                  }t          |          rJ d S )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                 r    |                     g dg dg dg|j                  }t          |          rJ d S )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                     t          |                    t          j                  d          }t	          |          sJ d S Nr   r	   r4   r*   rQ   r   r;  s      r<    test_is_monotonic_tdist_linkage1z0TestIsMonotonic.test_is_monotonic_tdist_linkage1  s;     BJJ29::HEEAr>   rF  rG  TrH  c                     t          |                    t          j                  d          }d|d<   t	          |          rJ d S )Nr   r2   )rf   rf   r  r;  s      r<    test_is_monotonic_tdist_linkage2z0TestIsMonotonic.test_is_monotonic_tdist_linkage2  sD     BJJ29::HEE#??"""""r>   c                     |                     t          j                  }t          |d          }t	          |          sJ d S r  )r4   r*   r   r	   r   )r9   r:   r`   rS   s       r<   test_is_monotonic_Q_linkagez+TestIsMonotonic.test_is_monotonic_Q_linkage  s@     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    s        3 3 3
  
  # # #  # # ## # ## # #   kJK#% % %# #% %#    r>   r  c                   z    e Zd Zd Z eddgd          d             Z eddgd          d             Zd Zd	S )
TestMaxDistsc                 t    |                     d|j                  }t          t          t          |           d S rq  )rA   r   r6   r7   r   r;  s      r<   test_maxdists_empty_linkagez(TestMaxDists.test_maxdists_empty_linkage  s1    HHV2:H..j(A.....r>   rF  rG  TrH  c                     |                     g dg|j                  }t          |          }t          ||          }t	          ||d           d S )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  sW    
 JJ'rzJ::a[[0B77
JU333333r>   c                 <    dD ]}|                      ||           d S Nr   rD   rX   rV   rW   )check_maxdists_Q_linkagerH   s      r<   test_maxdists_Q_linkagez$TestMaxDists.test_maxdists_Q_linkage   s7     K 	6 	6F))&"5555	6 	6r>   c                     |                     t          j                  }t          ||          }t	          |          }t          ||          }t          ||d           d S )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'  s[    JJ*.//Ava[[0B77
JU333333r>   N)rx   ry   rz   r  r,   r  r  r  r{   r>   r<   r  r    s        / / /
 kJK#% % %4 4% %4 kJK#% % %6 6% %64 4 4 4 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dS )TestMaxInconstsTr/   c                     |                     d|j                  }|                     d|j                  }t          t          t          ||           d S rq  )rA   r   r6   r7   r   r9   r:   rS   rZ  s       r<   test_maxinconsts_empty_linkagez.TestMaxInconsts.test_maxinconsts_empty_linkage2  sL     HHV2:H..HHV2:H..j+q!44444r>   c                     |                     g dg|j                  }t          j                            dd          }|                     |          }t          t          t          ||           d S Nr  r   rf   r   )r4   r   ri   rj   rl   r6   r7   r   r  s       r<   test_maxinconsts_difrow_linkagez/TestMaxInconsts.test_maxinconsts_difrow_linkage9  s`     JJ'rzJ::INN1a  JJqMMj+q!44444r>   rF  rG  rH  c                     |                     g dg|j                  }|                     g dg|j                  }t          ||          }t          |||          }t	          ||d           d S )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'rzJ::JJ'rzJ::A6q!CCC
JU333333r>   c                 <    dD ]}|                      ||           d S r  )check_maxinconsts_Q_linkagerH   s      r<   test_maxinconsts_Q_linkagez*TestMaxInconsts.test_maxinconsts_Q_linkageL  s7     K 	9 	9F,,VR8888	9 	9r>   c                     |                     t          j                  }t          ||          }t	          |          }t          ||          }t          |||          }t          ||d           d S )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  so    JJ*.//AvOOA6q!CCC
JU333333r>   N)	rx   ry   rz   r,   r  r  r  r  r  r{   r>   r<   r  r  0  s        t$$$5 5 %$55 5 5 kJK#% % %4 4% %4 kJK#% % %9 9% %94 4 4 4 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dS )TestMaxRStatc                 <    dD ]}|                      ||           d S )N)gffffff
@r   r   )check_maxRstat_invalid_indexr9   r:   r%  s      r<   test_maxRstat_invalid_indexz(TestMaxRStat.test_maxRstat_invalid_index_  s4     	5 	5A--a4444	5 	5r>   c                 $   |                     g dg|j                  }|                     g dg|j                  }t          |t                    rt	          t
          t          |||           d S t	          t          t          |||           d S )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'rzJ::JJ'rzJ::a 	8*h1a88888)Xq!Q77777r>   Tr/   c                 V    t          d          D ]}|                     ||           d S Nr   )r  check_maxRstat_empty_linkager  s      r<   test_maxRstat_empty_linkagez(TestMaxRStat.test_maxRstat_empty_linkagel  s:    q 	5 	5A--a4444	5 	5r>   c                     |                     d|j                  }|                     d|j                  }t          t          t          |||           d S rq  )rA   r   r6   r7   r   r  s        r<   r  z)TestMaxRStat.check_maxRstat_empty_linkageq  sL    HHV2:H..HHV2:H..j(Aq!44444r>   c                 V    t          d          D ]}|                     ||           d S r  )r  check_maxRstat_difrow_linkager  s      r<   test_maxRstat_difrow_linkagez)TestMaxRStat.test_maxRstat_difrow_linkagew  s:    q 	6 	6A..q"5555	6 	6r>   c                     |                     g dg|j                  }t          j                            dd          }|                     |          }t          t          t          |||           d S r  )r4   r   ri   rj   rl   r6   r7   r   r  s        r<   r  z*TestMaxRStat.check_maxRstat_difrow_linkage{  sb     JJ'rzJ::INN1a  JJqMMj(Aq!44444r>   rF  rG  rH  c                 V    t          d          D ]}|                     ||           d S 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                     |                     g dg|j                  }|                     g dg|j                  }t          ||d          }t          ||d|          }t	          ||d           d S )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'rzJ::JJ'rzJ::aA6q!QCC
JU333333r>   c                 b    dD ]+}t          d          D ]}|                     |||           ,d S )Nr  r   )r  check_maxRstat_Q_linkage)r9   r:   rI   r%  s       r<   test_maxRstat_Q_linkagez$TestMaxRStat.test_maxRstat_Q_linkage  sS     K 	= 	=F1XX = =--fa<<<<=	= 	=r>   c                     |                     t          j                  }t          ||          }t	          |          }t          ||d          }t          ||d|          }t          ||d           d S )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  sp    JJ*.//AvOOaA6q!QCC
JU333333r>   N)rx   ry   rz   r  r  r,   r  r  r  r  r  r  r  r  r{   r>   r<   r  r  ]  s       5 5 58 8 8 t$$$5 5 %$55 5 56 6 65 5 5 kJK#% % %; ;% %;4 4 4 kJK#% % %= =% %=
4 4 4 4 4r>   r  c                      e Zd Zd Zd Zd Zej                            e	 d          d             Z
ej                            e	 d          d             Zd Zej                            e	 d          d	             Zd
 Zd Zd ZdS )TestDendrogramc                     t          |                    t          j                  d          }t	          |d          }|d         }t          |g d           d S )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  sY    BJJ29::HEEq$'''8V///00000r>   c                     t          |                    t          j                  d          }t	          t
          t          |d           d S )Nr   fooorientation)r	   r4   r*   rQ   r6   r7   r   r;  s      r<   test_valid_orientationz%TestDendrogram.test_valid_orientation  s>    BJJ29::HEEj*aUCCCCCCr>   c                     t          |                    t          j                  d          }g d}t	          ||                    |          d          }t	          ||d          }||k    sJ d S )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  sw    BJJ29::HEE###Qrzz&'9'94HHHQvt<<<'!!!!!!r>   zno matplotlib)reasonc           	         |                     g dg dg dg          }t          j                     t          j        t
                    5 }t          |t          t          d                               d d d            n# 1 swxY w Y   dt          |j
                  v sJ t          j        t
          d          5  t          |g            d d d            n# 1 swxY w Y   t          j                     d S )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NNNNNN
  
 	
]:&& 	6(tDs$4$45555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6?hn%%& & & & ]FH H H 	( 	( tB''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(
 		s$   ,BB
BCC#&C#c                 <    dD ]}|                      ||           d S )N)topbottomleftright)check_dendrogram_plot)r9   r:   r  s      r<   test_dendrogram_plotz#TestDendrogram.test_dendrogram_plot  s4    = 	8 	8K&&{B7777	8 	8r>   c                 (   t          |                    t          j                  d          }g dg dg dg dg dg dgg dg d	g d
g dg dgg dg dg dd}t	          j                    }|                    d          }t          |||          }t          j        |d                   |d<   t          ||           t          |||dd           |dv r|
                                d         n|                                d         }t          |                                d           t          |                                d           t          |||d           |dv r|
                                d         n|                                d         }t          |                                d           t          |||d           |dv r|
                                d         n|                                d         }t          |                                d           t	          j                     t          ||          }	t	          j                     t          j        |	d                   |	d<   t          |	|           d S )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::HEE"@"@"@777777999999;;;	=
  655777777777999	;
 :99000)M)M)M   jll__S!! bk:::z"X,//8R""" 	1"$B	8 	8 	8 	8 ///   ####%%a( 	
 	Y++--r222Y''))2...1!#	% 	% 	% 	% ///   ####%%a( 	
 	Y++--r2221"$	& 	& 	& 	& ///   ####%%a( 	
 	Y''))2...	 {333	z"X,//8R"""""r>   c           
      "   t          |                    t          j                  d          }t	          |ddd          }t          j                     t          j        |d                   |d<   t          |dgg dgg d	gd
dgddgddgd           t	          |ddd          }t          j                     t          j        |d                   |d<   t          |g dg dg dg dg dgg d	g dg dg dgg dg dg dd           d S )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::HEEq!Wd;;;	j8--(Qv$<$<$<#=$:$:$:#;!&$%q6/3Tl  	 	 	 q!Wd;;;	j8--(Q'?'?'?$<$<$<$<$<$<$>$>$>$@$@$@$B %;$:$:$<$<$<$<$<$<$<$<$<$> !< ; ;#2??.L.L.L  	 	 	 	 	r>   c                    t          |                    t          j                  d          }t	          g d           t          |ddd          }t	          g d           |d         }t          |g d	           t	          d            d S )
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  s    BJJ29::HEE333444q$-0#G G G===>>>|_
Z!:!:!:;;; 	t$$$$$r>   c           	          |                     g dg dg dg dg dg dg          }t          |d          }t          |d          }g d}|d	         }t          ||           d S )
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99
&'VZ(((((r>   c           	          |                     g dg dg dg dg dg dg          }t          |d          }t          |d          }g d	}|d
         }t          ||           d S )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9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 1 1D D D" " " [O+ODD  ED& [O+ODD8 8 ED8<# <# <#| [O+ODD  ED>% % %) ) )) ) ) ) )r>   r  c                    | j         d         dz   }|                    |dz
  f| j                  }|                    d          }t          d|dz
            D ]}d|d d <   | |df         }| |df         }||k    r(||                    ||j                  |z
           |d<   ||k    r(||                    ||j                  |z
           |d<   | |df         |d<   |                    |          ||<   |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#qw''A
A1a!e__ 	 	!!!Aw!Q$199RZZBHZ559:AaDA::RZZRXZ66:;AaDAw!vvayy!Hr>   r   c                    | j         d         dz   }|                    | |          }|                    |dz
  f|          }|                    d          }t          d|dz
            D ]}d|d d <   | |df         }	| |df         }
|	|k    r(||                    |	|j                  |z
           |d<   |
|k    r(||                    |
|j                  |z
           |d<   |||f         |d<   |                    |          ||<   |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$199RZZBHZ559:AaDA::RZZRXZ66:;AaDAw!vvayy!Hr>   c           	      n    t          t          t          |                     ddgddgg                     d S )Nr   r)   )r   r   r	   r4   r  s    r<   <test_unsupported_uncondensed_distance_matrix_linkage_warningrx    s3    "**q!fq!f5E*F*FGGGGGr>   c           
          t           j        j        j        D ]9}t	          t
          t          |                     ddgddgg          |d           :d S )Nr)   	cityblockrI   r_   )ra   cluster	hierarchy_EUCLIDEAN_METHODSr6   r7   r	   r4   )r:   rI   s     r<   "test_euclidean_linkage_value_errorr    sc    -)< 9 9j'2::1v1v6F+G+G#K	9 	9 	9 	9 	99 9r>   c                     t          |                     dg          dd          }t          |                     ddgddgg          dd          }t          ||d           d S )Nr)   r   r^   r{  r   rg   r   )r	   r4   r'   )r:   Z1r  s      r<   test_2x2_linkager    sj    	QC+	F	F	FB	aVaV,--h{	S	S	SBB''''''r>   c                    t           j                            d           d}t           j                            |d          }|                     |          }t
          j        j                            |          }t          |          }t          ||                                k               t          |                                |                                k               t          |                                |                                k               t          |                                |                                k               d S )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    INN2D
	a  A


1A$$Q''A1::DD4==??"###DNNt}}.///DNN 0 00111DNN/00000r>   z%`cut_tree` uses non-standard indexingc           	      f   t           j                            d           d}t           j                            |d          }|                     |          }t
          j        j                            |          }t          |          }t          |d d df         |                     |          dd           t          |d d df         |                     |          dd           t          t          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          |          }|                     d |D                       }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           d S )Nr  r  r   r   rg   F)rh   check_dtyper   r)   r3   )
n_clustersr   ir   c                     g | ]	}|j         
S r{   )dist).0r  s     r<   
<listcomp>z!test_cut_tree.<locals>.<listcomp>  s    666$)666r>   )height)ri   rj   r  r  r4   ra   r|  r}  rX   r   r'   arangerA   r   rr  r!   searchsorted)r:   r  r`   rS   cutreenodesheightss          r<   test_cut_treer    s   INN2D
	a  A


1A$$Q''Aa[[F F111a4L"))D//5QQQQF111b5M288D>>5QQQQF##''**BIdQhB,G,GHHHF111rd7OXaA%>%>%>UKKKKF111r3i<((1!R*I*I*IPUVVVVF111sBi<((1"a*I*I*IPUVVVV""Ejj6666677GF111bogs;;;<Qq)))7 7 7 7F111bog2w???@Q2w///e= = = =F111bogAw???@QAw///e= = = = = =r>   c                 (   t          t          |                     t          j                            |                     t          j                            }t          j        }t          ||                     |          d           t          t          |                     t          j                  d          |                     t          j                            }t          j        }t          ||                     |          d           d S )NrM   rN   rX   r]   )	r    r	   r4   r*   rQ   rv   r'   r`   linkage_X_ward_olo)r:   rS   rT   s      r<   rw   rw     s     	gbjj1D1K&L&LMM jj)<)CDD	F 	FA#=IArzz),,59999 	gbjj1D1F&G&GPP jj)<)>??	A 	AA#6IArzz),,5999999r>   z"`Heap` only supports NumPy backendc                    |                      g d          }t          |          }|                                }t          |d         d           t          |d         d           |                                 |                                }t          |d         d           t          |d         d           |                    dd           |                                }t          |d         d	           t          |d         d
           |                                 |                                 |                    dd           |                                }t          |d         d           t          |d         d           |                                 |                                }t          |d         d           t          |d         d           d S )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     sd  D     N N N N N N N N N N N N  * * * * * *    7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ) ( ( ( ( ( ) ) ) ) ) ) / / / / / / B B B B B B B B ! ! ! ! ! !
JN5######OO   OOO #FK$;$;<N$O$OP
;/ :> :> :> :> :> :> :> :>z 4   > > > > > > > ! >> 4   	T 	T 	T 	T 	T 	T 	T ! 	T 4   2 2 2 2 2 2 2 ! 2*$ $ $ $ $ $ $ $D 4   0- 0- 0- 0- 0- 0- 0- ! 0-f 4   O O O O O O O ! O $IJL L LV7 V7 V7 V7 V7 V7 V7L LV7r 4   \G \G \G \G \G \G \G ! \G~ 4   RB RB RB RB RB RB RB ! RBj0 0 0 0 0 0 0 0< 4   "$ "$ "$ "$ "$ "$ "$ ! "$J 4   90 90 90 90 90 90 90 ! 90x 4   I I I I I I I ! IX 4   4 4 4 4 4 4 4 ! 4B*4 *4 *4 *4 *4 *4 *4 *4ZD4 D4 D4 D4 D4 D4 D4 D4N 4   w) w) w) w) w) w) w) ! w)t  $ /0B    & 4   H H ! H9 9 9 4   ( ( ! ( 4   
1 
1 ! 
1 $)P(QRRR= = SR=8 4   : : ! : $)M(NOOO$ $ PO$ $ $s   <B B#"B#