Source code for wntr.extensions.design_verification.scenarios

"""Apply hydraulic simulation options to WNTR models."""

from __future__ import annotations

import copy

from wntr.network import WaterNetworkModel

from .models import HydraulicScenario


[docs] def apply_hydraulic_scenario( wn: WaterNetworkModel, scenario: HydraulicScenario, ) -> tuple[WaterNetworkModel, dict[str, object]]: """Apply hydraulic simulation options to an independent network copy. The verification scenario changes only the WNTR ``time`` and ``hydraulic`` simulation option groups. The original ``WaterNetworkModel`` is not modified. Parameters ---------- wn : WaterNetworkModel Original WNTR water-distribution network model. scenario : HydraulicScenario Scenario containing the WNTR simulation options to apply. Returns ------- scenario_wn : WaterNetworkModel Independent network copy containing the selected time and hydraulic simulation options. audit : dict Dictionary recording the original and applied simulation options. """ assert isinstance(wn, WaterNetworkModel) assert isinstance(scenario, HydraulicScenario) assert isinstance(scenario.name, str) assert scenario.name.strip() scenario_wn = copy.deepcopy(wn) original_options = { "time": dict(scenario_wn.options.time), "hydraulic": dict(scenario_wn.options.hydraulic), } scenario_wn.options.time = copy.deepcopy( scenario.options.time ) scenario_wn.options.hydraulic = copy.deepcopy( scenario.options.hydraulic ) applied_options = { "time": dict(scenario_wn.options.time), "hydraulic": dict(scenario_wn.options.hydraulic), } audit = { "scenario_name": scenario.name.strip(), "original_options": original_options, "applied_options": applied_options, } return scenario_wn, audit