5fe0a75f78
Add Serialize/Deserialize derives to all public data types (ParamValue, Distribution, Direction, TrialState, ParamId, AttrValue, CompletedTrial) gated behind a `serde` feature flag. Introduce StudySnapshot struct and Study::save()/Study::load() for persisting and restoring study state as human-readable JSON.
50 lines
1.5 KiB
Rust
50 lines
1.5 KiB
Rust
//! Parameter distribution types.
|
|
|
|
/// Distribution for floating-point parameters.
|
|
#[derive(Clone, Debug, PartialEq)]
|
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
|
pub struct FloatDistribution {
|
|
/// Lower bound (inclusive).
|
|
pub low: f64,
|
|
/// Upper bound (inclusive).
|
|
pub high: f64,
|
|
/// Whether to sample in log space.
|
|
pub log_scale: bool,
|
|
/// Optional step size for discretization.
|
|
pub step: Option<f64>,
|
|
}
|
|
|
|
/// Distribution for integer parameters.
|
|
#[derive(Clone, Debug, PartialEq)]
|
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
|
pub struct IntDistribution {
|
|
/// Lower bound (inclusive).
|
|
pub low: i64,
|
|
/// Upper bound (inclusive).
|
|
pub high: i64,
|
|
/// Whether to sample in log space.
|
|
pub log_scale: bool,
|
|
/// Optional step size for discretization.
|
|
pub step: Option<i64>,
|
|
}
|
|
|
|
/// Distribution for categorical parameters.
|
|
#[derive(Clone, Debug, PartialEq)]
|
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
|
pub struct CategoricalDistribution {
|
|
/// Number of choices available.
|
|
pub n_choices: usize,
|
|
}
|
|
|
|
/// Enum wrapping all parameter distribution types.
|
|
#[derive(Clone, Debug, PartialEq)]
|
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
|
pub enum Distribution {
|
|
/// A floating-point distribution.
|
|
Float(FloatDistribution),
|
|
/// An integer distribution.
|
|
Int(IntDistribution),
|
|
/// A categorical distribution.
|
|
Categorical(CategoricalDistribution),
|
|
}
|