A PowSyBl and Python integration based on GraalVM native image

Overview

PyPowSyBl

Actions Status Quality Gate Status Coverage PyPI Latest Release Documentation Status MPL-2.0 License Join the community on Spectrum Slack

The PyPowSyBl project gives access PowSyBl Java framework to Python developers. This Python integration relies on GraalVM to compile Java code to a native library.

Notebooks

Notebooks demonstrating PyPowSyBl features can be found in this repository.

Installation

PyPowSyBl is released on PyPi.

First, make sure you have an up-to-date version of pip and setuptools:

pip3 install --upgrade setuptools pip --user

Then you can install PyPowSyBl using pip:

pip3 install pypowsybl --user

Build from sources

Requirements:

To build from sources and install PyPowSyBl package:

git clone --recursive https://github.com/powsybl/pypowsybl.git
export JAVA_HOME=<path to GraalVM>
pip3 install --upgrade setuptools pip --user
pip3 install . --user

To run unit tests:

python3 -m unittest discover --start-directory tests

While developing, you may find it convenient to use the develop (or editable) mode of installation:

pip install -e .
# or to build the C extension with debug symbols:
python setup.py build --debug develop --user

Please refer to pip and setuptools documentations for more information.

Contribute to documentation

To run the tests included in the documentation:

cd docs/
make doctest

And then, to build the documentation:

make html
firefox _build/html/index.html

Web pages are generated in repository _build/html/ for preview before openning a pull request.

Usage

First, we have to import pypowsybl:

import pypowsybl as pp

Then we can display the version of the PowSyBl modules:

pp.print_version()
Powsybl versions:
+-----------------------------+-----------------------+------------+------------------------------------------+-------------------------------+
| Repository name             | Maven project version | Git branch | Git version                              | Build timestamp               |
+-----------------------------+-----------------------+------------+------------------------------------------+-------------------------------+
| powsybl-open-loadflow       | X.Y.Z                 |            |                                          |                               |
| powsybl-single-line-diagram | X.Y.Z                 |            |                                          |                               |
| powsybl-core                | X.Y.Z                 |            |                                          |                               |
+-----------------------------+-----------------------+------------+------------------------------------------+-------------------------------+

We can create an IEEE 14 buses network and run a load flow computation:

n = pp.network.create_ieee14()
results = pp.loadflow.run_ac(n)
for result in results:
    print(result)
LoadFlowComponentResult(component_num=0, status=CONVERGED, iteration_count=3, slack_bus_id='VL4_0', slack_bus_active_power_mismatch=-0.006081)

We can re-run the load flow computation in DC mode:

results = pp.loadflow.run_dc(n)

By default, the application read configs from ${HOME}/.itools/config.yml We can disable this with command :

pp.set_config_read(False)

We can now get buses data (like any other network elements) as a Pandas dataframe:

buses = n.get_buses()
print(buses)
        v_mag  v_angle
VL1_0   1.060     0.00
VL2_0   1.045    -4.98
VL3_0   1.010   -12.72
VL4_0   1.019   -10.33
VL5_0   1.020    -8.78
VL6_0   1.070   -14.22
VL7_0   1.062   -13.37
VL8_0   1.090   -13.36
VL9_0   1.056   -14.94
VL10_0  1.051   -15.10
VL11_0  1.057   -14.79
VL12_0  1.055   -15.07
VL13_0  1.050   -15.16
VL14_0  1.036   -16.04

To disconnect or reconnect a line:

n.disconnect('L1-2-1')
n.connect('L1-2-1')

To open or close a switch:

n.open_switch('a_switch')
n.close_switch('a_switch')

To go further, you can also load a case file instead of creating the IEEE 14 buses network:

n = pp.network.load('test.uct')

And dump the network to another format:

n.dump('test.xiidm', 'XIIDM')

We can generate a single line diagram for a voltage level in the SVG format:

n.write_single_line_diagram_svg('VL1', '/tmp/VL1.svg')

To run a security analysis and print results table:

sa = pp.security.create_analysis()
sa.add_single_element_contingency('L1-2-1', 'c1')
sa.add_single_element_contingency('L2-3-1', 'c2')
sa.add_multiple_elements_contingency(['L1-2-1', 'L1-5-1'], 'c3')
sa_result = sa.run_ac(n)
print(sa_result.get_table())
+----------------+-----------+--------------+----------------+------------+-------+------------+---------------------+-----------------+-------+------+
| Contingency ID |   Status  | Equipment ID | Equipment name | Limit type | Limit | Limit name | Acceptable duration | Limit reduction | Value | Side |
+----------------+-----------+--------------+----------------+------------+-------+------------+---------------------+-----------------+-------+------+
|       c3       | CONVERGED |              |                |            |       |            |                     |                 |       |      |
|       c1       | CONVERGED |              |                |            |       |            |                     |                 |       |      |
|       c2       | CONVERGED |              |                |            |       |            |                     |                 |       |      |
+----------------+-----------+--------------+----------------+------------+-------+------------+---------------------+-----------------+-------+------+

To run a sensitivity analysis and print post contingency sensitivity matrix (Pandas dataframe):

sa = pp.sensitivity.create_dc_analysis()
sa.add_single_element_contingency('L1-2-1')
sa.set_branch_flow_factor_matrix(['L1-5-1', 'L2-3-1'], ['B1-G', 'B2-G', 'B3-G'])
sa_result = sa.run(n)
df = sa_result.get_branch_flows_sensitivity_matrix('L1-2-1')
print(df)
      L1-5-1    L2-3-1
B1-G     0.5 -0.084423
B2-G    -0.5  0.084423
B3-G    -0.5 -0.490385
Comments
  • Plugin system for network data tables

    Plugin system for network data tables

    • Do you want to request a feature or report a bug?

    Feature.

    • What is the current behavior?

    The data series available for each type of equipment are "hard coded" in pypowsybl.

    • What is the expected behavior?

    In order to make available third party IIDM extensions data from python, we could add a plugin system so that extensions provider can define new columns to be appended to equipments dataframes.

    Extensions providerq will need to implement a service for that, a minimal spec would be:

    interface NetworkExtensionSeriesProvider {
        String getExtensionName();
        DataframeElementType getElementType();
        void addSeries(NetworkDataframeMapperBuilder builder);
    }
    

    At the time of mappers creation, we will look for all the series provider for the current equipment type through the ServiceLoader.

    Note: The order of columns should be stable between executions, we could ensure that by sorting providers by their extension name.

    • What is the motivation / use case for changing the behavior?

    Make IIDM extensions data available to python users.

    enhancement 
    opened by sylvlecl 10
  • Looking for an example to create a system from scratch

    Looking for an example to create a system from scratch

    • Do you want to request a feature or report a bug? Feature request (an example)

    • What is the current behavior? I'm looking to load a power system test case from ANDES to pypowsybl. Currently, there is no tutorial on creating a power system from scratch. I looked at the API; it appears that I should call create_ functions on an empty system, but I'm not sure about the correct sequence.

    Using version 0.13.0, I tried the following, and it throws an error:

    new = pp.network.create_empty()
    new.create_buses(id=["1"], name=["Bus_1"], voltage_level_id = ["VL1"])
    
    ---------------------------------------------------------------------------
    PyPowsyblError                            Traceback (most recent call last)
    Input In [80], in <cell line: 1>()
    ----> 1 new.create_buses(id=["1"], name=["Bus_1"], voltage_level_id = ["VL1"])
    
    File ~/mambaforge/envs/a/lib/python3.9/site-packages/pypowsybl/network.py:2578, in Network.create_buses(self, df, **kwargs)
       2562 def create_buses(self, df: _DataFrame = None, **kwargs: _ArrayLike) -> None:
       2563     """
       2564     Creates buses.
       2565 
       (...)
       2576         **kwargs: Attributes as keyword arguments.
       2577     """
    -> 2578     return self._create_elements(ElementType.BUS, [df], **kwargs)
    
    File ~/mambaforge/envs/a/lib/python3.9/site-packages/pypowsybl/network.py:2492, in Network._create_elements(self, element_type, dfs, **kwargs)
       2490     else:
       2491         c_dfs.append(_create_c_dataframe(df, metadata[i]))
    -> 2492 _pp.create_element(self._handle, c_dfs, element_type)
    
    PyPowsyblError: 
    

    The error output is not very informative. Also tried passing a dataframe with these fields, but got

    ---------------------------------------------------------------------------
    RuntimeError                              Traceback (most recent call last)
    Input In [83], in <cell line: 1>()
    ----> 1 new.create_buses(df)
    
    File ~/mambaforge/envs/a/lib/python3.9/site-packages/pypowsybl/network.py:2578, in Network.create_buses(self, df, **kwargs)
       2562 def create_buses(self, df: _DataFrame = None, **kwargs: _ArrayLike) -> None:
       2563     """
       2564     Creates buses.
       2565 
       (...)
       2576         **kwargs: Attributes as keyword arguments.
       2577     """
    -> 2578     return self._create_elements(ElementType.BUS, [df], **kwargs)
    
    File ~/mambaforge/envs/a/lib/python3.9/site-packages/pypowsybl/network.py:2491, in Network._create_elements(self, element_type, dfs, **kwargs)
       2489         c_dfs.append(None)
       2490     else:
    -> 2491         c_dfs.append(_create_c_dataframe(df, metadata[i]))
       2492 _pp.create_element(self._handle, c_dfs, element_type)
    
    File ~/mambaforge/envs/a/lib/python3.9/site-packages/pypowsybl/utils/dataframes.py:102, in _create_c_dataframe(df, series_metadata)
        100     columns_values.append(series.values)
        101     is_index.append(False)
    --> 102 return _pp.create_dataframe(columns_values, columns_names, columns_types, is_index)
    
    RuntimeError: Unable to cast Python instance to C++ type (compile in debug mode for details)
    

    I wonder if you can put up an example for creating a case from scratch? It doesn't have to be complex; just a three-bus system with three lines, one load, two generators (slack and PV), and a shunt compensator.

    • What is the motivation / use case for changing the behavior?

    I'm looking to make ANDES interoperable with pypowsybl, which I believe has a huge potential.

    • Please tell us about your environment:
      • PowSyBl Version: 0.13.0
      • OS Version: Debian testing with 5.15.0-3-amd64
    opened by cuihantao 8
  • Get min_q and max_q at current power

    Get min_q and max_q at current power

    • Do you want to request a feature or report a bug? A feature

    • What is the current behavior? In the generators dataframe, min_q and max_q columns are filled with NaNs :

             name energy_source   target_p  min_p   max_p  min_q  max_q    target_v  target_q  voltage_regulator_on          p          q           i voltage_level_id     bus_id  connected        genreCvg
    id                                                                                                                                                                                                      
    .AGUAT 1              OTHER  43.000000    0.0  200.00    NaN    NaN  232.933334 -0.000000                  True -43.000000  75.072884  214.438040          .AGUA 6  .AGUA 6_0       True          FICTIF
    .AGUAT 2              OTHER  42.000000    0.0  200.00    NaN    NaN  232.933334 -0.000000                  True -42.000000  75.072884  213.216969          .AGUA 6  .AGUA 6_0       True          FICTIF
    .AMORT 1              OTHER   0.000000    0.0  250.00    NaN    NaN  418.323700 -0.000000                  True  -0.000000   1.536397    2.120461          .AMOR 7  .AMOR 7_0       True          FICTIF
    .AMORT 2              OTHER   0.000000    0.0  250.00    NaN    NaN  418.323700 -0.000000                  True  -0.000000   1.536397    2.120461          .AMOR 7  .AMOR 7_0       True          FICTIF
    .AMORT 3              OTHER   0.000000    0.0  250.00    NaN    NaN  418.323700  0.490841                  True  -0.000000   1.536397    2.120461          .AMOR 7  .AMOR 7_0       True          FICTIF
    ...       ...           ...        ...    ...     ...    ...    ...         ...       ...                   ...        ...        ...         ...              ...        ...        ...             ...
    VOVESIN3               WIND   0.180462    0.0   16.50    NaN    NaN   93.666534  0.000000                 False  -0.180462  -0.000000    1.119832          VOVESP4  VOVESP4_0       True          EOLIEN
    WALDIIN1              SOLAR   0.000000    0.0    2.45    NaN    NaN   65.146873  0.000000                 False  -0.000000        NaN         NaN          WALDIP3                 False  PHOTOVOLTAIQUE
    WALDIIN3              SOLAR   0.000000    0.0    2.45    NaN    NaN   65.146873  0.000000                 False  -0.000000        NaN         NaN          WALDIP3                 False  PHOTOVOLTAIQUE
    YQUELIN1              SOLAR   0.000000    0.0    2.00    NaN    NaN   94.075058  0.000000                 False  -0.000000        NaN         NaN          YQUELP4                 False  PHOTOVOLTAIQUE
    YZEURIN1              SOLAR   0.000000    0.0   10.20    NaN    NaN   65.871506  0.000000                 False  -0.000000        NaN         NaN          YZEURP3                 False  PHOTOVOLTAIQUE
    
    
    • What is the expected behavior? min_q and max_q columns are filled with their respective values at current power.

    • What is the motivation / use case for changing the behavior? I have to compute these limits myself, even though this function exists in powsybl and could be used at the dataframe creation

    • Please tell us about your environment:

      • PowSyBl Version: 0.10.0
      • OS Version: Windows 10
    good first issue 
    opened by vincentbarbesant 7
  • Per unit view of the network

    Per unit view of the network

    Signed-off-by: Etienne Lesot [email protected]

    Please check if the PR fulfills these requirements (please use '[x]' to check the checkboxes, or submit the PR and then click the checkboxes)

    • [ ] The commit message follows our guidelines
    • [ ] Tests for the changes have been added (for bug fixes / features)
    • [ ] Docs have been added / updated (for bug fixes / features)

    Does this PR already have an issue describing the problem ? If so, link to this issue using '#XXX' and skip the rest

    #148

    What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)

    What is the current behavior? (You can also link to an open issue here)

    What is the new behavior (if this is a feature change)?

    Does this PR introduce a breaking change or deprecate an API? If yes, check the following:

    • [ ] The Breaking Change or Deprecated label has been added
    • [ ] The migration guide has been updated in the github wiki (What changes might users need to make in their application due to this PR?)

    Other information:

    (if any of the questions/checkboxes don't apply, please delete them entirely)

    status: ready-for-review 
    opened by EtienneLt 7
  • Missing Buses after CGMES Import

    Missing Buses after CGMES Import

    • Do you want to request a feature or report a bug?

    Bug

    • What is the current behavior?
    • It has been analysed that pypowsybl is missing buses which are actually modelled in SCADA and also is being modelled from the same CGMES in pandapower
    • If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem
    • pandapower is importing the same CGMES and the network has This pandapower network includes the following parameter tables:
      • bus (3165 elements)

    Surprisingly pypowsybl as well as Powsybl has only powsybl_net.get_buses().shape Out[64]: (89, 6)

    89 buses.

    • What is the expected behavior?
    • There has to be a detailed analysis for the missing buses.
    • I think (Guess) pypowsybl as well as powsybl is ignoring those buses whose SV files have v=0.0 and v_angle=0.0, but this should not be the case as they still need to be modelled for further topological/switch status changes
    • What is the motivation / use case for changing the behavior?
    • To be able to fully support the network model and include all the elements / Connectivity Nodes which are present in CGMES profile.
    • Please tell us about your environment:

      • PowSyBl Version: ... 0.17.0.dev1
      • OS Version: ... Fedora
    • Other information (e.g. detailed explanation, stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, spectrum, etc)

    (if a question doesn't apply, you can delete it)

    opened by AnkurArohi 6
  • Modifying/adding properties on network elements

    Modifying/adding properties on network elements

    • Do you want to request a feature or report a bug? Feature

    • What is the current behavior? Though optional attributes can be retrieve in element dataframes (via get_XXX() functions, e.g. 'get_generators(True)'), it is currently only possible to modify IIDM attributes (via update_XXX() functions). Attempt to modify an existing property YYY raises the error message :"no column named YYY"

    • What is the expected behavior? It would be very useful to be able to modify attributes that are not part of core IIDM (e.g. "property" or "extension"). If the attribute does not exist, it could even be added as a new property.

    • What is the motivation / use case for changing the behavior? The use-case is to attach custom information to network elements in order to ease further processing (e.g. time-series mapping)

    enhancement status: needs-design 
    opened by nicolaslhuillier 6
  • Create network elements

    Create network elements

    Please check if the PR fulfills these requirements (please use '[x]' to check the checkboxes, or submit the PR and then click the checkboxes)

    • [X] The commit message follows our guidelines
    • [X] Tests for the changes have been added (for bug fixes / features)
    • [ ] Docs have been added / updated (for bug fixes / features)

    What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)

    Feature.

    What is the current behavior? (You can also link to an open issue here)

    Network elements cannot be created through python methods.

    What is the new behavior (if this is a feature change)?

    We can now create network elements, for example:

    def test_create_network_and_run_loadflow():
        n = pn.create_empty()
        stations = pd.DataFrame.from_records(index='id', data=[
            {'id': 'S1', 'country': 'BE'},
            {'id': 'S2', 'country': 'DE'}
        ])
        n.create_substations(stations)
    
        voltage_levels = pd.DataFrame.from_records(index='id', data=[
            {'substation_id': 'S1', 'id': 'VL1', 'topology_kind': 'BUS_BREAKER', 'nominal_v': 400},
            {'substation_id': 'S2', 'id': 'VL2', 'topology_kind': 'BUS_BREAKER', 'nominal_v': 400},
        ])
        n.create_voltage_levels(voltage_levels)
    
        buses = pd.DataFrame.from_records(index='id', data=[
            {'voltage_level_id': 'VL1', 'id': 'B1'},
            {'voltage_level_id': 'VL2', 'id': 'B2'},
        ])
        n.create_buses(buses)
    
        lines = pd.DataFrame.from_records(index='id', data=[
            {'id': 'LINE', 'voltage_level1_id': 'VL1', 'voltage_level2_id': 'VL2', 'bus1_id': 'B1', 'bus2_id': 'B2',
             'r': 0.1, 'x': 1.0, 'g1': 0, 'b1': 1e-6, 'g2': 0, 'b2': 1e-6}
        ])
        n.create_lines(lines)
    
        loads = pd.DataFrame.from_records(index='id', data=[
            {'voltage_level_id': 'VL2', 'id': 'LOAD', 'bus_id': 'B2', 'p0': 100, 'q0': 10}
        ])
        n.create_loads(loads)
    
        generators = pd.DataFrame.from_records(index='id', data=[
            {'voltage_level_id': 'VL1', 'id': 'GEN', 'bus_id': 'B1', 'target_p': 100, 'min_p': 0, 'max_p': 200,
             'target_v': 400, 'voltage_regulator_on': True}
        ])
        n.create_generators(generators)
    
        import pypowsybl.loadflow as lf
        lf.run_ac(n)
    
        line = n.get_lines().loc['LINE']
        assert line.p2 == pytest.approx(-100, abs=1e-2)
        assert line.q2 == pytest.approx(-10, abs=1e-2)
        assert line.p1 == pytest.approx(100, abs=1e-1)
        assert line.q1 == pytest.approx(9.7, abs=1e-1)
    
    opened by EtienneLt 6
  • [WIP] Simplify build using skbuild + move C extension to pypowsybl package

    [WIP] Simplify build using skbuild + move C extension to pypowsybl package

    Please check if the PR fulfills these requirements (please use '[x]' to check the checkboxes, or submit the PR and then click the checkboxes)

    • [X] The commit message follows our guidelines
    • [ ] Tests for the changes have been added (for bug fixes / features)
    • [ ] Docs have been added / updated (for bug fixes / features)

    What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)

    Build refactoring

    What is the current behavior? (You can also link to an open issue here)

    • C extension is built using in-house distutils overrides (for Extension and build_ext commands)
    • C extension libraries are installed to root package, which is not best practice

    What is the new behavior (if this is a feature change)?

    Libraries are installed in pypowsybl package. We use scikit-build for the build.

    Does this PR introduce a breaking change or deprecate an API? If yes, check the following:

    • [ ] The Breaking Change or Deprecated label has been added
    • [ ] The migration guide has been updated in the github wiki (What changes might users need to make in their application due to this PR?)

    _pypowsybl is moved to powsybl._pypowsybl. However, it is not supposed to be used by the user.

    opened by sylvlecl 6
  • Ability to display single line diagrams in notebook environment

    Ability to display single line diagrams in notebook environment

    • Do you want to request a feature or report a bug?

    Feature

    • What is the current behavior?

    Single line diagrams can only be exported as SVG files to disk in the python API.

    • What is the expected behavior?

    It would be great to be able to visualize the single line diagram, in a jupyter notebook environment, without going through a file on disk.

    In order to achieve this, we can :

    • add a method to get the SVG as a string
    • add a method to display the SVG, when in a jupyter notebook

    For the second part, it would be great to be able to zoom in/out, and to drag around the image. We need to investigate if for example plotly or ipywidgets allow to do this with an SVG. jupyter-dash might actually be the most powerful option here, although it brings in a lot of dependencies.

    • What is the motivation / use case for changing the behavior?

    Network inspection in an interactive environment.

    enhancement 
    opened by sylvlecl 6
  • add fictitious attribute

    add fictitious attribute

    Signed-off-by: Etienne LESOT [email protected]

    Please check if the PR fulfills these requirements (please use '[x]' to check the checkboxes, or submit the PR and then click the checkboxes)

    • [ ] The commit message follows our guidelines
    • [ ] Tests for the changes have been added (for bug fixes / features)
    • [ ] Docs have been added / updated (for bug fixes / features)

    Does this PR already have an issue describing the problem ? If so, link to this issue using '#XXX' and skip the rest #465

    opened by EtienneLt 5
  • Equivalent Branches not modelled correctly in pypowsybl

    Equivalent Branches not modelled correctly in pypowsybl

    • Do you want to request a feature or report a bug? Bug

    • What is the current behavior?

    • pypowsybl and powsybl (guess) also is modelling Equivalent Branch Tag of CGMES to lines where as it should be actually modelled as series impedance.

    • The advantage is that the impedance can possibly have slightly different voltages at its ends and also from a modelling perspective it is not a correct representation of the CGMES profile/ Network Data Model.

    • If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem CGMES :

    <cim:EquivalentBranch rdf:ID="_d55fde5a-a2bd-597c-834e-304a83c39f36"> cim:IdentifiedObject.nameMEH SS1A WUE SSa1</cim:IdentifiedObject.name>

    pypowsybl after loading the zipped CGMES Network

    image

    • What is the expected behavior?

    All Equivalent Branches should be modelled as a new df in Network with name impedance

    • What is the motivation / use case for changing the behavior?
    • Close to real world/CGMES/DM modelling.

    • Not included in line losses results, N-1 Line contingency case etc

    • powsybl/IIDM in the background will not ignore/add a virtual trafo if these have different voltage levels on its terminals

    • Please tell us about your environment:

      • PowSyBl Version: ... 0.17.0.dev1
      • OS Version: ...Fedora
    • Other information (e.g. detailed explanation, stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, spectrum, etc)

    (if a question doesn't apply, you can delete it)

    opened by AnkurArohi 5
  • [Flow Decomposition] Update to Entsoe 2.1.0

    [Flow Decomposition] Update to Entsoe 2.1.0

    Signed-off-by: Hugo SCHINDLER [email protected]

    Please check if the PR fulfills these requirements (please use '[x]' to check the checkboxes, or submit the PR and then click the checkboxes)

    • [ ] The commit message follows our guidelines
    • [ ] Tests for the changes have been added (for bug fixes / features)
    • [ ] Docs have been added / updated (for bug fixes / features)

    Does this PR already have an issue describing the problem ? If so, link to this issue using '#XXX' and skip the rest

    What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)

    What is the current behavior? (You can also link to an open issue here)

    What is the new behavior (if this is a feature change)?

    Does this PR introduce a breaking change or deprecate an API? If yes, check the following:

    • [ ] The Breaking Change or Deprecated label has been added
    • [ ] The migration guide has been updated in the github wiki (What changes might users need to make in their application due to this PR?)

    Other information:

    (if any of the questions/checkboxes don't apply, please delete them entirely)

    status: ready-for-review 
    opened by OpenSuze 2
  • [Network modifications] Fix: remove compulsory attribute

    [Network modifications] Fix: remove compulsory attribute "voltage level" in the dataframe to create two windings transformer bay.

    Signed-off-by: Coline PILOQUET [email protected] This is the quick fix. Long fix would be to change the adder, to match what is done with lines.

    Please check if the PR fulfills these requirements (please use '[x]' to check the checkboxes, or submit the PR and then click the checkboxes)

    • [x] The commit message follows our guidelines
    • [x] Tests for the changes have been added (for bug fixes / features)
    • [ ] Docs have been added / updated (for bug fixes / features)

    Does this PR already have an issue describing the problem ? If so, link to this issue using '#XXX' and skip the rest No

    What kind of change does this PR introduce? (Bug fix, feature, docs update, ...) Bug fix.

    What is the current behavior? (You can also link to an open issue here) Voltage levels must be specified in the dataframe to create a two windings transformer bay. This is prone to mistake, if the busbar section ids and the voltage level ids are not matching.

    What is the new behavior (if this is a feature change)? Voltage level is optional and in any case overwritten.

    status: ready-for-review 
    opened by colinepiloquet 0
  • load_from_string parameters are ambiguous

    load_from_string parameters are ambiguous

    • Do you want to request a feature or report a bug?

    API clarification

    • What is the current behavior?

    load_from_string method expects a "file name" as first parameter, which is surprising for the user, since it does not read the network from a file ...

    Behind the scene, the filename is mainly used for selecting the right file format.

    • What is the expected behavior?

    It would make more sense to specify the format instead of providing a filename. For example:

    pp.network.load_from_string(format='XIIDM', content=...)
    

    At least, the docstring should be clear about the use of that parameter. It's not the case today.

    opened by sylvlecl 0
  • [Network modifications] Create voltage level topology from scratch.

    [Network modifications] Create voltage level topology from scratch.

    Signed-off-by: Coline PILOQUET [email protected]

    Please check if the PR fulfills these requirements (please use '[x]' to check the checkboxes, or submit the PR and then click the checkboxes)

    • [x] The commit message follows our guidelines
    • [x] Tests for the changes have been added (for bug fixes / features)
    • [ ] Docs have been added / updated (for bug fixes / features)

    Does this PR already have an issue describing the problem ? If so, link to this issue using '#XXX' and skip the rest No

    What kind of change does this PR introduce? (Bug fix, feature, docs update, ...) Wraps CreateVoltageLevelTopology from powsybl-core. It allows to create a symmetrical voltage level from scratch, by specifying the number of busbar sections, the number of sections and the switch kind between sections.

    Other information: For now, I did not write the documentation. I will create a dedicated PR with fixes, and documentation about all the network modification as it will be clearer to explain. (branch creation, coupling device creation + this PR)

    opened by colinepiloquet 1
  • Wrap revertConnectVoltageLevelOnLine and revertCreateLineOnLine.

    Wrap revertConnectVoltageLevelOnLine and revertCreateLineOnLine.

    Wrap revertConnectVoltageLevelOnLine and revertCreateLineOnLine methods from powsybl-core.

    Please check if the PR fulfills these requirements (please use '[x]' to check the checkboxes, or submit the PR and then click the checkboxes)

    • [x] The commit message follows our guidelines
    • [x] Tests for the changes have been added (for bug fixes / features)
    • [ ] Docs have been added / updated (for bug fixes / features)

    Does this PR already have an issue describing the problem ? If so, link to this issue using '#XXX' and skip the rest

    What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)

    What is the current behavior? (You can also link to an open issue here)

    What is the new behavior (if this is a feature change)?

    Does this PR introduce a breaking change or deprecate an API? If yes, check the following:

    • [ ] The Breaking Change or Deprecated label has been added
    • [ ] The migration guide has been updated in the github wiki (What changes might users need to make in their application due to this PR?)

    Other information:

    (if any of the questions/checkboxes don't apply, please delete them entirely)

    status: ready to be merged 
    opened by obrix 3
  • [Network modifications] Wrap CreateCouplingDevice.

    [Network modifications] Wrap CreateCouplingDevice.

    Signed-off-by: Coline PILOQUET [email protected]

    Please check if the PR fulfills these requirements (please use '[x]' to check the checkboxes, or submit the PR and then click the checkboxes)

    • [x] The commit message follows our guidelines
    • [x] Tests for the changes have been added (for bug fixes / features)
    • [ ] Docs have been added / updated (for bug fixes / features)

    Does this PR already have an issue describing the problem ? If so, link to this issue using '#XXX' and skip the rest No.

    What kind of change does this PR introduce? (Bug fix, feature, docs update, ...) Wraps createCouplingDevice from powsybl-core to create a coupling device given two busbar section ids.

    Other information: For now, I did not write the documentation. I will create a dedicated PR with fixes, and documentation about all the network modification as it will be clearer to explain. (branch creation, voltage level creation from scratch + this PR)

    status: does not compile status: conflict with main 
    opened by colinepiloquet 1
Releases(v0.19.0)
  • v0.19.0(Oct 26, 2022)

    PyPowSyBl v0.19.0 release notes

    Features

    • powsybl-dependencies v1.3.0 --> v1.3.1 (#521)
    • Creation of branches and injections with feeder bays (#484, #494)
    • Expose "connectable position" extension data (#498, #505), and utility functions to work with it (#492)
    • Expose extensions related to short circuits computations (#479)
    • Allow to update regulated side for ratio tap changers and phase tap changers (#518)

    Bug fixes

    • Fix reading of observability extensions when quality is not defined (#516)
    • Require numpy 1.20+ at install time (#519)
    • Flow decomposition: separate LF and sensitivity providers (#510)

    Documentation

    • Example for the creation of node breaker networks, and the creation of feeder bays (#509)

    Technical improvements

    • Build linux wheels with older manylinux2014 image, to ensure compatibility with older systems (glibc version...) (#508)
    • Use native-image quick-build mode when building in debug mode (#501)

    Breaking changes

    Source code(tar.gz)
    Source code(zip)
  • v0.18.0(Sep 23, 2022)

    PyPowSyBl v0.18.0 release notes

    Features

    • powsybl components update: see release notes for the release train powsybl-dependencies v1.3.0
    • flow decomposition v1.0.0 feature, as defined by ACER methodology (#487)
    • connection of a line on an existing line through a tee point (#455)
    • connection of a voltage level into an existing line (#455)

    Bug fixes

    • Fix DynaFlow GraalVM metadata (#489)
    • Update OpenLoadFlowParameters reflect config files with getters (#473)

    Documentation

    Technical improvements

    • Update powsybl-dependencies to v1.3.0
    • Use pybind11 v2.10.0
    • Use graalvm 22.2.0
    • Support MacOS ARM64 (not released to pypi, requires to run the build yourself)

    Breaking changes

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0(Aug 12, 2022)

    PyPowSyBl v0.17.0 release notes

    Features

    • Network data:
      • dataframes columns now respect the requested attributes order (#415)
      • voltage levels can now be created without a substation (#423)
      • "load detail" extension is now available: it allows to differentiate fixed and variable parts of loads (#429)
      • Columns p0 and q0 of batteries dataframe are renamed to target_p and target_q. https://github.com/powsybl/pypowsybl/labels/breaking%20change
      • case date is now explicitly tagged as a UTC date (#452)
      • new "fictitious" attribute in all network elements dataframes (#469)
      • expose measurements extension (#449)
      • expose observability extensions (#450)
    • Reporter API: allows to get functional logs from loadflow, network load, dump, security analysis and sensitivity analysis (#416, #448)
    • GLSK file support: you can now read a UCTE GLSK file and create zones for sensitivity analysis based on its content (#394)
    • Loadflow distributed active power (#442)
    • Addition of security analysis parameters (#454), with support of increased violations parameters and implementation-specific parameters
    • Addition of sensitivity analysis parameters (#460), with support of implementation-specific parameters
    • DynaFlow as a new loadflow provider ! (#475) Using DynaFlow requires to install it and configure its path in you config.yml file

    Bug fixes

    • Loadflow parameters: provider parameters from configuration are not ignored anymore when defining them partially programmatically (#434)
    • Loadflow parameters: provider parameters are now correctly taken into account by security analysis and sensitivity analysis (#438)
    • Network element creation:
      • we now provide a useful error message when a dataframe column does not have the expected type (#422)
      • we now provide a useful error message when a container element does not exist (#428)
    • "Bus breaker" connection buses were not available for switches (#459)

    Documentation

    • Docstring for merge method

    Technical improvements

    • Update powsybl-dependencies to v1.2.2
    • Separation of development CI and full CI (#466)

    Breaking changes

    • Support for macos 10.15 is dropped, we only support macos 11+ (#462)
    • Security analysis provider 'OpenSecurityAnalysis' is renamed to 'OpenLoadFlow'
    • Sensitivity analysis provider 'OpenSensitivityAnalysis' is renamed to 'OpenLoadFlow'
    • Columns p0 and q0 of batteries dataframe are renamed to target_p and target_q.
    • Network.merge now accepts a sequence of arguments instead of a variable-sized argument:
    network1.merge(network2, network3)
    # must be replaced by:
    network1.merge([network2, network3])
    
    Source code(tar.gz)
    Source code(zip)
  • v0.16.0(May 31, 2022)

    PyPowSyBl v0.16.0 release notes

    Features

    • Network data:

      • Extensions creation, update, and removal (#393)
      • Fill in "bus breaker bus ID" attributes, even when the network element is not connected (#399)
      • Min/max Q, and min/max Q at current P for VSC stations and batteries (#404, #407)
      • Creation of reactive limit curves for VSCs and batteries, and addition of reactive limits kind (#408)
    • Ability to log TRACE level java logs, by setting log level to 1 (#390)

    • Support for pathlib.Path for path arguments (#388)

    Bug fixes

    • In generators dataframe, min_q_at_p and max_q_at_p returned the reactive limits for "-P" instead of P (#383)
    • Keyboard interrupt does not cause anymore a core dump when logging java logs (#378)
    • Factorization failures in open loadflow raised a null pointer exception. They are now correctly translated as "solver failed" status in the loadflow results (#409)
    • Fix NPE when getting not computed sensitivity results (#400)

    Documentation

    Technical improvements

    • Removed the last uses of unittest, in favor of pytest (#389)

    Breaking changes

    Source code(tar.gz)
    Source code(zip)
  • v0.15.0(Apr 28, 2022)

    PyPowSyBl v0.15.0 release notes

    Features

    • Network data:

      • Network extensions data are now available through the get_extension method (#277)
      • Network elements removal (#347)
      • Possibility to add and remove arbitrary string properties on network elements (#371)
      • New update_voltage_levels method (#349)
      • New update_substations method (#350)
      • New operational limits dataframe (#340)
      • Creation of operational limits (current, active power, apparent power) (#341)
      • Creation of reactive limits of generators (#379)
      • Add nodes and bus breaker view buses in most dataframes, as optional attributes (#320)
      • Specifying an empty attribute list now returns a dataframe with no columns (#365)
      • In generators dataframe: new reactive_limits_kind attributes, and new optional attributes min_q_at_p, max_q_at_p, min_q_at_target_p, max_q_at_target_p (#267)
      • Ability to get and set regulated terminal for SVCs and VSCs (#373)
    • Integrate delayed network validation API (#345)

    • Loadflow

      • Possibility to provide parameters specific to the loadflow provider used (#377)
    • Sensitivity analysis

      • Pre-contingency only on post-contingency only factor configuration (#244)
    • Security analysis

      • Add N-1 contingency flow transfer in security analysis (#361)

    Bug fixes

    • Fix exception when getting bus breaker topology, when an element is disconnected (#346 )
    • Accept upper case TSO as column name for substations creation (#360)

    Documentation

    • Improve docstrings and documentation of network methods, in particular elements creation (#353)

    Technical improvements

    • Migrate to PowSyBl dependencies 1.1.0 (core 4.8.0) (#374) See powsybl-core and powsybl-open-loadflow release notes for more information
    • Remove enums from _pypowsybl module level variables (#352)
    • Integration with python logging implementation (#280) This removes set_debug_mode, see breaking changes section

    Breaking changes

    • Specifying an empty attribute list now returns a dataframe with no columns (#365): network.get_***(attributes=[]) is not equivalent anymore to network.get_***()

    • pp.set_debug_mode(True) does not exist anymore and is replaced by the integration to python logging framework. All pypowsybl logs are written to the logger named powsybl. You may configure the log level as for any other logger:

      logging.basicConfig(level=logging.DEBUG)
      logging.getLogger('powsybl').setLevel(logging.DEBUG)
      
    Source code(tar.gz)
    Source code(zip)
  • v0.14.0(Mar 23, 2022)

    PyPowSyBl v0.14.0 release notes

    Features

    • DC security analysis (#330)
    • Possibility to define the default implementations for loadflow, security analysis, sensitivity analysis (#330, #337)
    • Update powsybl-open-loadflow to v0.19.0

    Bug fixes

    • Loadflow parameters extensions were not correctly loaded from configuration (#339)
    Source code(tar.gz)
    Source code(zip)
  • v0.13.0(Mar 10, 2022)

    PyPowSyBl v0.13.0 Release Notes

    Features

    • Support for PowerFactory file import (#329)
    • Network area diagrams can now be created around a list of voltage levels, instead of just 1 (#327) breaking change: the argument is in consequence renamed from voltage_level_id to voltage_level_ids:
    network.get_network_area_diagram(voltage_level_ids=['VL1', 'VL2'], depth=2)
    
    • A per-unit view of the network is now available: pypowsybl.perunit.per_unit_view(network) (#193)
    • Network data
      • The location regulated by the voltage control of generators is now available as regulated_element_id attribute (#218) For now, it is only supported in node breaker voltage levels.
      • Network elements creation (#259, #319)
      • Dataframes elements selection (#283, #311, #312) breaking change: in order to get columns corresponding to properties in IIDM, you now need to use the argument all_atributes=True:
        network.get_generators()  # Only gets default columns, which does not include IIDM properties
        network.get_generators(all_attributes=True)  # Get all possible columns
        
      • Missing lcc dataframe update (#321)
      • breaking change: for better consistency between dataframes, all attributes ending with ..._setpoint have been renamed to target_.... For example voltage_setpoint becomes target_v (#282)
    • Update powsybl components (#326):
      • powsybl-core 4.7.0
      • powsybl-sld 2.8.0
      • powsybl-nad 0.3.0
      • powsybl-open-loadflow 0.18.0

    Bug fixes

    • Security analysis is now correctly run on the current working variant of the network (#314)
    • Fix sensitivity replay mode (#315)

    Documentation

    • Fix documentation (#310, #309, #313)
    • Add network area diagram to reference doc (#324)

    Technical improvements

    • Python 3.10 build (#275)
    • Move native libs to pypowsyb package, remove source distribution (#291)
    • pypowsybl now provides python stubs for native module _pypowsybl, to allow static type checking (#306)
    • Shared libraries are not installed anymore in python root package, but in pypowsybl package (#290)
    • CI: using pytest to execute unit tests (#295)
    • CI: enforcing type annotations with mypy (#307)
    • Fix SLD unit test with Java 17 (#322)
    • ARM64 build support (#323)
    • Fix GraalVM reflection config (#316)
    • Linting (#308)
    • Fix code coverage generation for sonar (#294, #297)
    • Use official GraalVM GitHub action (#292)

    Breaking changes

    • By default, not all columns of network dataframes are now returned by getters: in particular, IIDM properties are now considered "non default columns", and you need to either ask for all attributes or for the specific attributes you need:
    network.get_generators()  # Only gets default columns, which does not include IIDM properties
    network.get_generators(all_attributes=True)  # Get all possible columns
    network.get_generators(attributes=['target_p', 'my_property'])  # Get only target_p and my_property columns
    
    • for better consistency between dataframes, all dataframe columns ending with ..._setpoint have been renamed to target_.... For example voltage_setpoint becomes target_v.
    • Network area diagrams can now be created around a list of voltage levels, instead of just 1, the argument is in consequence renamed from voltage_level_id to voltage_level_ids:
    network.get_network_area_diagram(voltage_level_ids=['VL1', 'VL2'], depth=2)
    
    Source code(tar.gz)
    Source code(zip)
  • v0.12.0(Jan 19, 2022)

    PyPowSyBl v0.12.0 Release Notes

    Features

    • Network area diagram (#269)
    • Loadflow validation (#184)
    • Migrate to PowSyBl Core 4.6.0 (#288)
    • Network data:
      • possibility to update tap changer steps and shunt sections (#268)
      • loss factor for VSC converters (#266)
      • access to bus breaker topology graph of voltage levels (#252)

    Bug fixes

    Documentation

    Technical improvements

    • Allow long running functions to be run in parallel threads, by releasing the GIL (#287)

    Breaking changes

    • the method get_voltage_level_topology of Network is renamed to get_node_breaker_topology.
    Source code(tar.gz)
    Source code(zip)
  • v0.11.0(Nov 22, 2021)

    PyPowSyBl v0.11.0 Release Notes

    Features

    • Removal of Hades2 support (#246)
    • User friendly methods for simple updates (no need for dataframe) (#251, #256, #264)
    • Migrate to PowSyBl Core 4.5.1 (#273)
    • Add switches names in node breaker topology (#263)

    Bug fixes

    Documentation

    • Detailed docstrings for network data access (#123)
    • Update user guide and API reference on readthedocs, in particular loadflow, security analysis, sensitivity analysis (#249, #254, #253, #255)
    • Add a single line diagram in getting started section of doc. (#260)
    • Move notebooks to another repository (#265)

    Technical improvements

    • Manage multi index dataframes (#234)
    • Prepare pypowsybl jars release (#242)
    • Configurable java source directory for cmake build (#241)
    • Build on MacOS 10.15 (#258)
    • Use array delete where relevant (#257)
    • Update PyBind11 (#262)
    • Migrate to GraalVM 21.3.0 (#261)
    Source code(tar.gz)
    Source code(zip)
  • v0.10.0(Oct 4, 2021)

    PyPowSyBl v0.10.0 Release Notes

    Features

    • Network merging (#214)
    • Network data :
      • Add alpha and rho to ratio tap changers dataframe (#220)
      • Add current limits data frame (#149)
      • Add shunts linear model dataframe (#219)
      • Add name to all identifiables data frames (#236)
    • LoadFlow run_ac and run_dc now return a list (#227)
    • Migrate to PowSyBl 4.4.0 (#229)
    • Get export parameters info (#182)
    • Add XNode sensitivity unit test and documentation (#237)

    Bug fixes

    • Fix NPE in substation data frame (#228)
    • Fix doctest to be independent of local config (#232)
    • Fix Hades2 GraalVm metadata (#233)

    Documentation

    Technical improvements

    • Install PowSyBl math native library (#226)
    Source code(tar.gz)
    Source code(zip)
  • v0.9.0(Aug 20, 2021)

    PyPowSyBl v0.9.0 Release Notes

    Features

    • Network variants management (#134)

    • Access to network metadata (ID, name, date, forecast, source format) (#180)

    • Single line diagrams notebook integration (#154)

    • Read/write network from/to a string (#153, #162)

    • Support pickling and deepcopy of networks (#157)

    • Support new types of contingencies: bus bars, generators, SVCs, dangling lines, shunts, 3W transformers (#177 )

    • New data available in dataframes, and new data available for modification:

      • voltage level and component numbers for buses, and ability to modify voltage/angle (#151)
      • ratio and phase tap changers (#126)
      • current value in addition to active and reactive power values
      • update lines (#196)
      • more information in shunts dataframes (#200 and #205)
      • shunt non linear sections dataframes (#206)
      • possibility to connect/disconnect network elements using dataframes (#201)
      • generators reactive limits (#129)
      • node breaker description of the topology of voltage levels (#150)
    • Security analysis:

      • Import LimitType and Side in pypowsybl.security (#133)
      • Results for monitored network elements (#138)
      • Violations available as a pandas dataframe (#145 )

    Documentation

    Bug fixes

    • Fixed memory leaks when returning strings from java (#181)
    • Fix PSS/E import (HVDC) (#170)

    Technical improvements

    • Sonar analysis and test coverage on python code (#155, #158)
    • Data frame mapping refactoring on Java side (#126)
    • Unit tests organization (#159)
    • Java handles destruction is automated, handles are hidden from python normal users (#169)
    • Migrate to GraalVM 21.2.0 (#204)
    • Migrate to PowSyBl 4.3.1 (#202)
    Source code(tar.gz)
    Source code(zip)
  • v0.8.0(Jun 13, 2021)

    PyPowSyBl v0.8.0 Release Notes

    Solved issues

    • Migrate to PowSyBl Core 4.2.0, SLD 2.2.0 and OLF 0.11.0 (#113)
    • Voltage sensitivity calculation (#81)
    • Zone sensitivity calculation (#112)
    • AC sensitivity calculation (OLF) and Hades2 sensitivity (AC and DC) in addition to OLF (#86)
    • Add more network series (#88, #94, #100, #114, #106, #128)
    • Network update (#50, #91)
    • Breaking change in sensitivity analysis to better model AC and DC calculation (#97, #109)
    • Pythonic imports (#78): all packages (network, loadflow, etc) are automatically imported by just importing pypowsybl.
    import pypowsybl as pp
    
    # nothing else needed!
    
    • Parameters support for network import/export (#83)
    • Add more IEEE test cases (#82)
    • Improve ReadTheDoc documentation (#89, #90):
    • Return numpy arrays from c++ layer when possible (avoids some copies) (#92)
    • Fix PSS/E file loading (#98)
    • Clean exception management (#93, #99)
    • Automate PyPi releases (#115)
    • Add options for extra-jar to be built with native-image (#105)

    API changes

    • security-analysis package has been renamed security
    • sensitivity-analysis package has been renamed sensitivity
    • create function from sensitivity-analysis has been replaced by create_dc and create_ac
    • run_ac and run_dc in SensitivityAnalysis class have been replaced by run
    • get_buses(), get_generators() and get_loads() methods have been removed from Network
    • Pandas based network elements getters have been rename from create_<elements>_data_frame() to get_<elements>()
    • Pandas based network elements updaters have been rename from update_<elements>_from_data_frame() to update_<elements>()
    Source code(tar.gz)
    Source code(zip)
  • v0.7.0(Apr 13, 2021)

  • v0.6.0(Apr 8, 2021)

    PyPowSyBl v0.6.0 Release Notes

    • Add network reduction (#60)
    • Add Sphinx documentation template (#64)
    • Add tap position to 2 and 3 windings transformer data frame (#66)
    • HVDC line contingency support in DC sensitivity analysis (#67, #69)
    • Improve sensitivity analysis memory consumption (#59)
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Mar 14, 2021)

    GridPy v0.5.0 Release Notes

    • Fix error "basic_string::_M_construct null not valid" when creating a network element data frame (#53)
    • Upgrade OLF to 0.10.0-dev2 (#54):
      • DC sensitivity analysis: fix contingency involving phase tap changer
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Mar 10, 2021)

    GridPy v0.4.0 Release Notes

    • Propagate exceptions to Python (#30, #47).
    • Add main synchronous component filtering to Network.get_elements_ids (#48).
    • Add IIDM element properties to dataframe (#49).
    • DC sensitivity analysis (OLF v0.10.0-dev1):
      • Fix N-K reference flow for contingency involving phase tap changer
      • Fix NullPointerException in case of disconnected phase tap changer
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Feb 12, 2021)

    GridPy v0.3.0 Release Notes

    • Get network elements as a Pandas dataframe (#38).
    • In get_elements_ids, add a parameter to skip branches connected to same bus at both sides (#42).
    • Fix string encoding issue on Windows (#43).
    • Update to Open Load Flow 0.9.0
      • DC sensitivity
        • HVDC converter station sensitivity
        • N-K contingency breaking connectivity support
        • N-K reference flows
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Jan 20, 2021)

    GridPy v0.2.0 Release Notes

    • Get sensitivity matrix in Pandas dataframe instead of Numpy array (#33).
    • Get generators (id, target_p, min_p, max_p, nominal_voltage, country and bus) and loads (id, p0, nominal_voltage, country and bus) from a network (#34).
    • Get sensitivity reference flows (#35).
    • Improve get elements IDs with by country filtering (#36).
    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Jan 17, 2021)

    GridPy v0.1.0 Release Notes

    This is the first GridPy release. Some of the PowSyBl library features available in this release:

    • Create an empty network
    • Create an IEEE14 or Eurostag tutorial example network
    • Load a network from a file, supporting CGMES, UCTE, XIIDM, Matpower, IEEE CDF and PSS/E data format
    • Dump to network to a file, supporting XIIDM and UCTE data format
    • List network buses (bus view or bus/breaker view)
    • List network elements IDs with element type, nominal voltage and connected component filtering
    • Open or close a switch
    • Connect or disconnect a switch
    • Generate a single line diagram (SVG) from a voltage level
    • Run a load flow (AC or DC mode, all parameters and results implemented)
    • Run a security analysis (AC mode, N-K contingencies configurable, all pre and post contingency results)
    • Run a sensitivity analysis (DC mode, N-K contingencies, sensitivity factor matrix, integration with numpy)
    Source code(tar.gz)
    Source code(zip)
Owner
powsybl
Power System Blocks
powsybl
A python script for combining multiple native SU2 format meshes into one mesh file for multi-zone simulations.

A python script for combining multiple native SU2 format meshes into one mesh file for multi-zone simulations.

MKursatUzuner 1 Jan 20, 2022
Cloud Native sample microservices showcasing Full Stack Observability using AppDynamics and ThousandEyes

Cloud Native Sample Bookinfo App Observability Bookinfo is a sample application composed of four Microservices written in different languages.

Cisco DevNet 13 Jul 21, 2022
HatAsm - a HatSploit native powerful assembler and disassembler that provides support for all common architectures

HatAsm - a HatSploit native powerful assembler and disassembler that provides support for all common architectures.

EntySec 8 Nov 9, 2022
🍏 Make Thinc faster on macOS by calling into Apple's native Accelerate library

?? Make Thinc faster on macOS by calling into Apple's native Accelerate library

Explosion 81 Nov 26, 2022
This application demonstrates IoTVAS device discovery and security assessment API integration with the Rapid7 InsightVM.

Introduction This repository hosts a sample application that demonstrates integrating Firmalyzer's IoTVAS API with the Rapid7 InsightVM platform. This

Firmalyzer BV 4 Nov 9, 2022
Integration between the awesome window manager and the firefox web browser.

Integration between the awesome window manager and the firefox web browser.

contribuewwt 3 Feb 2, 2022
An early stage integration of Hotwire Turbo with Django

Note: This is not ready for production. APIs likely to change dramatically. Please drop by our Slack channel to discuss!

Hotwire for Django 352 Jan 6, 2023
Integration of Hotwire's Turbo library with Flask.

turbo-flask Integration of Hotwire's Turbo library with Flask, to allow you to create applications that look and feel like single-page apps without us

Miguel Grinberg 240 Jan 6, 2023
Home Assistant integration for spanish electrical data providers (e.g., datadis)

homeassistant-edata Esta integración para Home Assistant te permite seguir de un vistazo tus consumos y máximas potencias alcanzadas. Para ello, se ap

VMG 163 Jan 5, 2023
A QGIS integration plugin for Kart repositories

QGIS Kart Plugin A plugin to work with Kart repositories Installation The Kart plugin is available in the QGIS Plugins server. To install the latest v

Koordinates 27 Jan 4, 2023
Tutor plugin for integration of Open edX with a Richie course catalog

Richie plugin for Tutor This is a plugin to integrate Richie, the learning portal CMS, with Open edX. The integration takes the form of a Tutor plugin

Overhang.IO 2 Sep 8, 2022
Sardana integration into the Jupyter ecosystem.

sardana-jupyter Sardana integration into the Jupyter ecosystem.

Marc Espín 1 Dec 23, 2021
Integration of CCURE access control system with automation HVAC of a commercial building

API-CCURE-Automation-Quantity-Floor Integration of CCURE access control system with automation HVAC of a commercial building CCURE is an access contro

Alexandre Edson Silva Pereira 1 Nov 24, 2021
Solcast Integration for Home Assistant

Solcast Solar Home Assistant(https://www.home-assistant.io/) Component This custom component integrates the Solcast API into Home Assistant. Modified

Greg 45 Dec 20, 2022
API for SpeechAnalytics integration with FreePBX/Asterisk

freepbx_speechanalytics_api API for SpeechAnalytics integration with FreePBX/Asterisk Скопировать файл settings.py.sample в settings.py и отредактиров

Iqtek, LLC 3 Nov 3, 2022
CaskDB is a disk-based, embedded, persistent, key-value store based on the Riak's bitcask paper, written in Python.

CaskDB - Disk based Log Structured Hash Table Store CaskDB is a disk-based, embedded, persistent, key-value store based on the Riak's bitcask paper, w

null 886 Dec 27, 2022
Developing and Comparing Vision-based Algorithms for Vision-based Agile Flight

DodgeDrone: Vision-based Agile Drone Flight (ICRA 2022 Competition) Would you like to push the boundaries of drone navigation? Then participate in the

Robotics and Perception Group 115 Dec 10, 2022
Python script for diving image data to train test and val

dataset-division-to-train-val-test-python python script for dividing image data to train test and val If you have an image dataset in the following st

Muhammad Zeeshan 1 Nov 14, 2022
A Python application that helps users determine their calorie intake, and automatically generates customized weekly meal and workout plans based on metrics computed using their physical parameters

A Python application that helps users determine their calorie intake, and automatically generates customized weekly meal and workout plans based on metrics computed using their physical parameters

Anam Iqbal 1 Jan 13, 2022