Skip to main content

qmbed/
error.rs

1use thiserror::Error;
2
3/// Stable failure categories for all recoverable public operations.
4#[derive(Debug, Error)]
5#[non_exhaustive]
6pub enum QmbedError {
7    #[error("invalid or unregistered operator: {0}")]
8    InvalidOperator(String),
9    #[error("invalid coupling: {0}")]
10    InvalidCoupling(String),
11    #[error("site {site} is outside a lattice with {sites} sites")]
12    InvalidSite { site: usize, sites: usize },
13    #[error("state is not represented by this basis")]
14    StateNotInBasis,
15    #[error("invalid Hilbert-space sector: {0}")]
16    InvalidSector(String),
17    #[error("incompatible symmetry request: {0}")]
18    IncompatibleSymmetry(String),
19    #[error("a Hermitian operator is required")]
20    NonHermitian,
21    #[error("invalid options: {0}")]
22    InvalidOptions(String),
23    #[error("dimension mismatch: {0}")]
24    DimensionMismatch(String),
25    #[error("the supplied vectors are numerically rank deficient")]
26    RankDeficient,
27    #[error("unsupported backend: {0}")]
28    UnsupportedBackend(String),
29    #[error("archive error: {0}")]
30    Archive(String),
31    #[error("internal state error: {0}")]
32    InternalState(String),
33    #[error("solver did not converge after {iterations} iterations; residual={residual:e}")]
34    NonConvergence { iterations: usize, residual: f64 },
35}
36
37/// Crate-wide result type.
38pub type Result<T> = std::result::Result<T, QmbedError>;