o
    iX=                     @   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   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#   p/var/www/html/eduruby.in/lip-sync/lip-sync-env/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   
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 s*J 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   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   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 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   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   rO   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   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   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)recordr>   prV   )r   Zmetric_paramsr   r[   r   rX   r   )r   r   r   rX   r[   Z	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[   ra   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   sf   	




	
rc   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      ?   )Z	leaf_sizer   r   rX   )
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   
rh   c                  C   s    ddgddgg} t  |  d S )Nrf   rd   g      @g      @)r   r   )r   r#   r#   r$   test_input_validation  s   ri   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   
rq   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   ru   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   rr   )sample_weight)rr   r      rQ   )rv   r      g      ?)r   rv   r   )rv   r   r   g@皙?r   )Zaxis)ZdtypeTr   )rv   r   )r`   Zraises
ValueErrorr   r   r   rA   rB   randintr   r6   r   repeatzerosboolr   r   r   rS   r   Zfit_predict)Zglobal_random_seedrT   rv   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  sj    $&"$ $$ 





r   rX   )Zbrutere   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   rr   r   rw   rQ      r   r   )rX   r   r   )r   r   r   r   rr   r   rw   )r   rr   r   )r   r   r   r   r   r   r   g      )r   r   r   r   Zarangefull)rX   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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   ry   r   r   )r   r   ry   ry   r   r   333333?)r   r   r   r   r   r   ry   )r   r   r   r   r   ry   r   r;   r   rr   )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__rj   r]   numpyr   r`   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   rO   rU   rY   rc   rh   ri   rq   ru   r   r   r   r   r#   r#   r#   r$   <module>   sP    




='D
