use std::path::Path;
use crate::traits::backend::StorageBackend;
use smartcore::linalg::basic::matrix::DenseMatrix;
use crate::StorageResult;
pub trait ClusteringArtifacts: StorageBackend {
async fn save_centroid_map(&self, map: &[usize], md_path: &Path) -> StorageResult<()>;
async fn load_centroid_map(&self) -> StorageResult<Vec<usize>>;
async fn save_subcentroid_lambdas(&self, lambdas: &[f64], md_path: &Path) -> StorageResult<()>;
async fn load_subcentroid_lambdas(&self) -> StorageResult<Vec<f64>>;
async fn save_subcentroids(
&self,
subcentroids: &DenseMatrix<f64>,
md_path: &Path,
) -> StorageResult<()>;
async fn load_subcentroids(&self) -> StorageResult<Vec<Vec<f64>>>;
async fn save_item_norms(&self, item_norms: &[f64], md_path: &Path) -> StorageResult<()>;
async fn load_item_norms(&self) -> StorageResult<Vec<f64>>;
async fn save_cluster_assignments(
&self,
assignments: &[Option<usize>],
md_path: &Path,
) -> StorageResult<()>;
async fn load_cluster_assignments(&self) -> StorageResult<Vec<Option<usize>>>;
}