use std::collections::HashMap;
pub type HyperparamConfig = HashMap<String, HyperparamValue>;
#[derive(Debug, Clone, PartialEq)]
pub enum HyperparamValue {
Float(f64),
Int(i64),
Bool(bool),
String(String),
}
impl HyperparamValue {
pub fn as_float(&self) -> Option<f64> {
match self {
HyperparamValue::Float(v) => Some(*v),
HyperparamValue::Int(v) => Some(*v as f64),
_ => None,
}
}
pub fn as_int(&self) -> Option<i64> {
match self {
HyperparamValue::Int(v) => Some(*v),
HyperparamValue::Float(v) => Some(*v as i64),
_ => None,
}
}
pub fn as_bool(&self) -> Option<bool> {
match self {
HyperparamValue::Bool(v) => Some(*v),
_ => None,
}
}
pub fn as_string(&self) -> Option<&str> {
match self {
HyperparamValue::String(v) => Some(v),
_ => None,
}
}
}
#[derive(Debug, Clone)]
pub struct HyperparamResult {
pub config: HyperparamConfig,
pub score: f64,
pub metrics: HashMap<String, f64>,
}
impl HyperparamResult {
pub fn new(config: HyperparamConfig, score: f64) -> Self {
Self {
config,
score,
metrics: HashMap::new(),
}
}
pub fn with_metric(mut self, name: String, value: f64) -> Self {
self.metrics.insert(name, value);
self
}
}