uncertain_numerics/
active_design_error.rs1use core::fmt;
2
3use crate::{ActiveSelectionError, BayesianQuadratureError};
4
5#[derive(Debug, Clone, Copy, PartialEq)]
7pub enum ActiveDesignError {
8 NonFiniteVarianceTolerance,
10 NegativeVarianceTolerance,
12 NonFiniteCandidate,
14 NonFiniteFunctionValue,
16 Selection(ActiveSelectionError),
18 Posterior(BayesianQuadratureError),
20}
21
22impl fmt::Display for ActiveDesignError {
23 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24 match self {
25 Self::NonFiniteVarianceTolerance => {
26 write!(f, "posterior-variance stopping tolerance must be finite")
27 }
28 Self::NegativeVarianceTolerance => {
29 write!(
30 f,
31 "posterior-variance stopping tolerance must be non-negative"
32 )
33 }
34 Self::NonFiniteCandidate => write!(f, "candidate points must be finite"),
35 Self::NonFiniteFunctionValue => {
36 write!(f, "active function evaluations must be finite")
37 }
38 Self::Selection(error) => write!(f, "active candidate selection failed: {error}"),
39 Self::Posterior(error) => write!(f, "Bayesian quadrature failed: {error}"),
40 }
41 }
42}
43
44impl std::error::Error for ActiveDesignError {
45 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
46 match self {
47 Self::Selection(error) => Some(error),
48 Self::Posterior(error) => Some(error),
49 _ => None,
50 }
51 }
52}
53
54impl From<ActiveSelectionError> for ActiveDesignError {
55 fn from(error: ActiveSelectionError) -> Self {
56 Self::Selection(error)
57 }
58}
59
60impl From<BayesianQuadratureError> for ActiveDesignError {
61 fn from(error: BayesianQuadratureError) -> Self {
62 Self::Posterior(error)
63 }
64}