use crate::status::ESymSolverStatus;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum FactorizationError {
Singular,
WrongInertia,
FatalError,
}
impl FactorizationError {
pub(crate) fn from_status(status: ESymSolverStatus) -> Result<(), Self> {
match status {
ESymSolverStatus::Success => Ok(()),
ESymSolverStatus::Singular => Err(Self::Singular),
ESymSolverStatus::WrongInertia => Err(Self::WrongInertia),
ESymSolverStatus::CallAgain | ESymSolverStatus::FatalError => Err(Self::FatalError),
}
}
}
impl std::fmt::Display for FactorizationError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Singular => write!(f, "matrix is singular"),
Self::WrongInertia => write!(f, "factorization inertia did not match expectation"),
Self::FatalError => write!(f, "fatal linear-solver error"),
}
}
}
impl std::error::Error for FactorizationError {}