use crate::logical_memory::LogicalMemoryProfile;
use crate::{SampleID, VariableIDSet};
use fnv::FnvHashMap;
use std::collections::BTreeMap;
use super::Constraint;
pub trait Stage<C> {
type Data;
}
#[derive(Debug, Clone, PartialEq)]
pub struct Created;
#[derive(Debug, Clone, PartialEq, Default, LogicalMemoryProfile)]
pub struct RemovedReason {
pub reason: String,
pub parameters: FnvHashMap<String, String>,
}
#[derive(Debug, Clone, PartialEq, LogicalMemoryProfile)]
pub struct CreatedData {
pub function: crate::Function,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Evaluated;
#[derive(Debug, Clone)]
pub struct Sampled;
#[derive(Debug, Clone, PartialEq)]
pub struct EvaluatedData {
pub evaluated_value: f64,
pub feasible: bool,
pub used_decision_variable_ids: VariableIDSet,
pub dual_variable: Option<f64>,
}
#[derive(Debug, Clone)]
pub struct SampledData {
pub evaluated_values: crate::Sampled<f64>,
pub feasible: BTreeMap<SampleID, bool>,
pub used_decision_variable_ids: VariableIDSet,
pub dual_variables: Option<crate::Sampled<f64>>,
}
impl Stage<Constraint<Created>> for Created {
type Data = CreatedData;
}
impl Stage<Constraint<Evaluated>> for Evaluated {
type Data = EvaluatedData;
}
impl Stage<Constraint<Sampled>> for Sampled {
type Data = SampledData;
}