o
    tBh}>                     @   s  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#e	jd*d+d,idd,igd-d. Z$d/d0 Z%d1d2 Z&d3d4 Z'e	jd+g d5d6d7 Z(d8d9 Z)d:d; Z*e	jd<d=d>ie+d?fd=d@ie+dAfdBdie+dCfdBdDie,dEfdBdFie+dGfdHdie+dIfdHdJie,dKfdHdLie+dMfdNdFie+dOfdPdJie,dQfg
dRdS Z-dS )Tz'
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|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%   x/var/www/html/riverr-enterprise-integrations-main/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_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   
lil_matrixr   r   )core_sparselabels_sparse
core_denselabels_denser%   r%   r&   test_dbscan_sparseJ   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_precomputedQ   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_epsa   s   rD   
use_sparser   r   	minkowskic                 C   sb   t jddd}| rt|n|}| }t||d | r*t|	 |	  d S t|| d S )Nr   r   )r   )
r   randomRandomStaterandr   
csr_matrixcopyr   r   toarray)rE   r   r   X_copyr%   r%   r&   test_dbscan_input_not_modifiedr   s   rN   c                  C   s   t jd} | dd}d||dk < |t|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   rG   rH   rI   r   rJ   r   r   r   components_emptyr9   r   core_sample_indices_)rngr   r;   r#   r%   r%   r&   test_dbscan_no_core_samples   s   rU   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   

rY   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)recordrF   prV   )r   metric_paramsr   r[   r   rX   r   )r   r   r   rX   r[   	manhattanrW   z\Parameter p is found in metric_params. The corresponding parameter from __init__ is ignored.match)warningscatch_warningsr   r   r   messagerS   r   r   pytestwarnsSyntaxWarning)r   r   r[   rd   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   	




	
rn   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          @rV   )r[   r   r   rX   kd_tree      ?   )	leaf_sizer   r   rX   )
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   
rw   c                  C   s    ddgddgg} t  |  d S )Nrq   ro   g      @g      @)r   r   )r   r%   r%   r&   test_input_validation
  s   rx   argsrX   blahc                 C   s@   t t ttfi |  W d    d S 1 sw   Y  d S N)rc   raises
ValueErrorr   r   )ry   r%   r%   r&   test_dbscan_badargs  s   	"r~   c                  C   s,   t  } t| }tt|| jksJ d S r{   )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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      rP   )r   r            ?)r   r   r   )r   r   r   g@皙?r   *   )axis)dtypeTr   )r   r   )rc   r|   r}   r   r   r   rG   rH   randintr   r9   r   repeatzerosboolr
   r   r   rS   r   fit_predict)rT   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_dbscan.  sj    $&"$ $$ 





r   )bruterp   rV   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   rP      r   r   )rX   r   r   )r   r   r   r   r   r   r   )r   r   r   )r   r   r   r   r   r   r         )r   r   r   r   arangefull)rX   r   	n_samplesr    r!   r%   r%   r&   test_dbscan_core_samples_toyr  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   sf   t g dg dg dg dg dg dg dg} t| }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   rJ   r   r   r   r   )armatrixr!   r%   r%   r&   5test_dbscan_precomputed_metric_with_initial_rows_zero  s   
r   zparams, err_type, err_msgr   r   zeps == -1.0, must be > 0.0.r   zeps == 0.0, must be > 0.0.r   zmin_samples == 0, must be >= 1.r   z2min_samples must be an instance of int, not float.z min_samples == -2, must be >= 1.rs   zleaf_size == 0, must be >= 1.g      @z0leaf_size must be an instance of int, not float.zleaf_size == -3, must be >= 1.r[   zp == -2, must be >= 0.0.n_jobsz-n_jobs must be an instance of int, not float.c                 C   sH   t j||d tdi | t W d   dS 1 sw   Y  dS )z,Check the parameters validation in `DBSCAN`.r^   Nr%   )rc   r|   r   r   r   )paramserr_typeerr_msgr%   r%   r&   test_dbscan_params_validation  s   "r   ).__doc__r   numpyr   r`   scipy.spatialr   scipyr   rc   sklearn.utils._testingr   sklearn.neighborsr   sklearn.clusterr   r   sklearn.cluster.tests.commonr	   sklearn.metrics.pairwiser
   r   r   r'   r+   r2   markparametrizer=   rD   rN   rU   rY   rn   rw   rx   r~   r   r   r   r   r   r   r}   	TypeErrorr   r%   r%   r%   r&   <module>   s    

='
D
