use thiserror::Error;
#[derive(Debug, Error)]
pub enum SparseError {
#[error("Invalid mask dimensions: expected {expected_heads} heads, {expected_layers} layers, got {actual_heads}x{actual_layers}")]
InvalidDimensions {
expected_heads: usize,
expected_layers: usize,
actual_heads: usize,
actual_layers: usize,
},
#[error("Head index {index} out of range (max: {max})")]
HeadIndexOutOfRange { index: usize, max: usize },
#[error("Layer index {index} out of range (max: {max})")]
LayerIndexOutOfRange { index: usize, max: usize },
#[error("Sparsity {actual:.2} below minimum required {minimum:.2}")]
SparsityTooLow { actual: f32, minimum: f32 },
#[error("Quality loss {actual:.3} exceeds threshold {threshold:.3}")]
QualityLoss { actual: f32, threshold: f32 },
#[error("Kernel execution failed: {0}")]
KernelError(String),
#[error("Prediction failed: {0}")]
PredictionError(String),
#[error("Analysis failed: {0}")]
AnalysisError(String),
}
pub type Result<T> = std::result::Result<T, SparseError>;