Skip to content

Commit

Permalink
Display units feeder info (#799)
Browse files Browse the repository at this point in the history
Signed-off-by: Tiphaine Mouminous <[email protected]>
  • Loading branch information
unetablettedechocolat committed Jul 31, 2024
1 parent dd27a7a commit d198dc7
Show file tree
Hide file tree
Showing 13 changed files with 1,241 additions and 14 deletions.
3 changes: 3 additions & 0 deletions cpp/powsybl-cpp/powsybl-api.h
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,9 @@ typedef struct sld_parameters_struct {
unsigned char topological_coloring;
char* component_library;
unsigned char display_current_feeder_info;
char* active_power_unit;
char* reactive_power_unit;
char* current_unit;
} sld_parameters;

typedef struct nad_parameters_struct {
Expand Down
6 changes: 6 additions & 0 deletions cpp/powsybl-cpp/powsybl-cpp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1200,6 +1200,9 @@ SldParameters::SldParameters(sld_parameters* src) {
topological_coloring = (bool) src->topological_coloring;
component_library = toString(src->component_library);
display_current_feeder_info = (bool) src->display_current_feeder_info;
active_power_unit = toString(src->active_power_unit);
reactive_power_unit = toString(src->reactive_power_unit);
current_unit = toString(src->current_unit);
}

NadParameters::NadParameters(nad_parameters* src) {
Expand Down Expand Up @@ -1227,6 +1230,9 @@ void SldParameters::sld_to_c_struct(sld_parameters& res) const {
res.topological_coloring = (unsigned char) topological_coloring;
res.component_library = copyStringToCharPtr(component_library);
res.display_current_feeder_info = (unsigned char) display_current_feeder_info;
res.active_power_unit = copyStringToCharPtr(active_power_unit);
res.reactive_power_unit = copyStringToCharPtr(reactive_power_unit);
res.current_unit = copyStringToCharPtr(current_unit);
}

void NadParameters::nad_to_c_struct(nad_parameters& res) const {
Expand Down
3 changes: 3 additions & 0 deletions cpp/powsybl-cpp/powsybl-cpp.h
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,9 @@ class SldParameters {
bool topological_coloring;
std::string component_library;
bool display_current_feeder_info;
std::string active_power_unit;
std::string reactive_power_unit;
std::string current_unit;
};

enum class NadLayoutType {
Expand Down
5 changes: 4 additions & 1 deletion cpp/pypowsybl-cpp/bindings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,10 @@ PYBIND11_MODULE(_pypowsybl, m) {
.def_readwrite("tooltip_enabled", &pypowsybl::SldParameters::tooltip_enabled)
.def_readwrite("topological_coloring", &pypowsybl::SldParameters::topological_coloring)
.def_readwrite("component_library", &pypowsybl::SldParameters::component_library)
.def_readwrite("display_current_feeder_info", &pypowsybl::SldParameters::display_current_feeder_info);
.def_readwrite("display_current_feeder_info", &pypowsybl::SldParameters::display_current_feeder_info)
.def_readwrite("active_power_unit", &pypowsybl::SldParameters::active_power_unit)
.def_readwrite("reactive_power_unit", &pypowsybl::SldParameters::reactive_power_unit)
.def_readwrite("current_unit", &pypowsybl::SldParameters::current_unit);

py::enum_<pypowsybl::NadLayoutType>(m, "NadLayoutType")
.value("FORCE_LAYOUT", pypowsybl::NadLayoutType::FORCE_LAYOUT)
Expand Down
364 changes: 364 additions & 0 deletions docs/_static/images/ieee14_SldParam_activepowerunit.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
394 changes: 394 additions & 0 deletions docs/_static/images/ieee14_SldParam_currentunit.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
364 changes: 364 additions & 0 deletions docs/_static/images/ieee14_SldParam_reactivepowerunit.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
52 changes: 42 additions & 10 deletions docs/user_guide/network_visualization.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,7 @@ Single-line diagrams can be customized through SldParameters:
>>> network = pp.network.create_ieee14()
>>> result = pp.loadflow.run_ac(network)
>>> network.get_single_line_diagram('VL4',parameters = pp.network.SldParameters(use_name = False, center_name = False, diagonal_label = False, nodes_infos = False, tooltip_enabled = False, topological_coloring = True, component_library = 'Convergence', display_current_feeder_info = False))
>>> network.get_single_line_diagram('VL4',parameters = pp.network.SldParameters(use_name = False, center_name = False, diagonal_label = False, nodes_infos = False, tooltip_enabled = False, topological_coloring = True, component_library = 'Convergence'))
- use_name: if true, display components names instead of their id (default value false)
- center_name: if true, center the names of feeders (default value false)
Expand All @@ -44,6 +43,9 @@ Single-line diagrams can be customized through SldParameters:
- tooltip_enabled: if true, display the name of the component pointed by the cursor (default value false)
- topological_coloring: if true, set each electrical nodes with a different colour (default value true)
- component_library: choose component library (default value 'Convergence')
- active_power_unit: display unit of active power (default value "")
- reactive_power_unit: display unit of reactive power (default value "")
- current_unit: display unit of current (default value "")
- display_current_feeder_info: if true, display current feeder value (default value False)


Expand All @@ -60,7 +62,7 @@ Let's see some examples down below:
.. image:: ../_static/images/ieee14_SldParam_default.svg
:class: forced-white-background

- with use_name = true
- with use_name = True

.. code-block:: python
Expand All @@ -70,7 +72,7 @@ Let's see some examples down below:
.. image:: ../_static/images/ieee14_SldParam_usename.svg
:class: forced-white-background

- with center_name = true
- with center_name = True

.. code-block:: python
Expand All @@ -80,7 +82,7 @@ Let's see some examples down below:
.. image:: ../_static/images/ieee14_SldParam_centername.svg
:class: forced-white-background

- with diagonal_label = true
- with diagonal_label = True

.. code-block:: python
Expand All @@ -90,7 +92,7 @@ Let's see some examples down below:
.. image:: ../_static/images/ieee14_SldParam_diagonallabel.svg
:class: forced-white-background

- with nodes_infos = true
- with nodes_infos = True

.. code-block:: python
Expand All @@ -100,7 +102,7 @@ Let's see some examples down below:
.. image:: ../_static/images/ieee14_SldParam_nodesinfos.svg
:class: forced-white-background

- with tooltip enabled
- with tooltip_enabled = True

.. code-block:: python
Expand All @@ -110,7 +112,7 @@ Let's see some examples down below:
.. image:: ../_static/images/ieee14_SldParam_tooltipenabledtrue.png
:class: forced-white-background

- with topological coloring = true
- with topological_coloring = True

.. code-block:: python
Expand All @@ -122,7 +124,7 @@ Let's see some examples down below:
.. image:: ../_static/images/SldParam_topologicalcoloringtrue.svg
:class: forced-white-background

- with topological coloring = false
- with topological_coloring = False

.. code-block:: python
Expand All @@ -143,7 +145,7 @@ Let's see some examples down below:
.. image:: ../_static/images/ieee14_SldParam_complib_flatdesign.svg
:class: forced-white-background

- with display current feeder info
- with display_current_feeder_info = True

.. code-block:: python
Expand All @@ -153,6 +155,36 @@ Let's see some examples down below:
.. image:: ../_static/images/ieee14_SldParam_displaycurrentfeederinfo.svg
:class: forced-white-background

- with active_power_unit = "MW"

.. code-block:: python
>>> param = pn.SldParameters(active_power_unit = "MW")
>>> network.get_single_line_diagram('VL4', parameters = param)
.. image:: ../_static/images/ieee14_SldParam_activepowerunit.svg
:class: forced-white-background

- with reactive_power_unit = "MVAR"

.. code-block:: python
>>> param = pn.SldParameters(reactive_power_unit = "MVAR")
>>> network.get_single_line_diagram('VL4', parameters = param)
.. image:: ../_static/images/ieee14_SldParam_reactivepowerunit.svg
:class: forced-white-background


- with current_unit = "A"

.. code-block:: python
>>> param = pn.SldParameters(display_current_feeder_info = True, current_unit = "A")
>>> network.get_single_line_diagram('VL4', parameters = param)
.. image:: ../_static/images/ieee14_SldParam_currentunit.svg
:class: forced-white-background

It is also possible to display a multi-substation single line diagram (currently a beta feature):

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1074,6 +1074,25 @@ public interface SldParametersPointer extends PointerBase {

@CField("display_current_feeder_info")
void setDisplayCurrentFeederInfo(boolean displayCurrentInfo);

@CField("active_power_unit")
CCharPointer getActivePowerUnit();

@CField("active_power_unit")
void setActivePowerUnit(CCharPointer activePowerUnit);

@CField("reactive_power_unit")
CCharPointer getReactivePowerUnit();

@CField("reactive_power_unit")
void setReactivePowerUnit(CCharPointer reactivePowerUnit);

@CField("current_unit")
CCharPointer getCurrentUnit();

@CField("current_unit")
void setCurrentUnit(CCharPointer currentUnit);

}

@CStruct("nad_parameters")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -879,6 +879,9 @@ public static void copyToCSldParameters(SldParameters parameters, SldParametersP
cParameters.setTooltipEnabled(parameters.getSvgParameters().isTooltipEnabled());
cParameters.setComponentLibrary(CTypeUtil.toCharPtr(parameters.getComponentLibrary().getName()));
cParameters.setDisplayCurrentFeederInfo(parameters.getSvgParameters().isDisplayCurrentFeederInfo());
cParameters.setActivePowerUnit(CTypeUtil.toCharPtr(parameters.getSvgParameters().getActivePowerUnit()));
cParameters.setReactivePowerUnit(CTypeUtil.toCharPtr(parameters.getSvgParameters().getReactivePowerUnit()));
cParameters.setCurrentUnit(CTypeUtil.toCharPtr(parameters.getSvgParameters().getCurrentUnit()));
}

public static SldParametersPointer convertToSldParametersPointer(SldParameters parameters) {
Expand Down Expand Up @@ -954,7 +957,11 @@ public static SldParameters convertSldParameters(SldParametersPointer sldParamet
.setLabelDiagonal(sldParametersPtr.isDiagonalLabel())
.setAddNodesInfos(sldParametersPtr.isAddNodesInfos())
.setTooltipEnabled(sldParametersPtr.getTooltipEnabled())
.setDisplayCurrentFeederInfo(sldParametersPtr.isDisplayCurrentFeederInfo());
.setDisplayCurrentFeederInfo(sldParametersPtr.isDisplayCurrentFeederInfo())
.setTooltipEnabled(sldParametersPtr.getTooltipEnabled())
.setActivePowerUnit(CTypeUtil.toString(sldParametersPtr.getActivePowerUnit()))
.setReactivePowerUnit(CTypeUtil.toString(sldParametersPtr.getReactivePowerUnit()))
.setCurrentUnit(CTypeUtil.toString(sldParametersPtr.getCurrentUnit()));
return sldParameters;
}

Expand Down
3 changes: 3 additions & 0 deletions pypowsybl/_pypowsybl.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,9 @@ class SldParameters:
topological_coloring: bool
component_library: str
display_current_feeder_info: bool
active_power_unit: str
reactive_power_unit: str
current_unit: str
def __init__(self) -> None: ...

class NadLayoutType:
Expand Down
24 changes: 23 additions & 1 deletion pypowsybl/network/impl/sld_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ class SldParameters:

def __init__(self, use_name: bool = False, center_name: bool = False, diagonal_label: bool = False,
nodes_infos: bool = False, tooltip_enabled: bool = False, topological_coloring: bool = True,
component_library: str = 'Convergence', display_current_feeder_info: bool = False):
component_library: str = 'Convergence', display_current_feeder_info: bool = False,
active_power_unit: str = "", reactive_power_unit: str = "", current_unit: str = ""):
self._use_name = use_name
self._center_name = center_name
self._diagonal_label = diagonal_label
Expand All @@ -22,6 +23,9 @@ def __init__(self, use_name: bool = False, center_name: bool = False, diagonal_l
self._topological_coloring = topological_coloring
self._component_library = component_library
self._display_current_feeder_info = display_current_feeder_info
self._active_power_unit = active_power_unit
self._reactive_power_unit = reactive_power_unit
self._current_unit = current_unit

@property
def use_name(self) -> bool:
Expand Down Expand Up @@ -63,6 +67,21 @@ def display_current_feeder_info(self) -> bool:
"""when True display current feeder info"""
return self._display_current_feeder_info

@property
def active_power_unit(self) -> str:
"""unit of active power"""
return self._active_power_unit

@property
def reactive_power_unit(self) -> str:
"""unit of reactive power"""
return self._reactive_power_unit

@property
def current_unit(self) -> str:
"""unit of current"""
return self._current_unit

def _to_c_parameters(self) -> _pp.SldParameters:
c_parameters = _pp.SldParameters()
c_parameters.use_name = self._use_name
Expand All @@ -73,4 +92,7 @@ def _to_c_parameters(self) -> _pp.SldParameters:
c_parameters.tooltip_enabled = self._tooltip_enabled
c_parameters.component_library = self._component_library
c_parameters.display_current_feeder_info = self._display_current_feeder_info
c_parameters.active_power_unit = self._active_power_unit
c_parameters.reactive_power_unit = self._reactive_power_unit
c_parameters.current_unit = self._current_unit
return c_parameters
9 changes: 8 additions & 1 deletion tests/test_network.py
Original file line number Diff line number Diff line change
Expand Up @@ -785,10 +785,14 @@ def test_sld_parameters():
assert not parameters.display_current_feeder_info
assert parameters.topological_coloring
assert parameters.component_library == 'Convergence'
assert parameters.active_power_unit == ""
assert parameters.reactive_power_unit == ""
assert parameters.current_unit == ""

parameters = SldParameters(use_name=True, center_name=True, diagonal_label=True,
nodes_infos=True, tooltip_enabled=True, topological_coloring=False,
component_library='FlatDesign', display_current_feeder_info=True)
component_library='FlatDesign', display_current_feeder_info=True,
active_power_unit='a', reactive_power_unit='b', current_unit='c')
assert parameters.use_name
assert parameters.center_name
assert parameters.diagonal_label
Expand All @@ -797,6 +801,9 @@ def test_sld_parameters():
assert parameters.display_current_feeder_info
assert not parameters.topological_coloring
assert parameters.component_library == 'FlatDesign'
assert parameters.active_power_unit == 'a'
assert parameters.reactive_power_unit == 'b'
assert parameters.current_unit == 'c'


def test_layout_parameters():
Expand Down

0 comments on commit d198dc7

Please sign in to comment.