
    -iX=                        S r SSKrSSKrSSKrSSKrSSKJr  SSKJ	r	J
r
  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJrJr  S
r\" \S9rS rS r\R4                  R7                  S\5      S 5       r\R4                  R7                  SSS/5      S 5       rS r\R4                  R7                  SSS/5      \R4                  R7                  S\S/-   5      S 5       5       r\R4                  R7                  S\5      S 5       r \R4                  R7                  S\5      S 5       r!S r"S r#S r$S r%S  r&S! r'S" r(\R4                  R7                  S#/ S$Q5      S% 5       r)S& r*\R4                  R7                  S\5      S' 5       r+g)(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                     Sn Sn[         R                  " [         R                  " [        5      5      nU[        R
                  " U5      -  n[        USXS9u  p4[        [        U5      5      SU;   a  SOS-
  nU[        :X  d   e[        SXS9nUR                  U5      R                  n[        [        U5      5      [        SU;   5      -
  nU[        :X  d   eg )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_2s           T/var/www/html/venv/lib/python3.13/site-packages/sklearn/cluster/tests/test_dbscan.pytest_dbscan_similarityr(      s     CKHNN1-.ANA!	-SL s6{#B&Lqa@L:%%%	}#	GBVVAYFs6{#c",&77L:%%%    c                  @   Sn SnSn[        [        X US9u  p4[        [        U5      5      [	        SU;   5      -
  nU[
        :X  d   e[        X US9nUR                  [        5      R                  n[        [        U5      5      [	        SU;   5      -
  nU[
        :X  d   eg )N皙?r   	euclideanr   r   )	r   r   r   r   r    r   r   r   r   r   r   r   r"   r#   r$   r%   r&   s           r'   test_dbscan_featurer.   /   s     CKF "!FUL s6{#c",&77L:%%%	vK	@BVVAYFs6{#c",&77L:%%%r)   lil_containerc                     [        U " [        5      SSS9u  p[        [        SSS9u  p4[        X15        [        XB5        g )Nr+   r   r   r   )r   r   r	   )r/   core_sparselabels_sparse
core_denselabels_denses        r'   test_dbscan_sparser6   E   s9    !'a(8cr!RK%aSbAJz/|3r)   include_selfFTc                 `   [        [        5      n[        SS9R                  [        5      nU (       a  [        OS nUR	                  USS9nUR
                  UR                  S   UR                  S   S-
  -  :  d   e[        USSS	S
9u  pV[        USSS	S
9u  px[        Xu5        [        X5        g )Ng?radiusr   )r   moder   r   r+   r   r   )r   r   r   )	r   r   r   r   radius_neighbors_graphnnzshaper   r	   )	r7   r!   nnX_D_sparser2   r3   r4   r5   s	            r'   test_dbscan_sparse_precomputedrB   M   s    1A		%	)	)!	,BB((2J(?H<<!''!*
Q7777!'cr-"K  &aSbWJz/|3r)   c                  B   Sn [        U S9R                  [        5      nUR                  [        SS9n[	        X SS9nU S-   n[        US9R                  [        5      nUR                  [        SS9n[	        X SS9n[        US   US   5        [        US	   US	   5        g )
N皙?r9   r   )r;   r   r   r   gffffff?r   r   )r   r   r   r<   r   r	   )	lower_epsr?   rA   dbscan_lower
higher_epsdbscan_highers         r'   ,test_dbscan_sparse_precomputed_different_epsrJ   ]   s     I		+	/	/	2B(((<H(-HLSJ		,	0	0	3B(((<H8=IM|Aa(89|Aa(89r)   r   r   	minkowskicsr_containerc                    [         R                  R                  S5      R                  SS5      nUb  U" U5      OUnUR	                  5       n[        X S9  Ub)  [        UR                  5       UR                  5       5        g [        X#5        g )Nr   r   r   )r   randomRandomStaterandcopyr   r	   toarray)r   rL   r   X_copys       r'   test_dbscan_input_not_modifiedrU   n   sn     			a %%b"-A)5a1AVVXF
1 199;(891%r)   c                    [         R                  R                  S5      R                  SS5      n[         R                  " US5        U " U5      n[        S [        UR                  5       6  5       5      (       d   eUR                  5       n[        USS9  UR                  UR                  :X  d   e[        UR                  5       UR                  5       5        g)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              3   .   #    U  H  u  pX:g  v   M     g 7fN ).0rowcols      r'   	<genexpr>Ktest_dbscan_input_not_modified_precomputed_sparse_nodiag.<locals>.<genexpr>   s     <*;hcsz*;s   r   rN   N)r   rO   rP   rQ   fill_diagonalallzipnonzerorR   r   r=   r	   rS   )rL   r   rT   s      r'   8test_dbscan_input_not_modified_precomputed_sparse_nodiagrc   }   s     			a %%b"-A QaA<#qyy{*;<<<<<VVXF
1]# 55FJJqyy{FNN$45r)   c           	         [         R                  R                  S5      nUR                  SS5      nSX"S:  '   X " U5      4 H  n[	        SS9R                  U5      n[        UR                  [         R                  " SUR                  S   45      5        [        UR                  S5        UR                  R                  S	:X  a  M   e   g )
Nr   (   r   r+      )r   r   r   )r   )r   rO   rP   rQ   r   r   r	   components_emptyr>   r   core_sample_indices_)rL   rngr   r@   r%   s        r'   test_dbscan_no_core_samplesrk      s    
))


"CRAA#gJ-"#"&&r*2>>288Q4D+EF2::r*&&,,444	 $r)   c                  `   Sn Sn[         R                  n[        [        X USS9u  p4[	        [        U5      5      [        SU;   5      -
  nU[        :X  d   e[        X USS9nUR                  [        5      R                  n[	        [        U5      5      [        SU;   5      -
  nU[        :X  d   eg )Nr+   r   	ball_treer   r   r   	algorithmr   )r   r,   r   r   r   r   r    r   r   r   r   r-   s           r'   test_dbscan_callablerp      s     CKF "	&{kL
 s6{#c",&77L:%%%	vK;	WBVVAYFs6{#c",&77L:%%%r)   c            
      V   Sn SnSn[         R                  " SS9 n[        SSU0U S USS	9R                  [        5      nS S S 5        W(       a   US
   R
                  5       eWR                  UR                  pe[        SXSUS9R                  [        5      nUR                  UR                  p[        XW5        [        Xh5        [        SXSS9R                  [        5      nUR                  UR                  p[        XY5        [        Xj5        [        R                  " [        SS9   [        SSU0U US-   USS	9R                  [        5      nUR                  UR                  pS S S 5        [        UW5        [        UW5        g ! , (       d  f       GNP= f! , (       d  f       N9= f)Nr+   r   r   T)recordrK   prm   )r   metric_paramsr   rs   r   ro   r   )r   r   r   ro   rs   	manhattanrn   z\Parameter p is found in metric_params. The corresponding parameter from __init__ is ignored.)match)warningscatch_warningsr   r   r   messageri   r   r	   pytestwarnsSyntaxWarning)r   r   rs   r{   r%   core_sample_1labels_1core_sample_2labels_2core_sample_3labels_3core_sample_4labels_4s                r'   test_dbscan_metric_paramsr      s   
CK	A 
	 	 	-(#!
 #a& 	 
. &eAh&&&9 55rzz8 
WX
	c!f  !55rzz8}4x* 

	c!f  !55rzz8}4x*	
 (!e#!
 #a& 	 #%"9"92::x#
& }m4x*e 
.	-<
 
s   $F)>F
F
F(c                  j   Sn Sn[        [        5      n[        USXS9u  p4[        [	        U5      5      [        SU;   5      -
  nU[        :X  d   e[        SXSS9nUR                  [        5      R                  n[        [	        U5      5      [        SU;   5      -
  nU[        :X  d   e[        SXS	S9nUR                  [        5      R                  n[        [	        U5      5      [        SU;   5      -
  nU[        :X  d   e[        S
XSS9nUR                  [        5      R                  n[        [	        U5      5      [        SU;   5      -
  n	U	[        :X  d   e[        SXSS9nUR                  [        5      R                  n[        [	        U5      5      [        SU;   5      -
  n
U
[        :X  d   eg )Nr+   r   r   r   r          @rm   )rs   r   r   ro   kd_tree      ?   )	leaf_sizer   r   ro   )
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_5s              r'   test_dbscan_balltreer      s   
CK1A!	-SL
 s6{#c",&77L:%%%	#3;	OBVVAYFs6{#c",&77L:%%%	#39	MBVVAYFs6{#c",&77L:%%%	#3;	OBVVAYFs6{#c",&77L:%%%	"#+	VBVVAYFs6{#c",&77L:%%%r)   c                  F    SS/SS//n [        5       R                  U 5        g )Nr   r   g      @g      @)r   r   )r   s    r'   test_input_validationr     s!    
sc3Z A
HLLOr)   c                      [        5       n [        R                  " U 5      n[        [        R                  " U5      5      U R
                  L d   eg rX   )r   pickledumpstypeloads	__class__)objss     r'   test_pickler   #  s6    
(CSAQ CMM111r)   c                      [        S/S//SSS9u  pSU ;   d   e[        S/S/S//SSS9u  pSU ;   d   e[        S/S/S//SSS9u  pSU ;  d   eg )Nr   r      r1   gGz?)r   )core_s     r'   test_boundariesr   )  sv    qcA3ZQA6GD99qcA3_!;GD99qcA3_$A>GDD==r)   c           
         [         R                  " [        5         [        S/S//S/S9  S S S 5        [         R                  " [        5         [        S/S/// SQS9  S S S 5        [	        / [        S/S//S SS9S   5        [	        / [        S/S//SS/SS9S   5        [	        S/[        S/S//SS/SS9S   5        [	        SS/[        S/S//SS/SS9S   5        [	        SS/[        S/S//S	SS/SS
9S   5        [	        / [        S/S//SS/S	SS9S   5        [	        SS/[        S/S//SS/S	SS9S   5        [	        SS/[        S/S//SS/S	SS9S   5        [	        / [        S/S//SS/S	SS9S   5        [
        R                  R                  U 5      nUR                  SS[        R                  S   5      n[        [        US9u  p4[        U5      [        [        5      :X  d   e[
        R                  " [        USS9n[        U5      u  pg[
        R                  " UR                  S   [        S9nSX'   [
        R                  " [        R                  S   [        S9n	SX'   [	        [
        R                  " X5      U5        [        [        5      n
[        XSS9u  p[	        X;5        [	        XL5        [!        5       R#                  [        US9nUR$                  nUR&                  n[	        X>5        [	        XO5        [!        5       nUR)                  [        US9nUR$                  n[	        UU5        [	        UU5        [	        XMR&                  5        g ! , (       d  f       GN?= f! , (       d  f       GN= f)Nr   r   r   )sample_weight)r   r      rf   )r   r      g      ?)r   r   r   )r   r   r   g@皙?r   )axis)dtypeTr   )r   r   )rz   raises
ValueErrorr   r	   r   rO   rP   randintr   r>   r   repeatzerosboolr   r   r   ri   r   fit_predict)global_random_seedrj   r   core1label1
X_repeatedcore_repeatedlabel_repeatedcore_repeated_mask	core_maskr!   core3label3estcore4label4label5core5s                     r'   test_weighted_dbscanr   4  sS   	z	"aSz!- 
#	z	"aSz3 
# r6A3*DaPQRSTr6A3*QFPQRSTUVsFQC!:aVQRSTUVW	
AaSz!QQGJ
 	
AaSzs1a&aPQRS 
FQC!:aV!LQO 	
AaSz#sRSTUVW 	
AaSz!QSaPQRS 
FQC!:aW#1MaP
 ))

 2
3CKK1aggaj1M1M:MEv;#a&   1m!4J$*:$6!M*"2"21"5TB(,%40IIryy:<NO 	1A1-PMEu$v& (,,q,
6C$$E[[Fu$v&
(C__Qm_<F$$Eue$vv&v{{+ 
#	"	"	"s   M#M5#
M25
Nro   )bruter   rm   c                    S/S/S/S/S/S/S//n[        U5      n[        XSSS	9u  p4[        U[        R                  " U5      5        [        U/ S
Q5        [        XSSS	9u  p4[        U/ SQ5        [        U/ SQ5        [        XSSS	9u  p4[        US/5        [        U/ SQ5        [        XSSS	9u  p4[        U/ 5        [        U[        R
                  " US5      5        g )Nr   r   r   r   rf      r   r   )ro   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)ro   r   	n_samplesr"   r#   s        r'   test_dbscan_core_samples_toyr   x  s    
qcA3aS1#t,AAI "!aQOL|RYYy%9:v45 "!aQOL|Y/v89 "!aQOL|aS)v89 "!aQOL|R(vrwwy$78r)   c                  P   [         R                  " S5      n [        SSS9R                  U 5      R                  n[        [        U5      5      S:X  d   e[         R                  " S5      n [        SSS9R                  U 5      R                  n[        [        U5      5      S:X  d   eg )Nr   g      ?r   rE   r   )r   r   )r   eyer   r   r   r   r   r   )r   r#   s     r'   ;test_dbscan_precomputed_metric_with_degenerate_input_arraysr     s     	r
AM266q9AAFs6{q   
AM266q9AAFs6{q   r)   c           
          [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      nU " U5      n[        SSSS	9R                  U5      R                  n[        U/ S
Q5        g )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   rD   r   r   )r   r   r   )r   r   r   r   r   r   r   )r   arrayr   r   r   r	   )rL   armatrixr#   s       r'   5test_dbscan_precomputed_metric_with_initial_rows_zeror     sb     
///////	


B 2FMqAEEfMUUFv67r)   ),__doc__r   rw   numpyr   rz   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parametrizer6   rB   rJ   rU   rc   rk   rp   r   r   r   r   r   r   r   r   r   rY   r)   r'   <module>r      s       " * @ 7 . 5 >
z2&0&, .94 :4 %74 84:" M;#?@.D6*AB
& C A
& .96 :6* .9	5 :	5&2:+z$&N2A,H &GH9 I9:	! .98 :8r)   