a
    CCCfV                     @   sd  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 z&d dl3Z3e34d d dl5m6Z7 dZ8W n e9y2   dZ8Y n0 e-ej:;dgZ<ej:j=Z=G dd dZ>e=ddG dd dZ?e=ddG dd dZ@e=ddG dd dZAG dd dZBe=ddG dd dZCe=ddG dd dZDe=ddgdG d d! d!ZEe=ddG d"d# d#ZFe=ddG d$d% d%ZGG d&d' d'ZHe=ddG d(d) d)ZIe=ddG d*d+ d+ZJe=ddG d,d- d-ZKe=ddG d.d/ d/ZLG d0d1 d1ZMG d2d3 d3ZNe=ddG d4d5 d5ZOd6d7 ZPd8efd9d:ZQe=ddd;d< ZRd=d> ZSe=ddd?d@ ZTe=dddAdB ZUe=ddCgddDdE ZVe=dddFdG ZWe=ddHgddIdJ ZXdS )K    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_dataZAggTFskip_if_array_apic                   @   s   e Zd Zedddd Zedddd Zedddd Zd	d
 Zedddd Zdd Z	edddd Z
edddd ZdS )TestLinkageTZcpu_onlyc                 C   s$   | d}|j|d< ttt| d S )N)   r   )zerosnanassert_raises
ValueErrorr   selfxpy r6   ^/var/www/html/django/DPS/env/lib/python3.9/site-packages/scipy/cluster/tests/test_hierarchy.py3test_linkage_non_finite_elements_in_distance_matrixK   s    

z?TestLinkage.test_linkage_non_finite_elements_in_distance_matrixc                 C   s   | d}ttt| d S )Nr   )r.   r0   r1   r   r2   r6   r6   r7   "test_linkage_empty_distance_matrixS   s    
z.TestLinkage.test_linkage_empty_distance_matrixc                 C   s   dD ]}|  || qd S )N)r   completeaverageweighted)check_linkage_tdistr3   r4   methodr6   r6   r7   test_linkage_tdistY   s    zTestLinkage.test_linkage_tdistc                 C   s8   t |tj|}ttd| }t|||dd d S )NZlinkage_ytdist_绽|=atolr   asarrayr)   ytdistgetattrr&   )r3   r@   r4   Z	expectedZr6   r6   r7   r>   ^   s    zTestLinkage.check_linkage_tdistc                 C   s   dD ]}|  || qd S )N)centroidmedianward)check_linkage_qr?   r6   r6   r7   test_linkage_Xd   s    zTestLinkage.test_linkage_Xc                 C   sp   t |tj|}ttd| }t|||dd tjjj	tjdd}t |||}t|||dd d S )NZ
linkage_X_ư>rC   	euclidean)metric)
r   rF   r)   XrH   r&   scipyZspatialdistancer#   )r3   r@   r4   rI   rJ   r5   r6   r6   r7   rN   i   s    zTestLinkage.check_linkage_qc           
      C   sn   t jd}d}||d}t|}t D ]<\}}t|||}t|	||}	t
|	|	|ddd q,d S )Nr         g+=V瞯<)rtolrD   )nprandomZRandomStaterandr#   r"   itemsr!   r   rF   r&   )
r3   r4   rngnrS   dr@   codeZ	Z_trivialrI   r6   r6   r7   test_compare_with_trivialt   s    z%TestLinkage.test_compare_with_trivialc                 C   s6   t |tjdd}ttd}t|||dd d S )NT)Zoptimal_orderinglinkage_ytdist_single_olorB   rC   rE   )r3   r4   rI   rJ   r6   r6   r7   test_optimal_leaf_ordering   s    
z&TestLinkage.test_optimal_leaf_orderingN)__name__
__module____qualname__r*   r8   r:   rA   r>   rO   rN   rb   rd   r6   r6   r6   r7   r+   I   s   




r+   r,   c                   @   s   e Zd Zeg dg dgeg dg dgeg dg dgeg dg dgeg dg dgeg dg dgeg dg dgdZdd Zd	d
 ZdS )TestLinkageTies)r   r(   'e?rW   )rW      ri   rj   )rW   rj   g'e@rj   )rW   rj   gev @rj   )rW   rj   g@rj   r   r;   r<   r=   rK   rL   rM   c                 C   s   dD ]}|  || qd S Nrk   )check_linkage_tiesr?   r6   r6   r7   test_linkage_ties   s    z!TestLinkageTies.test_linkage_tiesc                 C   sJ   | ddgddgddgg}t||d}| j| }t|| |dd d S )Nr   r(   )r@   rP   rC   )rF   r   _expectationsr&   )r3   r@   r4   rS   rI   rJ   r6   r6   r7   rm      s    
z"TestLinkageTies.check_linkage_tiesN)re   rf   rg   rZ   arrayrp   rn   rm   r6   r6   r6   r7   rh      s0   






rh   c                   @   s   e Zd Zdd Zdd ZdS )TestInconsistentc                 C   s   t jD ]}| || qd S N)r)   inconsistent_ytdistcheck_inconsistent_tdist)r3   r4   depthr6   r6   r7   test_inconsistent_tdist   s    
z(TestInconsistent.test_inconsistent_tdistc                 C   s,   | tj}tt||| tj|  d S rs   )rF   r)   linkage_ytdist_singler&   r   rt   )r3   rv   r4   rI   r6   r6   r7   ru      s    
z)TestInconsistent.check_inconsistent_tdistN)re   rf   rg   rw   ru   r6   r6   r6   r7   rr      s   rr   c                   @   s   e Zd Zdd Zdd ZdS )TestCopheneticDistancec                 C   s@   | g d}| tj}t|}t||j ||jddd d S )N  '     r}   r|   r|   r{   r{   r|   r|   r|         r|   r|   dtyperB   rC   )rF   r)   rx   r   r&   float64)r3   r4   	expectedMrI   Mr6   r6   r7   test_linkage_cophenet_tdist_Z   s    z4TestCopheneticDistance.test_linkage_cophenet_tdist_Zc                 C   sj   | tj}t|| tj\}}|j g d|jd}|j d|jdd }t||dd t||dd d S )Nrz   r   g*ɻ2Qz?r6   rB   rC   )rF   r)   rx   r   rG   r   r&   )r3   r4   rI   cr   r   Z	expectedcr6   r6   r7   test_linkage_cophenet_tdist_Z_Y   s    
z6TestCopheneticDistance.test_linkage_cophenet_tdist_Z_YN)re   rf   rg   r   r   r6   r6   r6   r7   ry      s   ry   c                   @   s8   e Zd Zdd Zedddd Zedddd Zd	S )
TestMLabLinkageConversionc                 C   s0   |j g |jd}tt|| tt|| d S )Nr   )rF   r   r'   r	   r
   )r3   r4   rS   r6   r6   r7   "test_mlab_linkage_conversion_empty   s    z<TestMLabLinkageConversion.test_mlab_linkage_conversion_emptyTr,   c                 C   s`   | g dg}| g dg}tt||j ||jddd tt||j ||jddd d S )N)              ?      @       @r(   rW   rj   r   rX   rY   )rF   r&   r	   r   r
   )r3   r4   rI   Zmr6   r6   r7   'test_mlab_linkage_conversion_single_row   s    zATestMLabLinkageConversion.test_mlab_linkage_conversion_single_rowc                 C   s   | g dg dg dg dg dg}|j g dg dg dg d	g d
g|jd}tt||dd tt||j ||jddd d S )N)rj   r-   r~   )      r   )r(      r}   )rW   	   r{   )   
   r|   )r         @     @a@r   )r         @     `k@r   )r   g      @     o@r   )r   g       @     p@r   )      @g      "@     pr@r   r   rX   r   )rF   r   r&   r	   r
   )r3   r4   r   rI   r6   r6   r7   *test_mlab_linkage_conversion_multiple_rows   s    
zDTestMLabLinkageConversion.test_mlab_linkage_conversion_multiple_rowsN)re   rf   rg   r   r*   r   r   r6   r6   r6   r7   r      s
   
	r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestFclusterc                 C   sR   t jD ]}| |d| qt jD ]}| |d| q t jD ]}| |d| q:d S Nr   rU   maxclust)r)   fcluster_inconsistentcheck_fclusterdatafcluster_distancefcluster_maxclustr3   r4   tr6   r6   r7   test_fclusterdata   s    


zTestFcluster.test_fclusterdatac                 C   sD   | ttd| | }| tj}t|||d}tt|| d S NZ	fcluster_	criterionr   )rF   rH   r)   Q_Xr   r   r   )r3   r   r   r4   	expectedTrS   Tr6   r6   r7   r      s    zTestFcluster.check_fclusterdatac                 C   sR   t jD ]}| |d| qt jD ]}| |d| q t jD ]}| |d| q:d S r   )r)   r   check_fclusterr   r   r   r6   r6   r7   test_fcluster   s    


zTestFcluster.test_fclusterc                 C   sH   | ttd| | }t| tj}t|||d}tt|| d S r   )rF   rH   r)   r   r   r   r   r   )r3   r   r   r4   r   rI   r   r6   r6   r7   r     s    zTestFcluster.check_fclusterc                 C   s4   t jD ]}| || qt jD ]}| || qd S rs   )r)   r   check_fcluster_monocritr    check_fcluster_maxclust_monocritr   r6   r6   r7   test_fcluster_monocrit  s    

z#TestFcluster.test_fcluster_monocritc                 C   sF   | tj| }t| tj}t||dt|d}tt|| d S )Nmonocritr   r   )	rF   r)   r   r   r   r   r   r   r   r3   r   r4   r   rI   r   r6   r6   r7   r     s    z$TestFcluster.check_fcluster_monocritc                 C   sF   | tj| }t| tj}t||dt|d}tt|| d S )NZmaxclust_monocritr   )	rF   r)   r   r   r   r   r   r   r   r   r6   r6   r7   r     s    z-TestFcluster.check_fcluster_maxclust_monocritN)
re   rf   rg   r   r   r   r   r   r   r   r6   r6   r6   r7   r      s   r   c                   @   s   e Zd Zdd ZdS )TestLeadersc                 C   s   t j}t|}||}t|}t|ddd}|g d|g df}|j||jd}t||}tt	
|t	
|dd d S )	Nr   rj   r   )5   7   8   )rW   rj   r(   r   rX   r   )r)   r   r#   rF   r   r   Zint32r   r   rZ   Zconcatenate)r3   r4   rS   YrI   r   ZLrightLr6   r6   r7   test_leaders_single#  s    

zTestLeaders.test_leaders_singleN)re   rf   rg   r   r6   r6   r6   r7   r      s   r   z+`is_isomorphic` only supports NumPy backendZnp_onlyreasonsc                   @   st   e Zd Zeddgddd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd ZdddZdS )TestIsIsomorphicTz,array-likes only supported for NumPy backendr   c                 C   s(   t g dg dsJ t g g s$J d S Nr(   r(   r(   )rW   rW   rW   )r   )r3   r4   r6   r6   r7   test_array_like4  s    z TestIsIsomorphic.test_array_likec                 C   s<   | g d}| g d}t||s*J t||s8J d S r   rF   r   r3   r4   abr6   r6   r7   test_is_isomorphic_1:  s    z%TestIsIsomorphic.test_is_isomorphic_1c                 C   s<   | g d}| g d}t||s*J t||s8J d S )N)r(   r   r(   )rW   rj   rW   r   r   r6   r6   r7   test_is_isomorphic_2A  s    z%TestIsIsomorphic.test_is_isomorphic_2c                 C   s&   | g }| g }t||s"J d S rs   r   r   r6   r6   r7   test_is_isomorphic_3H  s    

z%TestIsIsomorphic.test_is_isomorphic_3c                 C   s<   | g d}| g d}t||s*J t||s8J d S )Nr   )r(   rj   rW   r   r   r6   r6   r7   test_is_isomorphic_4AN  s    z&TestIsIsomorphic.test_is_isomorphic_4Ac                 C   sD   | g d}| g d}t||du s.J t||du s@J d S )N)r(   rW   rj   rj   )r(   rj   rW   rj   Fr   r   r6   r6   r7   test_is_isomorphic_4BV  s    z&TestIsIsomorphic.test_is_isomorphic_4Bc                 C   s<   | g d}| g d}t||s*J t||s8J d S )N)r   rW   rj   )r-   rj   rW   r   r   r6   r6   r7   test_is_isomorphic_4C^  s    z&TestIsIsomorphic.test_is_isomorphic_4Cc                 C   s   dD ]}| j d||d qd S )NrW   rj   r     r4   help_is_isomorphic_randpermr3   r4   ncr6   r6   r7   test_is_isomorphic_5f  s    z%TestIsIsomorphic.test_is_isomorphic_5c                 C   s"   dD ]}| j d|dd|d qd S )Nr   r   Tr   r   r   r   r6   r6   r7   test_is_isomorphic_6l  s    z%TestIsIsomorphic.test_is_isomorphic_6c                 C   s.   | g d}| g d}t||r*J d S )Nr   r   r   r   r6   r6   r7   test_is_isomorphic_7s  s    z%TestIsIsomorphic.test_is_isomorphic_7Fr   c                C   s   t dD ]}tj|| t}tj|jtd}tj|}	t d|j	d D ]}
|	||
  ||
< qN|rtj|}||d|   d7  < ||d|   |;  < |
|}|
|}t||| ksJ t||| ksJ qd S )Nrj   r   r   r(   )rangerZ   r[   r\   Zastypeintr.   sizeZpermutationshaperF   r   )r3   nobsZ	nclustersZnonisoZnerrorsr4   kr   r   PiQr6   r6   r7   r   y  s    

z,TestIsIsomorphic.help_is_isomorphic_randpermN)Fr   )re   rf   rg   r*   r   r   r   r   r   r   r   r   r   r   r   r6   r6   r6   r7   r   0  s   
r   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )TestIsValidLinkagec                 C   s$   dD ]\}}}|  |||| qd S N))rW   r   F)rW   rj   F)r(   r   T)rW   r   T)#check_is_valid_linkage_various_sizer3   r4   nrowncolvalidr6   r6   r7   "test_is_valid_linkage_various_size  s    z5TestIsValidLinkage.test_is_valid_linkage_various_sizec                 C   sX   |j g dg dg|jd}|d |d |f }tt||k |sTttt|dd d S N)r   r(   r   rW   r   )rj   rW   r   rj   rj   r   Tthrow)rF   r   r   r   r0   r1   )r3   r   r   r   r4   rI   r6   r6   r7   r     s    
z6TestIsValidLinkage.check_is_valid_linkage_various_sizec                 C   s@   |j g dg dg|jd}tt|du  ttt|dd d S Nr   r(   r   rW   rj   rW   r   rj   r   FTr   )rF   int64r   r   r0   	TypeErrorr3   r4   rI   r6   r6   r7   test_is_valid_linkage_int_type  s    
z1TestIsValidLinkage.test_is_valid_linkage_int_typec                 C   s4   |j d|jd}tt|du  ttt|dd d S Nr   r   r   FTr   )r.   r   r   r   r0   r1   r   r6   r6   r7   test_is_valid_linkage_empty  s    z.TestIsValidLinkage.test_is_valid_linkage_emptyc                 C   sP   t dddD ]>}tj||d  d }||}t|}tt|du  qd S Nr      rj   r(   rW   T)r   rZ   r[   r\   rF   r   r   r   r3   r4   r   r5   rI   r6   r6   r7   test_is_valid_linkage_4_and_up  s
    
z1TestIsValidLinkage.test_is_valid_linkage_4_and_upc                 C   sp   t dddD ]^}tj||d  d }||}t|}d||d df< tt|du  tt	t|d	d
 qd S )Nr   r   rj   r(   rW   r   FTr   
r   rZ   r[   r\   rF   r   r   r   r0   r1   r   r6   r6   r7   -test_is_valid_linkage_4_and_up_neg_index_left  s    
z@TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_leftc                 C   sp   t dddD ]^}tj||d  d }||}t|}d||d df< tt|du  tt	t|dd	 qd S 
Nr   r   rj   r(   rW   r   FTr   r   r   r6   r6   r7   .test_is_valid_linkage_4_and_up_neg_index_right  s    
zATestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_rightc                 C   sp   t dddD ]^}tj||d  d }||}t|}d||d df< tt|du  tt	t|dd	 qd S 
Nr   r   rj   r(   rW   g      FTr   r   r   r6   r6   r7   'test_is_valid_linkage_4_and_up_neg_dist  s    
z:TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_distc                 C   sp   t dddD ]^}tj||d  d }||}t|}d||d df< tt|du  tt	t|dd	 qd S r   r   r   r6   r6   r7   )test_is_valid_linkage_4_and_up_neg_counts  s    
z<TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_countsN)re   rf   rg   r   r   r   r   r   r   r   r  r  r6   r6   r6   r7   r     s   		r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestIsValidInconsistentc                 C   s@   |j g dg dg|jd}tt|du  ttt|dd d S r   )rF   r   r   r   r0   r   r3   r4   Rr6   r6   r7   test_is_valid_im_int_type  s    
z1TestIsValidInconsistent.test_is_valid_im_int_typec                 C   s$   dD ]\}}}|  |||| qd S r   )check_is_valid_im_various_sizer   r6   r6   r7   test_is_valid_im_various_size  s    z5TestIsValidInconsistent.test_is_valid_im_various_sizec                 C   sX   |j g dg dg|jd}|d |d |f }tt||k |sTttt|dd d S r   )rF   r   r   r   r0   r1   )r3   r   r   r   r4   r  r6   r6   r7   r    s    
z6TestIsValidInconsistent.check_is_valid_im_various_sizec                 C   s4   |j d|jd}tt|du  ttt|dd d S r   )r.   r   r   r   r0   r1   r  r6   r6   r7   test_is_valid_im_empty  s    z.TestIsValidInconsistent.test_is_valid_im_emptyc                 C   sX   t dddD ]F}tj||d  d }||}t|}t|}tt|du  qd S r   )	r   rZ   r[   r\   rF   r   r   r   r   r3   r4   r   r5   rI   r  r6   r6   r7   test_is_valid_im_4_and_up  s    
z1TestIsValidInconsistent.test_is_valid_im_4_and_upc                 C   sx   t dddD ]f}tj||d  d }||}t|}t|}d||d df< tt|du  t	t
t|d	d
 qd S )Nr   r   rj   r(   rW          r   FTr   r   rZ   r[   r\   rF   r   r   r   r   r0   r1   r  r6   r6   r7   (test_is_valid_im_4_and_up_neg_index_left  s    
z@TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_leftc                 C   sx   t dddD ]f}tj||d  d }||}t|}t|}d||d df< tt|du  t	t
t|dd	 qd S )
Nr   r   rj   r(   rW   r  FTr   r  r  r6   r6   r7   )test_is_valid_im_4_and_up_neg_index_right  s    
zATestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_rightc                 C   sx   t dddD ]f}tj||d  d }||}t|}t|}d||d df< tt|du  t	t
t|dd	 qd S r  r  r  r6   r6   r7   "test_is_valid_im_4_and_up_neg_dist  s    
z:TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_distN)re   rf   rg   r  r	  r  r
  r  r  r  r  r6   r6   r6   r7   r    s   	
r  c                   @   s@   e Zd Zedddd Zdd Zdd Zeddd	d
 ZdS )TestNumObsLinkageTr,   c                 C   s    |j d|jd}ttt| d S Nr   r   )r.   r   r0   r1   r   r   r6   r6   r7   test_num_obs_linkage_empty.  s    z,TestNumObsLinkage.test_num_obs_linkage_emptyc                 C   s(   |j g dg|jd}tt|d d S )Nr   r   rW   rF   r   r   r   r   r6   r6   r7   test_num_obs_linkage_1x44  s    z*TestNumObsLinkage.test_num_obs_linkage_1x4c                 C   s.   |j g dg dg|jd}tt|d d S )Nr   r   r   rj   r  r   r6   r6   r7   test_num_obs_linkage_2x49  s    
z*TestNumObsLinkage.test_num_obs_linkage_2x4c                 C   sN   t dddD ]<}tj||d  d }||}t|}tt|| qd S )Nr   r   rj   r(   rW   )r   rZ   r[   r\   rF   r   r   r   r   r6   r6   r7   test_num_obs_linkage_4_and_up?  s
    
z/TestNumObsLinkage.test_num_obs_linkage_4_and_upN)re   rf   rg   r*   r  r  r  r  r6   r6   r6   r7   r  ,  s   
r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestLeavesListc                 C   s8   |j g dg|jd}t| tt|ddgdd d S )Nr   r   r   r(   rX   r   rF   r   r   r   r   r   r6   r6   r7   test_leaves_list_1x4M  s    z#TestLeavesList.test_leaves_list_1x4c                 C   s>   |j g dg dg|jd}t| tt|g ddd d S )Nr   r   r   )r   r(   rW   rX   r   r  r   r6   r6   r7   test_leaves_list_2x4S  s    
z#TestLeavesList.test_leaves_list_2x4c                 C   s   dD ]}|  || qd S rl   )check_leaves_list_Qr?   r6   r6   r7   test_leaves_list_QZ  s    z!TestLeavesList.test_leaves_list_Qc                 C   s8   | tj}t||}t|}t| t|dd d S )NrX   r   )rF   r)   r   r   r   r   	pre_orderr   )r3   r@   r4   rS   rI   noder6   r6   r7   r  _  s    
z"TestLeavesList.check_leaves_list_Qc                 C   sH   | tj}t|d}t|}t| |  |   dd d S )Nr   rX   r   )	rF   r)   r   r   r   r   r  get_left	get_right)r3   r4   rS   rI   r   r6   r6   r7   test_Q_subtree_pre_orderf  s    

z'TestLeavesList.test_Q_subtree_pre_orderN)re   rf   rg   r  r  r  r  r#  r6   r6   r6   r7   r  J  s
   r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestCorrespondc                 C   s2   |j d|jd}|j d|jd}ttt|| d S )Nr9   r   r   )r.   r   r0   r1   r   )r3   r4   r5   rI   r6   r6   r7   test_correspond_emptys  s    z$TestCorrespond.test_correspond_emptyc                 C   s   t ddD ]<}tj||d  d }||}t|}tt|| q
t dddD ]<}tj||d  d }||}t|}tt|| qTd S )NrW   r   r(   r   rj   )r   rZ   r[   r\   rF   r   r   r   r   r6   r6   r7   test_correspond_2_and_upy  s    

z'TestCorrespond.test_correspond_2_and_upc                 C   s   t tt tddt tddt tt tddt tdd D ]x\}}tj||d  d }tj||d  d }||}||}t|}t|}t||rJ t||rDJ qDd S )NrW   r   rj   r   r(   	listzipr   rZ   r[   r\   rF   r   r   r3   r4   r   jr5   y2rI   Z2r6   r6   r7   test_correspond_4_and_up  s      

z'TestCorrespond.test_correspond_4_and_upc                 C   s   t tt tddt tddt tt tddt tdd D ]x\}}tj||d  d }tj||d  d }||}||}t|}t|}t||rJ t||rDJ qDd S )NrW   r         r(   r'  r*  r6   r6   r7   test_correspond_4_and_up_2  s      

z)TestCorrespond.test_correspond_4_and_up_2c                 C   sJ   t ddD ]:}tj|d}t|}||}t|}tt|| q
d S )NrW   r   r   )	r   rZ   r[   r\   r#   rF   r   r   r   )r3   r4   r_   rS   r   rI   r6   r6   r7   !test_num_obs_linkage_multi_matrix  s    
z0TestCorrespond.test_num_obs_linkage_multi_matrixN)re   rf   rg   r%  r&  r.  r1  r2  r6   r6   r6   r7   r$  p  s
   r$  c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )TestIsMonotonicc                 C   s    |j d|jd}ttt| d S r  )r.   r   r0   r1   r   r   r6   r6   r7   test_is_monotonic_empty  s    z'TestIsMonotonic.test_is_monotonic_emptyc                 C   s&   |j g dg|jd}t|s"J d S )Nr   r(   333333?rW   r   rF   r   r   r   r6   r6   r7   test_is_monotonic_1x4  s    z%TestIsMonotonic.test_is_monotonic_1x4c                 C   s,   |j g dg dg|jd}t|s(J d S )Nr5  )rW   rj   皙?rj   r   r7  r   r6   r6   r7   test_is_monotonic_2x4_T  s    
z'TestIsMonotonic.test_is_monotonic_2x4_Tc                 C   s,   |j g dg dg|jd}t|r(J d S )N)r   r(   r9  rW   )rW   rj   r6  rj   r   r7  r   r6   r6   r7   test_is_monotonic_2x4_F  s    
z'TestIsMonotonic.test_is_monotonic_2x4_Fc                 C   s2   |j g dg dg dg|jd}t|s.J d S )Nr5  rW   rj   r9  rW   r   r   g333333?r   r   r7  r   r6   r6   r7   test_is_monotonic_3x4_T  s    
z'TestIsMonotonic.test_is_monotonic_3x4_Tc                 C   s2   |j g dg dg dg|jd}t|r.J d S )Nr5  )rW   rj   皙?rW   r=  r   r7  r   r6   r6   r7   test_is_monotonic_3x4_F1  s    
z(TestIsMonotonic.test_is_monotonic_3x4_F1c                 C   s2   |j g dg dg dg|jd}t|r.J d S )N)r   r(   g?rW   r<  r=  r   r7  r   r6   r6   r7   test_is_monotonic_3x4_F2  s    
z(TestIsMonotonic.test_is_monotonic_3x4_F2c                 C   s2   |j g dg dg dg|jd}t|r.J d S )Nr5  r<  )r   r   r?  r   r   r7  r   r6   r6   r7   test_is_monotonic_3x4_F3  s    
z(TestIsMonotonic.test_is_monotonic_3x4_F3c                 C   s"   t |tjd}t|sJ d S Nr   r   rF   r)   rG   r   r   r6   r6   r7    test_is_monotonic_tdist_linkage1  s    z0TestIsMonotonic.test_is_monotonic_tdist_linkage1c                 C   s*   t |tjd}d|d< t|r&J d S )Nr   r   )rW   rW   rD  r   r6   r6   r7    test_is_monotonic_tdist_linkage2  s    z0TestIsMonotonic.test_is_monotonic_tdist_linkage2c                 C   s&   | tj}t|d}t|s"J d S rC  )rF   r)   r   r   r   )r3   r4   rS   rI   r6   r6   r7   test_is_monotonic_Q_linkage  s    
z+TestIsMonotonic.test_is_monotonic_Q_linkageN)re   rf   rg   r4  r8  r:  r;  r>  r@  rA  rB  rE  rF  rG  r6   r6   r6   r7   r3    s   r3  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestMaxDistsc                 C   s    |j d|jd}ttt| d S r  )r.   r   r0   r1   r   r   r6   r6   r7   test_maxdists_empty_linkage  s    z(TestMaxDists.test_maxdists_empty_linkagec                 C   s:   |j g dg|jd}t|}t||}t||dd d S )Nr   r(   r6  r   r   rX   rC   )rF   r   r   calculate_maximum_distancesr&   )r3   r4   rI   MD
expectedMDr6   r6   r7   !test_maxdists_one_cluster_linkage  s    
z.TestMaxDists.test_maxdists_one_cluster_linkagec                 C   s   dD ]}|  || qd S Nr   r;   rM   rK   rL   )check_maxdists_Q_linkager?   r6   r6   r7   test_maxdists_Q_linkage  s    z$TestMaxDists.test_maxdists_Q_linkagec                 C   s:   | tj}t||}t|}t||}t||dd d S )NrX   rC   )rF   r)   r   r   r   rK  r&   )r3   r@   r4   rS   rI   rL  rM  r6   r6   r7   rQ  
  s
    

z%TestMaxDists.check_maxdists_Q_linkageN)re   rf   rg   rI  rN  rR  rQ  r6   r6   r6   r7   rH    s   rH  c                   @   sR   e Zd Zedddd Zdd Zedddd Zeddd	d
 Zdd ZdS )TestMaxInconstsTr,   c                 C   s2   |j d|jd}|j d|jd}ttt|| d S r  )r.   r   r0   r1   r   r3   r4   rI   r  r6   r6   r7   test_maxinconsts_empty_linkage  s    z.TestMaxInconsts.test_maxinconsts_empty_linkagec                 C   s@   |j g dg|jd}tjdd}| |}ttt|| d S NrJ  r   rW   r   )rF   r   rZ   r[   r\   r0   r1   r   rT  r6   r6   r7   test_maxinconsts_difrow_linkage  s    
z/TestMaxInconsts.test_maxinconsts_difrow_linkagec                 C   sV   |j g dg|jd}|j g dg|jd}t||}t|||d}t||dd d S )NrJ  r   r   r   r   r6  r   rX   rC   )rF   r   r   !calculate_maximum_inconsistenciesr&   )r3   r4   rI   r  rL  rM  r6   r6   r7   $test_maxinconsts_one_cluster_linkage$  s
    
z4TestMaxInconsts.test_maxinconsts_one_cluster_linkagec                 C   s   dD ]}|  || qd S rO  )check_maxinconsts_Q_linkager?   r6   r6   r7   test_maxinconsts_Q_linkage-  s    z*TestMaxInconsts.test_maxinconsts_Q_linkagec                 C   sH   | tj}t||}t|}t||}t|||d}t||dd d S )Nr   rX   rC   )rF   r)   r   r   r   r   rY  r&   )r3   r@   r4   rS   rI   r  rL  rM  r6   r6   r7   r[  2  s    

z+TestMaxInconsts.check_maxinconsts_Q_linkageN)	re   rf   rg   r*   rU  rW  rZ  r\  r[  r6   r6   r6   r7   rS    s   


rS  c                   @   sz   e Zd Zdd Zdd Zedddd Zd	d
 Zdd Zdd Z	edddd Z
dd Zedddd Zdd ZdS )TestMaxRStatc                 C   s   dD ]}|  || qd S )N)gffffff
@ro   r   )check_maxRstat_invalid_indexr3   r4   r   r6   r6   r7   test_maxRstat_invalid_index>  s    z(TestMaxRStat.test_maxRstat_invalid_indexc                 C   s\   |j g dg|jd}|j g dg|jd}t|trHttt||| nttt||| d S )NrJ  r   rX  )rF   r   
isinstancer   r0   r1   r   r   r3   r   r4   rI   r  r6   r6   r7   r^  B  s
    
z)TestMaxRStat.check_maxRstat_invalid_indexTr,   c                 C   s   t dD ]}| || qd S Nr   )r   check_maxRstat_empty_linkager_  r6   r6   r7   test_maxRstat_empty_linkageK  s    z(TestMaxRStat.test_maxRstat_empty_linkagec                 C   s4   |j d|jd}|j d|jd}ttt||| d S r  )r.   r   r0   r1   r   rb  r6   r6   r7   rd  P  s    z)TestMaxRStat.check_maxRstat_empty_linkagec                 C   s   t dD ]}| || qd S rc  )r   check_maxRstat_difrow_linkager_  r6   r6   r7   test_maxRstat_difrow_linkageV  s    z)TestMaxRStat.test_maxRstat_difrow_linkagec                 C   sB   |j g dg|jd}tjdd}| |}ttt||| d S rV  )rF   r   rZ   r[   r\   r0   r1   r   rb  r6   r6   r7   rf  Z  s    
z*TestMaxRStat.check_maxRstat_difrow_linkagec                 C   s   t dD ]}| || qd S rc  )r   "check_maxRstat_one_cluster_linkager_  r6   r6   r7   !test_maxRstat_one_cluster_linkageb  s    z.TestMaxRStat.test_maxRstat_one_cluster_linkagec                 C   sX   |j g dg|jd}|j g dg|jd}t||d}t||d|}t||dd d S )NrJ  r   rX  r(   rX   rC   )rF   r   r   rY  r&   )r3   r   r4   rI   r  rL  rM  r6   r6   r7   rh  g  s
    z/TestMaxRStat.check_maxRstat_one_cluster_linkagec                 C   s*   dD ] }t dD ]}| ||| qqd S )NrP  r   )r   check_maxRstat_Q_linkage)r3   r4   r@   r   r6   r6   r7   test_maxRstat_Q_linkageo  s    z$TestMaxRStat.test_maxRstat_Q_linkagec           	      C   sJ   | tj}t||}t|}t||d}t||d|}t||dd d S )Nr(   rX   rC   )rF   r)   r   r   r   r   rY  r&   )	r3   r@   r   r4   rS   rI   r  rL  rM  r6   r6   r7   rj  u  s    
z%TestMaxRStat.check_maxRstat_Q_linkageN)re   rf   rg   r`  r^  r*   re  rd  rg  rf  ri  rh  rk  rj  r6   r6   r6   r7   r]  <  s   	


r]  c                   @   s   e Zd Zdd Zdd Zdd Zejje	 ddd	d
 Z
ejje	 dddd Zdd Zejje	 dddd Zdd Zdd Zdd ZdS )TestDendrogramc                 C   s8   t |tjd}t|dd}|d }t|g d d S )Nr   Tno_plotleavesrW   r   r(   r   rj   r   )r   rF   r)   rG   r   r   )r3   r4   rI   r  ro  r6   r6   r7   $test_dendrogram_single_linkage_tdist  s    z3TestDendrogram.test_dendrogram_single_linkage_tdistc                 C   s&   t |tjd}ttt|dd d S )Nr   Zfooorientation)r   rF   r)   rG   r0   r1   r   r   r6   r6   r7   test_valid_orientation  s    z%TestDendrogram.test_valid_orientationc                 C   sP   t |tjd}|g d}t||dd}t|t|dd}||ksLJ d S )Nr   )r(   rj   rW   r-   r   r   T)labelsrn  )r   rF   r)   rG   r   r(  )r3   r4   rI   ru  Zresult1Zresult2r6   r6   r7   test_labels_as_array_or_list  s
    z+TestDendrogram.test_labels_as_array_or_listzno matplotlib)reasonc                 C   s   | g dg dg dg}t  tt$}t|ttdd W d    n1 sX0    Y  dt	|j
v stJ tjtdd t|g d W d    n1 s0    Y  t  d S )N)r   r(   r   r   )rW   rj   r   r   )r   r   r   r-   d   )ru  z.Dimensions of Z and labels must be consistent.)match)rF   pltfigurepytestr   r1   r   r(  r   strvalueclose)r3   r4   linkexc_infor6   r6   r7   test_valid_label_size  s"    2*z$TestDendrogram.test_valid_label_sizec                 C   s   dD ]}|  || qd S )N)topbottomleftright)check_dendrogram_plot)r3   r4   rs  r6   r6   r7   test_dendrogram_plot  s    z#TestDendrogram.test_dendrogram_plotc           
      C   s  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 }|d}t|||d}t|d |d< t	|| t|||ddd |dv r|
 d n
| d }t	| d t	| d t|||dd |dv r |
 d n
| d }t	| d t|||dd |dv r`|
 d n
| d }t	| d t  t||d}	t  t|	d |	d< t	|	| d S )Nr   )C1C0r  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  )     F@r       K@r  )     A@r        I@r  )      9@r       @E@r  )      $@r       @@r  )251034rp  )r  r  r  r  r  r  
color_listdcoordZicoordZivlro  leaves_color_list   )axrs  r  rV   Z   )r  rs  leaf_font_sizeleaf_rotation)r  r  r   )r  rs  r  )r  rs  r  rr  )r   rF   r)   rG   rz  r{  Zadd_subplotr   rZ   r   Zget_xticklabelsZget_yticklabelsZget_rotationget_sizer  )
r3   rs  r4   rI   expectedZfigr  ZR1Z	testlabelZR2r6   r6   r7   r    sj    




z$TestDendrogram.check_dendrogram_plotc              	   C   s   t |tjd}t|dddd}t  t|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d}t  t|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   rW   ZlastpT)Zshow_contractedr  r  )r   r   r   r   r  (2)z(4)r-   r   r  Zmtica)r  r  r  r  r  )r   r   r   r   r  r  )r  r  r  r  )r  r        D@r  )r  r       @@@r  )r  r  r  r  r  )rW   r   r(   r   r   )r  r  r  r  r  )	r   rF   r)   rG   r   rz  r  rZ   r   rT  r6   r6   r7   test_dendrogram_truncate_mode  s:    
z,TestDendrogram.test_dendrogram_truncate_modec                 C   s\   t |tjd}tg d t|dddd}tg d |d }t|g d	 td  d S )
Nr   )r   mr5   r   Tg   )rn  Zabove_threshold_colorZcolor_threshold)r  rr   r  r5   r   r  )r   r  r  r  r  )r   rF   r)   rG   r   r   r   )r3   r4   rI   r  r  r6   r6   r7   test_dendrogram_colors  s    z%TestDendrogram.test_dendrogram_colorsc              	   C   sb   | g dg dg dg dg dg dg}t|d}t|dd}g d}|d	 }t|| d S )
Nr(   r   r   r   r   r(   r   rW   r   r   r(   r   r   Trm  r  r  r  r  C2r  r  rF   r   r   r   r3   r4   xzr`   Z
exp_colorscolorsr6   r6   r7   %test_dendrogram_leaf_colors_zero_dist  s    

z4TestDendrogram.test_dendrogram_leaf_colors_zero_distc              	   C   sb   | g dg dg dg dg dg dg}t|d}t|dd}g d	}|d
 }t|| d S )Nr  )r   r   g?r  r  r  r   Trm  r  r  r  r  r6   r6   r7   test_dendrogram_leaf_colors*  s    

z*TestDendrogram.test_dendrogram_leaf_colorsN)re   rf   rg   rq  rt  rv  r|  markZskipifhave_matplotlibr  r  r  r  r  r  r  r6   r6   r6   r7   rl    s   

>
rl  c                 C   s   | j d d }|j|d f| jd}|d}td|d D ]}d|d d < | |df }| |df }||kr||j||jd|  |d< ||kr||j||jd|  |d< | |df |d< ||||< q<|S Nr   r(   r   )rj   r   rW   )r   r.   r   r   rF   r   max)rI   r4   r_   Bqr   r  r  r6   r6   r7   rK  :  s    
rK  rj   c                 C   s   | j d d }|| |}|j|d f|d}|d}td|d D ]}d|d d < | |df }	| |df }
|	|kr||j|	|jd|  |d< |
|kr||j|
|jd|  |d< |||f |d< ||||< qF|S r  )r   Zresult_typer.   r   rF   r   r  )rI   r  r   r4   r_   r   r  r  r   r  r  r6   r6   r7   rY  L  s    
rY  c                 C   s"   t tt| ddgddgg d S )Nr   r(   )r   r   r   rF   r   r6   r6   r7   <test_unsupported_uncondensed_distance_matrix_linkage_warning_  s    r  c              	   C   s8   t jjjD ](}ttt| ddgddgg|dd q
d S )Nr(   Z	cityblockr@   rR   )rT   cluster	hierarchyZ_EUCLIDEAN_METHODSr0   r1   r   rF   )r4   r@   r6   r6   r7   "test_euclidean_linkage_value_errord  s    r  c                 C   sH   t | dgddd}t | ddgddggddd}t||dd d S )Nr(   r   rQ   r  r   rX   r   )r   rF   r&   )r4   ZZ1r-  r6   r6   r7   test_2x2_linkagej  s     r  c                 C   s   t jd d}t j|d}| |}tjj|}t	|}t
|| k t
| | k t
| | k t
| | k d S )N   2   r   )rZ   r[   seedrandnrF   rT   r  r  rM   r   r   r!  r"  )r4   r   rS   rI   treer6   r6   r7   test_node_compareq  s    
r  z%`cut_tree` uses non-standard indexingc                 C   s  t jd d}t j|d}| |}tjj|}t	|}t
|d d df | |ddd t
|d d df | |ddd tt |dt |d	 dd t
|d d d
gf t	|dddd t
|d d d
dgf t	|ddgddd t
|d d dd
gf t	|ddgddd t|}| dd |D }t
|d d t |dgf t	|dddd t
|d d t |ddgf t	|ddgddd t
|d d t |ddgf t	|ddgddd d S )Nr  r  r   r   rX   F)rY   Zcheck_dtypero   r(   r   )Z
n_clustersr   ir   c                 S   s   g | ]
}|j qS r6   )dist).0r   r6   r6   r7   
<listcomp>      z!test_cut_tree.<locals>.<listcomp>)height)rZ   r[   r  r  rF   rT   r  r  rM   r   r&   Zaranger.   r   r  r    Zsearchsorted)r4   r   rS   rI   ZcutreenodesZheightsr6   r6   r7   test_cut_tree  s.    
""$$**r  c                 C   sv   t t| tj| tj}tj}t|| |dd t t| tjd| tj}tj}t|| |dd d S )NrB   rC   rM   rP   )	r   r   rF   r)   rG   rc   r&   rS   Zlinkage_X_ward_olo)r4   rI   rJ   r6   r6   r7   rd     s    

rd   z"`Heap` only supports NumPy backendc                 C   s  |  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)rW   ro   r         rj   keyrj   r~  r  r(   ro   g      @rW   r   r   r   )rF   r$   Zget_minr   Z
remove_minZchange_value)r4   valuesheappairr6   r6   r7   	test_Heap  s.    r  )YnumpyrZ   Znumpy.testingr   r   r   r   r|  r   r0   Zscipy.cluster.hierarchyrT   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"   Zscipy.spatial.distancer#   Zscipy.cluster._hierarchyr$   Zscipy.conftestr%   Zscipy._lib._array_apir&   r'    r)   Z
matplotlibZuseZmatplotlib.pyplotZpyplotrz  r  	Exceptionr  ZusefixturesZ
pytestmarkr*   r+   rh   rr   ry   r   r   r   r   r   r  r  r  r$  r3  rH  rS  r]  rl  rK  rY  r  r  r  r  r  rd   r  r6   r6   r6   r7   <module>"   s   x

>"3YSL%<I)C ;




