use thiserror::Error;
#[derive(Debug, Error, Clone, Copy, PartialEq, Eq)]
pub enum ShapeError {
#[error("input cannot be empty")]
EmptyInput,
#[error("matrix must be square")]
NotSquare,
#[error("dimension mismatch")]
DimensionMismatch,
}
#[derive(Debug, Error, Clone, PartialEq)]
pub enum NabledError {
#[error(transparent)]
Shape(#[from] ShapeError),
#[error("matrix is singular")]
SingularMatrix,
#[error("matrix must be symmetric")]
NotSymmetric,
#[error("matrix must be positive definite")]
NotPositiveDefinite,
#[error("algorithm failed to converge")]
ConvergenceFailed,
#[error("numerical instability detected")]
NumericalInstability,
#[error("invalid input: {0}")]
InvalidInput(String),
#[error("{0}")]
Other(String),
}
pub trait IntoNabledError {
fn into_nabled_error(self) -> NabledError;
}