Outputs: retrieving outputs with GemsPy
Via SimulationSession (recommended)
SimulationSession.run() returns a SimulationTable directly after solving:
from pathlib import Path
from gems_craft.study.folder import load_study
from gems_runner.session import SimulationSession
from gems_craft.optim_config import load_optim_config
study = load_study(Path("my_study"))
optim_config = load_optim_config(Path("my_study/input/optim-config.yml"))
session = SimulationSession(study=study, optim_config=optim_config)
results = session.run() # SimulationTable
Via SimulationTableBuilder (low-level)
When using build_problem() directly, build the table from the solved problem:
from gems_runner.simulation.simulation_table import SimulationTableBuilder
results = SimulationTableBuilder().build(problem)
Accessing results
SimulationTable exposes a fluent accessor API and a raw DataFrame.
Fluent API
# All values for a component
component_view = results.component("gen_de")
# Pivot for a specific output variable
output_view = component_view.output("generation")
# Single value (single timestep, single scenario)
val = output_view.value(time_index=0, scenario_index=0)
# All timesteps for scenario 0
series = output_view.value(scenario_index=0) # returns a pandas Series
Raw DataFrame
The DataFrame has columns: block, component, output,
absolute_time_index, block_time_index, scenario_index, value, basis_status.
Reading the value of the optimisation variable var_id of component component_id
for a single time step and scenario:
For multi-time or multi-scenario results, filter additionally by block_time_index
and scenario_index:
sub = df[(df["component"] == component_id) & (df["output"] == var_id)]
value_s0_t1 = sub[(sub["scenario_index"] == 0) & (sub["block_time_index"] == 1)]["value"].iloc[0]