U
    ½mœdæ8  ã                   @   sh  d Z ddlZddlZddlZddlmZ ddlmZ ddl	Z	ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ dZeed�Zdd„ Zdd„ Zdd„ Ze	j dddg¡dd„ ƒZdd„ Ze	j dddg¡e	j dddg¡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&e	j d0d1d2d3g¡d4d5„ ƒZ'd6d7„ Z(d8d9„ Z)dS ):z'
Tests for DBSCAN clustering algorithm
é    N)Údistance)Úsparse)Úassert_array_equal)ÚNearestNeighbors)ÚDBSCAN)Údbscan)Úgenerate_clustered_data)Úpairwise_distancesé   )Ú
n_clustersc                  C   s¤   d} d}t  t  t¡¡}|t |¡ }t|d| |d�\}}tt|ƒƒd|krPdnd }|t	ksbt
‚td| |d�}| |¡j}tt|ƒƒtd|kƒ }|t	ks t
‚d S )Ng333333Ã?é
   Úprecomputed©ÚmetricÚepsÚmin_sampleséÿÿÿÿé   r   )r   Z
squareformZpdistÚXÚnpÚmaxr   ÚlenÚsetr   ÚAssertionErrorr   ÚfitÚlabels_Úint)r   r   ÚDÚcore_samplesÚlabelsÚn_clusters_1ÚdbÚn_clusters_2© r#   úZ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/cluster/tests/test_dbscan.pyÚtest_dbscan_similarity   s        ÿ
r%   c                  C   s†   d} d}d}t t|| |d�\}}tt|ƒƒtd|kƒ }|tksDt‚t|| |d�}| t¡j	}tt|ƒƒtd|kƒ }|tks‚t‚d S )Nçš™™™™™é?r   Ú	euclideanr   r   )
r   r   r   r   r   r   r   r   r   r   ©r   r   r   r   r   r    r!   r"   r#   r#   r$   Útest_dbscan_feature4   s    r)   c                  C   sB   t t t¡ddd�\} }t tddd�\}}t|| ƒ t||ƒ d S )Nr&   r   ©r   r   )r   r   Z
lil_matrixr   r   )Úcore_sparseÚlabels_sparseÚ
core_denseÚlabels_denser#   r#   r$   Útest_dbscan_sparseJ   s    
r/   Úinclude_selfFTc           	      C   s”   t tƒ}tdd� t¡}| r tnd }|j|dd�}|j|jd |jd d  k sTt‚t|ddd	d
�\}}t|ddd	d
�\}}t	||ƒ t	||ƒ d S )NgÍÌÌÌÌÌì?©Zradiusr   )r   Úmoder   r   r&   r   r   )r   r   r   )
r	   r   r   r   Úradius_neighbors_graphZnnzÚshaper   r   r   )	r0   r   ÚnnÚX_ÚD_sparser+   r,   r-   r.   r#   r#   r$   Útest_dbscan_sparse_precomputedQ   s    "   ÿ

r8   c                  C   sŒ   d} t | d� t¡}|jtdd�}t|| dd�}| d }t |d� t¡}|jtdd�}t|| dd�}t|d |d ƒ t|d	 |d	 ƒ d S )
Nçš™™™™™É?r1   r   )r2   r   ©r   r   gffffffæ?r   r   )r   r   r   r3   r   r   )Z	lower_epsr5   r7   Zdbscan_lowerZ
higher_epsZdbscan_higherr#   r#   r$   Ú,test_dbscan_sparse_precomputed_different_epsa   s    r;   Ú
use_sparser   r   Ú	minkowskic                 C   s`   t j d¡ dd¡}| r"t |¡n|}| ¡ }t||d� | rRt| 	¡ | 	¡ ƒ n
t||ƒ d S )Nr   r   )r   )
r   ÚrandomÚRandomStateÚrandr   Ú
csr_matrixÚcopyr   r   Ztoarray)r<   r   r   ZX_copyr#   r#   r$   Útest_dbscan_input_not_modifiedr   s    rC   c                  C   s„   t j d¡} |  dd¡}d||dk < |t |¡fD ]L}tdd� |¡}t|j	t  
d|jd f¡ƒ t|jdƒ |jjd	ks2t‚q2d S )
Nr   é(   r   r&   é   )r   r   r   )r   )r   r>   r?   r@   r   rA   r   r   r   Zcomponents_Úemptyr4   r   Úcore_sample_indices_r   )Úrngr   r6   r!   r#   r#   r$   Útest_dbscan_no_core_samples�   s    rI   c                  C   sŒ   d} d}t j}tt|| |dd�\}}tt|ƒƒtd|kƒ }|tksHt‚t	|| |dd�}| 
t¡j}tt|ƒƒtd|kƒ }|tksˆt‚d S )Nr&   r   Ú	ball_tree©r   r   r   Ú	algorithmr   )r   r'   r   r   r   r   r   r   r   r   r   r   r(   r#   r#   r$   Útest_dbscan_callable�   s         ÿ
rM   c               	   C   s6  d} d}d}t jdd��$}tdd|i| d |dd	� t¡}W 5 Q R X |rTt|d
 jƒ‚|j|j }}td| |d|d� t¡}|j|j }}t	||ƒ t	||ƒ td| |dd� t¡}|j|j }	}
t	||	ƒ t	||
ƒ t
jtdd��6 tdd|i| |d |dd	� t¡}|j|j }}W 5 Q R X t	||ƒ t	||ƒ d S )Nr&   r   r   T)Úrecordr=   ÚprJ   )r   Zmetric_paramsr   rO   r   rL   r   )r   r   r   rL   rO   Z	manhattanrK   z\Parameter p is found in metric_params. The corresponding parameter from __init__ is ignored.)Úmatch)ÚwarningsÚcatch_warningsr   r   r   r   ÚmessagerG   r   r   ÚpytestÚwarnsÚSyntaxWarning)r   r   rO   rU   r!   Zcore_sample_1Zlabels_1Zcore_sample_2Zlabels_2Zcore_sample_3Zlabels_3Zcore_sample_4Zlabels_4r#   r#   r$   Útest_dbscan_metric_params¦   sp    úù    ÿþ

   ÿþ

ý	úù
rW   c                  C   sP  d} d}t tƒ}t|d| |d�\}}tt|ƒƒtd|kƒ }|tksHt‚td| |dd�}| 	t¡j
}tt|ƒƒtd|kƒ }|tksˆt‚td| |d	d�}| 	t¡j
}tt|ƒƒtd|kƒ }|tksÈt‚td
| |dd�}| 	t¡j
}tt|ƒƒtd|kƒ }	|	tk�s
t‚td| |dd�}| 	t¡j
}tt|ƒƒtd|kƒ }
|
tk�sLt‚d S )Nr&   r   r   r   r   ç       @rJ   )rO   r   r   rL   Úkd_treeç      ð?é   )Z	leaf_sizer   r   rL   )r	   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r    r!   r"   Zn_clusters_3Zn_clusters_4Zn_clusters_5r#   r#   r$   Útest_dbscan_balltreeã   s6       ÿ
r\   c                  C   s    ddgddgg} t ƒ  | ¡ d S )NrZ   rX   g      @g      @)r   r   )r   r#   r#   r$   Útest_input_validation
  s    r]   c                  C   s,   t ƒ } t | ¡}tt |¡ƒ| jks(t‚d S )N)r   ÚpickleÚdumpsÚtypeÚloadsÚ	__class__r   )ÚobjÚsr#   r#   r$   Útest_pickle  s    
re   c                  C   s~   t dgdggddd�\} }d| ks&t‚t dgdgdggddd�\} }d| ksPt‚t dgdgdggddd�\} }d| kszt‚d S )Nr   r   é   r*   g®Gáz®ï?)r   r   )ÚcoreÚ_r#   r#   r$   Útest_boundaries  s    ri   c              	   C   s   t  t¡� tdgdggdgd� W 5 Q R X t  t¡�  tdgdggdddgd� W 5 Q R X tg tdgdggd dd�d ƒ tg tdgdggd	d	gdd�d ƒ tdgtdgdggdd	gdd�d ƒ tddgtdgdggddgdd�d ƒ tddgtdgdggd
d	dgdd�d ƒ tg tdgdggd	dgd
dd�d ƒ tddgtdgdggddgd
dd�d ƒ tddgtdgdggddgd
dd�d ƒ tg tdgdggddgd
dd�d ƒ tj | ¡}| dd	t	j
d ¡}tt	|d�\}}t|ƒtt	ƒk�sþt‚tjt	|dd�}t|ƒ\}}tj|j
d td�}d||< tjt	j
d td�}	d|	|< tt |	|¡|ƒ tt	ƒ}
t|
|dd�\}}t||ƒ t||ƒ tƒ jt	|d�}|j}|j}t||ƒ t||ƒ tƒ }|jt	|d�}|j}t||ƒ t||ƒ t||jƒ d S )Nr   r   rf   )Úsample_weightr
   é   rE   )rj   r   é   g      ø?)r   rj   r   )rj   r   r   gš™™™™™@çš™™™™™¹?r   )Zaxis)ZdtypeTr   )rj   r   )rT   ZraisesÚ
ValueErrorr   r   r   r>   r?   Úrandintr   r4   r   r   ÚrepeatÚzerosÚboolr	   r   r   rG   r   Zfit_predict)Zglobal_random_seedrH   rj   Zcore1Úlabel1Z
X_repeatedZcore_repeatedZlabel_repeatedZcore_repeated_maskZ	core_maskr   Zcore3Zlabel3ZestZcore4Zlabel4Zlabel5Zcore5r#   r#   r$   Útest_weighted_dbscan!  sr     $ $& ÿ ÿ ÿ ÿ ÿ ÿ





rt   rL   ZbruterY   rJ   c              	   C   s  dgdgdgdgdgdgdgg}t |ƒ}t|| ddd	�\}}t|t |¡ƒ t|dddddddgƒ t|| ddd	�\}}t|dddgƒ t|d
dddd
d
d
gƒ t|| ddd	�\}}t|dgƒ t|d
dddd
d
d
gƒ t|| ddd	�\}}t|g ƒ t|t |d¡ƒ d S )Nr   rf   r
   rk   rE   é   r   r   )rL   r   r   r   g      ð¿)r   r   r   r   ZarangeÚfull)rL   r   Z	n_samplesr   r   r#   r#   r$   Útest_dbscan_core_samples_toye  s     
rw   c                  C   sh   t  d¡} tddd� | ¡j}tt|ƒƒdks2t‚t  d¡} tddd� | ¡j}tt|ƒƒdksdt‚d S )Nr   g      à?r   r:   r   )r   r   )	r   Úeyer   r   r   r   r   r   rq   )r   r   r#   r#   r$   Ú;test_dbscan_precomputed_metric_with_degenerate_input_arraysƒ  s    

ry   c                  C   s¶   t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg¡} t | ¡}tdddd� |¡j}t|ddd	d	d	d
d
gƒ d S )Ng        rm   g333333Ó?r9   r   rf   )r   r   r   r   r   r   )r   Úarrayr   rA   r   r   r   r   )ÚarÚmatrixr   r#   r#   r$   Ú5test_dbscan_precomputed_metric_with_initial_rows_zero�  s    ùÿ
r}   )*Ú__doc__r^   Únumpyr   rQ   Zscipy.spatialr   Zscipyr   rT   Zsklearn.utils._testingr   Zsklearn.neighborsr   Zsklearn.clusterr   r   Zsklearn.cluster.tests.commonr   Zsklearn.metrics.pairwiser	   r   r   r%   r)   r/   ÚmarkZparametrizer8   r;   rC   rI   rM   rW   r\   r]   re   ri   rt   rw   ry   r}   r#   r#   r#   r$   Ú<module>   sF   

='D
