use crate::DType;
use numr::error::Result;
use numr::ops::DistanceMetric;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
#[derive(Debug, Clone)]
pub struct DbscanOptions {
pub eps: f64,
pub min_samples: usize,
pub metric: DistanceMetric,
}
impl Default for DbscanOptions {
fn default() -> Self {
Self {
eps: 0.5,
min_samples: 5,
metric: DistanceMetric::Euclidean,
}
}
}
#[derive(Debug, Clone)]
pub struct DbscanResult<R: Runtime<DType = DType>> {
pub labels: Tensor<R>,
pub core_sample_indices: Tensor<R>,
pub n_clusters: usize,
}
pub trait DbscanAlgorithms<R: Runtime<DType = DType>> {
fn dbscan(&self, data: &Tensor<R>, options: &DbscanOptions) -> Result<DbscanResult<R>>;
}