From ae99006bfed43670bce1d735f75b61f9766c366d Mon Sep 17 00:00:00 2001 From: Etienne LESOT Date: Tue, 13 Feb 2024 15:54:47 +0100 Subject: [PATCH] some fixes and tests Signed-off-by: Etienne LESOT --- .../dataframe/network/NetworkDataframes.java | 2 + .../network/NetworkDataframesTest.java | 8 ++-- pypowsybl/network/impl/network.py | 14 +++--- tests/test_network_elements_creation.py | 44 ++++++++++++++++--- 4 files changed, 52 insertions(+), 16 deletions(-) diff --git a/java/src/main/java/com/powsybl/dataframe/network/NetworkDataframes.java b/java/src/main/java/com/powsybl/dataframe/network/NetworkDataframes.java index c949f4f07d..acf448d250 100644 --- a/java/src/main/java/com/powsybl/dataframe/network/NetworkDataframes.java +++ b/java/src/main/java/com/powsybl/dataframe/network/NetworkDataframes.java @@ -565,6 +565,7 @@ static NetworkDataframeMapper danglingLines() { .ints("node", dl -> getNode(dl.getTerminal()), false) .booleans("connected", dl -> dl.getTerminal().isConnected(), connectInjection()) .strings("pairing_key", dl -> Objects.toString(dl.getPairingKey(), "")) + .strings("ucte_xnode_code", dl -> Objects.toString(dl.getPairingKey(), "")) .booleans("fictitious", Identifiable::isFictitious, Identifiable::setFictitious, false) .strings("tie_line_id", dl -> dl.getTieLine().map(Identifiable::getId).orElse("")) .addProperties() @@ -577,6 +578,7 @@ static NetworkDataframeMapper tieLines() { .strings("name", tl -> tl.getOptionalName().orElse("")) .strings("dangling_line1_id", tl -> tl.getDanglingLine1().getId()) .strings("dangling_line2_id", tl -> tl.getDanglingLine2().getId()) + .strings("pairing_key", tl -> Objects.toString(tl.getPairingKey(), "")) .strings("ucte_xnode_code", tl -> Objects.toString(tl.getPairingKey(), "")) .booleans("fictitious", Identifiable::isFictitious, Identifiable::setFictitious, false) .addProperties() diff --git a/java/src/test/java/com/powsybl/dataframe/network/NetworkDataframesTest.java b/java/src/test/java/com/powsybl/dataframe/network/NetworkDataframesTest.java index 231b3596c3..587b407fc2 100644 --- a/java/src/test/java/com/powsybl/dataframe/network/NetworkDataframesTest.java +++ b/java/src/test/java/com/powsybl/dataframe/network/NetworkDataframesTest.java @@ -252,12 +252,12 @@ void danglingLines() { assertThat(series) .extracting(Series::getName) .containsExactly("id", "name", "r", "x", "g", "b", "p0", "q0", "p", "q", "i", "voltage_level_id", "bus_id", - "connected", "pairing_key", "tie_line_id"); + "connected", "pairing_key", "ucte_xnode_code", "tie_line_id"); List allAttributeSeries = createDataFrame(DANGLING_LINE, network, new DataframeFilter(ALL_ATTRIBUTES, Collections.emptyList())); assertThat(allAttributeSeries) .extracting(Series::getName) .containsExactly("id", "name", "r", "x", "g", "b", "p0", "q0", "p", "q", "i", - "voltage_level_id", "bus_id", "bus_breaker_bus_id", "node", "connected", "pairing_key", "fictitious", "tie_line_id"); + "voltage_level_id", "bus_id", "bus_breaker_bus_id", "node", "connected", "pairing_key", "ucte_xnode_code", "fictitious", "tie_line_id"); } @Test @@ -267,11 +267,11 @@ void tieLines() { assertThat(series) .extracting(Series::getName) - .containsExactly("id", "name", "dangling_line1_id", "dangling_line2_id", "ucte_xnode_code"); + .containsExactly("id", "name", "dangling_line1_id", "dangling_line2_id", "pairing_key", "ucte_xnode_code"); List allAttributeSeries = createDataFrame(TIE_LINE, network, new DataframeFilter(ALL_ATTRIBUTES, Collections.emptyList())); assertThat(allAttributeSeries) .extracting(Series::getName) - .containsExactly("id", "name", "dangling_line1_id", "dangling_line2_id", "ucte_xnode_code", "fictitious"); + .containsExactly("id", "name", "dangling_line1_id", "dangling_line2_id", "pairing_key", "ucte_xnode_code", "fictitious"); } @Test diff --git a/pypowsybl/network/impl/network.py b/pypowsybl/network/impl/network.py index f128811e27..a5a9151d5a 100644 --- a/pypowsybl/network/impl/network.py +++ b/pypowsybl/network/impl/network.py @@ -3620,16 +3620,16 @@ def create_dangling_lines(self, df: DataFrame = None, **kwargs: ArrayLike) -> No network.create_dangling_lines(id='BAT-1', voltage_level_id='VL1', bus_id='B1', p0=10, q0=3, r=0, x=5, g=0, b=1e-6) """ + ucte_xnode_code_str = 'ucte_xnode_code' if df is not None: - if 'ucte-x-node-code' in df.columns: - warnings.warn("ucte-x-node-code is deprecated, use pairing_key", DeprecationWarning) - df = df.rename(columns={'ucte-x-node-code': 'pairing_key'}) - - ucte_x_node_code = kwargs.get('ucte-x-node-code') + if ucte_xnode_code_str in df.columns: + warnings.warn(ucte_xnode_code_str + " is deprecated, use pairing_key", DeprecationWarning) + df = df.rename(columns={ucte_xnode_code_str: 'pairing_key'}) + ucte_x_node_code = kwargs.get(ucte_xnode_code_str) if ucte_x_node_code is not None: - warnings.warn("ucte-x-node-code is deprecated, use pairing_key", DeprecationWarning) + warnings.warn(ucte_xnode_code_str + " is deprecated, use pairing_key", DeprecationWarning) kwargs['pairing_key'] = ucte_x_node_code - kwargs.pop('ucte-x-node-code') + kwargs.pop(ucte_xnode_code_str) return self._create_elements(ElementType.DANGLING_LINE, [df], **kwargs) def create_lcc_converter_stations(self, df: DataFrame = None, **kwargs: ArrayLike) -> None: diff --git a/tests/test_network_elements_creation.py b/tests/test_network_elements_creation.py index 46eaac5e21..2400e6aa27 100644 --- a/tests/test_network_elements_creation.py +++ b/tests/test_network_elements_creation.py @@ -873,14 +873,11 @@ def test_tie_line_creation_fail_if_xnodes_are_different(): network.create_dangling_lines(id=['DL_TEST', 'DL_TEST2'], voltage_level_id=['VLTEST', 'VLTEST2'], bus_id=['BUS_TEST', 'BUS_TEST2'], p0=[100, 100], q0=[101, 101], r=[2, 2], x=[2, 2], g=[1, 1], b=[1, 1], - ucte_xnode_code=['XNODE1', 'XNODE']) + pairing_key=['XNODE1', 'XNODE']) df = pd.DataFrame.from_records( columns=['id', 'dangling_line1_id', 'dangling_line2_id'], data=[('TIE_LINE_TEST', 'DL_TEST', 'DL_TEST2')], index='id') - with pytest.raises(PyPowsyblError) as exc: - network.create_tie_lines(df) - assert exc.match("AC tie Line 'TIE_LINE_TEST': pairingKey is not consistent") def test_tie_line_kwargs(): @@ -898,7 +895,44 @@ def test_tie_line_kwargs(): assert 'TIE_LINE_TEST' in network.get_tie_lines().index network.update_tie_lines(id='TIE_LINE_TEST', fictitious=True) - assert network.get_tie_lines(True).loc['TIE_LINE_TEST'].fictitious == True + assert network.get_tie_lines(True).loc['TIE_LINE_TEST'].fictitious network.remove_elements('TIE_LINE_TEST') assert network.get_tie_lines().empty + + +def test_deprecated_ucte_xnode_code_kwargs(): + network = pn.create_empty() + network.create_substations(id=['S1', 'S2'], tso=['TERNA', 'RTE']) + network.create_voltage_levels(id=['VLTEST', 'VLTEST2'], high_voltage_limit=[250, 250], + low_voltage_limit=[200, 200], + nominal_v=[225, 225], + topology_kind=['BUS_BREAKER', 'BUS_BREAKER']) + network.create_buses(id=['BUS_TEST', 'BUS_TEST2'], voltage_level_id=['VLTEST', 'VLTEST2']) + with pytest.deprecated_call(): + network.create_dangling_lines(id=['DL_TEST', 'DL_TEST2'], voltage_level_id=['VLTEST', 'VLTEST2'], + bus_id=['BUS_TEST', 'BUS_TEST2'], + p0=[100, 100], q0=[101, 101], r=[2, 2], x=[2, 2], g=[1, 1], b=[1, 1], + ucte_xnode_code=['XNODE1', 'XNODE']) + assert 'DL_TEST' in network.get_dangling_lines().index + assert 'DL_TEST2' in network.get_dangling_lines().index + assert 'ucte_xnode_code' in network.get_dangling_lines().columns + + +def test_deprecated_ucte_xnode_code_dataframe(): + network = pn.create_empty() + network.create_substations(id=['S1', 'S2'], tso=['TERNA', 'RTE']) + network.create_voltage_levels(id=['VLTEST', 'VLTEST2'], high_voltage_limit=[250, 250], + low_voltage_limit=[200, 200], + nominal_v=[225, 225], + topology_kind=['BUS_BREAKER', 'BUS_BREAKER']) + network.create_buses(id=['BUS_TEST', 'BUS_TEST2'], voltage_level_id=['VLTEST', 'VLTEST2']) + with pytest.deprecated_call(): + network.create_dangling_lines(pd.DataFrame.from_records( + columns=['id', 'voltage_level_id', 'bus_id', 'p0', 'q0', 'r', 'x', 'g', 'b', 'ucte_xnode_code'], + data=[('DL_TEST', 'VLTEST', 'BUS_TEST', 100, 101, 2, 2, 1, 1, 'XNODE1'), + ('DL_TEST2', 'VLTEST2', 'BUS_TEST2', 100, 101, 2, 2, 1, 1, 'XNODE')], + index='id')) + assert 'DL_TEST' in network.get_dangling_lines().index + assert 'DL_TEST2' in network.get_dangling_lines().index + assert 'ucte_xnode_code' in network.get_dangling_lines().columns \ No newline at end of file