use std::{error::Error, fmt};
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub enum ParzenError {
InvalidConfig(String),
InvalidDistribution(String),
DuplicateParameter(String),
UnknownParameter(String),
ParameterTypeMismatch {
name: String,
expected: &'static str,
},
ValueOutsideDistribution(String),
InvalidCondition(String),
InvalidGroup(String),
UnresolvedCondition(String),
InactiveParameter(String),
MissingParameter(String),
NonFiniteObjective,
NoPendingTrial,
PendingTrial,
CapacityOverflow,
GammaExceedsHistoryLimit { requested: usize, limit: usize },
InternalModel(String),
}
impl fmt::Display for ParzenError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::InvalidConfig(message) => write!(f, "invalid sampler configuration: {message}"),
Self::InvalidDistribution(message) => write!(f, "invalid distribution: {message}"),
Self::DuplicateParameter(name) => write!(f, "parameter `{name}` is already registered"),
Self::UnknownParameter(name) => write!(f, "unknown parameter `{name}`"),
Self::ParameterTypeMismatch { name, expected } => {
write!(f, "parameter `{name}` is not {expected}")
}
Self::ValueOutsideDistribution(name) => {
write!(f, "value is outside the distribution for `{name}`")
}
Self::InvalidCondition(message) => write!(f, "invalid condition: {message}"),
Self::InvalidGroup(message) => write!(f, "invalid parameter group: {message}"),
Self::UnresolvedCondition(name) => {
write!(f, "conditions for `{name}` have not been resolved")
}
Self::InactiveParameter(name) => {
write!(f, "parameter `{name}` is inactive in this trial")
}
Self::MissingParameter(name) => write!(f, "active parameter `{name}` is missing"),
Self::NonFiniteObjective => f.write_str("objective value must be finite"),
Self::NoPendingTrial => f.write_str("no parameter has been suggested for this trial"),
Self::PendingTrial => {
f.write_str("abort or complete the pending trial before injecting another trial")
}
Self::CapacityOverflow => f.write_str("study capacity exceeded"),
Self::GammaExceedsHistoryLimit { requested, limit } => write!(
f,
"gamma requested {requested} good trials, exceeding the bounded-history limit of {limit}"
),
Self::InternalModel(message) => write!(f, "invalid internal sampler model: {message}"),
}
}
}
impl Error for ParzenError {}