a
    ‡ù»jÃ  ã                   @   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l3Z3e3 4d¡ 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   úHE:\soccer\ml_env\Lib\site-packages\scipy/cluster/tests/test_hierarchy.pyÚ3test_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çeÌvø @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 )Néÿÿÿÿr   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|r¤tj |¡}||d|…   d7  < ||d|…   |;  < | 
|¡}| 
|¡}t||ƒ| ksÌJ ‚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||ƒr®J ‚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||ƒr®J ‚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 s¤0    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�   iöÿÿÿr—   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 ;




