Skip to content

Commit

Permalink
Update EventMetaData
Browse files Browse the repository at this point in the history
Add dynamic mapping tests
Add event dataframe mapping test

Signed-off-by: lisrte <[email protected]>
  • Loading branch information
Lisrte committed Aug 2, 2024
1 parent 8d2e55f commit 8ab50d2
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ public class ActivePowerVariationAdder extends AbstractEventModelAdder {

protected static final List<SeriesMetadata> METADATA = List.of(
SeriesMetadata.stringIndex(STATIC_ID),
SeriesMetadata.stringIndex(START_TIME),
SeriesMetadata.strings(DELTA_P));
SeriesMetadata.doubles(START_TIME),
SeriesMetadata.doubles(DELTA_P));

@Override
public List<SeriesMetadata> getMetadata() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class DisconnectAdder extends AbstractEventModelAdder {

protected static final List<SeriesMetadata> METADATA = List.of(
SeriesMetadata.stringIndex(STATIC_ID),
SeriesMetadata.stringIndex(START_TIME),
SeriesMetadata.doubles(START_TIME),
SeriesMetadata.strings(DISCONNECT_ONLY));

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ public class NodeFaultAdder extends AbstractEventModelAdder {

protected static final List<SeriesMetadata> METADATA = List.of(
SeriesMetadata.stringIndex(STATIC_ID),
SeriesMetadata.stringIndex(START_TIME),
SeriesMetadata.strings(FAULT_TIME),
SeriesMetadata.strings(X_PU),
SeriesMetadata.strings(R_PU));
SeriesMetadata.doubles(START_TIME),
SeriesMetadata.doubles(FAULT_TIME),
SeriesMetadata.doubles(X_PU),
SeriesMetadata.doubles(R_PU));

@Override
public List<SeriesMetadata> getMetadata() {
Expand Down
2 changes: 1 addition & 1 deletion pypowsybl/dynamic/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# SPDX-License-Identifier: MPL-2.0
#
from .impl.curve_mapping import CurveMapping
from .impl.event_mapping import EventMapping
from .impl.event_mapping import EventMapping, EventMappingType
from .impl.simulation_result import SimulationResult
from .impl.simulation import Simulation
from .impl.model_mapping import ModelMapping, Side, DynamicMappingType
1 change: 1 addition & 0 deletions pypowsybl/dynamic/impl/event_mapping.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ def add_all_event_mappings(self, mapping_type: EventMappingType, mapping_df: pd.
| - mapping_type: value of enum EventMappingType
"""
# TODO index df on static id + event type
metadata = _pp.get_event_mappings_meta_data(mapping_type)
if kwargs:
kwargs = _add_index_to_kwargs(metadata, **kwargs)
Expand Down
51 changes: 44 additions & 7 deletions tests/test_dynamic.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,53 @@ def set_up():


def test_add_mapping():
id = "test_id"
static_id = "test_id"
dynamic_id = "test_dynamic_id"
parameter_id = "test_parameter"
model_mapping = dyn.ModelMapping()
model_mapping.add_base_load(id, parameter_id, "LoadPQ")
model_mapping.add_synchronous_generator(id, parameter_id, "GeneratorSynchronousThreeWindings")
# TODO test remaining adders
# Equipments
model_mapping.add_base_load(static_id, parameter_id, "LoadPQ")
model_mapping.add_load_one_transformer(static_id, parameter_id, "LoadOneTransformer")
model_mapping.add_load_one_transformer_tap_changer(static_id, parameter_id, "LoadOneTransformerTapChanger")
model_mapping.add_load_two_transformers(static_id, parameter_id, "LoadTwoTransformers")
model_mapping.add_load_two_transformers_tap_changers(static_id, parameter_id, "LoadTwoTransformersTapChangers")
model_mapping.add_base_generator(static_id, parameter_id, "GeneratorFictitious")
model_mapping.add_synchronized_generator(static_id, parameter_id, "GeneratorPVFixed")
model_mapping.add_synchronous_generator(static_id, parameter_id, "GeneratorSynchronousThreeWindings")
model_mapping.add_wecc(static_id, parameter_id, "WT4BWeccCurrentSource")
model_mapping.add_grid_forming_converter(static_id, parameter_id, "GridFormingConverterMatchingControl")
model_mapping.add_hvdc_p(static_id, parameter_id, model_name="HvdcPV")
model_mapping.add_hvdc_vsc(static_id, parameter_id, pp.dynamic.Side.ONE, "HvdcVSCDanglingP")
model_mapping.add_base_transformer(static_id, parameter_id, "TransformerFixedRatio")
model_mapping.add_base_static_var_compensator(static_id, parameter_id, "StaticVarCompensatorPV")
model_mapping.add_base_line(static_id, parameter_id, "Line")
model_mapping.add_base_bus(static_id, parameter_id, "Bus")
model_mapping.add_infinite_bus(static_id, parameter_id, "InfiniteBus")
# Dynamic automation systems
model_mapping.add_overload_management_system(dynamic_id, parameter_id, "LINE1", "LINE2",
pp.dynamic.Side.TWO, "OverloadManagementSystem")
model_mapping.add_two_levels_overload_management_system(dynamic_id, parameter_id, "LINE1",
"LINE1", pp.dynamic.Side.TWO,
"LINE2", pp.dynamic.Side.ONE,
"TwoLevelsOverloadManagementSystem")
model_mapping.add_under_voltage_automation_system(dynamic_id, parameter_id, "GEN", "UnderVoltage")
model_mapping.add_phase_shifter_i_automation_system(dynamic_id, parameter_id, "TRA", "PhaseShifterI")
model_mapping.add_phase_shifter_p_automation_system(dynamic_id, parameter_id, "TRA", "PhaseShifterP")
model_mapping.add_tap_changer_automation_system(dynamic_id, parameter_id, "LOAD", pp.dynamic.Side.ONE,
"TapChangerAutomaton")
model_mapping.add_tap_changer_blocking_automation_system(dynamic_id, parameter_id, "TRA", "BUS",
"TapChangerBlockingAutomaton")


def test_dataframe_mapping():
def test_dynamic_dataframe_mapping():
network = pp.network.create_ieee9()
model_mapping = dyn.ModelMapping()
load_mapping_df = pd.DataFrame.from_dict({"static_id": [network.get_loads().loc[l].name for l in network.get_loads().index],
"parameter_set_id": ["LAB" for l in network.get_loads().index],
"model_name": "LoadPQ"})
"model_name": ["LoadPQ" for l in network.get_loads().index]})
generator_mapping_df = pd.DataFrame.from_dict({"static_id": [network.get_generators().loc[l].name for l in network.get_generators().index],
"parameter_set_id": ["GSTWPR" for l in network.get_generators().index],
"model_name": "GeneratorSynchronousThreeWindings"})
"model_name": ["GeneratorSynchronousThreeWindings" for l in network.get_generators().index]})

model_mapping.add_all_dynamic_mappings(dyn.DynamicMappingType.BASE_LOAD,
load_mapping_df.set_index("static_id"))
Expand All @@ -49,6 +79,13 @@ def test_add_event():
events.add_node_fault("BUS", 12, 2, 0.1, 0.2)


def test_event_dataframe_mapping():
events = dyn.EventMapping()
event_mapping_df = pd.DataFrame.from_dict({"static_id": ["GEN"], "start_time": [10], "delta_p": [2]})

events.add_all_event_mappings(dyn.EventMappingType.ACTIVE_POWER_VARIATION, event_mapping_df.set_index("static_id"))


def test_add_curve():
timeseries = dyn.CurveMapping()
timeseries.add_curves("test_load_id_1", ["load_PPu", "load_QPu"])
Expand Down

0 comments on commit 8ab50d2

Please sign in to comment.