use core::fmt;
use numra_core::NumraError;
#[derive(Clone, Debug, PartialEq)]
pub enum IntegrationError {
MaxSubdivisions {
subdivisions: usize,
error_estimate: f64,
},
RoundoffDetected,
InvalidValue { x: f64 },
InvalidInput(String),
}
impl fmt::Display for IntegrationError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
IntegrationError::MaxSubdivisions {
subdivisions,
error_estimate,
} => {
write!(
f,
"Maximum subdivisions ({}) reached, error estimate: {:.2e}",
subdivisions, error_estimate
)
}
IntegrationError::RoundoffDetected => {
write!(f, "Roundoff error detected during integration")
}
IntegrationError::InvalidValue { x } => {
write!(f, "Integrand returned invalid value at x = {}", x)
}
IntegrationError::InvalidInput(msg) => {
write!(f, "Invalid input: {}", msg)
}
}
}
}
impl From<IntegrationError> for NumraError {
fn from(e: IntegrationError) -> Self {
NumraError::InvalidInput(e.to_string())
}
}