use crate::metrics::distance::Manifold;
use crate::{ClusteringError, Result};
use ndarray::{Array1, ArrayView2};
pub struct ManifoldDBSCAN {
epsilon: f64,
min_samples: usize,
manifold: Manifold,
}
impl ManifoldDBSCAN {
pub fn new(epsilon: f64, min_samples: usize) -> Self {
Self {
epsilon,
min_samples,
manifold: Manifold::Euclidean,
}
}
pub fn manifold(mut self, manifold: Manifold) -> Self {
self.manifold = manifold;
self
}
pub fn fit(&self, data: &ArrayView2<f64>) -> Result<Array1<i32>> {
unimplemented!("ManifoldDBSCAN::fit")
}
}
pub struct ManifoldKMeans {
n_clusters: usize,
manifold: Manifold,
}
impl ManifoldKMeans {
pub fn new(n_clusters: usize, manifold: Manifold) -> Self {
Self {
n_clusters,
manifold,
}
}
pub fn fit(&self, data: &ArrayView2<f64>) -> Result<ManifoldClusteringResult> {
unimplemented!("ManifoldKMeans::fit")
}
}
pub struct ManifoldClusteringResult {
pub labels: Array1<usize>,
pub centroids: Vec<Vec<f64>>,
}
pub fn frechet_mean(
points: &[Vec<f64>],
manifold: &Manifold,
max_iter: usize,
tolerance: f64,
) -> Result<Vec<f64>> {
unimplemented!("frechet_mean")
}