o
    ?HhX=                     @   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 r(dnd }|t	ks1J t
d| |d}||j}tt|td|v  }|t	ksPJ d S )Ng333333?
   precomputedmetricepsmin_samples   r   )r   
squareformpdistXnpmaxr   lensetr   r   fitlabels_int)r   r   Dcore_sampleslabelsn_clusters_1dbn_clusters_2 r%   a/home/air/sanwanet/gpt-api/venv/lib/python3.10/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s"J t|| |d}|tj}tt|td|v  }|tksAJ 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   
r2   include_selfFTc           	      C   s   t t}tddt}| rtnd }|j|dd}|j|jd |jd d  k s*J t|ddd	d
\}}t|ddd	d
\}}t|| t|| d S )Ng?radiusr   )r   moder   r   r(   r   r   )r   r   r   )	r   r   r   r   radius_neighbors_graphnnzshaper   r   )	r3   r   nnX_D_sparser.   r/   r0   r1   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皙?r4   r   )r6   r   r   r   gffffff?r   r   )r   r   r   r7   r   r   )	lower_epsr:   r<   dbscan_lower
higher_epsdbscan_higherr%   r%   r&   ,test_dbscan_sparse_precomputed_different_eps]   s   rD   r   r   	minkowskicsr_containerc                 C   sh   t jddd}|d ur||n|}| }t|| d |d ur-t| |  d S t|| d S )Nr   r   r   )r   randomRandomStaterandcopyr   r   toarray)r   rF   r   X_copyr%   r%   r&   test_dbscan_input_not_modifiedn   s   rN   c                 C   s   t jddd}t |d | |}tdd t|  D s#J | }t	|dd |j
|j
ks5J 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>   s    zKtest_dbscan_input_not_modified_precomputed_sparse_nodiag.<locals>.<genexpr>r   rG   N)r   rH   rI   rJ   fill_diagonalallzipnonzerorK   r   r8   r   rL   )rF   r   rM   r%   r%   r&   8test_dbscan_input_not_modified_precomputed_sparse_nodiag}   s   rX   c                 C   s   t jd}|dd}d||dk < || |fD ]&}tdd|}t|jt d|j	d f t|j
d |jj	d	ks>J qd S )
Nr   (   r   r(      )r   r   r   )r   )r   rH   rI   rJ   r   r   r   components_emptyr9   r   core_sample_indices_)rF   rngr   r;   r#   r%   r%   r&   test_dbscan_no_core_samples   s   r_   c                  C   s   d} d}t j}tt|| |dd\}}tt|td|v  }|tks$J t|| |dd}|	tj
}tt|td|v  }|tksDJ 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   

rc   c               	   C   s^  d} d}d}t jdd}tdd|i| d |dd	t}W d    n1 s&w   Y  |r4J |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 sw   Y  t|| t|| d S )Nr(   r   r   T)recordrE   pr`   )r   metric_paramsr   re   r   rb   r   )r   r   r   rb   re   	manhattanra   z\Parameter p is found in metric_params. The corresponding parameter from __init__ is ignored.)match)warningscatch_warningsr   r   r   messager]   r   r   pytestwarnsSyntaxWarning)r   r   re   rm   r#   core_sample_1labels_1core_sample_2labels_2core_sample_3labels_3core_sample_4labels_4r%   r%   r&   test_dbscan_metric_params   sf   	




	
rw   c                  C   sL  d} d}t t}t|d| |d\}}tt|td|v  }|tks$J td| |dd}|tj	}tt|td|v  }|tksDJ td| |d	d}|tj	}tt|td|v  }|tksdJ 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 d S )Nr(   r   r   r   r          @r`   )re   r   r   rb   kd_tree      ?   )	leaf_sizer   r   rb   )
r   r   r   r   r   r   r   r   r   r   )r   r   r   r    r!   r"   r#   r$   n_clusters_3n_clusters_4n_clusters_5r%   r%   r&   test_dbscan_balltree   s0   
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u sJ d S rO   )r   pickledumpstypeloads	__class__)objsr%   r%   r&   test_pickle#  s   
r   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 s(J t dgdgdggddd\} }d| vs=J d S )Nr   r      r-   gGz?)r   )core_r%   r%   r&   test_boundaries)  s   r   c                 C   s&  t t tdgdggdgd W d    n1 sw   Y  t t tdgdggg dd W d    n1 s<w   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   r   )sample_weight)r   r      rZ   )r   r      g      ?)r   r   r   )r   r   r   g@皙?r   )axis)dtypeTr   )r   r   )rl   raises
ValueErrorr   r   r   rH   rI   randintr   r9   r   repeatzerosboolr   r   r   r]   r   fit_predict)global_random_seedr^   r   core1label1
X_repeatedcore_repeatedlabel_repeatedcore_repeated_mask	core_maskr   core3label3estcore4label4label5core5r%   r%   r&   test_weighted_dbscan4  sj    $&"$ $$ 





r   rb   )brutery   r`   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   r   r   r   rZ      r   r   )rb   r   r   )r   r   r   r   r   r   r   )r   r   r   )r   r   r   r   r   r   r   g      )r   r   r   r   arangefull)rb   r   	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sJ t d} tddd| j}tt|dks2J 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   r   r   r   )r   r   r   r   r   r   333333?)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   arrayr   r   r   r   )rF   armatrixr!   r%   r%   r&   5test_dbscan_precomputed_metric_with_initial_rows_zero  s   r   ),__doc__r   ri   numpyr   rl   scipy.spatialr   sklearn.clusterr   r   sklearn.cluster.tests.commonr   sklearn.metrics.pairwiser   sklearn.neighborsr   sklearn.utils._testingr   sklearn.utils.fixesr	   r
   r   r   r'   r+   markparametrizer2   r=   rD   rN   rX   r_   rc   rw   r   r   r   r   r   r   r   r   r%   r%   r%   r&   <module>   sP    




='D
