use std::fmt;
#[derive(Debug)]
#[non_exhaustive]
pub enum Error {
InvalidParam(&'static str),
AupdFailed(i32),
EupdFailed(i32),
UnexpectedIdo(i32),
MaxIterReached {
iters: usize,
nconv: usize,
n_matvec: usize,
},
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Error::InvalidParam(msg) => write!(f, "invalid parameter: {msg}"),
Error::AupdFailed(info) => write!(f, "ARPACK *aupd returned info = {info}"),
Error::EupdFailed(info) => write!(f, "ARPACK *eupd returned info = {info}"),
Error::UnexpectedIdo(ido) => write!(f, "ARPACK requested unsupported ido = {ido}"),
Error::MaxIterReached {
iters,
nconv,
n_matvec,
} => write!(
f,
"ARPACK hit max_iter without convergence: iters = {iters}, \
nconv = {nconv}, n_matvec = {n_matvec}"
),
}
}
}
impl std::error::Error for Error {}