use thiserror::Error;
#[derive(Error, Debug)]
pub enum ClusteringError {
#[error("Invalid configuration: {0}")]
InvalidConfiguration(String),
#[error("Clustering algorithm error: {0}")]
AlgorithmError(String),
#[error("Data processing error: {0}")]
DataError(String),
#[error("Statistical analysis error: {0}")]
StatisticalError(String),
#[error("Visualization error: {0}")]
VisualizationError(String),
#[error("Convergence error: {0}")]
ConvergenceError(String),
#[error("Dimension mismatch: expected {expected}, got {actual}")]
DimensionMismatch { expected: usize, actual: usize },
#[error("Insufficient data: need at least {required}, got {actual}")]
InsufficientData { required: usize, actual: usize },
}
pub type ClusteringResult<T> = Result<T, ClusteringError>;