U
    3d8                     @   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st
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#   E/tmp/pip-unpacked-wheel-zrfo1fqw/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st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st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sttd| |d	d}|	tj
}tt|td|k }|tkst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*   gGz?)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st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   Zeyer   r   r   r   r   r   rq   )r   r   r#   r#   r$   ;test_dbscan_precomputed_metric_with_degenerate_input_arrays  s    

rx   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   )arZmatrixr   r#   r#   r$   5test_dbscan_precomputed_metric_with_initial_rows_zero  s    
r{   )*__doc__r^   Z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   rx   r{   r#   r#   r#   r$   <module>   sF   

='D
