1use crate::status::ESymSolverStatus;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
11pub enum FactorizationError {
12 Singular,
14 WrongInertia,
17 FatalError,
19}
20
21impl FactorizationError {
22 pub(crate) fn from_status(status: ESymSolverStatus) -> Result<(), Self> {
27 match status {
28 ESymSolverStatus::Success => Ok(()),
29 ESymSolverStatus::Singular => Err(Self::Singular),
30 ESymSolverStatus::WrongInertia => Err(Self::WrongInertia),
31 ESymSolverStatus::CallAgain | ESymSolverStatus::FatalError => Err(Self::FatalError),
32 }
33 }
34}
35
36impl std::fmt::Display for FactorizationError {
37 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
38 match self {
39 Self::Singular => write!(f, "matrix is singular"),
40 Self::WrongInertia => write!(f, "factorization inertia did not match expectation"),
41 Self::FatalError => write!(f, "fatal linear-solver error"),
42 }
43 }
44}
45
46impl std::error::Error for FactorizationError {}