diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fb9f1a26..e221b324 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,18 +19,24 @@ env: UV_SYSTEM_PYTHON: 1 COVERAGE_CORE: sysmon +permissions: {} + jobs: build: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.10", "3.11", "3.12", "3.13"] + python-version: ["3.11", "3.12", "3.13"] #, "3.13t", "3.14-dev"] # waiting for pyproj support + + permissions: + contents: read steps: - uses: actions/checkout@v4 with: lfs: false + persist-credentials: false - name: Create LFS file list run: git lfs ls-files -l | cut -d' ' -f1 | sort > .lfs-assets-id @@ -52,7 +58,7 @@ jobs: git lfs prune --verify-remote - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v6 with: enable-cache: true diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 6833c791..7493e976 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -14,13 +14,18 @@ on: - ".vscode/**" - ".idea/**" +permissions: {} + jobs: pre-commit: runs-on: ubuntu-latest + permissions: + contents: read steps: - uses: actions/checkout@v4 with: lfs: false + persist-credentials: false - uses: actions/setup-python@v5 with: python-version: "3.13" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9027eede..29a44ce0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ exclude: ^.idea/|.vscode/ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 + rev: v6.0.0 hooks: - id: check-json - id: check-merge-conflict @@ -11,13 +11,28 @@ repos: - id: end-of-file-fixer - id: trailing-whitespace - repo: https://github.com/astral-sh/uv-pre-commit - rev: 0.6.6 + rev: 0.8.14 hooks: - id: uv-lock + - repo: https://github.com/python-jsonschema/check-jsonschema + rev: 0.33.3 + hooks: + - id: check-github-workflows + - id: check-dependabot + - id: check-readthedocs + - repo: https://github.com/crate-ci/typos + rev: v1.35.6 + hooks: + - id: typos + args: [--force-exclude] + - repo: https://github.com/woodruffw/zizmor-pre-commit + rev: v1.12.1 + hooks: + - id: zizmor - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.9.10 + rev: v0.12.11 hooks: - - id: ruff + - id: ruff-check args: [--fix] - id: ruff-format - repo: https://github.com/adamchainz/blacken-docs @@ -26,14 +41,34 @@ repos: - id: blacken-docs files: ^doc/.*\.md$ args: [-l 90] + - repo: https://github.com/executablebooks/mdformat + rev: 0.7.22 + hooks: + - id: mdformat + additional_dependencies: + - mdformat-pyproject + - mdformat-myst + - mdformat-gfm + - mdformat-gfm-alerts + # - mdformat-ruff + - mdformat-config + - mdformat-deflist + exclude: ^.github/.*\.md$ - repo: https://github.com/rbubley/mirrors-prettier - rev: v3.5.3 + rev: v3.6.2 hooks: - id: prettier args: ["--print-width", "120"] require_serial: true + types_or: [yaml] - repo: https://github.com/cmhughes/latexindent.pl - rev: V3.24.4 + rev: V3.24.7 hooks: - id: latexindent args: [-l, -m, -s, -wd] + - repo: https://github.com/biomejs/pre-commit + rev: v2.2.2 + hooks: + - id: biome-check + types_or: [json, html, css] + files: ".*" # Override default files regex that excludes html, rely on `types_or` instead diff --git a/.vscode/settings.json b/.vscode/settings.json index f0e72f95..08946473 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,11 +7,6 @@ }, // Python - "python.analysis.diagnosticSeverityOverrides": { - "reportInvalidStringEscapeSequence": "warning", - "reportImportCycles": "warning", - "reportUnusedImport": "warning", - }, "python.testing.pytestEnabled": true, "[python]": { "editor.defaultFormatter": "charliermarsh.ruff", @@ -22,12 +17,14 @@ }, // Prettier "prettier.printWidth": 120, - "[markdown][yaml][html][css]": { + "[yaml]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true, }, - // Json - "[json]": { + // Biome + "[json][html][css]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true, "editor.indentSize": 2, }, } diff --git a/LICENSE.md b/LICENSE.md index 2fd48151..3b3adb9b 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -2,27 +2,22 @@ BSD 3-Clause License Copyright (c) 2018, Roseau Technologies -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the +following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided with the distribution. -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md index 45f47f20..25fc0fcf 100644 --- a/README.md +++ b/README.md @@ -18,30 +18,29 @@ _Roseau Load Flow_ is a powerful load flow solver and static analysis tool that In addition to the following **unique** set of features: - Support for _floating neutrals_ for loads and sources -- Four-wire multi-phase modelling with no Kron's reduction, no transformations, no assumptions on the - network topology and no implicit earthing everywhere -- Support for **flexible**, voltage-dependent, loads directly in the Newton algorithm for better - convergence and stability +- Four-wire multi-phase modelling with no Kron's reduction, no transformations, no assumptions on the network topology + and no implicit earthing everywhere +- Support for **flexible**, voltage-dependent, loads directly in the Newton algorithm for better convergence and + stability -This project is compatible with Python version 3.10 and newer. The -[installation instructions](https://roseau-load-flow.roseautechnologies.com/en/latest/Installation.html) -will guide you through the installation process. If you are new to _Roseau Load Flow_, we recommend -you start with the -[getting started tutorial](https://roseau-load-flow.roseautechnologies.com/en/latest/usage/Getting_Started.html). -You can find the complete documentation at https://roseau-load-flow.roseautechnologies.com/. +This project is compatible with Python version 3.11 and newer. The +[installation instructions](https://roseau-load-flow.roseautechnologies.com/en/latest/Installation.html) will guide you +through the installation process. If you are new to _Roseau Load Flow_, we recommend you start with the +[getting started tutorial](https://roseau-load-flow.roseautechnologies.com/en/latest/usage/Getting_Started.html). You +can find the complete documentation at https://roseau-load-flow.roseautechnologies.com/. ## License This project is _partially_ open source but using the solver requires a license. The license key -`A8C6DA-9405FB-E74FB9-C71C3C-207661-V3` can be used free of charge with networks containing up to 10 -buses. To obtain a personal or commercial license, please contact us -at [contact@roseautechnologies.com](mailto:contact@roseautechnologies.com). +`A8C6DA-9405FB-E74FB9-C71C3C-207661-V3` can be used free of charge with networks containing up to 10 buses. To obtain a +personal or commercial license, please contact us at +[contact@roseautechnologies.com](mailto:contact@roseautechnologies.com). > [!NOTE] -> Licenses are given free of charge for **students and teachers**. Please contact us at -> contact@roseautechnologies.com for more information. +> Licenses are given free of charge for **students and teachers**. Please contact us at contact@roseautechnologies.com +> for more information. Read more at [License](https://roseau-load-flow.roseautechnologies.com/en/latest/License.html). @@ -49,8 +48,8 @@ Read more at [License](https://roseau-load-flow.roseautechnologies.com/en/latest -_Roseau Load Flow_ ships with a sample of 20 low-voltage and 20 medium-voltage feeder networks. Each -network is provided with its summer and winter load points. +_Roseau Load Flow_ ships with a sample of 20 low-voltage and 20 medium-voltage feeder networks. Each network is provided +with its summer and winter load points. To go further, you can also use [these 150 distribution networks](https://www.data.gouv.fr/fr/datasets/departs-hta-representatifs-pour-lanalyse-des-reseaux-de-distribution-francais/), @@ -74,5 +73,4 @@ This software is developed by [Roseau Technologies](https://www.roseautechnologi Follow us on: [![Linkedin](https://i.sstatic.net/gVE0j.png) LinkedIn](https://www.linkedin.com/company/roseau-technologies/) -  [![GitHub](https://i.sstatic.net/tskMh.png) GitHub](https://github.com/RoseauTechnologies) diff --git a/biome.jsonc b/biome.jsonc new file mode 100644 index 00000000..9ce6e159 --- /dev/null +++ b/biome.jsonc @@ -0,0 +1,43 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.2.2/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "maxSize": 2097152 // 2 MiB to accommodate the networks Catalogue.html file (1.6 MiB) + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 120, + "lineEnding": "lf" + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + }, + "assist": { + "enabled": true, + "actions": { + "source": { + "organizeImports": "on" + } + } + }, + "html": { + "formatter": { + "enabled": true // Enable experimental HTML formatting + } + } +} diff --git a/doc/Bibliography.bib b/doc/Bibliography.bib index 7e9aa0b3..208fb251 100644 --- a/doc/Bibliography.bib +++ b/doc/Bibliography.bib @@ -1,3 +1,4 @@ + @article{Klimek_2020, doi = {10.21468/scipostphys.9.4.053}, url = {https://doi.org/10.21468%2Fscipostphys.9.4.053}, diff --git a/doc/Changelog.md b/doc/Changelog.md index 1415db2c..e170ad0a 100644 --- a/doc/Changelog.md +++ b/doc/Changelog.md @@ -1,14 +1,16 @@ --- myst: html_meta: - "description lang=en": | + description lang=en: | Release history of Roseau Load Flow - Three-phase unbalanced load flow solver in a Python API by Roseau Technologies. - "description lang=fr": | + keywords lang=en: changelog, solver, simulation, distribution grid, bus, model + # spellchecker:off + description lang=fr: | Historique des versions de Roseau Load Flow - Solveur d'écoulement de charge triphasé et déséquilibré dans une API Python par Roseau Technologies. - "keywords lang=fr": version, solveur, simulation, réseau, électrique, bus - "keywords lang=en": changelog, solver, simulation, distribution grid, bus, model + keywords lang=fr: version, solveur, simulation, réseau, électrique, bus + # spellchecker:on og:image: https://www.roseautechnologies.com/wp-content/uploads/2024/04/DSCF0091-scaled.webp og:image:alt: An engineer uses Roseau Load Flow to perform unbalanced electric calculation og:title: Roseau Load Flow - Unbalanced and multiphase load flow solver @@ -17,6 +19,121 @@ og:description: See what's new in the latest release of Roseau Load Flow ! # Changelog +## Version 0.13.0 + +- {gh-pr}`402` Improve the `en.to_graph` method. + + - Add nominal voltage and min/max voltage levels as node attributes. + - Change the `geom` attribute to be a GeoJSON-like dictionary instead of a shapely geometry object. This makes the + graph data JSON-serializable and compatible with pyviz plotting. + +- {gh-pr}`401` Rename some internal models modules. The models classes are always available as `rlf.`. + +- {gh-pr}`400` Add `LineParameters.to_sym` method to convert three-phase line parameters to symmetrical components. The + method returns the symmetrical components: `z0`, `z1`, `y0`, `y1`, and for lines with a neutral wire: `zn`, `zpn`, + `yn`, `ypn`. + +- {gh-pr}`399` Add popup and search functionality to the interactive map plot. `rlf.plotting.plot_interactive_map` now + accepts `add_tooltips`, `add_popups` and `add_search` arguments to control the display of tooltips, popups and search + features. These features are enabled by default. + +- {gh-pr}`398` Improve the performance of accessing network results as dataframes by up to 20% and serializing a network + to a dictionary by up to 15%. The improvements are mostly noticeable for large networks or when performing many + simulations like in a time series analysis. + +- {gh-pr}`396` Allow passing a single `FlexibleParameter` object to a constant-power load to be used for all phases. + +- {gh-pr}`395` Improve line and bus hover information in interactive map plots. Fix an error in automatic zoom + calculation when the whole network is on the same longitude or latitude. + +- {gh-pr}`394` Add support for musl linux distributions. Also add preliminary support for python 3.14 development + version and for free-threaded python 3.13t and 3.14t. Full support is waiting on our dependencies to release relevant + wheels. + +- {gh-pr}`393` Use the `uv_build` build backend instead of `hatchling` to build the package. + +- {gh-pr}`392` Disconnect a ground connection of a load or source when the load or source is disconnected from the + network. Add `is_disconnected` property to loads, sources and ground connections to check if the element is + disconnected. In the future, accessing the bus of a disconnected load or source will return the original bus instead + of `None`, use `is_disconnected` to check if the load or source is disconnected. + +- {gh-pr}`391` {gh-issue}`390` `ElectricalNetwork.to_graph` now returns a multi-graph to preserve parallel edges. It + also gained a `respect_switches` parameter that can be set to `False` to include open switches in the graph. The + default value is `True`, which means that open switches are not included in the graph. + +- {gh-pr}`389` Add support for open switches. Pass `closed=False` to the `Switch` constructor to create an open switch. + Call `switch.open()` to open an existing switch and `switch.close()` to close it. `switch.closed` tells if the switch + is closed or not. The switch is closed by default. + +- {gh-pr}`388` {gh-issue}`378` Add `ElectricalNetwork.tool_data` to attach tool-specific data to the electrical network. + The data is written to the JSON file when saving the network and is read when loading. + +- {gh-pr}`387` Stop reformatting arrays in json output. + +- {gh-pr}`385` {gh-issue}`344` Add sides accessors to branches. + + - `Transformer.side_hv` and `Transformer.side_lv` return the high-voltage and low-voltage sides of a transformer. + - `Line.side1` and `Line.side2` return the two sides of a line. + - `Switch.side1` and `Switch.side2` return the two sides of a switch. + + A side is a bus connectable element and has all common attributes of bus connectables. For example, + `Transformer.side_hv` has the attributes `bus`, `phases`, `res_currents`, `res_powers`, `res_voltages`, etc. + + Passing a branch element and a separate side argument to `rlf.GroundConnection`, `rlf.plotting.plot_voltage_phasors` + and `rlf.plotting.plot_symmetrical_voltages` is deprecated in favor of passing a branch side directly. For example, + replace `rlf.GroundConnection(ground=ground, element=transformer, side="HV")` by + `rlf.GroundConnection(ground=ground, element=transformer.side_hv)`. + +- {gh-pr}`382` Improve load flow convergence for networks with step-up transformers by improving the initial guesses for + the voltages of the buses. + +- {gh-pr}`380` {gh-issue}`379` Fix error when neutral ampacity is not passed to `LineParameters.from_geometry`. + +- {gh-pr}`374` Rename the `from_dgs` method of `rlf.ElectricalNetwork` to `from_dgs_file` and add a new `from_dgs_dict` + method to load a network from a DGS-formatted dictionary. The old method is deprecated and will be removed in a future + release. The `from_dgs_file` method accepts an optional `encoding` parameter to specify the encoding of the DGS file. + +- {gh-pr}`371` Deprecate `Transformer.res_voltage_hv` and `Transformer.res_voltage_lv` properties added in the last + release by mistake. A simpler interface will be added later as described in {gh-issue}`344`. + +- {gh-pr}`369` Add `Line.res_ground_potential` property to get the potential of the ground port of lines with shunt + components. Update JSON file format to version 5 to store this information. Files created with previous versions of + Roseau Load Flow will still be readable and will warn on loading. + +- {gh-pr}`366` Add nominal frequency (`fn`), cooling class (`cooling`) and insulation type (`insulation`) to the + `TransformerParameters` class. The transformers catalogue has been updated accordingly. The manufacturer names in the + catalogue have been expanded to better accommodate new transformers (`SE` -> `Schneider Electric`, `FT` -> + `France Transfo`, ...). More HV/MV transformers have been added to the catalogue. The cooling and insulation are + described in the new enumeration types `TransformerCooling` and `TransformerInsulation` respectively. + +- {gh-pr}`365` Fix minor inconsistency in the calculation of short-circuit parameters of transformers with no open and + short circuit tests data. The iron losses are now consistently ignored during the calculation of the short-circuit + parameters. + +- {gh-pr}`364` {gh-issue}`363` Fix missing floating neutral of three-phase transformers when the bus does not have a + neutral. + +- {gh-pr}`361` {gh-issue}`300` Raise an error when duplicate line or transformer parameters IDs are used in the same + network. + +- {gh-pr}`362` {gh-issue}`338` Require Python 3.11 or newer. + +- {gh-pr}`360` {gh-issue}`359` Fix a bug related to adding short circuits to a bus when the ground fault was not already + part of the electrical network. + +- {gh-pr}`358` Fix a division by zero error during DGS export. + +- {gh-pr}`357` Improve support for unbalance calculations. + + - The `res_voltage_unbalance` method now accepts a `definition` parameter to choose between the definitions of the + voltage unbalance from `'VUF'` (IEC), `'PVUR'` (IEEE) and `'LVUR'` (NEMA). + - Loads and sources now have a `res_current_unbalance` method to compute the current unbalance. + +- {gh-pr}`356` Fix regression since version 0.11.0 where `max_voltage_level` for buses was missing in the catalogue + networks. + +- {gh-pr}`355` {gh-issue}`337` Add HV/MV transformer models to the catalogue. + ## Version 0.12.0 ```{note} @@ -41,79 +158,93 @@ This release also includes the modifications that are in the [version 0.12.0-alp - `voltage1`, `voltage2` -> `voltage_hv`, `voltage_lv` - `power1`, `power2` -> `power_hv`, `power_lv` -- The `ElectricalNetwork.crs` now defaults to `None` (no CRS) instead of `"EPSG:4326"`. The attribute - is also no longer normalized to a `pyproj.CRS` object but is stored as is. Use `CRS(en.crs)` to - always get a `pyproj.CRS` object. +- The `ElectricalNetwork.crs` now defaults to `None` (no CRS) instead of `"EPSG:4326"`. The attribute is also no longer + normalized to a `pyproj.CRS` object but is stored as is. Use `CRS(en.crs)` to always get a `pyproj.CRS` object. ### Detailed changes -- A new **experimental** module named `roseau.load_flow_single` has been added for studying balanced - three-phase systems using the simpler single-line model. This module is unstable and undocumented, - use at your own risk. +- A new **experimental** module named `roseau.load_flow_single` has been added for studying balanced three-phase systems + using the simpler single-line model. This module is unstable and undocumented, use at your own risk. + - Improvements of license validation, particularly during simultaneous use of multiple threads or processes. + - {gh-pr}`351` {gh-issue}`332` Improved support of the network's Coordinate Reference System (CRS). + - The `CRS` will now default to `None` (no CRS) instead of `"EPSG:4326"` if not provided. - The `ElectricalNetwork.crs` attribute is no longer normalized to a `pyproj.CRS` object. - The `CRS` can be set when creating a network with the `ElectricalNetwork.from_element` method. - The `CRS` is now correctly stored in the JSON file and is read when loading the network. -- {gh-pr}`350` {gh-issue}`349` Fix invalid transformer parameters with no leakage inductance when - created from open and short circuit tests. -- {gh-pr}`348` The load classes have two new properties: `res_inner_currents` and `res_inner_powers`. - These are the currents and powers that flow in the inner components of the load as opposed to - `res_currents` and `res_powers` that flow into the load. + +- {gh-pr}`350` {gh-issue}`349` Fix invalid transformer parameters with no leakage inductance when created from open and + short circuit tests. + +- {gh-pr}`348` The load classes have two new properties: `res_inner_currents` and `res_inner_powers`. These are the + currents and powers that flow in the inner components of the load as opposed to `res_currents` and `res_powers` that + flow into the load. + - {gh-pr}`343` {gh-issue}`336` Warn when a line/switch connects buses with different nominal voltages. -- {gh-pr}`341` Compute the transformer's open-circuit (no-load) and short-circuit tests results if - they are not provided. `TransformerParameters`'s `i0`, `p0`, `vsc`, and `psc` are now always - available and no longer return `None` when the transformer is created from `z2` and `ym`. + +- {gh-pr}`341` Compute the transformer's open-circuit (no-load) and short-circuit tests results if they are not + provided. `TransformerParameters`'s `i0`, `p0`, `vsc`, and `psc` are now always available and no longer return `None` + when the transformer is created from `z2` and `ym`. + - {gh-pr}`340` Improve the support for the conversion from the PowerFactory DGS format. - - Add an option to `ElectricalNetwork.from_dgs` to use the element names (`loc_name` in DGS) as IDs. - The names must be unique for each element type. + + - Add an option to `ElectricalNetwork.from_dgs` to use the element names (`loc_name` in DGS) as IDs. The names must be + unique for each element type. - Read the transformer's maximum loading from the DGS file. - Read the bus's nominal voltage from the DGS file. - Fix conversion of the transformer's no-load test results. -- {gh-pr}`339` Constant current loads are no longer allowed on a bus with a short-circuit. Previously, - the load flow would fail with a singular matrix error. + +- {gh-pr}`339` Constant current loads are no longer allowed on a bus with a short-circuit. Previously, the load flow + would fail with a singular matrix error. + - {gh-pr}`335` Add `GroundConnection` class with the following features: - - Ground connections for all terminal elements (buses, loads, sources) and all branch elements, - (transformers, lines, switches). Previously only buses could be connected to ground. + - Ground connections for all terminal elements (buses, loads, sources) and all branch elements, (transformers, lines, + switches). Previously only buses could be connected to ground. - Non-ideal (impedant) ground connections with the `impedance` parameter. - Access to the current in the ground connection with the `res_current` property. - The method `Ground.connect` is deprecated in favor of the new class. Replace `ground.connect(bus)` - by `GroundConnection(ground=ground, element=bus)`. The attribute `Ground.connected_buses` is also - deprecated in favor of `GroundConnection.connected_elements`. - -- {gh-pr}`331` Add `voltage_type` to the `plot_voltage_phasors` function to be able to plot the - voltages in phase-to-phase or phase-to-neutral. The `plot_symmetrical_voltages` function now plots - each sequence in a separate axes for better readability. -- {gh-pr}`330` Add phase-to-phase (`res_voltages_pp`) and phase-to-neutral (`res_voltages_pn`) - voltage results for terminal elements. Voltage unbalance results are now available for all terminal - elements with the `res_voltage_unbalance` method. -- {gh-pr}`328` Support floating neutrals for transformers. The `Transformer` class constructor now - accepts optional `connect_neutral_hv` and `connect_neutral_lv` parameters to specify if the neutral - is to be connected to the bus's neutral or to be left floating. By default the neutral is connected - when the bus has a neutral and left floating otherwise. -- {gh-pr}`328` The `plot_voltage_phasors` function and the `plot_symmetrical_voltages` functions now - also support transformers, lines and switches. -- {gh-pr}`325` Rename `Bus.potentials` to `Bus.initial_potentials`. The old attribute and constructor - parameter are deprecated and will be removed in a future release. -- {gh-pr}`319` {gh-pr}`320` {gh-pr}`321` {gh-issue}`191` Deprecate the notion of "primary" and - "secondary" sides of transformers in favor of "high-voltage" and "low-voltage" sides following the - IEC 60076-1 standard. The following parameters of `rlf.Transformer` are deprecated and renamed: + The method `Ground.connect` is deprecated in favor of the new class. Replace `ground.connect(bus)` by + `GroundConnection(ground=ground, element=bus)`. The attribute `Ground.connected_buses` is also deprecated in favor of + `GroundConnection.connected_elements`. + +- {gh-pr}`331` Add `voltage_type` to the `plot_voltage_phasors` function to be able to plot the voltages in + phase-to-phase or phase-to-neutral. The `plot_symmetrical_voltages` function now plots each sequence in a separate + axes for better readability. + +- {gh-pr}`330` Add phase-to-phase (`res_voltages_pp`) and phase-to-neutral (`res_voltages_pn`) voltage results for + terminal elements. Voltage unbalance results are now available for all terminal elements with the + `res_voltage_unbalance` method. + +- {gh-pr}`328` Support floating neutrals for transformers. The `Transformer` class constructor now accepts optional + `connect_neutral_hv` and `connect_neutral_lv` parameters to specify if the neutral is to be connected to the bus's + neutral or to be left floating. By default the neutral is connected when the bus has a neutral and left floating + otherwise. + +- {gh-pr}`328` The `plot_voltage_phasors` function and the `plot_symmetrical_voltages` functions now also support + transformers, lines and switches. + +- {gh-pr}`325` Rename `Bus.potentials` to `Bus.initial_potentials`. The old attribute and constructor parameter are + deprecated and will be removed in a future release. + +- {gh-pr}`319` {gh-pr}`320` {gh-pr}`321` {gh-issue}`191` Deprecate the notion of "primary" and "secondary" sides of + transformers in favor of "high-voltage" and "low-voltage" sides following the IEC 60076-1 standard. The following + parameters of `rlf.Transformer` are deprecated and renamed: - `bus1`, `bus2` -> `bus_hv`, `bus_lv` - `phases1`, `phases2` -> `phases_hv`, `phases_lv` - The attributes `bus1`, `bus2`, `phases1`, `phases2`, `winding1`, `winding2`, `phase_displacement` - are still available. They are aliases to newly added attributes `bus_hv`, `bus_lv`, `phases_hv`, - `phases_lv`, `whv`, `wlv`, and `clock` respectively. The old attributes will NOT be removed. + The attributes `bus1`, `bus2`, `phases1`, `phases2`, `winding1`, `winding2`, `phase_displacement` are still available. + They are aliases to newly added attributes `bus_hv`, `bus_lv`, `phases_hv`, `phases_lv`, `whv`, `wlv`, and `clock` + respectively. The old attributes will NOT be removed. - The corresponding columns in `ElectricalNetwork.transformers_frame` and - `ElectricalNetwork.res_transformers` have been renamed as well. The old columns have been removed. + The corresponding columns in `ElectricalNetwork.transformers_frame` and `ElectricalNetwork.res_transformers` have been + renamed as well. The old columns have been removed. -- {gh-pr}`318` Implement all common and additional three-phase transformer vector groups. Notable - addition is transformers with clock number 1, common in North America. +- {gh-pr}`318` Implement all common and additional three-phase transformer vector groups. Notable addition is + transformers with clock number 1, common in North America. ## Version 0.12.0-alpha @@ -124,32 +255,31 @@ This release also includes the modifications that are in the [version 0.12.0-alp - Improve the error message if a singular matrix is detected. - Build the engine using the `manylinux_2_34` image for Linux distributions (previously it was `manylinux_2_28`). - {gh-pr}`311` Add French aliases to line enumeration types. -- {gh-pr}`311` Fix `TypeError`s in the `LineParameters.from_coiffier_model`. The error message of - invalid models now indicates whether the line type or the conductor material is invalid. -- {gh-pr}`310` {gh-issue}`308` Support star and zig-zag windings with non-brought out neutral. In - earlier versions, vector groups like "Yd11" were considered identical to "YNd11". -- {gh-pr}`307` {gh-issue}`296` Make `line.res_violated` and `bus.res_violated` return a boolean array - indicating if the corresponding phase is violated. This is consistent with the dataframe results - `en.res_lines` and `en.res_buses_voltages`. For old behavior, use `line_or_bus.res_violated.any()`. +- {gh-pr}`311` Fix `TypeError`s in the `LineParameters.from_coiffier_model`. The error message of invalid models now + indicates whether the line type or the conductor material is invalid. +- {gh-pr}`310` {gh-issue}`308` Support star and zig-zag windings with non-brought out neutral. In earlier versions, + vector groups like "Yd11" were considered identical to "YNd11". +- {gh-pr}`307` {gh-issue}`296` Make `line.res_violated` and `bus.res_violated` return a boolean array indicating if the + corresponding phase is violated. This is consistent with the dataframe results `en.res_lines` and + `en.res_buses_voltages`. For old behavior, use `line_or_bus.res_violated.any()`. - {gh-pr}`305` Add missing `tap` column to `en.transformers_frame`. -- {gh-pr}`305` Add `element_type` column to `en.potential_refs_frame` to indicate if the potential - reference is connected to a bus or a ground. -- {gh-pr}`305` Add missing information to `results_to_dict` with `full=True`. This adds `loading` to - lines and transformers, `voltage_levels` to buses, and `voltages` to loads and sources. +- {gh-pr}`305` Add `element_type` column to `en.potential_refs_frame` to indicate if the potential reference is + connected to a bus or a ground. +- {gh-pr}`305` Add missing information to `results_to_dict` with `full=True`. This adds `loading` to lines and + transformers, `voltage_levels` to buses, and `voltages` to loads and sources. - {gh-pr}`305` Improve the performance of `res_violated` of buses, lines and transformers. -- {gh-pr}`304` Add top-level modules `rlf.constants` and `rlf.types`. The old modules in the `utils` - package are deprecated and will be removed in a future release. The `utils` package is for internal - use only and should not be considered stable. -- {gh-pr}`304` Add top-level module `rlf.sym` for symmetrical components utilities. The `sym_to_phasor`, - `phasor_to_sym` and `series_phasor_to_sym` functions are moved from the `rlf.converters` module to - this module. The old functions are deprecated and will be removed in a future release. -- {gh-pr}`303` Fix missing `voltage_level` in `en.res_buses_voltages` when the buses define nominal - voltage but not voltage limits. -- {gh-pr}`303` Add `rlf.SQRT3` constant for the square root of 3. It can be useful for the conversion - between phase-to-phase and phase-to-neutral voltages. +- {gh-pr}`304` Add top-level modules `rlf.constants` and `rlf.types`. The old modules in the `utils` package are + deprecated and will be removed in a future release. The `utils` package is for internal use only and should not be + considered stable. +- {gh-pr}`304` Add top-level module `rlf.sym` for symmetrical components utilities. The `sym_to_phasor`, `phasor_to_sym` + and `series_phasor_to_sym` functions are moved from the `rlf.converters` module to this module. The old functions are + deprecated and will be removed in a future release. +- {gh-pr}`303` Fix missing `voltage_level` in `en.res_buses_voltages` when the buses define nominal voltage but not + voltage limits. +- {gh-pr}`303` Add `rlf.SQRT3` constant for the square root of 3. It can be useful for the conversion between + phase-to-phase and phase-to-neutral voltages. - {gh-pr}`303` Improve the performance of some dataframe properties. -- {gh-pr}`301` {gh-issue}`299` Improve the error message when the Jacobian matrix contains infinite - or NaN values. +- {gh-pr}`301` {gh-issue}`299` Improve the error message when the Jacobian matrix contains infinite or NaN values. ## Version 0.11.0 @@ -157,26 +287,26 @@ This release adds official support for Python 3.13 and adds a new experimental b ### Breaking changes -- The `min_voltage` and `max_voltage` of `Bus` have been replaced by `nominal_voltage` (phase-to-phase, - in V), a `min_voltage_level` (unitless) and a `max_voltage_level` (unitless). -- The `type` parameter of `TransformerParameters` constructors becomes `vg` for vector group. Replace - `type="single"` by `vg="Ii0"` and `type="center"` by `vg="Iii0"`. -- The `type` attribute of `TransformerParameters` now returns `three-phase`, `single-phase` or - `center-tapped`. Use `TransformerParameters.vg` to get the vector group. -- The names of the transformers in the catalogue have been modified to add voltage levels and vector - groups. Use `rlf.TransformerParameters.get_catalogue()` to see the updated catalogue. -- The `max_current`, `section`, `insulator_type` and `conductor_type` parameters of the `LineParameters` - class are renamed to `ampacities`, `sections`, `insulators` and `materials` respectively. The new - parameters accept arrays of values, one per conductor. +- The `min_voltage` and `max_voltage` of `Bus` have been replaced by `nominal_voltage` (phase-to-phase, in V), a + `min_voltage_level` (unitless) and a `max_voltage_level` (unitless). +- The `type` parameter of `TransformerParameters` constructors becomes `vg` for vector group. Replace `type="single"` by + `vg="Ii0"` and `type="center"` by `vg="Iii0"`. +- The `type` attribute of `TransformerParameters` now returns `three-phase`, `single-phase` or `center-tapped`. Use + `TransformerParameters.vg` to get the vector group. +- The names of the transformers in the catalogue have been modified to add voltage levels and vector groups. Use + `rlf.TransformerParameters.get_catalogue()` to see the updated catalogue. +- The `max_current`, `section`, `insulator_type` and `conductor_type` parameters of the `LineParameters` class are + renamed to `ampacities`, `sections`, `insulators` and `materials` respectively. The new parameters accept arrays of + values, one per conductor. - The enumeration `InsulatorType.UNKNOWN` is removed. Please use `None` if the insulator is unknown. -- The definition of constant-current loads is modified to be the magnitudes of the currents and their - phase shift from the voltages instead of the absolute phase shift. Currents should no longer be - rotated by 120° to be in sync with the voltages. +- The definition of constant-current loads is modified to be the magnitudes of the currents and their phase shift from + the voltages instead of the absolute phase shift. Currents should no longer be rotated by 120° to be in sync with the + voltages. ### Deprecations -- The enumerated classes `InsulatorType` and `ConductorType` are renamed to `Insulator` and `Material` - respectively. Their old names are deprecated and will be removed in a future release. +- The enumerated classes `InsulatorType` and `ConductorType` are renamed to `Insulator` and `Material` respectively. + Their old names are deprecated and will be removed in a future release. - The deprecated method `LineParameters.from_name_mv` is removed. ### Detailed changes @@ -184,61 +314,50 @@ This release adds official support for Python 3.13 and adds a new experimental b - {gh-pr}`293` Fixed `loading` calculation for lines and transformers - {gh-pr}`291` Fixed several bugs in JSON serialization and deserialization. - {gh-pr}`289` {gh-issue}`264` Improve the `TransformerParameters` class and the transformers catalogue - - Add 15kV transformers to the catalogue (SE and FT) - Add single-phase transformers to the catalogue (Schneider Imprego) - - Add step-up transformers to the catalogue (Cahors "Serie Jaune") + - Add step-up transformers to the catalogue (Cahors "Série Jaune") - Use the correct LV side no-load voltage as defined in the datasheets (some 400V became 410V) - Revert {gh-pr}`282` to keep the IEC 600076 names `uhv` and `ulv` for the transformer voltages. - Replace the `type` parameter of `TransformerParameters` constructors by `vg` for vector group. - `TransformerParameters.type` now returns `three-phase`, `single-phase` or `center-tapped`. Use `TransformerParameters.vg` to get vector group. - Modify the names of the transformers in the catalogue to add voltage levels and vector groups - - {gh-pr}`285` {gh-issue}`279` Add maximum loading for lines and transformers. - - - The constructors of `Transformer` and `Line` now accept a unitless `max_loading` parameter equal - to 1 (=100%) by default. + - The constructors of `Transformer` and `Line` now accept a unitless `max_loading` parameter equal to 1 (=100%) by + default. - The parameter `max_currents` of `LineParameters` is now called `ampacities`. - - The `Line` class gained a new property `max_currents` that returns the maximal admissible currents - (in Amps) for each conductor: `line.max_current = line.parameters.ampacity * line.max_loading`. + - The `Line` class gained a new property `max_currents` that returns the maximal admissible currents (in Amps) for + each conductor: `line.max_current = line.parameters.ampacity * line.max_loading`. - The `res_violated` property of `Transformer` and `Line` now take into account this `max_loading`. - - The `Line` and `Transformer` classes have a new `res_loading` property to compute the loading of - the element: + - The `Line` and `Transformer` classes have a new `res_loading` property to compute the loading of the element: - `line.res_loading = line.res_currents / line.parameters.ampacities` - `transformer.res_loading = sum(transformer.res_powers) / transformer.parameters.sn` - - {gh-pr}`286` The deprecated method `LineParameters.from_name_mv` is removed. - {gh-pr}`283` Several changes related to the `LineParameters`: - - - The `max_current`, `section`, `insulator_type` and `conductor_type` parameters are renamed to - `max_currents`, `sections`, `insulators` and `materials` respectively. The new parameters accept - arrays of values, one per conductor. + - The `max_current`, `section`, `insulator_type` and `conductor_type` parameters are renamed to `max_currents`, + `sections`, `insulators` and `materials` respectively. The new parameters accept arrays of values, one per + conductor. - The class method `from_geometry` now accepts several additional arguments related to the neutral (`material_neutral`, `insulator_neutral`, `max_current_neutral`) - - The enumerated classes `InsulatorType` and `ConductorType` are renamed to `Insulator` and `Material`. - Their old names are deprecated and will be removed in a future release. + - The enumerated classes `InsulatorType` and `ConductorType` are renamed to `Insulator` and `Material`. Their old + names are deprecated and will be removed in a future release. - The insulator `UNKNOWN` is removed. Please use `None` if the insulator is unknown. - The insulator `NONE` is added. It must be used to describe conductors without insulator. - - The catalogue has now several additional columns related to the neutral parameters (resistance, - reactance, susceptance, material, insulator, maximal current). The `get_catalogue` and the - `from_catalogue` methods have been changed to accept filter on the columns (`material_neutral`, - `insulator_neutral`, `section_neutral`) - + - The catalogue has now several additional columns related to the neutral parameters (resistance, reactance, + susceptance, material, insulator, maximal current). The `get_catalogue` and the `from_catalogue` methods have been + changed to accept filter on the columns (`material_neutral`, `insulator_neutral`, `section_neutral`) - {gh-pr}`281` Add official support for Python 3.13. - {gh-issue}`278` {gh-pr}`280` Modify the `Bus` voltage limits: - - - The `min_voltage` and `max_voltage` parameters and attributes of `Bus` have been replaced by - `nominal_voltage` (phase-to-phase, in V), a `min_voltage_level` (unitless) and a `max_voltage_level` - (unitless). - - `Bus` gained a new property `res_voltage_levels` that returns the voltage levels of the bus - as a percentage of the nominal voltage; - - The JSON file format also changed to take into account these changes. If a `min_voltage` or - `max_voltage` existed in a file of a previous version, they are lost when upgrading the file. - -- {gh-pr}`277` Fix the definition of constant current loads to be the magnitudes of the currents - and their phase shift from the voltages instead of the absolute phase shift. Currents should no - longer be rotated by 120° to be in sync with the voltages. + - The `min_voltage` and `max_voltage` parameters and attributes of `Bus` have been replaced by `nominal_voltage` + (phase-to-phase, in V), a `min_voltage_level` (unitless) and a `max_voltage_level` (unitless). + - `Bus` gained a new property `res_voltage_levels` that returns the voltage levels of the bus as a percentage of the + nominal voltage; + - The JSON file format also changed to take into account these changes. If a `min_voltage` or `max_voltage` existed in + a file of a previous version, they are lost when upgrading the file. +- {gh-pr}`277` Fix the definition of constant current loads to be the magnitudes of the currents and their phase shift + from the voltages instead of the absolute phase shift. Currents should no longer be rotated by 120° to be in sync with + the voltages. - {gh-pr}`276` Add a backward-forward solver (experimental). - {gh-pr}`275` Use [uv](https://docs.astral.sh/uv/) instead of [Rye](https://rye.astral.sh/) as dependency manager. - {gh-pr}`273` Dynamically calculate the stacklevel of the first frame outside of `roseau.load_flow` for warnings @@ -256,49 +375,49 @@ This release adds official support for Python 3.13 and adds a new experimental b - {gh-pr}`237` Improvements of the Sphinx configuration. - {gh-pr}`262` Raise a proper error when a transformer is defined with null impedance. - {gh-pr}`259` The cache of the license object was not reset after the activation of a new license key. -- {gh-pr}`258` {gh-pr}`261` {gh-pr}`263` Add basic plotting functionality in the new `roseau.load_flow.plotting` - module. The `plot_interactive_map` function plots an electrical network on an interactive map using - the folium library and the `plot_voltage_phasors` function plots the voltage phasors of a bus, load - or source in the complex plane. The revamped plotting section of the documentation demonstrates the - plotting functionalities available in Roseau Load Flow with examples. -- {gh-pr}`258` The documentation gained a new "advanced" section with a page on floating neutrals - and a page on potential references. +- {gh-pr}`258` {gh-pr}`261` {gh-pr}`263` Add basic plotting functionality in the new `roseau.load_flow.plotting` module. + The `plot_interactive_map` function plots an electrical network on an interactive map using the folium library and the + `plot_voltage_phasors` function plots the voltage phasors of a bus, load or source in the complex plane. The revamped + plotting section of the documentation demonstrates the plotting functionalities available in Roseau Load Flow with + examples. +- {gh-pr}`258` The documentation gained a new "advanced" section with a page on floating neutrals and a page on + potential references. - {gh-pr}`257` {gh-issue}`252` Updates to the `LineParameters` class: - - The method `from_name_lv`, deprecated since version 0.6, has been removed. It can be easily - replaced by the `from_geometry` method. - - The method `from_name_mv` is deprecated. A new method `from_coiffier_model` is added with the - same functionality and more flexibility. The new method computes the ampacity of the line based - on Coiffier's model and works with different numbers of phases. + - The method `from_name_lv`, deprecated since version 0.6, has been removed. It can be easily replaced by the + `from_geometry` method. + - The method `from_name_mv` is deprecated. A new method `from_coiffier_model` is added with the same functionality and + more flexibility. The new method computes the ampacity of the line based on Coiffier's model and works with + different numbers of phases. - {gh-pr}`256` {gh-issue}`250`: - Accept scalar values for the `powers`, `currents`, `impedances` parameters of the load classes. - - Add `rlf.PositiveSequence`, `rlf.NegativeSequence` and `rlf.ZeroSequence` vectors for easier - creation of balanced quantities. -- {gh-pr}`255` Update the figures of loads and of voltage sources in the documentation to be compliant with the work - of {gh-pr}`249`. -- {gh-pr}`254` {gh-issue}`251` Allow passing multiple phases to potential references. The `phase` - attribute of the `PotentialRef` is replaced by `phases`. + - Add `rlf.PositiveSequence`, `rlf.NegativeSequence` and `rlf.ZeroSequence` vectors for easier creation of balanced + quantities. +- {gh-pr}`255` Update the figures of loads and of voltage sources in the documentation to be compliant with the work of + {gh-pr}`249`. +- {gh-pr}`254` {gh-issue}`251` Allow passing multiple phases to potential references. The `phase` attribute of the + `PotentialRef` is replaced by `phases`. - {gh-pr}`249` {gh-issue}`248` Accept scalar values for the `voltages` parameter of the `VoltageSource` class. -- {gh-pr}`247` Add `connect_neutral` parameter to the loads and sources constructor to specify if the - neutral is to be connected to the bus's neutral or to be left floating. This allows loads connected - to the same bus to have different neutral connections. The default behavior remains the same as - before where the neutral is connected when the bus has a neutral and floating otherwise. +- {gh-pr}`247` Add `connect_neutral` parameter to the loads and sources constructor to specify if the neutral is to be + connected to the bus's neutral or to be left floating. This allows loads connected to the same bus to have different + neutral connections. The default behavior remains the same as before where the neutral is connected when the bus has a + neutral and floating otherwise. - {gh-pr}`246` Improvements to the `rlf.converters` module: - Fix `series_phasor_to_sym` function with series that have different phases per element. - Make `calculate_voltages` take array-like potentials. - Improve typing of several functions. -- {gh-pr}`245` {gh-issue}`244` Fix the `LineParameters.from_geometry` method to not crash when passed - `unknown` insulator type or `None`. -- Add `res_voltages` to the `VoltageSource` class for symmetry with the other elements. - `res_voltages` is always equal to the supplied `voltages` for a voltage source. -- {gh-pr}`243` Fix cross-sectional area of DGS line types created from line elements and special case - invalid PwF line geographical coordinates table. +- {gh-pr}`245` {gh-issue}`244` Fix the `LineParameters.from_geometry` method to not crash when passed `unknown` + insulator type or `None`. +- Add `res_voltages` to the `VoltageSource` class for symmetry with the other elements. `res_voltages` is always equal + to the supplied `voltages` for a voltage source. +- {gh-pr}`243` Fix cross-sectional area of DGS line types created from line elements and special case invalid PwF line + geographical coordinates table. - {gh-pr}`240` Add tests for switches imported from DGS and improve warning and error messages. - {gh-pr}`235` **BREAKING CHANGE**: The constructor of the class `ElectricalNetwork` has changed: - it accepts keyword arguments only. - it accepts the arguments `lines`, `transformers` and `switches` in replacement of the argument `branches`. - As a consequence, - - the results method `res_branches` has been removed. Please use `res_lines`, `res_transformers` - and `res_switches` methods instead. + - the results method `res_branches` has been removed. Please use `res_lines`, `res_transformers` and `res_switches` + methods instead. - the field `branches` does not exist anymore. Please use the fields `lines`, `transformers` and `switches`. - {gh-pr}`235` Move the `Switch` class into its own file `roseau/load_flow/models/switches.py`. - {gh-pr}`235` {gh-pr}`239` The JSON file format number is upgraded to the version 2. All the files in version 0 or 1 @@ -324,15 +443,17 @@ This release adds official support for Python 3.13 and adds a new experimental b The wheels for Windows are temporarily unavailable anymore. If you need them, please post an issue on GitHub. ``` -- {gh-pr}`231` Add `LineParameters.from_power_factory` and `TransformerParameters.from_power_factory` - methods to easily import PowerFactory lines and transformer models into Roseau Load Flow. +- {gh-pr}`231` Add `LineParameters.from_power_factory` and `TransformerParameters.from_power_factory` methods to easily + import PowerFactory lines and transformer models into Roseau Load Flow. + - {gh-pr}`230` Improve the algorithm for assigning potential references for DGS networks. + - {gh-pr}`229` Several fixes and improvements to the PowerFactory import: - Update the "Export Definition Folder" bundled with _Roseau Load Flow_ as a pfd file; - - Support lines with missing type ID. This is the case when the `TypLne` objects are inherited - from an external library in PowerFactory and not included in the project being exported; A - `LineParameters` object is automatically created for these lines; + - Support lines with missing type ID. This is the case when the `TypLne` objects are inherited from an external + library in PowerFactory and not included in the project being exported; A `LineParameters` object is automatically + created for these lines; - Support "General Load (`ElmLod`)" elements; - Preserve Geometry information on buses and branches; - Improve handling of phases of several elements. Previously, phases were hard-coded. @@ -347,40 +468,39 @@ The wheels for Windows are temporarily unavailable anymore. If you need them, pl ## Version 0.9.0 -- {gh-pr}`227` Sources and loads are now allowed to have floating neutrals. This means that a load/source - with `phases="abcn"` can now be connected to a bus with `phases="abc"`. +- {gh-pr}`227` Sources and loads are now allowed to have floating neutrals. This means that a load/source with + `phases="abcn"` can now be connected to a bus with `phases="abc"`. - {gh-pr}`225` The `calculate_voltages` function now accepts and return pint quantities. - MacOS wheels for roseau-load-flow-engine are now published on PyPI. This means that `pip install roseau-load-flow` should now work on macOS. - Added support for running in Google Colab documents. - Fixed a bug in license checks caching on Windows. - Added support for Numpy 2.0. -- {gh-issue}`222` {gh-pr}`223` `from_catalogue()` methods of the electrical network and transformer - and line parameters now perform "full match" comparison on textual inputs. If you need the old - behavior, use regular expression wild cards `.*` in the input string. +- {gh-issue}`222` {gh-pr}`223` `from_catalogue()` methods of the electrical network and transformer and line parameters + now perform "full match" comparison on textual inputs. If you need the old behavior, use regular expression wild cards + `.*` in the input string. - {gh-issue}`220` {gh-pr}`221` Add `LineParameters.from_open_dss` and `TransformerParameters.from_open_dss` methods to - easily import OpenDSS lines and transformer models into Roseau Load Flow. More information is - available in the documentation of these methods. -- {gh-issue}`210` {gh-pr}`219` Add a parameter to `LineParameters.from_catalogue` to choose the number - of phases of the created line parameters object. + easily import OpenDSS lines and transformer models into Roseau Load Flow. More information is available in the + documentation of these methods. +- {gh-issue}`210` {gh-pr}`219` Add a parameter to `LineParameters.from_catalogue` to choose the number of phases of the + created line parameters object. - {gh-pr}`218` Add `Transformer.res_power_losses` to get the total power losses in a transformer. -- {gh-pr}`217` Add an ID override to `TransformerParameters.from_catalogue` similar to - `LineParameters.from_catalogue`. -- {gh-issue}`216` {gh-pr}`217` **BREAKING CHANGE**: Rename the `id` parameter of `TransformerParameters` - catalogue methods to `name` to be consistent with `LineParameters`. - **If you call these methods by keyword arguments**, make sure to update your usage of - `TransformerParameters.from_catalogue(id="xxx")` to `TransformerParameters.from_catalogue(name="xxx")`. -- {gh-pr}`212` **BREAKING CHANGE**: Modify the constructor of `TransformerParameters` to take the `z2` - and `ym` parameters directly instead of the open and short circuit tests parameters. You can still - create an object from these tests using the `from_open_and_short_circuit_tests` constructor. This - change comes with other changes to `TransformerParameters`, notably: +- {gh-pr}`217` Add an ID override to `TransformerParameters.from_catalogue` similar to `LineParameters.from_catalogue`. +- {gh-issue}`216` {gh-pr}`217` **BREAKING CHANGE**: Rename the `id` parameter of `TransformerParameters` catalogue + methods to `name` to be consistent with `LineParameters`. **If you call these methods by keyword arguments**, make + sure to update your usage of `TransformerParameters.from_catalogue(id="xxx")` to + `TransformerParameters.from_catalogue(name="xxx")`. +- {gh-pr}`212` **BREAKING CHANGE**: Modify the constructor of `TransformerParameters` to take the `z2` and `ym` + parameters directly instead of the open and short circuit tests parameters. You can still create an object from these + tests using the `from_open_and_short_circuit_tests` constructor. This change comes with other changes to + `TransformerParameters`, notably: - The `z2`, `ym`, `k`, and `orientation` are now always available as attributes on the instance - - The `to_zyk` method is deprecated in favour of the direct attribute access on the instance. This - method will be removed in a future version - - The parameters `i0`, `p0`, `psc`, and `vsc` are now optional. They return None for instances - created using `z2` and `ym` directly - - The JSON representation of `TransformerParameters` has changed, but it is still compatible with - the old representation. + - The `to_zyk` method is deprecated in favour of the direct attribute access on the instance. This method will be + removed in a future version + - The parameters `i0`, `p0`, `psc`, and `vsc` are now optional. They return None for instances created using `z2` and + `ym` directly + - The JSON representation of `TransformerParameters` has changed, but it is still compatible with the old + representation. ## Version 0.8.1 @@ -399,15 +519,15 @@ The wheels for Windows are temporarily unavailable anymore. If you need them, pl transformer. The bug affected the 50 kVA transformers that have the type `Yzn11` in the catalogue. - {gh-pr}`206` {gh-issue}`187` Un-deprecate `results_to_dict/json` methods and remove deprecated `results_from_dict/json` methods. -- {gh-pr}`205` {gh-issue}`200` Fix error when propagating the potentials from a voltage source with fewer phases - than the bus. +- {gh-pr}`205` {gh-issue}`200` Fix error when propagating the potentials from a voltage source with fewer phases than + the bus. - {gh-pr}`204` {gh-issue}`193` Remove restrictions on geometry types. Allow specifying the CRS of the geometries. -- {gh-pr}`203` {gh-issue}`186` Detect invalid element overrides when connecting a new element with the - same ID and type of an existing element. +- {gh-pr}`203` {gh-issue}`186` Detect invalid element overrides when connecting a new element with the same ID and type + of an existing element. - {gh-pr}`202` {gh-issue}`188` Explicitly prevent instantiation of abstract classes. -- {gh-pr}`201` {gh-issue}`185` Add `type` attribute to the load classes and rename branches `branch_type` - attribute to `type` for consistency. Please replace `branch.branch_type` by `branch.type` in your code. - In addition, loads data frames gained two new columns: +- {gh-pr}`201` {gh-issue}`185` Add `type` attribute to the load classes and rename branches `branch_type` attribute to + `type` for consistency. Please replace `branch.branch_type` by `branch.type` in your code. In addition, loads data + frames gained two new columns: 1. `type` indicating the load type: constant-(`power`, `current`, `impedance`); 2. and `flexible` indicating if the load is flexible. - {gh-pr}`197` Fix a bug in three-phase transformer models that led to excessive reactive power flow in the transformer. @@ -415,17 +535,17 @@ The wheels for Windows are temporarily unavailable anymore. If you need them, pl efficiency class. Other internal data have been added to the catalogue for testing purposes. - {gh-pr}`198` Simplify the storage of the transformer catalogues. This is an internal change that should not have effects on user code. -- {gh-pr}`196` {gh-issue}`194` Improve the error message when accessing `res_flexible_powers` on a non-flexible load - and relax the flexible parameters plotting methods to accept an array-like of voltages. +- {gh-pr}`196` {gh-issue}`194` Improve the error message when accessing `res_flexible_powers` on a non-flexible load and + relax the flexible parameters plotting methods to accept an array-like of voltages. - {gh-pr}`195` Use `latexindent.pl` to automatically indent LaTeX files in the documentation. -- {gh-pr}`192` Speed up results access by up to 3x using several optimization techniques. This is especially - noticeable in timeseries simulations and when accessing results of large networks. +- {gh-pr}`192` Speed up results access by up to 3x using several optimization techniques. This is especially noticeable + in timeseries simulations and when accessing results of large networks. - {gh-pr}`184` Improve the documentation to have a better SEO (sitemap, metadata and canonical URLs). The navigation menu has also been improved. -- {gh-pr}`183` {gh-issue}`181` Update the networks catalogue to better represent the real networks. - LV loads are made single-phase, MV sources are connected in delta, and MV buses lost their neutral. - Voltage, current, and power limits are added to the buses, lines, and transformers. - The line parameters IDs are also updated to match the new line parameters catalogue. +- {gh-pr}`183` {gh-issue}`181` Update the networks catalogue to better represent the real networks. LV loads are made + single-phase, MV sources are connected in delta, and MV buses lost their neutral. Voltage, current, and power limits + are added to the buses, lines, and transformers. The line parameters IDs are also updated to match the new line + parameters catalogue. - {gh-pr}`182` Improve the error message when trying to access results on the network before running the load flow. - {gh-pr}`189` Allow flexible loads to have a null active theoretical power. @@ -440,49 +560,45 @@ a standalone Python library. - Fix a bug in the engine: it was impossible to change the parameters of center-tapped and single phase transformers. - {gh-pr}`179` Fix a bug in the propagation of potentials when a center-tapped transformer is used without neutral at the primary side. -- {gh-pr}`178` {gh-issue}`176` Merge the `results_to_json`, `results_from_json`, `results_to_dict` - and `results_from_dict` methods of the `ElectricalNetwork` and `Element`s classes into the methods - `to_json`, `from_json`, `to_dict` and `from_dict` respectively. The old `results_` methods are - **deprecated** and will be removed in a future release. The new methods will include the results by - default, but you can pass `include_results=False` to exclude them. -- {gh-pr}`175` {gh-issue}`174` Fix JSON serialization of network with line parameters created from the - catalogue. +- {gh-pr}`178` {gh-issue}`176` Merge the `results_to_json`, `results_from_json`, `results_to_dict` and + `results_from_dict` methods of the `ElectricalNetwork` and `Element`s classes into the methods `to_json`, `from_json`, + `to_dict` and `from_dict` respectively. The old `results_` methods are **deprecated** and will be removed in a future + release. The new methods will include the results by default, but you can pass `include_results=False` to exclude + them. +- {gh-pr}`175` {gh-issue}`174` Fix JSON serialization of network with line parameters created from the catalogue. - {gh-pr}`173` Remove the conda installation option. - {gh-pr}`168` {gh-issue}`166` Fix initial potentials' propagation. - {gh-pr}`167` {gh-issue}`161` Add a catalogue of lines using the IEC standards. You can use the method `LineParameters.get_catalogue()` to get a data frame of the available lines and the method - `LineParameters.from_catalogue()` to create a line from the catalogue. Several line types, conductor - material, and insulation types have been updated. Physical constants have been updated to match the - IEC standards where applicable. -- {gh-pr}`167` The class `LineParameters` now takes optional arguments `line_type`, `conductor_type`, - `insulator_type` and `section`. These parameters are accessible as properties. They are filled - automatically when creating a line from the catalogue or from a geometry. -- {gh-pr}`167` Replace all `print_catalogue()` methods by `get_catalogue()` methods that return a - data frame instead of printing the catalogue to the console. -- {gh-pr}`167` Enumeration classes no longer have a `from_string` method, you can call the enumeration - class directly with the string value to get the corresponding enumeration member. Case-insensitive - behavior is preserved. + `LineParameters.from_catalogue()` to create a line from the catalogue. Several line types, conductor material, and + insulation types have been updated. Physical constants have been updated to match the IEC standards where applicable. +- {gh-pr}`167` The class `LineParameters` now takes optional arguments `line_type`, `conductor_type`, `insulator_type` + and `section`. These parameters are accessible as properties. They are filled automatically when creating a line from + the catalogue or from a geometry. +- {gh-pr}`167` Replace all `print_catalogue()` methods by `get_catalogue()` methods that return a data frame instead of + printing the catalogue to the console. +- {gh-pr}`167` Enumeration classes no longer have a `from_string` method, you can call the enumeration class directly + with the string value to get the corresponding enumeration member. Case-insensitive behavior is preserved. - {gh-pr}`167` {gh-issue}`122` Add checks on line height and diameter in the `LineParameters.from_geometry()` - alternative constructor. This method will try to guess a default conductor and insulation type if - none is provided. -- {gh-pr}`163` **BREAKING CHANGE:** roseau-load-flow is no longer a SaaS project. Starting with version - 0.7.0, the software is distributed as a standalone Python package. You need a license to use it for - commercial purposes. See the documentation for more details. This comes with a huge performance - improvement but requires a breaking change to the API: + alternative constructor. This method will try to guess a default conductor and insulation type if none is provided. +- {gh-pr}`163` **BREAKING CHANGE:** roseau-load-flow is no longer a SaaS project. Starting with version 0.7.0, the + software is distributed as a standalone Python package. You need a license to use it for commercial purposes. See the + documentation for more details. This comes with a huge performance improvement but requires a breaking change to the + API: - The `ElectricalNetwork.solve_load_flow()` method no longer takes an `auth` argument. - - To activate the license, you need to call `roseau.load_flow.activate_license("MY LICENSE KEY")` - or set the environment variable `ROSEAU_LOAD_FLOW_LICENSE_KEY` (preferred) before calling + - To activate the license, you need to call `roseau.load_flow.activate_license("MY LICENSE KEY")` or set the + environment variable `ROSEAU_LOAD_FLOW_LICENSE_KEY` (preferred) before calling `ElectricalNetwork.solve_load_flow()`. More information in the documentation. - - Several methods on the `FlexibleParameter` class that previously required `auth` are changed. Make - sure to follow the documentation to update your code. -- {gh-pr}`163` {gh-issue}`158` Fix `ElectricalNetwork.res_transformers` returning an empty dataframe - when max_power is not set. -- {gh-pr}`163` Several unused exception codes were removed. An `EMPTY_NETWORK` code was added to indicate - that a network is being created with no elements. -- {gh-pr}`163` Remove the `ElectricalNetwork.res_info` attribute. `ElectricalNetwork.solve_load_flow()` now - returns the tuple (number of iterations, residual). -- {gh-pr}`163` Remove the `Bus.clear_short_circuits()` and `ElectricalNetwork.clear_short_circuits()` - methods. It is currently not possible to clear short-circuits from the network. + - Several methods on the `FlexibleParameter` class that previously required `auth` are changed. Make sure to follow + the documentation to update your code. +- {gh-pr}`163` {gh-issue}`158` Fix `ElectricalNetwork.res_transformers` returning an empty dataframe when max_power is + not set. +- {gh-pr}`163` Several unused exception codes were removed. An `EMPTY_NETWORK` code was added to indicate that a network + is being created with no elements. +- {gh-pr}`163` Remove the `ElectricalNetwork.res_info` attribute. `ElectricalNetwork.solve_load_flow()` now returns the + tuple (number of iterations, residual). +- {gh-pr}`163` Remove the `Bus.clear_short_circuits()` and `ElectricalNetwork.clear_short_circuits()` methods. It is + currently not possible to clear short-circuits from the network. - {gh-pr}`163` Improve performance of network creation and results access. - {gh-pr}`163` Attributes `phases` and `bus` are now read-only on all elements. - {gh-pr}`151` Require Python 3.10 or newer. @@ -492,29 +608,27 @@ a standalone Python library. - {gh-pr}`149` {gh-issue}`145` Add custom pint wrapper for better handling of pint arrays. - {gh-pr}`148` {gh-issue}`122` deprecate `LineParameters.from_name_lv()` in favor of the more generic `LineParameters.from_geometry()`. The method will be removed in a future release. -- {gh-pr}`142` {gh-issue}`136` Add `Bus.res_voltage_unbalance()` method to get the Voltage Unbalance - Factor (VUF) as defined by the IEC standard IEC 61000-3-14. -- {gh-pr}`141` {gh-issue}`137` Add `ElectricalNetwork.to_graph()` to get a `networkx.Graph` object - representing the electrical network for graph theory studies. Install with the `"graph"` extra to - get _networkx_. - `ElectricalNetwork` also gained a new `buses_clusters` property that returns a list of sets of - IDs of buses that are connected by a line or a switch. This can be useful to isolate parts of the - network for localized analysis. For example, to study a LV subnetwork of a MV feeder. Alternatively, - to get the cluster certain bus belongs to, you can use `Bus.get_connected_buses()`. +- {gh-pr}`142` {gh-issue}`136` Add `Bus.res_voltage_unbalance()` method to get the Voltage Unbalance Factor (VUF) as + defined by the IEC standard IEC 61000-3-14. +- {gh-pr}`141` {gh-issue}`137` Add `ElectricalNetwork.to_graph()` to get a `networkx.Graph` object representing the + electrical network for graph theory studies. Install with the `"graph"` extra to get _networkx_. `ElectricalNetwork` + also gained a new `buses_clusters` property that returns a list of sets of IDs of buses that are connected by a line + or a switch. This can be useful to isolate parts of the network for localized analysis. For example, to study a LV + subnetwork of a MV feeder. Alternatively, to get the cluster certain bus belongs to, you can use + `Bus.get_connected_buses()`. - {gh-pr}`141` Add official support for Python 3.12. This is the last release to support Python 3.9. - {gh-pr}`138` Add network constraints for analysis of the results. - - Buses can define minimum and maximum voltages. Use `bus.res_violated` to see if the bus has - over- or under-voltage. - - Lines can define a maximum current. Use `line.res_violated` to see if the loading of any of the - line's cables is too high. - - Transformers can define a maximum power. Use `transformer.res_violated` to see if the transformer - loading is too high. + - Buses can define minimum and maximum voltages. Use `bus.res_violated` to see if the bus has over- or under-voltage. + - Lines can define a maximum current. Use `line.res_violated` to see if the loading of any of the line's cables is too + high. + - Transformers can define a maximum power. Use `transformer.res_violated` to see if the transformer loading is too + high. - The new fields also appear in the data frames of the network. - {gh-pr}`133` {gh-issue}`126` Add Qmin and Qmax limits of flexible parameters. - {gh-pr}`132` {gh-issue}`101` Document extra utilities including converters and constants. - {gh-pr}`131` {gh-issue}`127` Improve the documentation of the flexible loads. - - Add the method `compute_powers` method to the `FlexibleParameter` class to compute the resulting flexible powers - for a given theoretical power and a list of voltage norms. + - Add the method `compute_powers` method to the `FlexibleParameter` class to compute the resulting flexible powers for + a given theoretical power and a list of voltage norms. - Add the `plot_control_p`, `plot_control_q` and `plot_pq` methods to the `FlexibleParameter` class to plot the control curves and control trajectories. - Add the extra `plot` to install `matplotlib` alongside `roseau-load-flow`. @@ -531,8 +645,8 @@ a standalone Python library. - Rename and refactor the method `from_lv_exact` into `from_geometry`. - Add documentation for the `LineParameters` alternative constructors. - Rename `InsulationType` into `InsulatorType`. - - Allow the letter "U" for "Underground" line type (only "S" for "Souterrain" in French was accepted). The same - with the letter "O" for "Overhead" line type (only "A" for "Aérien" in French was accepted). + - Allow the letter "U" for "Underground" line type (only "S" for "Souterrain" in French was accepted). The same with + the letter "O" for "Overhead" line type (only "A" for "Aérien" in French was accepted). - Remove the field `"model"` from the JSON serialization of `LineParameters`. - {gh-pr}`120` Fix phases of flexible power results. - {gh-pr}`119` Add explicit error message for singular jacobian. @@ -548,15 +662,13 @@ a standalone Python library. - Split the "Advanced" tutorial in several smaller files. - Remove the Docker installation option. - {gh-pr}`114` Use Pint >=0.21 to have the percent unit. -- {gh-pr}`113` Raise an error when accessing the results of - disconnected elements. +- {gh-pr}`113` Raise an error when accessing the results of disconnected elements. - {gh-pr}`112` Make the geometry serialization optional. - {gh-pr}`106` Improvements for non-euclidean projections. - {gh-pr}`104` Remove `roseau.load_flow.utils.BranchType`. -- {gh-issue}`99` Add `Line.res_series_currents` - and `Line.res_shunt_currents` properties to get the currents in the series and shunt components - of lines. Also added `ElectricalNetwork.res_lines` that contains the series losses and currents - of all the lines in the network. The property `ElectricalNetwork.res_lines_losses` was removed. +- {gh-issue}`99` Add `Line.res_series_currents` and `Line.res_shunt_currents` properties to get the currents in the + series and shunt components of lines. Also added `ElectricalNetwork.res_lines` that contains the series losses and + currents of all the lines in the network. The property `ElectricalNetwork.res_lines_losses` was removed. - {gh-issue}`100` Fix the `Yz` transformers. - {gh-pr}`97` Add the model section to the documentation. - {gh-pr}`96` @@ -579,40 +691,30 @@ a standalone Python library. ## Version 0.3.0 - Every network elements have an `id` which must be unique among the same type of elements. -- The argument `n` (number of ports) have been replaced by a `phase(s)` argument which can be for - instance `an`, `abc`, `abcn`, `ca`, etc. -- The classes `SimplifiedLine` and `ShuntLine` have been merged into a single class `Line` whose - behaviour depends on the provided `LineParameters`. -- The classes `DeltaDeltaTransformer`, `DeltaWyeTransformer`, `DeltaZigzagTransformer`, - `WyeDeltaTransformer`, `WyeWyeTransformer` and `WyeZigzagTransformer` have been replaced by an - unique `Transformer` class whose behaviour depends on the provided `TransformerParameter`. -- The classes `LineCharacteristics` and `TransformerCharacteristics` have been renamed into - `LineParameters` and `TransformerParameters`. -- The classes `AdmittanceLoad` and `DeltaAdmittanceLoad` have been removed. Please use - `ImpedanceLoad` instead, with the desired `phases` argument. -- The classes `DeltaImpedanceLoad` and `DeltaPowerLoad` have been removed. Please use the classes - `ImpedanceLoad` and `PowerLoad` instead with `phases="abc"`. -- The class `FlexibleLoad` have been removed. Please use the new `flexible_params` argument of the - `PowerLoad` class constructor. -- The `VoltageSource` is not anymore a subclass of the class `Bus`. It can now be connected to a bus - just like a load. -- All elements are aware of the network they belong to. It helps the user to avoid mistakes - (connecting elements from different networks). It also allows showing user warnings when accessing - to outdated results. +- The argument `n` (number of ports) have been replaced by a `phase(s)` argument which can be for instance `an`, `abc`, + `abcn`, `ca`, etc. +- The classes `SimplifiedLine` and `ShuntLine` have been merged into a single class `Line` whose behaviour depends on + the provided `LineParameters`. +- The classes `DeltaDeltaTransformer`, `DeltaWyeTransformer`, `DeltaZigzagTransformer`, `WyeDeltaTransformer`, + `WyeWyeTransformer` and `WyeZigzagTransformer` have been replaced by an unique `Transformer` class whose behaviour + depends on the provided `TransformerParameter`. +- The classes `LineCharacteristics` and `TransformerCharacteristics` have been renamed into `LineParameters` and + `TransformerParameters`. +- The classes `AdmittanceLoad` and `DeltaAdmittanceLoad` have been removed. Please use `ImpedanceLoad` instead, with the + desired `phases` argument. +- The classes `DeltaImpedanceLoad` and `DeltaPowerLoad` have been removed. Please use the classes `ImpedanceLoad` and + `PowerLoad` instead with `phases="abc"`. +- The class `FlexibleLoad` have been removed. Please use the new `flexible_params` argument of the `PowerLoad` class + constructor. +- The `VoltageSource` is not anymore a subclass of the class `Bus`. It can now be connected to a bus just like a load. +- All elements are aware of the network they belong to. It helps the user to avoid mistakes (connecting elements from + different networks). It also allows showing user warnings when accessing to outdated results. - All properties retrieving results are now prefixed by `res_`. -- Additional results per elements: `res_potentials`, `res_voltages`, `res_series_losses`, - `res_lie_losses`, etc. -- Pandas Data frame results: now, every result can be retrieved in Pandas Data frame from the - `ElectricalNetwork` instance. These methods are also prefixed by `res_`. +- Additional results per elements: `res_potentials`, `res_voltages`, `res_series_losses`, `res_lie_losses`, etc. +- Pandas Data frame results: now, every result can be retrieved in Pandas Data frame from the `ElectricalNetwork` + instance. These methods are also prefixed by `res_`. - Every physical input can be given as quantities (magnitude and unit) using the `Q_` class. - Every result (except Pandas data frame) are quantities (magnitude and unit). - Elements can all be serialized as JSON. - Results of an `ElectricalNetwork` can be serialized as JSON and read from a JSON file. - The documentation has been improved. - - - - - - - diff --git a/doc/Installation.md b/doc/Installation.md index 39771ef1..2feb3734 100644 --- a/doc/Installation.md +++ b/doc/Installation.md @@ -1,16 +1,18 @@ --- myst: html_meta: - "description lang=en": | + description lang=en: | Installation of Roseau Load Flow in a Python environment - Simulation of smart and unbalanced electrical distribution networks. - "description lang=fr": | + keywords lang=en: Roseau, Load flow, python, power flow, distribution grid, three-phase, multiphase, unbalanced + # spellchecker:off + description lang=fr: | Installation de Roseau Load Flow dans un environnement Python - Simulation des réseaux de distribution électriques intelligents et déséquilibrés. - "keywords lang=fr": | + keywords lang=fr: | Roseau, load flow, python, écoulement de charge, écoulement de puissance, réseau de distribution, triphasé, déséquilibré - "keywords lang=en": Roseau, Load flow, python, power flow, distribution grid, three-phase, multiphase, unbalanced + # spellchecker:on --- # Installation @@ -25,8 +27,8 @@ to the Python console prompt `>>>`. ## Using `pip` -`roseau-load-flow` is available on [PyPI](https://pypi.org/project/roseau-load-flow/). It can be -installed using pip with: +`roseau-load-flow` is available on [PyPI](https://pypi.org/project/roseau-load-flow/). It can be installed using pip +with: ````{tab} Windows @@ -102,27 +104,19 @@ $ python -m pip install --upgrade roseau-load-flow ```` -Optional dependencies can be installed using the available extras. These are only needed if you use -the corresponding functions. They can be installed with the -`python -m pip install roseau-load-flow[EXTRA]` command where `EXTRA` is one of the following: +Optional dependencies can be installed using the available extras. These are only needed if you use the corresponding +functions. They can be installed with the `python -m pip install roseau-load-flow[EXTRA]` command where `EXTRA` is one +of the following: 1. `plot`: installs _matplotlib_ for the plotting functions 2. `graph` installs _networkx_ for graph theory analysis functions ## Using `pip` in Jupyter Notebooks -If you are using Jupyter Notebooks, you can install `roseau-load-flow` directly from a notebook -cell with: +If you are using Jupyter Notebooks, you can install `roseau-load-flow` directly from a notebook cell with: ```ipython In [1]: %pip install roseau-load-flow ``` This installs the package in the correct environment for the active notebook kernel. - - - - - - - diff --git a/doc/License.md b/doc/License.md index e11e5594..049c66b9 100644 --- a/doc/License.md +++ b/doc/License.md @@ -1,18 +1,20 @@ --- myst: html_meta: - "description lang=en": | + description lang=en: | Depending on your status, Roseau Load Flow is available with several types of free or paid licenses. A trial key is also available. - "description lang=fr": | + keywords lang=en: simulation, distribution grid, solver, license, open-source, free, test + # spellchecker:off + description lang=fr: | En fonction de votre statut, Roseau Load Flow est disponible avec plusieurs types de licences gratuites ou payantes. Une clef d'essai est également disponible. - "keywords lang=fr": solveur, simulation, réseau, électrique, licence, open-source, gratuit, essai - "keywords lang=en": simulation, distribution grid, solver, license, open-source, free, test + keywords lang=fr: solveur, simulation, réseau, électrique, licence, open-source, gratuit, essai + # spellchecker:on og:image: https://www.roseautechnologies.com/wp-content/uploads/2024/04/DSCF0265-scaled.webp og:image:alt: An engineer uses Roseau Load Flow to perform compute the electric state of a MV/LV transformer og:title: Free public license key -og:description: | +og:description: |- You can try out RLF without registration on a distribution network of up to ten nodes by using the public license key provided below. --- @@ -23,8 +25,8 @@ og:description: | This project is partially open source. The source code of the Python interface is available on [GitHub](https://github.com/RoseauTechnologies/Roseau_Load_Flow) under the -[BSD 3-Clause License](https://github.com/RoseauTechnologies/Roseau_Load_Flow/blob/main/LICENSE.md). -The solver used in this project is not open source. You need a valid license key to use it. +[BSD 3-Clause License](https://github.com/RoseauTechnologies/Roseau_Load_Flow/blob/main/LICENSE.md). The solver used in +this project is not open source. You need a valid license key to use it. (license-types)= @@ -32,21 +34,20 @@ The solver used in this project is not open source. You need a valid license key ### Trial license (free) -The license key **`A8C6DA-9405FB-E74FB9-C71C3C-207661-V3`** can be used with networks containing up -to 10 buses. For example, this key can be used to follow the tutorials in this documentation or for -personal projects. This key is valid indefinitely. +The license key **`A8C6DA-9405FB-E74FB9-C71C3C-207661-V3`** can be used with networks containing up to 10 buses. For +example, this key can be used to follow the tutorials in this documentation or for personal projects. This key is valid +indefinitely. ### Academic license (free) -_Students and teachers_ are eligible for **free unlimited licenses** to use in academic projects. -Please reach out to us at [contact@roseautechnologies.com](mailto:contact@roseautechnologies.com) to -obtain your free license key. The license key will be valid for one year and can be renewed. +_Students and teachers_ are eligible for **free unlimited licenses** to use in academic projects. Please reach out to us +at [contact@roseautechnologies.com](mailto:contact@roseautechnologies.com) to obtain your free license key. The license +key will be valid for one year and can be renewed. ### Commercial license (paid) For other commercial or personal use, a license has to be purchased. Please contact us at -[contact@roseautechnologies.com](mailto:contact@roseautechnologies.com) to obtain a personalized -license. +[contact@roseautechnologies.com](mailto:contact@roseautechnologies.com) to obtain a personalized license. (license-activation)= @@ -56,19 +57,17 @@ There are two ways to activate the license in your project: ### Via environment variables (recommended) -Set the environment variable `ROSEAU_LOAD_FLOW_LICENSE_KEY` to the license key. When this environment -variable is defined, it will automatically be used by the solver to validate the license, no further -action is required. +Set the environment variable `ROSEAU_LOAD_FLOW_LICENSE_KEY` to the license key. When this environment variable is +defined, it will automatically be used by the solver to validate the license, no further action is required. -Please refer to the [How to set an environment variable?](license-environment-variable) section below -if you need help setting an environment variable. +Please refer to the [How to set an environment variable?](license-environment-variable) section below if you need help +setting an environment variable. ### Using the `activate_license` function -Call the function `activate_license` with the license key as argument. This function will activate -the license for the current session. If you use this approach, it is recommended to store the -license key in a file and read it from there to avoid hard coding it in your code and accidentally -committing it to your repository. Example: +Call the function `activate_license` with the license key as argument. This function will activate the license for the +current session. If you use this approach, it is recommended to store the license key in a file and read it from there +to avoid hard coding it in your code and accidentally committing it to your repository. Example: ```python from pathlib import Path @@ -79,8 +78,7 @@ rlf.activate_license(Path("my_license_key.txt").read_text().strip()) # Rest of your code here ``` -where the file `my_license_key.txt` contains `A8C6DA-9405FB-E74FB9-C71C3C-207661-V3` (replace -with your license key). +where the file `my_license_key.txt` contains `A8C6DA-9405FB-E74FB9-C71C3C-207661-V3` (replace with your license key). ```{important} Do not share your license key with others. The license key is personal and should not be shared @@ -92,18 +90,25 @@ the license key from versioning by adding it to your `.gitignore` file. ## How to set an environment variable? -If you are not sure how to set an environment variable, [this article](https://www.bitecode.dev/p/environment-variables-for-beginners) -has instructions for Windows, macOS and Linux. The section [Persisting an environment variable](https://www.bitecode.dev/i/121864947/persisting-an-environment-variable) -explains how to make the environment variable persistent on your machine so that you don't have to -set it every time you open a new terminal. +If you are not sure how to set an environment variable, +[this article](https://www.bitecode.dev/p/environment-variables-for-beginners) has instructions for Windows, macOS and +Linux. The section +[Persisting an environment variable](https://www.bitecode.dev/i/121864947/persisting-an-environment-variable) explains +how to make the environment variable persistent on your machine so that you don't have to set it every time you open a +new terminal. ### For Google Colab users -The "Secrets" feature in Google Colab is very useful for defining local variables. In the left panel, open the 'Secrets' section. Create a new variable called `ROSEAU_LOAD_FLOW_LICENSE_KEY`, with the value being your license key. This variable is personal to you, and the toggle will allow you to enable access to the license key for notebooks of your choice. +The "Secrets" feature in Google Colab is very useful for defining local variables. In the left panel, open the 'Secrets' +section. Create a new variable called `ROSEAU_LOAD_FLOW_LICENSE_KEY`, with the value being your license key. This +variable is personal to you, and the toggle will allow you to enable access to the license key for notebooks of your +choice. ```{image} /_static/2024_09_16_Google_Colab_Environment_Variable.png -:alt: Google Colab environment variable -:align: center +--- +alt: Google Colab environment variable +align: center +--- ``` To set the environment variable, add the following in a cell at the beginning of your notebook: @@ -115,11 +120,10 @@ os.environ['ROSEAU_LOAD_FLOW_LICENSE_KEY'] = userdata.get('ROSEAU_LOAD_FLOW_LICE ### For Jupyter Notebook users -If you are using a _Jupyter Notebook_, you can follow these instructions to set the environment -variable: +If you are using a _Jupyter Notebook_, you can follow these instructions to set the environment variable: -1. Create a file named `.env` in the same directory as you notebook with the following content - (replace the key with your license key): +1. Create a file named `.env` in the same directory as you notebook with the following content (replace the key with + your license key): ```bash ROSEAU_LOAD_FLOW_LICENSE_KEY="A8C6DA-9405FB-E74FB9-C71C3C-207661-V3" ``` @@ -129,23 +133,24 @@ variable: %load_ext dotenv %dotenv ``` - The first line will install the package [python-dotenv](https://pypi.org/project/python-dotenv/) - if it is not already installed. The next lines will load the extension `dotenv` and load the - environment variables from the file `.env` in the current directory (created in step 1). + The first line will install the package [python-dotenv](https://pypi.org/project/python-dotenv/) if it is not already + installed. The next lines will load the extension `dotenv` and load the environment variables from the file `.env` in + the current directory (created in step 1). ### For VS Code users -If you are using [Visual Studio Code](https://code.visualstudio.com/), you can create a file named -`.env` in your project directory (similar to step 1 for Jupyter) and VS Code will automatically -load the environment variables from this file when you run your code (including when using Jupyter -Notebooks in VS Code). +If you are using [Visual Studio Code](https://code.visualstudio.com/), you can create a file named `.env` in your +project directory (similar to step 1 for Jupyter) and VS Code will automatically load the environment variables from +this file when you run your code (including when using Jupyter Notebooks in VS Code). ### For PyCharm users -If you are using [PyCharm](https://www.jetbrains.com/pycharm/), you can add the environment variable -to your _Python Console_ settings as indicated in the screenshot below: +If you are using [PyCharm](https://www.jetbrains.com/pycharm/), you can add the environment variable to your _Python +Console_ settings as indicated in the screenshot below: ```{image} /_static/2024_01_12_Pycharm_Console_Environment_Variable.png -:alt: Pycharm Console environment variable -:align: center +--- +alt: Pycharm Console environment variable +align: center +--- ``` diff --git a/doc/_static/Network/Catalogue.html b/doc/_static/Network/Catalogue.html index 9dfc5b69..92e73130 100644 --- a/doc/_static/Network/Catalogue.html +++ b/doc/_static/Network/Catalogue.html @@ -1,7 +1,7 @@ - + - +
diff --git a/doc/_static/Network/LVFeeder00939.html b/doc/_static/Network/LVFeeder00939.html index bbdb5f1a..05b90f67 100644 --- a/doc/_static/Network/LVFeeder00939.html +++ b/doc/_static/Network/LVFeeder00939.html @@ -2,19 +2,19 @@ LV Feeder 00939 - + + > + > - +

LV Feeder 00939

diff --git a/doc/_static/Network/LVFeeder02639.html b/doc/_static/Network/LVFeeder02639.html index 333d30d5..ccc1e483 100644 --- a/doc/_static/Network/LVFeeder02639.html +++ b/doc/_static/Network/LVFeeder02639.html @@ -2,19 +2,19 @@ LV Feeder 02639 - + + > + > - +

LV Feeder 02639

diff --git a/doc/_static/Network/LVFeeder04790.html b/doc/_static/Network/LVFeeder04790.html index 768c4509..eebcc85e 100644 --- a/doc/_static/Network/LVFeeder04790.html +++ b/doc/_static/Network/LVFeeder04790.html @@ -2,19 +2,19 @@ LV Feeder 04790 - + + > + > - +

LV Feeder 04790

diff --git a/doc/_static/Network/LVFeeder06713.html b/doc/_static/Network/LVFeeder06713.html index 3875de5b..734c21ea 100644 --- a/doc/_static/Network/LVFeeder06713.html +++ b/doc/_static/Network/LVFeeder06713.html @@ -2,19 +2,19 @@ LV Feeder 06713 - + + > + > - +

LV Feeder 06713

diff --git a/doc/_static/Network/LVFeeder06926.html b/doc/_static/Network/LVFeeder06926.html index bfd0fabf..d23603b3 100644 --- a/doc/_static/Network/LVFeeder06926.html +++ b/doc/_static/Network/LVFeeder06926.html @@ -2,19 +2,19 @@ LV Feeder 06926 - + + > + > - +

LV Feeder 06926

diff --git a/doc/_static/Network/LVFeeder06975.html b/doc/_static/Network/LVFeeder06975.html index 8e45b38b..89dd904d 100644 --- a/doc/_static/Network/LVFeeder06975.html +++ b/doc/_static/Network/LVFeeder06975.html @@ -2,19 +2,19 @@ LV Feeder 06975 - + + > + > - +

LV Feeder 06975

diff --git a/doc/_static/Network/LVFeeder18498.html b/doc/_static/Network/LVFeeder18498.html index c9769444..145a0b1d 100644 --- a/doc/_static/Network/LVFeeder18498.html +++ b/doc/_static/Network/LVFeeder18498.html @@ -2,19 +2,19 @@ LV Feeder 18498 - + + > + > - +

LV Feeder 18498

diff --git a/doc/_static/Network/LVFeeder18769.html b/doc/_static/Network/LVFeeder18769.html index c6d3403e..9f1dea4f 100644 --- a/doc/_static/Network/LVFeeder18769.html +++ b/doc/_static/Network/LVFeeder18769.html @@ -2,19 +2,19 @@ LV Feeder 18769 - + + > + > - +

LV Feeder 18769

diff --git a/doc/_static/Network/LVFeeder19558.html b/doc/_static/Network/LVFeeder19558.html index c35ce72c..05cdf907 100644 --- a/doc/_static/Network/LVFeeder19558.html +++ b/doc/_static/Network/LVFeeder19558.html @@ -2,19 +2,19 @@ LV Feeder 19558 - + + > + > - +

LV Feeder 19558

diff --git a/doc/_static/Network/LVFeeder20256.html b/doc/_static/Network/LVFeeder20256.html index fe85771c..ca1530d8 100644 --- a/doc/_static/Network/LVFeeder20256.html +++ b/doc/_static/Network/LVFeeder20256.html @@ -2,19 +2,19 @@ LV Feeder 20256 - + + > + > - +

LV Feeder 20256

diff --git a/doc/_static/Network/LVFeeder23832.html b/doc/_static/Network/LVFeeder23832.html index 56d3faf5..ac606d80 100644 --- a/doc/_static/Network/LVFeeder23832.html +++ b/doc/_static/Network/LVFeeder23832.html @@ -2,19 +2,19 @@ LV Feeder 23832 - + + > + > - +

LV Feeder 23832

diff --git a/doc/_static/Network/LVFeeder24400.html b/doc/_static/Network/LVFeeder24400.html index db1dd139..04f6a6c4 100644 --- a/doc/_static/Network/LVFeeder24400.html +++ b/doc/_static/Network/LVFeeder24400.html @@ -2,19 +2,19 @@ LV Feeder 24400 - + + > + > - +

LV Feeder 24400

diff --git a/doc/_static/Network/LVFeeder27429.html b/doc/_static/Network/LVFeeder27429.html index e3737d39..c11ee09e 100644 --- a/doc/_static/Network/LVFeeder27429.html +++ b/doc/_static/Network/LVFeeder27429.html @@ -2,19 +2,19 @@ LV Feeder 27429 - + + > + > - +

LV Feeder 27429

diff --git a/doc/_static/Network/LVFeeder27681.html b/doc/_static/Network/LVFeeder27681.html index 2365d621..39ae1af3 100644 --- a/doc/_static/Network/LVFeeder27681.html +++ b/doc/_static/Network/LVFeeder27681.html @@ -2,19 +2,19 @@ LV Feeder 27681 - + + > + > - +

LV Feeder 27681

diff --git a/doc/_static/Network/LVFeeder30216.html b/doc/_static/Network/LVFeeder30216.html index 4a42817e..e903eab0 100644 --- a/doc/_static/Network/LVFeeder30216.html +++ b/doc/_static/Network/LVFeeder30216.html @@ -2,19 +2,19 @@ LV Feeder 30216 - + + > + > - +

LV Feeder 30216

diff --git a/doc/_static/Network/LVFeeder31441.html b/doc/_static/Network/LVFeeder31441.html index fe980096..dad3f17c 100644 --- a/doc/_static/Network/LVFeeder31441.html +++ b/doc/_static/Network/LVFeeder31441.html @@ -2,19 +2,19 @@ LV Feeder 31441 - + + > + > - +

LV Feeder 31441

diff --git a/doc/_static/Network/LVFeeder36284.html b/doc/_static/Network/LVFeeder36284.html index 756bb29a..33a9d646 100644 --- a/doc/_static/Network/LVFeeder36284.html +++ b/doc/_static/Network/LVFeeder36284.html @@ -2,19 +2,19 @@ LV Feeder 36284 - + + > + > - +

LV Feeder 36284

diff --git a/doc/_static/Network/LVFeeder36360.html b/doc/_static/Network/LVFeeder36360.html index d6752d78..cea30a9d 100644 --- a/doc/_static/Network/LVFeeder36360.html +++ b/doc/_static/Network/LVFeeder36360.html @@ -2,19 +2,19 @@ LV Feeder 36360 - + + > + > - +

LV Feeder 36360

diff --git a/doc/_static/Network/LVFeeder37263.html b/doc/_static/Network/LVFeeder37263.html index dab84830..28b287e6 100644 --- a/doc/_static/Network/LVFeeder37263.html +++ b/doc/_static/Network/LVFeeder37263.html @@ -2,19 +2,19 @@ LV Feeder 37263 - + + > + > - +

LV Feeder 37263

diff --git a/doc/_static/Network/LVFeeder38211.html b/doc/_static/Network/LVFeeder38211.html index d85d5237..ada1bdc4 100644 --- a/doc/_static/Network/LVFeeder38211.html +++ b/doc/_static/Network/LVFeeder38211.html @@ -2,19 +2,19 @@ LV Feeder 38211 - + + > + > - +

LV Feeder 38211

diff --git a/doc/_static/Network/MVFeeder004.html b/doc/_static/Network/MVFeeder004.html index 6d5a4a56..a24812c2 100644 --- a/doc/_static/Network/MVFeeder004.html +++ b/doc/_static/Network/MVFeeder004.html @@ -2,19 +2,19 @@ MV Feeder 004 - + + > + > - +

MV Feeder 004

diff --git a/doc/_static/Network/MVFeeder011.html b/doc/_static/Network/MVFeeder011.html index 52cc56bc..38597bf5 100644 --- a/doc/_static/Network/MVFeeder011.html +++ b/doc/_static/Network/MVFeeder011.html @@ -2,19 +2,19 @@ MV Feeder 011 - + + > + > - +

MV Feeder 011

diff --git a/doc/_static/Network/MVFeeder015.html b/doc/_static/Network/MVFeeder015.html index 80b96534..2c7f9eeb 100644 --- a/doc/_static/Network/MVFeeder015.html +++ b/doc/_static/Network/MVFeeder015.html @@ -2,19 +2,19 @@ MV Feeder 015 - + + > + > - +

MV Feeder 015

diff --git a/doc/_static/Network/MVFeeder032.html b/doc/_static/Network/MVFeeder032.html index de81d472..98476f66 100644 --- a/doc/_static/Network/MVFeeder032.html +++ b/doc/_static/Network/MVFeeder032.html @@ -2,19 +2,19 @@ MV Feeder 032 - + + > + > - +

MV Feeder 032

diff --git a/doc/_static/Network/MVFeeder041.html b/doc/_static/Network/MVFeeder041.html index bef52972..6c089b70 100644 --- a/doc/_static/Network/MVFeeder041.html +++ b/doc/_static/Network/MVFeeder041.html @@ -2,19 +2,19 @@ MV Feeder 041 - + + > + > - +

MV Feeder 041

diff --git a/doc/_static/Network/MVFeeder063.html b/doc/_static/Network/MVFeeder063.html index 02cbd721..36929d25 100644 --- a/doc/_static/Network/MVFeeder063.html +++ b/doc/_static/Network/MVFeeder063.html @@ -2,19 +2,19 @@ MV Feeder 063 - + + > + > - +

MV Feeder 063

diff --git a/doc/_static/Network/MVFeeder078.html b/doc/_static/Network/MVFeeder078.html index 9c990fa0..1b479500 100644 --- a/doc/_static/Network/MVFeeder078.html +++ b/doc/_static/Network/MVFeeder078.html @@ -2,19 +2,19 @@ MV Feeder 078 - + + > + > - +

MV Feeder 078

diff --git a/doc/_static/Network/MVFeeder115.html b/doc/_static/Network/MVFeeder115.html index 7dbb1139..c189e4eb 100644 --- a/doc/_static/Network/MVFeeder115.html +++ b/doc/_static/Network/MVFeeder115.html @@ -2,19 +2,19 @@ MV Feeder 115 - + + > + > - +

MV Feeder 115

diff --git a/doc/_static/Network/MVFeeder128.html b/doc/_static/Network/MVFeeder128.html index d6f6906e..8b6a7c2d 100644 --- a/doc/_static/Network/MVFeeder128.html +++ b/doc/_static/Network/MVFeeder128.html @@ -2,19 +2,19 @@ MV Feeder 128 - + + > + > - +

MV Feeder 128

diff --git a/doc/_static/Network/MVFeeder151.html b/doc/_static/Network/MVFeeder151.html index 473e2e87..7bce0591 100644 --- a/doc/_static/Network/MVFeeder151.html +++ b/doc/_static/Network/MVFeeder151.html @@ -2,19 +2,19 @@ MV Feeder 151 - + + > + > - +

MV Feeder 151

diff --git a/doc/_static/Network/MVFeeder159.html b/doc/_static/Network/MVFeeder159.html index 8e6896fe..0fda13e4 100644 --- a/doc/_static/Network/MVFeeder159.html +++ b/doc/_static/Network/MVFeeder159.html @@ -2,19 +2,19 @@ MV Feeder 159 - + + > + > - +

MV Feeder 159

diff --git a/doc/_static/Network/MVFeeder176.html b/doc/_static/Network/MVFeeder176.html index 76c8647d..b0536165 100644 --- a/doc/_static/Network/MVFeeder176.html +++ b/doc/_static/Network/MVFeeder176.html @@ -2,19 +2,19 @@ MV Feeder 176 - + + > + > - +

MV Feeder 176

diff --git a/doc/_static/Network/MVFeeder210.html b/doc/_static/Network/MVFeeder210.html index ba734fb2..a184e5d9 100644 --- a/doc/_static/Network/MVFeeder210.html +++ b/doc/_static/Network/MVFeeder210.html @@ -2,19 +2,19 @@ MV Feeder 210 - + + > + > - +

MV Feeder 210

diff --git a/doc/_static/Network/MVFeeder217.html b/doc/_static/Network/MVFeeder217.html index ed6cef44..373a643f 100644 --- a/doc/_static/Network/MVFeeder217.html +++ b/doc/_static/Network/MVFeeder217.html @@ -2,19 +2,19 @@ MV Feeder 217 - + + > + > - +

MV Feeder 217

diff --git a/doc/_static/Network/MVFeeder232.html b/doc/_static/Network/MVFeeder232.html index b87e951f..56f0c9d7 100644 --- a/doc/_static/Network/MVFeeder232.html +++ b/doc/_static/Network/MVFeeder232.html @@ -2,19 +2,19 @@ MV Feeder 232 - + + > + > - +

MV Feeder 232

diff --git a/doc/_static/Network/MVFeeder251.html b/doc/_static/Network/MVFeeder251.html index ab8418e4..31e078f4 100644 --- a/doc/_static/Network/MVFeeder251.html +++ b/doc/_static/Network/MVFeeder251.html @@ -2,19 +2,19 @@ MV Feeder 251 - + + > + > - +

MV Feeder 251

diff --git a/doc/_static/Network/MVFeeder290.html b/doc/_static/Network/MVFeeder290.html index af3911d3..062209f0 100644 --- a/doc/_static/Network/MVFeeder290.html +++ b/doc/_static/Network/MVFeeder290.html @@ -2,19 +2,19 @@ MV Feeder 290 - + + > + > - +

MV Feeder 290

diff --git a/doc/_static/Network/MVFeeder312.html b/doc/_static/Network/MVFeeder312.html index 41be8047..7c485063 100644 --- a/doc/_static/Network/MVFeeder312.html +++ b/doc/_static/Network/MVFeeder312.html @@ -2,19 +2,19 @@ MV Feeder 312 - + + > + > - +

MV Feeder 312

diff --git a/doc/_static/Network/MVFeeder320.html b/doc/_static/Network/MVFeeder320.html index e5aa1a54..49d85807 100644 --- a/doc/_static/Network/MVFeeder320.html +++ b/doc/_static/Network/MVFeeder320.html @@ -2,19 +2,19 @@ MV Feeder 320 - + + > + > - +

MV Feeder 320

diff --git a/doc/_static/Network/MVFeeder339.html b/doc/_static/Network/MVFeeder339.html index bdbc87bc..ddeb076d 100644 --- a/doc/_static/Network/MVFeeder339.html +++ b/doc/_static/Network/MVFeeder339.html @@ -2,19 +2,19 @@ MV Feeder 339 - + + > + > - +

MV Feeder 339

diff --git a/doc/_static/Plotting/MVFeeder210.html b/doc/_static/Plotting/MVFeeder210.html index ede3d98a..bfdaf57e 100644 --- a/doc/_static/Plotting/MVFeeder210.html +++ b/doc/_static/Plotting/MVFeeder210.html @@ -1,7 +1,7 @@ - + - - - - - + + + + + + > + > + >