use crate::DType;
use numr::error::Result;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
#[derive(Debug, Clone)]
pub struct AffinityPropagationOptions {
pub damping: f64,
pub max_iter: usize,
pub convergence_iter: usize,
pub preference: Option<f64>,
}
impl Default for AffinityPropagationOptions {
fn default() -> Self {
Self {
damping: 0.5,
max_iter: 200,
convergence_iter: 15,
preference: None,
}
}
}
#[derive(Debug, Clone)]
pub struct AffinityPropagationResult<R: Runtime<DType = DType>> {
pub labels: Tensor<R>,
pub cluster_centers_indices: Tensor<R>,
pub n_iter: usize,
}
pub trait AffinityPropagationAlgorithms<R: Runtime<DType = DType>> {
fn affinity_propagation(
&self,
similarities: &Tensor<R>,
options: &AffinityPropagationOptions,
) -> Result<AffinityPropagationResult<R>>;
}