
    0PhX=                     2   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          Zd Zd Zej                            de          d             Zej                            dddg          d             Zd Zej                            dddg          ej                            dedgz             d                         Zej                            de          d             Z ej                            de          d             Z!d Z"d Z#d Z$d Z%d  Z&d! Z'd" Z(ej                            d#g d$          d%             Z)d& Z*ej                            de          d'             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                     d} d}t          j        t          j        t                              }|t	          j        |          z  }t          |d| |          \  }}t          t          |                    d|v rdndz
  }|t          k    sJ t          d| |          }|                    |          j        }t          t          |                    t          d|v           z
  }|t          k    sJ 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_2s           a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/cluster/tests/test_dbscan.pytest_dbscan_similarityr(      s     CKHN1--..ANA!	-Sk  L& s6{{##B&LLqqa@L:%%%%	}#;	G	G	GBVVAYYFs6{{##c",&7&77L:%%%%%%    c                     d} d}d}t          t          || |          \  }}t          t          |                    t	          d|v           z
  }|t
          k    sJ t          || |          }|                    t                    j        }t          t          |                    t	          d|v           z
  }|t
          k    sJ d S )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UUL& s6{{##c",&7&77L:%%%%	v3K	@	@	@BVVAYYFs6{{##c",&7&77L:%%%%%%r)   lil_containerc                     t           | t                    dd          \  }}t          t          dd          \  }}t          ||           t          ||           d S )Nr+   r   r   r   )r   r   r	   )r/   core_sparselabels_sparse
core_denselabels_denses        r'   test_dbscan_sparser6   E   sd    !'a(8(8cr!R!R!RK%aSbAAAJz;///|]33333r)   include_selfFTc                    t          t                    }t          d                              t                    }| rt          nd }|                    |d          }|j        |j        d         |j        d         dz
  z  k     sJ t          |ddd	
          \  }}t          |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	   )	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7!'cr-" " "K  &aSbWWWJz;///|]33333r)   c                     d} t          |                               t                    }|                    t          d          }t	          || d          }| dz   }t          |                              t                    }|                    t          d          }t	          || d          }t          |d         |d                    t          |d	         |d	                    d S )
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		+	+	+	/	/	2	2B(((<<H(	-HHHLSJ		,	,	,	0	0	3	3B(((<<H8=IIIM|Aa(8999|Aa(899999r)   r   r   	minkowskicsr_containerc                 d   t           j                            d                              dd          }| ||          n|}|                                }t          ||            |6t          |                                |                                           d S t          ||           d S )Nr   r   r   )r   randomRandomStaterandcopyr   r	   toarray)r   rL   r   X_copys       r'   test_dbscan_input_not_modifiedrU   n   s     		a  %%b"--A)5a1AVVXXF
1V 199;;(8(8999991f%%%%%r)   c                    t           j                            d                              dd          }t          j        |d            | |          }t          d t          |                                 D                       sJ |                                }t          |d           |j
        |j
        k    sJ 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              3   (   K   | ]\  }}||k    V  d S N ).0rowcols      r'   	<genexpr>zKtest_dbscan_input_not_modified_precomputed_sparse_nodiag.<locals>.<genexpr>   s*      <<hc3scz<<<<<<r)   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_nodiagrb   }   s     		a  %%b"--A QaA<<#qyy{{*;<<<<<<<<VVXXF
1]#### 5FJqyy{{FNN$4$455555r)   c           	         t           j                            d          }|                    dd          }d||dk     <   | | |          fD ]}t	          d                              |          }t          |j        t          j        d|j	        d         f                     t          |j
        d           |j        j	        d	k    sJ d S )
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_samplesrj      s    
)


"
"CRAAa#gJ--""# 5 5"""&&r**2>28Q4D+E+EFFF2:r***&,44444	5 5r)   c                     d} d}t           j        }t          t          || |d          \  }}t	          t          |                    t          d|v           z
  }|t          k    sJ t          || |d          }|	                    t                    j
        }t	          t          |                    t          d|v           z
  }|t          k    sJ d S )Nr+   r   	ball_treer   r   r   	algorithmr   )r   r,   r   r   r   r   r    r   r   r   r   r-   s           r'   test_dbscan_callablero      s     CKF "	&c{k  L&
 s6{{##c",&7&77L:%%%%	v3K;	W	W	WBVVAYYFs6{{##c",&7&77L:%%%%%%r)   c            	         d} d}d}t          j        d          5 }t          dd|i| d |d	                              t                    }d d d            n# 1 swxY w Y   |rJ |d
         j                    |j        |j        }}t          d| |d|                              t                    }|j        |j        }}t          ||           t          ||           t          d| |d                              t                    }|j        |j        }
}	t          ||	           t          ||
           t          j
        t          d          5  t          dd|i| |dz   |d	                              t                    }|j        |j        }}d d d            n# 1 swxY w Y   t          ||           t          ||           d S )Nr+   r   r   T)recordrK   prl   )r   metric_paramsr   rr   r   rn   r   )r   r   r   rn   rr   	manhattanrm   z\Parameter p is found in metric_params. The corresponding parameter from __init__ is ignored.)match)warningscatch_warningsr   r   r   messagerh   r   r	   pytestwarnsSyntaxWarning)r   r   rr   rz   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&&&& 5rz8M 
WX
 
 
	c!ff  !5rz8M}m444x*** 

 
 
	c!ff  !5rz8M}m444x***	
 
 
 F F (!e#!
 
 
 #a&& 	 #%"92:x#F F F F F F F F F F F F F F F& }m444x*****s$   0AAAAF##F'*F'c                  @   d} d}t          t                    }t          |d| |          \  }}t          t	          |                    t          d|v           z
  }|t          k    sJ t          d| |d          }|                    t                    j	        }t          t	          |                    t          d|v           z
  }|t          k    sJ t          d| |d	          }|                    t                    j	        }t          t	          |                    t          d|v           z
  }|t          k    sJ t          d
| |d          }|                    t                    j	        }t          t	          |                    t          d|v           z
  }	|	t          k    sJ t          d| |d          }|                    t                    j	        }t          t	          |                    t          d|v           z
  }
|
t          k    sJ d S )Nr+   r   r   r   r          @rl   )rr   r   r   rn   kd_tree      ?   )	leaf_sizer   r   rn   )
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!	-Sk  L&
 s6{{##c",&7&77L:%%%%	#3K;	O	O	OBVVAYYFs6{{##c",&7&77L:%%%%	#3K9	M	M	MBVVAYYFs6{{##c",&7&77L:%%%%	#3K;	O	O	OBVVAYYFs6{{##c",&7&77L:%%%%	"#;+	V	V	VBVVAYYFs6{{##c",&7&77L:%%%%%%r)   c                  X    ddgddgg} t                                          |            d S )Nr   r   g      @g      @)r   r   )r   s    r'   test_input_validationr     s+    
sc3Z A
HHLLOOOOOr)   c                      t                      } t          j        |           }t          t          j        |                    | j        u sJ d S rX   )r   pickledumpstypeloads	__class__)objss     r'   test_pickler   #  sC    
((CSAQ  CM111111r)   c                      t          dgdggdd          \  } }d| v sJ t          dgdgdggdd          \  } }d| v sJ t          dgdgdggdd          \  } }d| vsJ d S )Nr   r      r1   gGz?)r   )core_s     r'   test_boundariesr   )  s    qcA3ZQA666GD!9999qcA3_!;;;GD!9999qcA3_$A>>>GD!D======r)   c           	         t          j        t                    5  t          dgdggdg           d d d            n# 1 swxY w Y   t          j        t                    5  t          dgdggg d           d d d            n# 1 swxY w Y   t	          g t          dgdggd d          d                    t	          g t          dgdggddgd          d                    t	          dgt          dgdggddgd          d                    t	          ddgt          dgdggddgd          d                    t	          ddgt          dgdggd	ddgd
          d                    t	          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gd	d          d                    t	          g t          dgdggddgd	d          d                    t
          j                            |           }|                    ddt          j
        d                   }t          t          |          \  }}t          |          t          t                    k    sJ t          j        t          |d          }t          |          \  }}t          j        |j
        d         t                    }d||<   t          j        t          j
        d         t                    }	d|	|<   t	          t          j        |	|          |           t          t                    }
t          |
|d          \  }}t	          ||           t	          ||           t!                                          t          |          }|j        }|j        }t	          ||           t	          ||           t!                      }|                    t          |          }|j        }t	          ||           t	          ||           t	          ||j                   d S )Nr   r   r   )sample_weight)r   r      re   )r   r      g      ?)r   r   r   )r   r   r   g@皙?r   )axis)dtypeTr   )r   r   )ry   raises
ValueErrorr   r	   r   rO   rP   randintr   r>   r   repeatzerosboolr   r   r   rh   r   fit_predict)global_random_seedri   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  s   	z	"	" . .aSz!----. . . . . . . . . . . . . . .	z	"	" 4 4aSz33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 r6A3*DaPPPQRSTTTr6A3*QFPQRRRSTUVVVsFQC!:aVQRSSSTUVWWW	
AaSz!QQGGGJ  
 	
AaSzs1a&aPPPQRS   
FQC!:aV!LLLQO   	
AaSz#sRSTTTUVW   	
AaSz!QSaPPPQRS   
FQC!:aW#1MMMaP  
 )

 2
3
3CKK1agaj11M1M:::ME6v;;#a&&    1m!444J$*:$6$6!M>*"21"5TBBB(,}%4000IIeryM::<NOOO 	1A1M-PPPME6ue$$$vv&&& ((,,q,
6
6C$E[Fue$$$vv&&&
((C__Qm_<<F$Eue$$$vv&&&vs{+++++s!   =AA!BB	B	rn   )bruter   rl   c                 P   dgdgdgdgdgdgdgg}t          |          }t          || dd	          \  }}t          |t          j        |                     t          |g d
           t          || dd	          \  }}t          |g d           t          |g d           t          || dd	          \  }}t          |dg           t          |g d           t          || dd	          \  }}t          |g            t          |t          j        |d                     d S )Nr   r   r   r   re      r   r   )rn   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)rn   r   	n_samplesr"   r#   s        r'   test_dbscan_core_samples_toyr   x  sZ   
qcA3aS1#t,AAI "!yaQOOOL&|RYy%9%9:::v444555 "!yaQOOOL&|YYY///v888999 "!yaQOOOL&|aS)))v888999 "!yaQOOOL&|R(((vrwy$7788888r)   c                     t          j        d          } t          dd                              |           j        }t          t          |                    dk    sJ t          j        d          } t          dd                              |           j        }t          t          |                    dk    sJ d S )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2266q99AFs6{{q    
AM22266q99AFs6{{q      r)   c           
          t          j        g dg dg dg dg dg dg dg          } | |          }t          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   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     s     
/////////////////////	


 

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