pub struct SimulationOutput {
pub n_scenarios: u32,
pub completed: u32,
pub failed: u32,
pub total_time_ms: u64,
pub partitions_written: Vec<String>,
pub cost: Option<MetadataCost>,
pub solve_stats: MetadataSimulationSolveStats,
}Expand description
Aggregate type carrying simulation completion data for output writing.
Constructed by the simulation pipeline after it completes and optionally
passed to write_results. When None is supplied, the simulation
output directory is still created (ready for future use), but no
simulation artifacts are written.
Fields§
§n_scenarios: u32Total number of scenarios dispatched for simulation.
completed: u32Number of scenarios that completed without error.
failed: u32Number of scenarios that failed during simulation.
total_time_ms: u64Total elapsed wall-clock time for the simulation run (ms).
partitions_written: Vec<String>Hive partition paths written by the simulation writer.
Each element is a relative path string such as
"simulation/costs/year=2030/month=01/part-00.parquet".
cost: Option<MetadataCost>Aggregate cost statistics for the simulated scenarios.
None until a producer supplies it. When several per-rank outputs are
combined via merge, the first present value wins; the
producer is responsible for supplying the authoritative aggregate (which
the distributed pipeline computes on rank 0) first.
solve_stats: MetadataSimulationSolveStatsAggregate solve statistics for the simulation run.
Default-constructed (all fields None) by producers that do not yet
record solve statistics; populated downstream and persisted into
simulation/metadata.json by the metadata writer.
Implementations§
Source§impl SimulationOutput
impl SimulationOutput
Sourcepub fn merge(outputs: &[Self]) -> Self
pub fn merge(outputs: &[Self]) -> Self
Combine multiple per-rank simulation outputs into a single aggregate.
Merge rules:
n_scenarios: sum across all outputs.completed: sum across all outputs.failed: sum across all outputs.total_time_ms: max across all outputs (wall-clock = slowest rank).partitions_written: concatenation of all outputs’ partitions, sorted for deterministic ordering regardless of input order.cost: first present value in slice order. The producer must supply the authoritative aggregate first (the distributed pipeline computes it on rank 0), so the merged cost is the rank-0 aggregate rather than a per-rank partial.Noneonly when no input carried a cost.solve_stats: each count field is summed treatingNoneas0, with the resultSomewhen any input recorded it (andNoneonly when no input did);solve_secondsis summed with the same convention;parallelismtakes the maximum across inputs (None-safe). Sums and max are order-invariant, so the merge is declaration-order invariant.
Returns a zeroed SimulationOutput (no cost, default solve stats) with
empty partitions when the input slice is empty.
Trait Implementations§
Source§impl Clone for SimulationOutput
impl Clone for SimulationOutput
Source§fn clone(&self) -> SimulationOutput
fn clone(&self) -> SimulationOutput
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for SimulationOutput
impl RefUnwindSafe for SimulationOutput
impl Send for SimulationOutput
impl Sync for SimulationOutput
impl Unpin for SimulationOutput
impl UnsafeUnpin for SimulationOutput
impl UnwindSafe for SimulationOutput
Blanket Implementations§
impl<T> Allocation for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more