Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Display units feeder info #799

Merged
merged 15 commits into from
Jul 31, 2024
Merged
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
Loading