use crate::DType;
use numr::error::Result;
use numr::ops::DistanceMetric;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
#[derive(Debug, Clone)]
pub struct HCVScore<R: Runtime<DType = DType>> {
pub homogeneity: Tensor<R>,
pub completeness: Tensor<R>,
pub v_measure: Tensor<R>,
}
pub trait ClusterMetricsAlgorithms<R: Runtime<DType = DType>> {
fn silhouette_score(
&self,
data: &Tensor<R>,
labels: &Tensor<R>,
metric: DistanceMetric,
) -> Result<Tensor<R>>;
fn silhouette_samples(
&self,
data: &Tensor<R>,
labels: &Tensor<R>,
metric: DistanceMetric,
) -> Result<Tensor<R>>;
fn calinski_harabasz_score(&self, data: &Tensor<R>, labels: &Tensor<R>) -> Result<Tensor<R>>;
fn davies_bouldin_score(&self, data: &Tensor<R>, labels: &Tensor<R>) -> Result<Tensor<R>>;
fn adjusted_rand_score(
&self,
labels_true: &Tensor<R>,
labels_pred: &Tensor<R>,
) -> Result<Tensor<R>>;
fn normalized_mutual_info_score(
&self,
labels_true: &Tensor<R>,
labels_pred: &Tensor<R>,
) -> Result<Tensor<R>>;
fn homogeneity_completeness_v_measure(
&self,
labels_true: &Tensor<R>,
labels_pred: &Tensor<R>,
) -> Result<HCVScore<R>>;
}