uncertain_numerics/
linear_solver_error.rs1use core::fmt;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum LinearSolverError {
6 ZeroDimension,
8 MatrixDimensionMismatch,
10 VectorDimensionMismatch,
12 NonFiniteMatrixEntry,
14 NonFiniteVectorEntry,
16 NonFiniteTolerance,
18 NegativeTolerance,
20 EmptyCandidateDirections,
22 NonSymmetricSystemMatrix,
24 SystemMatrixNotPositiveDefinite,
26 NonSymmetricCovariance,
28 CovarianceNotPositiveSemidefinite,
30 DegenerateObservation,
32}
33
34impl fmt::Display for LinearSolverError {
35 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
36 match self {
37 Self::ZeroDimension => write!(f, "linear-system dimension must be positive"),
38 Self::MatrixDimensionMismatch => {
39 write!(f, "flattened matrix length must equal dimension squared")
40 }
41 Self::VectorDimensionMismatch => {
42 write!(f, "vector length must equal the system dimension")
43 }
44 Self::NonFiniteMatrixEntry => write!(f, "matrix entries must be finite"),
45 Self::NonFiniteVectorEntry => write!(f, "vector entries must be finite"),
46 Self::NonFiniteTolerance => write!(f, "solver tolerances must be finite"),
47 Self::NegativeTolerance => write!(f, "solver tolerances must be non-negative"),
48 Self::EmptyCandidateDirections => {
49 write!(f, "at least one candidate projection direction is required")
50 }
51 Self::NonSymmetricSystemMatrix => write!(f, "system matrix must be symmetric"),
52 Self::SystemMatrixNotPositiveDefinite => {
53 write!(f, "system matrix must be positive definite")
54 }
55 Self::NonSymmetricCovariance => write!(f, "covariance matrix must be symmetric"),
56 Self::CovarianceNotPositiveSemidefinite => {
57 write!(f, "covariance matrix must be positive semidefinite")
58 }
59 Self::DegenerateObservation => write!(
60 f,
61 "observation direction has no remaining prior uncertainty"
62 ),
63 }
64 }
65}
66
67impl std::error::Error for LinearSolverError {}