use crate::DType;
use numr::error::Result;
use numr::ops::DistanceMetric;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
#[derive(Debug, Clone)]
pub struct OpticsOptions {
pub min_samples: usize,
pub max_eps: f64,
pub metric: DistanceMetric,
pub xi: Option<f64>,
}
impl Default for OpticsOptions {
fn default() -> Self {
Self {
min_samples: 5,
max_eps: f64::INFINITY,
metric: DistanceMetric::Euclidean,
xi: None,
}
}
}
#[derive(Debug, Clone)]
pub struct OpticsResult<R: Runtime<DType = DType>> {
pub ordering: Tensor<R>,
pub reachability: Tensor<R>,
pub core_distances: Tensor<R>,
pub labels: Tensor<R>,
}
pub trait OpticsAlgorithms<R: Runtime<DType = DType>> {
fn optics(&self, data: &Tensor<R>, options: &OpticsOptions) -> Result<OpticsResult<R>>;
}