use std::error::Error;
use std::fmt;
#[derive(Debug)]
pub enum OptimError {
InvalidConfig(String),
SearchSpaceError(String),
EvaluationError(String),
ArchitectureError(String),
OptimizationError(String),
ResourceConstraintViolation(String),
ConvergenceFailure(String),
InvalidParameter(String),
ConfigurationError(String),
ResourceLimitExceeded(String),
}
impl fmt::Display for OptimError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
OptimError::InvalidConfig(msg) => write!(f, "Invalid configuration: {}", msg),
OptimError::SearchSpaceError(msg) => write!(f, "Search space error: {}", msg),
OptimError::EvaluationError(msg) => write!(f, "Evaluation error: {}", msg),
OptimError::ArchitectureError(msg) => write!(f, "Architecture error: {}", msg),
OptimError::OptimizationError(msg) => write!(f, "Optimization error: {}", msg),
OptimError::ResourceConstraintViolation(msg) => {
write!(f, "Resource constraint violation: {}", msg)
}
OptimError::ConvergenceFailure(msg) => write!(f, "Convergence failure: {}", msg),
OptimError::InvalidParameter(msg) => write!(f, "Invalid parameter: {}", msg),
OptimError::ConfigurationError(msg) => write!(f, "Configuration error: {}", msg),
OptimError::ResourceLimitExceeded(msg) => write!(f, "Resource limit exceeded: {}", msg),
}
}
}
impl Error for OptimError {}
pub type Result<T> = std::result::Result<T, OptimError>;