a
    hX=                     @   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sJ 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#   ]/var/www/html/assistant/venv/lib/python3.9/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sJ 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 )zCheck 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sJ 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sJ td| |d	d}|tj	}tt|td|v  }|tksJ 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+   gGz?)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
