a
    �ù»j
?  ã                   @   s¤  d Z ddlZddlZddlZddlZddlmZ ddlm	Z	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mZ d
Zeed�Zdd„ Zdd„ Zej de¡dd„ ƒZej dddg¡dd„ ƒZdd„ Zej dddg¡ej dedg ¡dd„ ƒƒZej de¡d d!„ ƒZ ej de¡d"d#„ ƒZ!d$d%„ Z"d&d'„ Z#d(d)„ Z$d*d+„ Z%d,d-„ Z&d.d/„ Z'd0d1„ Z(ej d2g d3¢¡d4d5„ ƒZ)d6d7„ Z*ej de¡d8d9„ ƒZ+dS ):z'
Tests for DBSCAN clustering algorithm
é    N)Údistance)ÚDBSCANÚdbscan)Úgenerate_clustered_data)Úpairwise_distances)ÚNearestNeighbors)Úassert_array_equal)ÚCSR_CONTAINERSÚLIL_CONTAINERSé   )Ú
n_clustersc                  C   s¤   d} d}t  t  t¡¡}|t |¡ }t|d| |d�\}}tt|ƒƒd|v rPdnd }|t	ksbJ ‚t
d| |d�}| |¡j}tt|ƒƒtd|v ƒ }|t	ks J ‚d S )Ng333333Ã?é
   Úprecomputed©ÚmetricÚepsÚmin_sampleséÿÿÿÿé   r   )r   Z
squareformZpdistÚXÚnpÚmaxr   ÚlenÚsetr   r   ÚfitÚlabels_Úint)r   r   ÚDÚcore_samplesÚlabelsÚn_clusters_1ÚdbÚn_clusters_2© r#   úGE:\soccer\ml_env\Lib\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|v ƒ }|tksDJ ‚t|| |d�}| t¡j}tt|ƒƒtd|v ƒ }|tks‚J ‚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$   Útest_dbscan_feature/   s    r)   Úlil_containerc                 C   s@   t | tƒddd�\}}t tddd�\}}t||ƒ t||ƒ d S )Nr&   r   ©r   r   )r   r   r   )r*   Úcore_sparseÚlabels_sparseÚ
core_denseÚlabels_denser#   r#   r$   Útest_dbscan_sparseE   s    
r0   Úinclude_selfFTc           	      C   s”   t tƒ}tdd� t¡}| r tnd }|j|dd�}|j|jd |jd d  k sTJ ‚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_graphÚnnzÚshaper   r   )	r1   r   ÚnnÚX_ÚD_sparser,   r-   r.   r/   r#   r#   r$   Útest_dbscan_sparse_precomputedM   s    "ÿ

r:   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çš™™™™™É?r2   r   )r3   r   ©r   r   gffffffæ?r   r   )r   r   r   r4   r   r   )Z	lower_epsr7   r9   Zdbscan_lowerZ
higher_epsZdbscan_higherr#   r#   r$   Ú,test_dbscan_sparse_precomputed_different_eps]   s    r=   r   r   Ú	minkowskiÚcsr_containerc                 C   sf   t j d¡ dd¡}|d ur$||ƒn|}| ¡ }t|| d� |d urXt| ¡ | ¡ ƒ n
t||ƒ d S )Nr   r   ©r   )r   ÚrandomÚRandomStateÚrandÚcopyr   r   Útoarray)r   r?   r   ÚX_copyr#   r#   r$   Útest_dbscan_input_not_modifiedn   s    rG   c                 C   s€   t j d¡ dd¡}t  |d¡ | |ƒ}tdd„ t| ¡ Ž D ƒƒsFJ ‚| ¡ }t	|dd� |j
|j
ksjJ ‚t| ¡ | ¡ ƒ dS )z¤Check that we don't modify in-place the pre-computed sparse matrix.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/27508
    r   r   c                 s   s   | ]\}}||kV  qd S ©Nr#   )Ú.0ÚrowÚcolr#   r#   r$   Ú	<genexpr>Š   ó    zKtest_dbscan_input_not_modified_precomputed_sparse_nodiag.<locals>.<genexpr>r   r@   N)r   rA   rB   rC   Zfill_diagonalÚallÚzipZnonzerorD   r   r5   r   rE   )r?   r   rF   r#   r#   r$   Ú8test_dbscan_input_not_modified_precomputed_sparse_nodiag}   s    rP   c                 C   s‚   t j d¡}| dd¡}d||dk < || |ƒfD ]L}tdd� |¡}t|jt  d|j	d f¡ƒ t|j
dƒ |jj	d	ks0J ‚q0d S )
Nr   é(   r   r&   é   )r   r   r   )r   )r   rA   rB   rC   r   r   r   Zcomponents_Úemptyr6   r   Úcore_sample_indices_)r?   Úrngr   r8   r!   r#   r#   r$   Útest_dbscan_no_core_samples“   s    rV   c                  C   sŒ   d} d}t j}tt|| |dd�\}}tt|ƒƒtd|v ƒ }|tksHJ ‚t|| |dd�}| 	t¡j
}tt|ƒƒtd|v ƒ }|tksˆJ ‚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$   Útest_dbscan_callable    s    
ÿ
rZ   c               	   C   s`  d} d}d}t jdd��.}tdd|i| d |dd	� t¡}W d   ƒ n1 sL0    Y  |rhJ |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��@ tdd|i| |d |dd	� t¡}|j|j }}W d   ƒ n1 �s>0    Y  t||ƒ t||ƒ d S )Nr&   r   r   T)Úrecordr>   ÚprW   )r   Zmetric_paramsr   r\   r   rY   r   )r   r   r   rY   r\   Z	manhattanrX   z\Parameter p is found in metric_params. The corresponding parameter from __init__ is ignored.)Úmatch)ÚwarningsÚcatch_warningsr   r   r   ÚmessagerT   r   r   ÚpytestÚwarnsÚSyntaxWarning)r   r   r\   rb   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¹   sb    úù"
ÿþ

ÿþ

ý	úù.
rd   c                  C   sP  d} d}t tƒ}t|d| |d�\}}tt|ƒƒtd|v ƒ }|tksHJ ‚td| |dd�}| t¡j	}tt|ƒƒtd|v ƒ }|tksˆJ ‚td| |d	d�}| t¡j	}tt|ƒƒtd|v ƒ }|tksÈJ ‚td
| |dd�}| t¡j	}tt|ƒƒtd|v ƒ }	|	tk�s
J ‚td| |dd�}| t¡j	}tt|ƒƒtd|v ƒ }
|
tk�sLJ ‚d S )Nr&   r   r   r   r   ç       @rW   )r\   r   r   rY   Úkd_treeç      ð?é   )Z	leaf_sizer   r   rY   )
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ö   s0    ÿ
ri   c                  C   s    ddgddgg} t ƒ  | ¡ d S )Nrg   re   g      @g      @)r   r   )r   r#   r#   r$   Útest_input_validation  s    rj   c                  C   s,   t ƒ } t | ¡}tt |¡ƒ| ju s(J ‚d S rH   )r   ÚpickleÚdumpsÚtypeÚloadsÚ	__class__)ÚobjÚsr#   r#   r$   Útest_pickle#  s    
rr   c                  C   s~   t dgdggddd�\} }d| v s&J ‚t dgdgdggddd�\} }d| v sPJ ‚t dgdgdggddd�\} }d| vszJ ‚d S )Nr   r   é   r+   g®Gáz®ï?)r   )ÚcoreÚ_r#   r#   r$   Útest_boundaries)  s    rv   c                 C   s&  t  t¡�& tdgdggdgd� W d   ƒ n1 s60    Y  t  t¡�( tdgdggg d¢d� W d   ƒ n1 sx0    Y  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$J ‚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   rs   )Úsample_weight)rs   r   é   rR   )rw   r   é   g      ø?)r   rw   r   )rw   r   r   gš™™™™™@çš™™™™™¹?r   )Zaxis)ZdtypeTr   )rw   r   )ra   ZraisesÚ
ValueErrorr   r   r   rA   rB   Úrandintr   r6   r   ÚrepeatÚzerosÚboolr   r   r   rT   r   Zfit_predict)Zglobal_random_seedrU   rw   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_dbscan4  sf    46 $&"ÿ$ÿ ÿ$ÿ$ÿ ÿ





r�   rY   )Zbruterf   rW   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|g d
¢ƒ t|| ddd	�\}}t|g d¢ƒ t|g d¢ƒ t|| ddd	�\}}t|dgƒ t|g d¢ƒ t|| ddd	�\}}t|g ƒ t|t |d¡ƒ d S )Nr   rs   r   rx   rR   é   r   r   )rY   r   r   )r   r   r   r   rs   r   rx   )r   rs   r   )r   r   r   r   r   r   r   g      ð¿)r   r   r   r   ZarangeÚfull)rY   r   Z	n_samplesr   r   r#   r#   r$   Útest_dbscan_core_samples_toyx  s     
r„   c                  C   sh   t  d¡} tddd� | ¡j}tt|ƒƒdks2J ‚t  d¡} tddd� | ¡j}tt|ƒƒdksdJ ‚d S )Nr   g      à?r   r<   r   )r   r   )r   Úeyer   r   r   r   r   r~   )r   r   r#   r#   r$   Ú;test_dbscan_precomputed_metric_with_degenerate_input_arrays–  s    

r†   c              
   C   sd   t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g¡}| |ƒ}tdddd	� |¡j}t|g d
¢ƒ d S )N)ç        r‡   r‡   r‡   r‡   r‡   r‡   )r‡   r‡   r‡   r‡   rz   r‡   r‡   )r‡   r‡   rz   rz   r‡   r‡   ç333333Ó?)r‡   r‡   r‡   r‡   r‡   r‡   rz   )r‡   r‡   r‡   r‡   rˆ   rz   r‡   r;   r   rs   )r   r   r   )r   r   r   r   r   r   r   )r   Úarrayr   r   r   r   )r?   ÚarÚmatrixr   r#   r#   r$   Ú5test_dbscan_precomputed_metric_with_initial_rows_zero¢  s    ùÿrŒ   ),Ú__doc__rk   r^   Únumpyr   ra   Zscipy.spatialr   Zsklearn.clusterr   r   Zsklearn.cluster.tests.commonr   Zsklearn.metrics.pairwiser   Zsklearn.neighborsr   Zsklearn.utils._testingr   Zsklearn.utils.fixesr	   r
   r   r   r%   r)   ÚmarkZparametrizer0   r:   r=   rG   rP   rV   rZ   rd   ri   rj   rr   rv   r�   r„   r†   rŒ   r#   r#   r#   r$   Ú<module>   sN   




='D
