use crate::DType;
use numr::error::Result;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
pub use numr::ops::DistanceMetric;
pub trait DistanceAlgorithms<R: Runtime<DType = DType>> {
fn cdist(&self, x: &Tensor<R>, y: &Tensor<R>, metric: DistanceMetric) -> Result<Tensor<R>>;
fn pdist(&self, x: &Tensor<R>, metric: DistanceMetric) -> Result<Tensor<R>>;
fn squareform(&self, condensed: &Tensor<R>, n: usize) -> Result<Tensor<R>>;
fn squareform_inverse(&self, square: &Tensor<R>) -> Result<Tensor<R>>;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_distance_metric_name() {
assert_eq!(DistanceMetric::Euclidean.name(), "euclidean");
assert_eq!(DistanceMetric::Manhattan.name(), "manhattan");
assert_eq!(DistanceMetric::Cosine.name(), "cosine");
}
}