diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ddcabaa9..6dd4d950 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,11 +17,18 @@ repos: hooks: - id: poetry-check - repo: https://github.com/psf/black - rev: 23.3.0 + rev: 23.7.0 hooks: - id: black-jupyter - repo: https://github.com/charliermarsh/ruff-pre-commit - rev: v0.0.275 + rev: v0.0.280 hooks: - id: ruff - args: [--fix, --exit-non-zero-on-fix] + args: [ --fix, --exit-non-zero-on-fix ] + - repo: https://github.com/adamchainz/blacken-docs + rev: 1.15.0 + hooks: + - id: blacken-docs + entry: bash -c "blacken-docs -l 90 $(find doc/ -name '*.md')" + args: [ -l 90 ] + additional_dependencies: [ black==23.7.0 ] diff --git a/README.md b/README.md index 9d7496d6..b56c598e 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ *Roseau Load Flow* is a highly capable three-phase load flow solver. This project is compatible with Python 3.9 and above. -Please take a look at our documentation to see how to install and use `roseau_load_flow`. +Please take a look at our documentation to see how to install and use `roseau-load-flow`. * [Installation](https://roseautechnologies.github.io/Roseau_Load_Flow/Installation.html) * [Usage](https://roseautechnologies.github.io/Roseau_Load_Flow/notebooks/Getting_Started.html) diff --git a/doc/Bibliography.bib b/doc/Bibliography.bib new file mode 100644 index 00000000..0d10c6c4 --- /dev/null +++ b/doc/Bibliography.bib @@ -0,0 +1,12 @@ +@article{Klimek_2020, + doi = {10.21468/scipostphys.9.4.053}, + url = {https://doi.org/10.21468%2Fscipostphys.9.4.053}, + year = 2020, + month = {oct}, + publisher = {Stichting {SciPost}}, + volume = {9}, + number = {4}, + author = {Matthew Klimek and Maxim Perelstein}, + title = {Neural network-based approach to phase space integration}, + journal = {{SciPost} Physics} +} diff --git a/doc/Changelog.md b/doc/Changelog.md index 46f953bf..c085fa53 100644 --- a/doc/Changelog.md +++ b/doc/Changelog.md @@ -1,12 +1,20 @@ # Changelog -## Version 0.4.1 +## Version 0.5.0 **In development** -* [PR92](https://github.com/RoseauTechnologies/Roseau_Load_Flow/pull/92) Add the changelog in the documentation -* [PR92](https://github.com/RoseauTechnologies/Roseau_Load_Flow/pull/92) Use NodeJs 20 in the Dockerfile -* [PR92](https://github.com/RoseauTechnologies/Roseau_Load_Flow/pull/92) Correction of a dead link in the README +* [GH100](https://github.com/RoseauTechnologies/Roseau_Load_Flow/issues/100) Fix the `Yz` transformers +* [PR97](https://github.com/RoseauTechnologies/Roseau_Load_Flow/pull/97) Add the model section to the documentation +* [PR96](https://github.com/RoseauTechnologies/Roseau_Load_Flow/pull/96) + * Add single-phase transformer + * Add center-tapped transformer + * Remove the `TransformerType` enumeration +* [PR93](https://github.com/RoseauTechnologies/Roseau_Load_Flow/pull/93) Add short circuit computation +* [PR92](https://github.com/RoseauTechnologies/Roseau_Load_Flow/pull/92) + * Add the changelog in the documentation + * Use NodeJs 20 in the Dockerfile + * Correction of a dead link in the README ## Version 0.4.0 diff --git a/doc/Installation.md b/doc/Installation.md index 01ea9006..5b266810 100644 --- a/doc/Installation.md +++ b/doc/Installation.md @@ -1,6 +1,8 @@ -# Using `pip` # +# Installation -`roseau_load_flow` is available on [PyPI](https://pypi.org/project/roseau-load-flow/). It can be +## Using `pip` + +`roseau-load-flow` is available on [PyPI](https://pypi.org/project/roseau-load-flow/). It can be installed using pip with: ```console $ python -m pip install roseau-load-flow @@ -46,9 +48,9 @@ To upgrade to the latest version (recommended), use: $ python -m pip install --upgrade roseau-load-flow ``` -# Using `conda` # +## Using `conda` -`roseau_load_flow` is also available on [conda-forge](https://anaconda.org/conda-forge/roseau-load-flow). +`roseau-load-flow` is also available on [conda-forge](https://anaconda.org/conda-forge/roseau-load-flow). It can be installed using conda with: ```console $ conda install -c conda-forge roseau-load-flow @@ -59,9 +61,9 @@ If you use *conda* to manage your project, it is recommended to use the `conda` instead of `pip`. ``` -# Using `docker` # +## Using `docker` -`roseau_load_flow` provides a *docker image* with all required dependencies pre-installed, +`roseau-load-flow` provides a *docker image* with all required dependencies pre-installed, including *Python*. The image runs a *Jupyter* session that you can access in your browser. To install and run your docker environment, follow the steps corresponding to your operating system below. @@ -113,7 +115,7 @@ below. 8. The container should start in a few seconds. Open a web browser and navigate to [http://localhost:8080](http://localhost:8080) to find the JupyterLab page of the container. A - basic python environment is set up with the `roseau_load_flow` package already installed. + basic python environment is set up with the `roseau-load-flow` package already installed. ```` @@ -139,7 +141,7 @@ below. 5. Open a web browser and navigate to [http://localhost:8080](http://localhost:8080) to find the JupyterLab page of the container. A basic python environment is set up with the - `roseau_load_flow` package already installed. + `roseau-load-flow` package already installed. ```` diff --git a/doc/Makefile b/doc/Makefile index 3d84847a..43d97de0 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -15,6 +15,9 @@ help: images: @cd images && $(MAKE) +images-%: + @cd images && $(MAKE) $* + .PHONY: help Makefile images # Catch-all target: route all unknown targets to Sphinx using the new diff --git a/doc/Solvers.md b/doc/Solvers.md index 3a28f911..6824a28a 100644 --- a/doc/Solvers.md +++ b/doc/Solvers.md @@ -24,7 +24,7 @@ Computationally, this translates to finding a solution $x$ such that: With $\varepsilon$ being a small *tolerance*. In code, $\varepsilon$ can be set with `en.solve_load_flow(tolerance=...)` (by default `1e-6`). -There are several solvers to solve this kind of problems. In Roseau Load Flow, the following +There are several solvers to solve this kind of problems. In *Roseau Load Flow*, the following solvers are available: @@ -84,7 +84,7 @@ q(t) &:= g(x_k + t d(x_k)) A search is made to find $t$ such that: ```{math} :label: goldstein_and_price -m_2q'(0) \leq \frac{q(t) - q(0)}{t} \leq m_1q'(0) +m_2q'(0) \leqslant \frac{q(t) - q(0)}{t} \leqslant m_1q'(0) ``` ```{image} /_static/Goldstein_And_Price.svg diff --git a/doc/_static/Bus.svg b/doc/_static/Bus.svg new file mode 100644 index 00000000..e371a286 --- /dev/null +++ b/doc/_static/Bus.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Control_PU_Cons.svg b/doc/_static/Control_PU_Cons.svg index 6d3f6db2..66fc08e4 100644 --- a/doc/_static/Control_PU_Cons.svg +++ b/doc/_static/Control_PU_Cons.svg @@ -65,9 +65,6 @@ - - - @@ -99,87 +96,81 @@ - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -345,20 +336,14 @@ - - - - - - - - + + - + - + @@ -367,19 +352,13 @@ - - - - - - - + - + - + @@ -388,60 +367,60 @@ - + - - - - - - - + + + + + + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - - - - - - - + + + + + + + + - + - + @@ -451,32 +430,32 @@ - + - - + + - - + + - - - - - - - - + + + + + + + + - + - + @@ -487,32 +466,32 @@ - + - - + + - - + + - - - - - - - - + + + + + + + + - + - + @@ -523,32 +502,32 @@ - + - - + + - - + + - - - - - - - - + + + + + + + + - + - + @@ -559,32 +538,32 @@ - + - - + + - - + + - - - - - - - - + + + + + + + + - + - + @@ -595,7 +574,7 @@ - + diff --git a/doc/_static/Control_PU_Prod.svg b/doc/_static/Control_PU_Prod.svg index c857f0e1..7add47d3 100644 --- a/doc/_static/Control_PU_Prod.svg +++ b/doc/_static/Control_PU_Prod.svg @@ -65,9 +65,6 @@ - - - @@ -99,87 +96,81 @@ - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -345,20 +336,14 @@ - - - - - - - - + + - + - + @@ -367,19 +352,13 @@ - - - - - - - + - + - + @@ -388,60 +367,60 @@ - + - - - - - - - + + + + + + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - - - - - - - + + + + + + + + - + - + @@ -451,32 +430,32 @@ - + - - + + - - + + - - - - - - - - + + + + + + + + - + - + @@ -487,32 +466,32 @@ - + - - + + - - + + - - - - - - - - + + + + + + + + - + - + @@ -523,32 +502,32 @@ - + - - + + - - + + - - - - - - - - + + + + + + + + - + - + @@ -559,32 +538,32 @@ - + - - + + - - + + - - - - - - - - + + + + + + + + - + - + @@ -595,7 +574,7 @@ - + diff --git a/doc/_static/Control_QU.svg b/doc/_static/Control_QU.svg index 26def865..a994fc19 100644 --- a/doc/_static/Control_QU.svg +++ b/doc/_static/Control_QU.svg @@ -71,9 +71,6 @@ - - - @@ -186,12 +183,6 @@ - - - - - - @@ -386,20 +377,14 @@ - - - - - + + - + - - - - + @@ -408,19 +393,13 @@ - - - - - - - + - + - + @@ -482,7 +461,7 @@ - + @@ -517,7 +496,7 @@ - + @@ -553,7 +532,7 @@ - + @@ -589,7 +568,7 @@ - + @@ -625,7 +604,7 @@ - + diff --git a/doc/_static/Ground.svg b/doc/_static/Ground.svg new file mode 100644 index 00000000..b4b36c64 --- /dev/null +++ b/doc/_static/Ground.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Line/American_Shunt_Line.svg b/doc/_static/Line/American_Shunt_Line.svg new file mode 100644 index 00000000..932be2d4 --- /dev/null +++ b/doc/_static/Line/American_Shunt_Line.svg @@ -0,0 +1,781 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Line/American_Simplified_Line.svg b/doc/_static/Line/American_Simplified_Line.svg new file mode 100644 index 00000000..2f36fcd7 --- /dev/null +++ b/doc/_static/Line/American_Simplified_Line.svg @@ -0,0 +1,351 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Line/European_Shunt_Line.svg b/doc/_static/Line/European_Shunt_Line.svg new file mode 100644 index 00000000..7af77369 --- /dev/null +++ b/doc/_static/Line/European_Shunt_Line.svg @@ -0,0 +1,781 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Line/European_Simplified_Line.svg b/doc/_static/Line/European_Simplified_Line.svg new file mode 100644 index 00000000..4d91a731 --- /dev/null +++ b/doc/_static/Line/European_Simplified_Line.svg @@ -0,0 +1,351 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Line/Shunt_Line.svg b/doc/_static/Line/Shunt_Line.svg new file mode 100644 index 00000000..8188899d --- /dev/null +++ b/doc/_static/Line/Shunt_Line.svg @@ -0,0 +1,765 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Line/Simplified_Line.svg b/doc/_static/Line/Simplified_Line.svg new file mode 100644 index 00000000..32c79e96 --- /dev/null +++ b/doc/_static/Line/Simplified_Line.svg @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Load/American_Delta_Load.svg b/doc/_static/Load/American_Delta_Load.svg new file mode 100644 index 00000000..72499838 --- /dev/null +++ b/doc/_static/Load/American_Delta_Load.svg @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/American_Star_Load.svg b/doc/_static/Load/American_Star_Load.svg similarity index 65% rename from doc/_static/American_Star_Load.svg rename to doc/_static/Load/American_Star_Load.svg index 32e19f85..c02bdc2f 100644 --- a/doc/_static/American_Star_Load.svg +++ b/doc/_static/Load/American_Star_Load.svg @@ -1,5 +1,5 @@ - + @@ -21,10 +21,10 @@ - + - + @@ -49,165 +49,165 @@ - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - - - - - + + + + + - + - + - + - + - + - + - + - + - - - - - + + + + + - + - + - + - + - + - + - + - + - - - - - + + + + + - + - + - - - - - + + + + + - + - + - - - + + + - + - + - + - + - + - - - - - + + + + + - + - + - + diff --git a/doc/_static/Load/European_Delta_Load.svg b/doc/_static/Load/European_Delta_Load.svg new file mode 100644 index 00000000..948bf5cf --- /dev/null +++ b/doc/_static/Load/European_Delta_Load.svg @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/European_Star_Load.svg b/doc/_static/Load/European_Star_Load.svg similarity index 65% rename from doc/_static/European_Star_Load.svg rename to doc/_static/Load/European_Star_Load.svg index d75bd982..822e3191 100644 --- a/doc/_static/European_Star_Load.svg +++ b/doc/_static/Load/European_Star_Load.svg @@ -1,5 +1,5 @@ - + @@ -46,150 +46,150 @@ - + - + - + - + - + - + - + - + - + - - - - - + + + + + - + - + - + - + - + - + - - - - - - + + + + + + - + - + - + - + - + - + - - - - - - + + + + + + - + - + - + - + - + - + - - - - - + + + + + - + - + - - - - - + + + + + - + - + - - - + + + - + - + - + - + - + - - - - - + + + + + - + - + - + diff --git a/doc/_static/PotentialRef.svg b/doc/_static/PotentialRef.svg new file mode 100644 index 00000000..a20f94c1 --- /dev/null +++ b/doc/_static/PotentialRef.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/PotentialRef_With_Ground.svg b/doc/_static/PotentialRef_With_Ground.svg new file mode 100644 index 00000000..e91fdefb --- /dev/null +++ b/doc/_static/PotentialRef_With_Ground.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/European_Delta_Load.svg b/doc/_static/Star_Voltage_Source.svg similarity index 65% rename from doc/_static/European_Delta_Load.svg rename to doc/_static/Star_Voltage_Source.svg index c05b96af..235319ed 100644 --- a/doc/_static/European_Delta_Load.svg +++ b/doc/_static/Star_Voltage_Source.svg @@ -1,5 +1,5 @@ - + @@ -14,16 +14,16 @@ + + + - + - - - @@ -33,14 +33,17 @@ - + + + + - + @@ -49,10 +52,10 @@ - + - + @@ -60,111 +63,71 @@ + + + + + + - + - - - - - - - - - - - - - - - + - - + - + + + + + + + - - - - - - + - - + + - - + + - - - - - + + + + - + - - + + - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - + + + + - + - + + - - - - - - - - - - + @@ -175,28 +138,27 @@ - + - + - - - + + - + - + - + - + - + - + @@ -204,13 +166,30 @@ + - + + + + + + + + + + + + + + + + + - + - + diff --git a/doc/_static/Switch.svg b/doc/_static/Switch.svg new file mode 100644 index 00000000..9e3f2268 --- /dev/null +++ b/doc/_static/Switch.svg @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/American_Center_Tapped_Transformer.svg b/doc/_static/Transformer/American_Center_Tapped_Transformer.svg new file mode 100644 index 00000000..b059dcc5 --- /dev/null +++ b/doc/_static/Transformer/American_Center_Tapped_Transformer.svg @@ -0,0 +1,300 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/American_Dyn11.svg b/doc/_static/Transformer/American_Dyn11.svg new file mode 100644 index 00000000..dd8d673f --- /dev/null +++ b/doc/_static/Transformer/American_Dyn11.svg @@ -0,0 +1,567 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/American_Single_Phase_Transformer.svg b/doc/_static/Transformer/American_Single_Phase_Transformer.svg new file mode 100644 index 00000000..3050eb94 --- /dev/null +++ b/doc/_static/Transformer/American_Single_Phase_Transformer.svg @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/American_Three_Phase_Transformer.svg b/doc/_static/Transformer/American_Three_Phase_Transformer.svg new file mode 100644 index 00000000..b3ad6cb3 --- /dev/null +++ b/doc/_static/Transformer/American_Three_Phase_Transformer.svg @@ -0,0 +1,736 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/Dyn11.png b/doc/_static/Transformer/Dyn11.png new file mode 100644 index 00000000..30be2f22 --- /dev/null +++ b/doc/_static/Transformer/Dyn11.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:428887d914bda0c44138eae86beb497288ccbfbf3044cf533fad27b37c0b10ff +size 85928 diff --git a/doc/_static/Transformer/European_Center_Tapped_Transformer.svg b/doc/_static/Transformer/European_Center_Tapped_Transformer.svg new file mode 100644 index 00000000..2e82ed37 --- /dev/null +++ b/doc/_static/Transformer/European_Center_Tapped_Transformer.svg @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/European_Dyn11.svg b/doc/_static/Transformer/European_Dyn11.svg new file mode 100644 index 00000000..5d8a808d --- /dev/null +++ b/doc/_static/Transformer/European_Dyn11.svg @@ -0,0 +1,516 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/European_Single_Phase_Transformer.svg b/doc/_static/Transformer/European_Single_Phase_Transformer.svg new file mode 100644 index 00000000..d35e95f8 --- /dev/null +++ b/doc/_static/Transformer/European_Single_Phase_Transformer.svg @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/European_Three_Phase_Transformer.svg b/doc/_static/Transformer/European_Three_Phase_Transformer.svg new file mode 100644 index 00000000..74c8390b --- /dev/null +++ b/doc/_static/Transformer/European_Three_Phase_Transformer.svg @@ -0,0 +1,685 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/Windings.png b/doc/_static/Transformer/Windings.png new file mode 100644 index 00000000..6ed387fa --- /dev/null +++ b/doc/_static/Transformer/Windings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bfa41f35928aa384d00bc3d2b092e481e7fb480e3499036be139b404a3f433c +size 232264 diff --git a/doc/_static/Transformer/Windings.svg b/doc/_static/Transformer/Windings.svg new file mode 100644 index 00000000..0a725bdc --- /dev/null +++ b/doc/_static/Transformer/Windings.svg @@ -0,0 +1,640 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/Windings_Dd0.svg b/doc/_static/Transformer/Windings_Dd0.svg new file mode 100644 index 00000000..e4c809d9 --- /dev/null +++ b/doc/_static/Transformer/Windings_Dd0.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/Windings_Dd6.svg b/doc/_static/Transformer/Windings_Dd6.svg new file mode 100644 index 00000000..34147826 --- /dev/null +++ b/doc/_static/Transformer/Windings_Dd6.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/Windings_Dy11.svg b/doc/_static/Transformer/Windings_Dy11.svg new file mode 100644 index 00000000..f8b254b9 --- /dev/null +++ b/doc/_static/Transformer/Windings_Dy11.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/Windings_Dy5.svg b/doc/_static/Transformer/Windings_Dy5.svg new file mode 100644 index 00000000..e6b92be3 --- /dev/null +++ b/doc/_static/Transformer/Windings_Dy5.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/Windings_Dz0.svg b/doc/_static/Transformer/Windings_Dz0.svg new file mode 100644 index 00000000..ebdfc07f --- /dev/null +++ b/doc/_static/Transformer/Windings_Dz0.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/Windings_Dz6.svg b/doc/_static/Transformer/Windings_Dz6.svg new file mode 100644 index 00000000..3e44da0d --- /dev/null +++ b/doc/_static/Transformer/Windings_Dz6.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/Windings_Yd11.svg b/doc/_static/Transformer/Windings_Yd11.svg new file mode 100644 index 00000000..5f4d1ba7 --- /dev/null +++ b/doc/_static/Transformer/Windings_Yd11.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/Windings_Yd5.svg b/doc/_static/Transformer/Windings_Yd5.svg new file mode 100644 index 00000000..5e27f641 --- /dev/null +++ b/doc/_static/Transformer/Windings_Yd5.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/Windings_Yy0.svg b/doc/_static/Transformer/Windings_Yy0.svg new file mode 100644 index 00000000..7e8b5a0b --- /dev/null +++ b/doc/_static/Transformer/Windings_Yy0.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/Windings_Yy6.svg b/doc/_static/Transformer/Windings_Yy6.svg new file mode 100644 index 00000000..85158b59 --- /dev/null +++ b/doc/_static/Transformer/Windings_Yy6.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/Windings_Yz11.svg b/doc/_static/Transformer/Windings_Yz11.svg new file mode 100644 index 00000000..7b6c3a0b --- /dev/null +++ b/doc/_static/Transformer/Windings_Yz11.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/Transformer/Windings_Yz5.svg b/doc/_static/Transformer/Windings_Yz5.svg new file mode 100644 index 00000000..10c105f2 --- /dev/null +++ b/doc/_static/Transformer/Windings_Yz5.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/American_Delta_Load.svg b/doc/_static/VoltageSource/American_Delta_Voltage_Source.svg similarity index 64% rename from doc/_static/American_Delta_Load.svg rename to doc/_static/VoltageSource/American_Delta_Voltage_Source.svg index 402c1840..9eac60d4 100644 --- a/doc/_static/American_Delta_Load.svg +++ b/doc/_static/VoltageSource/American_Delta_Voltage_Source.svg @@ -1,5 +1,5 @@ - + @@ -18,13 +18,13 @@ - + - + - + @@ -43,30 +43,21 @@ - + - + - + - - - - - - - - - - + - + @@ -77,121 +68,95 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - + - + - + - + + - + + - + - + + + + + + + - + - - - + - - + - - - - - + + + + - + - + + + + + + + - + - - + - + - + + - - + + - + - - + + - + + - - - - + - - + + @@ -201,13 +166,11 @@ - - - - - + + + - + @@ -216,13 +179,11 @@ - - - - - + + + - + diff --git a/doc/_static/VoltageSource/American_Star_Voltage_Source.svg b/doc/_static/VoltageSource/American_Star_Voltage_Source.svg new file mode 100644 index 00000000..7839ff16 --- /dev/null +++ b/doc/_static/VoltageSource/American_Star_Voltage_Source.svg @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/VoltageSource/European_Delta_Voltage_Source.svg b/doc/_static/VoltageSource/European_Delta_Voltage_Source.svg new file mode 100644 index 00000000..8f5a474c --- /dev/null +++ b/doc/_static/VoltageSource/European_Delta_Voltage_Source.svg @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/_static/VoltageSource/European_Star_Voltage_Source.svg b/doc/_static/VoltageSource/European_Star_Voltage_Source.svg new file mode 100644 index 00000000..62947c67 --- /dev/null +++ b/doc/_static/VoltageSource/European_Star_Voltage_Source.svg @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/conf.py b/doc/conf.py index 5955907d..4a70a9e3 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -41,6 +41,8 @@ "autoapi.extension", "sphinx_copybutton", "sphinx_inline_tabs", + "sphinxcontrib.googleanalytics", + "sphinxcontrib.bibtex", ] myst_enable_extensions = ["deflist", "smartquotes", "replacements", "dollarmath"] add_module_names = False @@ -129,3 +131,9 @@ "pint": ("https://pint.readthedocs.io/en/stable/", None), "typing_extensions": ("https://typing-extensions.readthedocs.io/en/stable/", None), } + +# Google Analytics +googleanalytics_id = "G-Y9QSN78RFV" + +# Bibtex +bibtex_bibfiles = ["Bibliography.bib"] diff --git a/doc/images/Bus.tex b/doc/images/Bus.tex new file mode 100644 index 00000000..b84c75ad --- /dev/null +++ b/doc/images/Bus.tex @@ -0,0 +1,50 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{european, straight voltages, cute inductors}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + % Version multifilaire + + % + % Définitions + % + \pgfmathsetmacro{\xl}{0};% + \pgfmathsetmacro{\x}{1};% + \pgfmathsetmacro{\xr}{2};% + \pgfmathsetmacro{\yn}{0};% + \pgfmathsetmacro{\yc}{1};% + \pgfmathsetmacro{\yb}{2};% + \pgfmathsetmacro{\ya}{3};% + + % Début de ligne + \coordinate (vln) at (\x,\yn); + \coordinate (vlc) at (\x,\yc); + \coordinate (vlb) at (\x,\yb); + \coordinate (vla) at (\x,\ya); + + % Tensions + \node[above] at (vla) {$\underline{V_{\arm}}$};% + \node[above] at (vlb) {$\underline{V_{\brm}}$};% + \node[above] at (vlc) {$\underline{V_{\crm}}$};% + \node[above] at (vln) {$\underline{V_{\nrm}}$};% + + \draw (\xl, \yn) to[short, -*] (\x, \yn) -- (\xr, \yn);% + \draw (\xl, \yc) to[short, -*] (\x, \yc) -- (\xr, \yc);% + \draw (\xl, \yb) to[short, -*] (\x, \yb) -- (\xr, \yb);% + \draw (\xl, \ya) to[short, -*] (\x, \ya) -- (\xr, \ya);% + +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 100 +% End: diff --git a/doc/images/Control_PU_Cons.tex b/doc/images/Control_PU_Cons.tex index 98ebf543..d8466032 100644 --- a/doc/images/Control_PU_Cons.tex +++ b/doc/images/Control_PU_Cons.tex @@ -48,7 +48,7 @@ width=0.9\textwidth,% enlarge y limits,% grid=major,% - xlabel={$|V_{\ell,p_1}-V_{\ell,p_2}|$},% + xlabel={$|V_{p_1}-V_{p_2}|$},% xtick={\uminnormvaleur,\umidminnormvaleur,\udownnormvaleur,\unomnormvaleur,\uupnormvaleur,\umidmaxnormvaleur,\umaxnormvaleur},% xticklabels={% $\uminnorm$,,$\udownnorm$,$\unomnorm$,$\uupnorm$,,$\umaxnorm$% diff --git a/doc/images/Control_PU_Prod.tex b/doc/images/Control_PU_Prod.tex index 1452a65d..421ecb4b 100644 --- a/doc/images/Control_PU_Prod.tex +++ b/doc/images/Control_PU_Prod.tex @@ -48,7 +48,7 @@ width=0.9\textwidth,% enlarge y limits,% grid=major,% - xlabel={$|V_{\ell,p_1}-V_{\ell,p_2}|$},% + xlabel={$|V_{p_1}-V_{p_2}|$},% xtick={\uminnormvaleur,\umidminnormvaleur,\udownnormvaleur,\unomnormvaleur,\uupnormvaleur,\umidmaxnormvaleur,\umaxnormvaleur},% xticklabels={% $\uminnorm$,,$\udownnorm$,$\unomnorm$,$\uupnorm$,,$\umaxnorm$% diff --git a/doc/images/Control_QU.tex b/doc/images/Control_QU.tex index a575ba4d..b8947919 100644 --- a/doc/images/Control_QU.tex +++ b/doc/images/Control_QU.tex @@ -50,7 +50,7 @@ width=0.9\textwidth,% enlarge y limits,% grid=major,% - xlabel={$|V_{\ell,p_1}-V_{\ell,p_2}|$},% + xlabel={$|V_{p_1}-V_{p_2}|$},% xtick={\uminnormvaleur,\umidminnormvaleur,\udownnormvaleur,\unomnormvaleur,\uupnormvaleur,\umidmaxnormvaleur,\umaxnormvaleur},% xticklabels={% $\uminnorm$,,$\udownnorm$,$\unomnorm$,$\uupnorm$,,$\umaxnorm$% @@ -68,7 +68,7 @@ xmax=\xmaxnormvaleur,% ymin=\yminnormvaleur,% ymax=\ymaxnormvaleur,% - % ylabel={$\alpha\left(|V_{\ell,p}|\right)$},% + % ylabel={$\alpha\left(|V_{p}|\right)$},% % legend entries={Contrôles non lisses,Contrôles lisses},% legend columns=2,% legend style={% diff --git a/doc/images/Ground.tex b/doc/images/Ground.tex new file mode 100644 index 00000000..a031ac5b --- /dev/null +++ b/doc/images/Ground.tex @@ -0,0 +1,26 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{european, straight voltages, cute inductors}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + + \coordinate (g) at (0,0); + \node[ground] at (g) {};% + \node[left] at (g) {$\underline{V_{\grm}}$};% + \draw (0, 1) to[short, i=$\underline{I_{\grm}}$, -*] (g); + +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 120 +% End: diff --git a/doc/images/Line/American_Shunt_Line.tex b/doc/images/Line/American_Shunt_Line.tex new file mode 100644 index 00000000..016bca70 --- /dev/null +++ b/doc/images/Line/American_Shunt_Line.tex @@ -0,0 +1,298 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{american}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + % Version multifilaire + + % + % Définitions + % + \pgfmathsetmacro{\xl}{0};% + \pgfmathsetmacro{\zl}{11.5};% + \pgfmathsetmacro{\xr}{\zl+2.5};% + \pgfmathsetmacro{\xri}{\xr+1.5};% + \pgfmathsetmacro{\zm}{21};% + \pgfmathsetmacro{\xm}{32.5};% + \pgfmathsetmacro{\xli}{2.25};% + \pgfmathsetmacro{\xmi}{\xm-2.25};% + \pgfmathsetmacro{\yt}{0};% + \pgfmathsetmacro{\ytt}{-2};% + \pgfmathsetmacro{\yn}{8};% + \pgfmathsetmacro{\yc}{10};% + \pgfmathsetmacro{\yb}{12};% + \pgfmathsetmacro{\ya}{14};% + + % + % Styles + % + \ctikzset{bipoles/length=0.8cm}% + \tikzset{fleche/.style={<->,{Latex[]}-{Latex[]}}};% + + % + % Coordonnées + % + \coordinate (orig) at (0,0);% + + % Début de ligne + \coordinate (vlt) at (\xl,\yt);% + \coordinate (vln) at (\xl,\yn);% + \coordinate (vlc) at (\xl,\yc);% + \coordinate (vlb) at (\xl,\yb);% + \coordinate (vla) at (\xl,\ya);% + + % Fin de ligne + \coordinate (vmt) at (\xm,\yt);% + \coordinate (vmn) at (\xm,\yn);% + \coordinate (vmc) at (\xm,\yc);% + \coordinate (vmb) at (\xm,\yb);% + \coordinate (vma) at (\xm,\ya);% + + % Début Z ligne + \coordinate (zlt) at (\zl,\yt);% + \coordinate (zln) at (\zl,\yn);% + \coordinate (zlc) at (\zl,\yc);% + \coordinate (zlb) at (\zl,\yb);% + \coordinate (zla) at (\zl,\ya);% + + % Après résistance + \coordinate (xrt) at (\xr,\yt);% + \coordinate (xrn) at (\xr,\yn);% + \coordinate (xrc) at (\xr,\yc);% + \coordinate (xrb) at (\xr,\yb);% + \coordinate (xra) at (\xr,\ya);% + + % Après résistance et courant + \coordinate (xrit) at (\xri,\yt);% + \coordinate (xrin) at (\xri,\yn);% + \coordinate (xric) at (\xri,\yc);% + \coordinate (xrib) at (\xri,\yb);% + \coordinate (xria) at (\xri,\ya);% + + % Fin Z ligne + \coordinate (zmt) at (\zm,\yt);% + \coordinate (zmn) at (\zm,\yn);% + \coordinate (zmc) at (\zm,\yc);% + \coordinate (zmb) at (\zm,\yb);% + \coordinate (zma) at (\zm,\ya);% + + % Première 1/2 admittance + \coordinate (xlit) at (\xli,\yt);% + \coordinate (xlin) at (\xli,\yn);% + \coordinate (xlic) at (\xli,\yc);% + \coordinate (xlib) at (\xli,\yb);% + \coordinate (xlia) at (\xli,\ya);% + + % Seconde 1/2 admittance + \coordinate (xmit) at (\xmi,\yt);% + \coordinate (xmin) at (\xmi,\yn);% + \coordinate (xmic) at (\xmi,\yc);% + \coordinate (xmib) at (\xmi,\yb);% + \coordinate (xmia) at (\xmi,\ya);% + + % Terre + \coordinate (g) at (\zl/2+\zm/2,\yt);% + \coordinate (g2) at (\zl/2+\zm/2,\ytt);% + + % + % Dessin + % + % Tensions amont + \node[left] at (vla) {$\underline{V_{1,\arm}}$};% + \node[left] at (vlb) {$\underline{V_{1,\brm}}$};% + \node[left] at (vlc) {$\underline{V_{1,\crm}}$};% + \node[left] at (vln) {$\underline{V_{1,\nrm}}$};% + + % Tensions aval + \node[right] at (vma) {$\underline{V_{2,\arm}}$};% + \node[right] at (vmb) {$\underline{V_{2,\brm}}$};% + \node[right] at (vmc) {$\underline{V_{2,\crm}}$};% + \node[right] at (vmn) {$\underline{V_{2,\nrm}}$};% + + % Tension terre + \node[ground, \circuitikzbasekey/bipoles/length=2cm] at (g2) {};% + \node[left] at (g2) {$\underline{V_{\grm}}$};% + + % Câbles principaux + % Terre + \draw (xlit) to[short,-*] (g) to (xmit);% + \draw (xlit) to[short,-*] (g) to (xmit);% + \draw (g2) to[short, i=$\underline{I_{\grm}}$, *-] (g);% + % Neutre + \draw (vln) to[short,*-,i=$\underline{I_{1,\nrm}}$] (xlin) % + to[short, -*] (zln)% + to[R,l=$R_{\nrm}$] ($(zln)!0.5!(xrn)$)% + to[L,l=$L_{\nrm}$] (xrn)% + to[short,-] (xrin)% + to [short,-*] (zmn)% + to[short,*-] (xmin)% + to[short,-*,i<=$\underline{I_{2,\nrm}}$] (vmn);% + % C + \draw (vlc) to[short,*-,i=$\underline{I_{1,\crm}}$] (xlic)% + to[short, -*] (zlc)% + to[R,l=$R_{\crm}$] ($(zlc)!0.5!(xrc)$)% + to[L,l=$L_{\crm}$] (xrc)% + to[short,-] (xric)% + to [short,-*] (zmc)% + to[short,*-] (xmic)% + to[short,-*,i<=$\underline{I_{2,\crm}}$] (vmc);% + % B + \draw (vlb) to[short,*-,i=$\underline{I_{1,\brm}}$] (xlib)% + to[short, -*] (zlb)% + to[R,l=$R_{\brm}$] ($(zlb)!0.5!(xrb)$) % + to[L,l=$L_{\brm}$] (xrb)% + to[short,-] (xrib)% + to[short,-*] (zmb)% + to[short,*-] (xmib)% + to[short,-*,i<=$\underline{I_{2,\brm}}$] (vmb);% + % A + \draw (vla) to[short,*-,i=$\underline{I_{1,\arm}}$] (xlia)% + to[short, -*] (zla)% + to[R,l=$R_{\arm}$] ($(zla)!0.5!(xra)$)% + to [L,l=$L_{\arm}$] (xra)% + to[short,-] (xria)% + to [short,-*] (zma)% + to[short,*-] (xmia)% + to[short,-*,i<=$\underline{I_{2,\arm}}$] (vma);% + + % Mutuelles des lignes + \pgfmathsetmacro{\xrm}{\xri+0.0*(\zm-\xri)};% + \draw[fleche] (\xrm,\ya) to[bend left] node[midway, right]{$\underline{M_{\abrm}}$} (\xrm,\yb);% + \draw[fleche] (\xrm,\yb) to[bend left] node[midway, right]{$\underline{M_{\bcrm}}$} (\xrm,\yc);% + \draw[fleche] (\xrm,\yc) to[bend left] node[midway, right]{$\underline{M_{\cnrm}}$} (\xrm,\yn);% + \pgfmathsetmacro{\xrm}{\xri+0.25*(\zm-\xri)};% + \draw[fleche] (\xrm,\ya) to[bend left] node[near start, right]{$\underline{M_{\carm}}$} (\xrm,\yc);% + \pgfmathsetmacro{\xrm}{\xri+0.40*(\zm-\xri)};% + \draw[fleche] (\xrm,\yb) to[bend left] node[near end, right]{$\underline{M_{\bnrm}}$} (\xrm,\yn);% + \pgfmathsetmacro{\xrm}{\xri+0.75*(\zm-\xri)};% + \draw[fleche] (\xrm,\ya) to[bend left] node[midway, left]{$\underline{M_{\anrm}}$} (\xrm,\yn);% + + + % Première 1/2 admittance + \pgfmathsetmacro{\ylihaut}{\yt+0.95*(\yn-\yt)};% + \pgfmathsetmacro{\ylibas}{\ylihaut-1.2};% + \pgfmathsetmacro{\xliplus}{\xli+0.4};% + \pgfmathsetmacro{\xlimoins}{\xli-0.4};% + \draw (xlia) to[short,*-] (\xli,\ylihaut) -| (\xliplus,\ylihaut)% + to[R=$\dfrac{G_{\arm}}{2}$] (\xliplus,\ylibas) |- (\xli,\ylibas)% + to[short,-*] (\xli,\yt);% + \draw (\xli,\ylihaut) -| (\xlimoins,\ylihaut) to[C,l_=$\dfrac{C_{\arm}}{2}$] (\xlimoins,\ylibas) |- (\xli,\ylibas);% + + \pgfmathsetmacro{\ylihaut}{\yt+0.75*(\yn-\yt)};% + \pgfmathsetmacro{\ylibas}{\ylihaut-1.2};% + \pgfmathsetmacro{\xliref}{\xli+2};% + \pgfmathsetmacro{\xliplus}{\xliref+0.4};% + \pgfmathsetmacro{\xlimoins}{\xliref-0.4};% + \coordinate (ref) at (\xliref,0);% + \draw (xlib -| ref) to[short,*-] (\xliref,\ylihaut) -| (\xliplus,\ylihaut)% + to[R=$\dfrac{G_{\brm}}{2}$] (\xliplus,\ylibas) |- (\xliref,\ylibas)% + to[short,-*] (\xliref,\yt);% + \draw (\xliref,\ylihaut) -| (\xlimoins,\ylihaut)% + to[C,l_=$\dfrac{C_{\brm}}{2}$] (\xlimoins,\ylibas) |- (\xliref,\ylibas);% + \draw (xlia -| ref) to[C,l_=$\dfrac{C_{\abrm}}{2}$,*-] (xlib -| ref);% + + \pgfmathsetmacro{\ylihaut}{\yt+0.55*(\yn-\yt)};% + \pgfmathsetmacro{\ylibas}{\ylihaut-1.2};% + \pgfmathsetmacro{\xliref}{\xli+4} + \pgfmathsetmacro{\xliplus}{\xliref+0.4};% + \pgfmathsetmacro{\xlimoins}{\xliref-0.4};% + \coordinate (ref) at (\xliref,0);% + \draw (xlic -| ref) to[short,*-] (\xliref,\ylihaut) -| (\xliplus,\ylihaut)% + to[R=$\dfrac{G_{\crm}}{2}$] (\xliplus,\ylibas) |- (\xliref,\ylibas)% + to[short,-*] (\xliref,\yt);% + \draw (\xliref,\ylihaut) -| (\xlimoins,\ylihaut) % + to[C,l_=$\dfrac{C_{\crm}}{2}$] (\xlimoins,\ylibas) |- (\xliref,\ylibas);% + \draw (xlib -| ref) to[C,l_=$\dfrac{C_{\bcrm}}{2}$,*-*] (xlic -| ref);% + + \pgfmathsetmacro{\ylihaut}{\yt+0.35*(\yn-\yt)};% + \pgfmathsetmacro{\ylibas}{\ylihaut-1.2};% + \pgfmathsetmacro{\xliref}{\xli+6} + \pgfmathsetmacro{\xliplus}{\xliref+0.4};% + \pgfmathsetmacro{\xlimoins}{\xliref-0.4};% + \coordinate (ref) at (\xliref,0);% + \draw (xlin -| ref) to[short,*-] (\xliref,\ylihaut) -| (\xliplus,\ylihaut)% + to[R=$\dfrac{G_{\nrm}}{2}$] (\xliplus,\ylibas) |- (\xliref,\ylibas)% + to[short,-*] (\xliref,\yt);% + \draw (\xliref,\ylihaut) -| (\xlimoins,\ylihaut)% + to[C,l_=$\dfrac{C_{\nrm}}{2}$] (\xlimoins,\ylibas) |- (\xliref,\ylibas);% + \draw (xlic -| ref) to[C,l_=$\dfrac{C_{\cnrm}}{2}$,*-*] (xlin -| ref);% + \draw (xlia -| ref) to[C,l_=$\dfrac{C_{\carm}}{2}$,*-] (xlib -| ref) to[short,-*] (xlic -| ref);% + + \pgfmathsetmacro{\xliref}{\xli+8};% + \coordinate (ref) at (\xliref,0);% + \draw (xlib -| ref) to[C,l_=$\dfrac{C_{\bnrm}}{2}$,*-] (xlic -| ref) to[short,-*] (xlin -| ref);% + \pgfmathsetmacro{\xliref}{\xli+8.5};% + \coordinate (ref) at (\xliref,0);% + \draw (xlia -| ref) to[C,l_=$\dfrac{C_{\anrm}}{2}$,*-] (xlib -| ref) to[short,-*] (xlin -| ref);% + + % Seconde 1/2 admittance + \pgfmathsetmacro{\ymihaut}{\yt+0.95*(\yn-\yt)};% + \pgfmathsetmacro{\ymibas}{\ymihaut-1.2};% + \pgfmathsetmacro{\xmiplus}{\xmi+0.4};% + \pgfmathsetmacro{\xmimoins}{\xmi-0.4};% + \draw (xmia) to[short,*-] (\xmi,\ymihaut) -| (\xmiplus,\ymihaut) % + to[R,l=$\dfrac{G_{\arm}}{2}$] (\xmiplus,\ymibas) |- (\xmi,\ymibas) % + to[short,-*] (\xmi,\yt);% + \draw (\xmi,\ymihaut) -| (\xmimoins,\ymihaut) to[C,l_=$\dfrac{C_{\arm}}{2}$] (\xmimoins,\ymibas) |- (\xmi,\ymibas);% + + \pgfmathsetmacro{\ymihaut}{\yt+0.75*(\yn-\yt)};% + \pgfmathsetmacro{\ymibas}{\ymihaut-1.2};% + \pgfmathsetmacro{\xmiref}{\xmi-2};% + \pgfmathsetmacro{\xmiplus}{\xmiref+0.4};% + \pgfmathsetmacro{\xmimoins}{\xmiref-0.4};% + \coordinate (ref) at (\xmiref,0);% + \draw (xmib -| ref) to[short,*-] (\xmiref,\ymihaut) -| (\xmiplus,\ymihaut)% + to[R,l=$\dfrac{G_{\brm}}{2}$] (\xmiplus,\ymibas) |- (\xmiref,\ymibas)% + to[short,-*] (\xmiref,\yt);% + \draw (\xmiref,\ymihaut) -| (\xmimoins,\ymihaut)% + to[C,l_=$\dfrac{C_{\brm}}{2}$] (\xmimoins,\ymibas) |- (\xmiref,\ymibas);% + \draw (xmia -| ref) to[C,l^=$\dfrac{C_{\abrm}}{2}$,*-] (xmib -| ref);% + + \pgfmathsetmacro{\ymihaut}{\yt+0.55*(\yn-\yt)};% + \pgfmathsetmacro{\ymibas}{\ymihaut-1.2};% + \pgfmathsetmacro{\xmiref}{\xmi-4} + \pgfmathsetmacro{\xmiplus}{\xmiref+0.4};% + \pgfmathsetmacro{\xmimoins}{\xmiref-0.4};% + \coordinate (ref) at (\xmiref,0);% + \draw (xmic -| ref) to[short,*-] (\xmiref,\ymihaut) -| (\xmiplus,\ymihaut)% + to[R,l=$\dfrac{G_{\crm}}{2}$] (\xmiplus,\ymibas) |- (\xmiref,\ymibas)% + to[short,-*] (\xmiref,\yt);% + \draw (\xmiref,\ymihaut) -| (\xmimoins,\ymihaut)% + to[C,l_=$\dfrac{C_{\crm}}{2}$] (\xmimoins,\ymibas) |- (\xmiref,\ymibas);% + \draw (xmib -| ref) to[C,l^=$\dfrac{C_{\bcrm}}{2}$,*-*] (xmic -| ref);% + + \pgfmathsetmacro{\ymihaut}{\yt+0.35*(\yn-\yt)};% + \pgfmathsetmacro{\ymibas}{\ymihaut-1.2};% + \pgfmathsetmacro{\xmiref}{\xmi-6} + \pgfmathsetmacro{\xmiplus}{\xmiref+0.4};% + \pgfmathsetmacro{\xmimoins}{\xmiref-0.4};% + \coordinate (ref) at (\xmiref,0);% + \draw (xmin -| ref) to[short,*-] (\xmiref,\ymihaut) -| (\xmiplus,\ymihaut)% + to[R,l=$\dfrac{G_{\nrm}}{2}$] (\xmiplus,\ymibas) |- (\xmiref,\ymibas)% + to[short,-*] (\xmiref,\yt);% + \draw (\xmiref,\ymihaut) -| (\xmimoins,\ymihaut)% + to[C,l_=$\dfrac{C_{\nrm}}{2}$] (\xmimoins,\ymibas) |- (\xmiref,\ymibas);% + \draw (xmic -| ref) to[C,l^=$\dfrac{C_{\cnrm}}{2}$,*-*] (xmin -| ref);% + \draw (xmia -| ref) to[C,l^=$\dfrac{C_{\carm}}{2}$,*-] (xmib -| ref) to[short,-*] (xmic -| ref);% + + \pgfmathsetmacro{\xmiref}{\xmi-8};% + \coordinate (ref) at (\xmiref,0);% + \draw (xmib -| ref) to[C,l^=$\dfrac{C_{\bnrm}}{2}$,*-] (xmic -| ref) to[short,-*] (xmin -| ref);% + \pgfmathsetmacro{\xmiref}{\xmi-8.5};% + \coordinate (ref) at (\xmiref,0);% + \draw (xmia -| ref) to[C,l^=$\dfrac{C_{\anrm}}{2}$,*-] (xmib -| ref) to[short,-*] (xmin -| ref);% +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 120 +% End: diff --git a/doc/images/Line/American_Simplified_Line.tex b/doc/images/Line/American_Simplified_Line.tex new file mode 100644 index 00000000..75fc2d02 --- /dev/null +++ b/doc/images/Line/American_Simplified_Line.tex @@ -0,0 +1,174 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{american}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + % Version multifilaire + + % + % Définitions + % + \pgfmathsetmacro{\xl}{9};% + \pgfmathsetmacro{\zl}{11.5};% + \pgfmathsetmacro{\xr}{\zl+2.5};% + \pgfmathsetmacro{\xri}{\xr+1.5};% + \pgfmathsetmacro{\zm}{21};% + \pgfmathsetmacro{\xm}{23.5};% + \pgfmathsetmacro{\xli}{2.25};% + \pgfmathsetmacro{\xmi}{\xm-2.25};% + \pgfmathsetmacro{\yt}{0};% + \pgfmathsetmacro{\ytt}{-2};% + \pgfmathsetmacro{\yn}{8};% + \pgfmathsetmacro{\yc}{10};% + \pgfmathsetmacro{\yb}{12};% + \pgfmathsetmacro{\ya}{14};% + + % + % Styles + % + \ctikzset{bipoles/length=0.8cm}% + \tikzset{fleche/.style={<->,{Latex[]}-{Latex[]}}};% + + % + % Coordonnées + % + \coordinate (orig) at (0,0); + + % Début de ligne + \coordinate (vlt) at (\xl,\yt);% + \coordinate (vln) at (\xl,\yn);% + \coordinate (vlc) at (\xl,\yc);% + \coordinate (vlb) at (\xl,\yb);% + \coordinate (vla) at (\xl,\ya);% + + % Fin de ligne + \coordinate (vmt) at (\xm,\yt);% + \coordinate (vmn) at (\xm,\yn);% + \coordinate (vmc) at (\xm,\yc);% + \coordinate (vmb) at (\xm,\yb);% + \coordinate (vma) at (\xm,\ya);% + + % Début Z ligne + \coordinate (zlt) at (\zl,\yt);% + \coordinate (zln) at (\zl,\yn);% + \coordinate (zlc) at (\zl,\yc);% + \coordinate (zlb) at (\zl,\yb);% + \coordinate (zla) at (\zl,\ya);% + + % Après résistance + \coordinate (xrt) at (\xr,\yt);% + \coordinate (xrn) at (\xr,\yn);% + \coordinate (xrc) at (\xr,\yc);% + \coordinate (xrb) at (\xr,\yb);% + \coordinate (xra) at (\xr,\ya);% + + % Après résistance et courant + \coordinate (xrit) at (\xri,\yt);% + \coordinate (xrin) at (\xri,\yn);% + \coordinate (xric) at (\xri,\yc);% + \coordinate (xrib) at (\xri,\yb);% + \coordinate (xria) at (\xri,\ya);% + + % Fin Z ligne + \coordinate (zmt) at (\zm,\yt);% + \coordinate (zmn) at (\zm,\yn);% + \coordinate (zmc) at (\zm,\yc);% + \coordinate (zmb) at (\zm,\yb);% + \coordinate (zma) at (\zm,\ya);% + + % Première 1/2 admittance + \coordinate (xlit) at (\xli,\yt);% + \coordinate (xlin) at (\xli,\yn);% + \coordinate (xlic) at (\xli,\yc);% + \coordinate (xlib) at (\xli,\yb);% + \coordinate (xlia) at (\xli,\ya);% + + % Seconde 1/2 admittance + \coordinate (xmit) at (\xmi,\yt);% + \coordinate (xmin) at (\xmi,\yn);% + \coordinate (xmic) at (\xmi,\yc);% + \coordinate (xmib) at (\xmi,\yb);% + \coordinate (xmia) at (\xmi,\ya);% + + % Terre + \coordinate (g) at (\zl/2+\zm/2,\yt);% + \coordinate (g2) at (\zl/2+\zm/2,\ytt);% + + % + % Dessin + % + % Tensions amont + \node[left] at (vla) {$\underline{V_{1,\arm}}$};% + \node[left] at (vlb) {$\underline{V_{1,\brm}}$};% + \node[left] at (vlc) {$\underline{V_{1,\crm}}$};% + \node[left] at (vln) {$\underline{V_{1,\nrm}}$};% + + % Tensions aval + \node[right] at (vma) {$\underline{V_{2,\arm}}$};% + \node[right] at (vmb) {$\underline{V_{2,\brm}}$};% + \node[right] at (vmc) {$\underline{V_{2,\crm}}$};% + \node[right] at (vmn) {$\underline{V_{2,\nrm}}$};% + + % Câbles principaux + % Neutre + \draw (vln) to[short,*-*,i=$\underline{I_{1,\nrm}}$] (zln) + to[R,l=$R_{\nrm}$] ($(zln)!0.5!(xrn)$) % + to[L,l=$L_{\nrm}$] (xrn)% + to[short,-] (xrin) % + to[short,-*] (zmn)% + to[short,-*,i<=$\underline{I_{2,\nrm}}$] (vmn);% + % C + \draw (vlc) to[short,*-*,i=$\underline{I_{1,\crm}}$] (zlc)% + to[R,l=$R_{\crm}$] ($(zlc)!0.5!(xrc)$) % + to[L,l=$L_{\crm}$] (xrc)% + to[short,-] (xric) % + to [short,-*] (zmc) % + to[short,-*,i<=$\underline{I_{2,\crm}}$] (vmc);% + % B + \draw (vlb) to[short,*-*,i=$\underline{I_{1,\brm}}$] (zlb)% + to[R,l=$R_{\brm}$] ($(zlb)!0.5!(xrb)$) % + to[L,l=$L_{\brm}$] (xrb)% + to[short,-] (xrib) % + to[short,-*] (zmb)% + to[short,-*,i<=$\underline{I_{2,\brm}}$] (vmb);% + % A + \draw (vla) to[short,*-*,i=$\underline{I_{1,\arm}}$] (zla)% + to[R,l=$R_{\arm}$] ($(zla)!0.5!(xra)$)% + to[L,l=$L_{\arm}$] (xra)% + to[short,-] (xria) % + to[short,-*] (zma)% + to[short,-*,i<=$\underline{I_{2,\arm}}$] (vma);% + + % Mutuelles des lignes + \pgfmathsetmacro{\xrm}{\xri+0.0*(\zm-\xri)};% + \draw[fleche] (\xrm,\ya) % + to[bend left] node[midway,right]{$\underline{M_{\abrm}}$} (\xrm,\yb);% + \draw[fleche] (\xrm,\yb) % + to[bend left] node[midway, right]{$\underline{M_{\bcrm}}$} (\xrm,\yc);% + \draw[fleche] (\xrm,\yc) % + to[bend left] node[midway,right]{$\underline{M_{\cnrm}}$} (\xrm,\yn);% + \pgfmathsetmacro{\xrm}{\xri+0.25*(\zm-\xri)};% + \draw[fleche] (\xrm,\ya) % + to[bend left] node[near start,right]{$\underline{M_{\carm}}$} (\xrm,\yc);% + \pgfmathsetmacro{\xrm}{\xri+0.40*(\zm-\xri)};% + \draw[fleche] (\xrm,\yb) % + to[bend left] node[near end,right]{$\underline{M_{\bnrm}}$} (\xrm,\yn);% + \pgfmathsetmacro{\xrm}{\xri+0.75*(\zm-\xri)};% + \draw[fleche] (\xrm,\ya) % + to[bend left] node[midway,left]{$\underline{M_{\anrm}}$} (\xrm,\yn);% + +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 100 +% End: diff --git a/doc/images/Line/European_Shunt_Line.tex b/doc/images/Line/European_Shunt_Line.tex new file mode 100644 index 00000000..c750da7a --- /dev/null +++ b/doc/images/Line/European_Shunt_Line.tex @@ -0,0 +1,298 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{european, straight voltages, cute inductors}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + % Version multifilaire + + % + % Définitions + % + \pgfmathsetmacro{\xl}{0};% + \pgfmathsetmacro{\zl}{11.5};% + \pgfmathsetmacro{\xr}{\zl+2.5};% + \pgfmathsetmacro{\xri}{\xr+1.5};% + \pgfmathsetmacro{\zm}{21};% + \pgfmathsetmacro{\xm}{32.5};% + \pgfmathsetmacro{\xli}{2.25};% + \pgfmathsetmacro{\xmi}{\xm-2.25};% + \pgfmathsetmacro{\yt}{0};% + \pgfmathsetmacro{\ytt}{-2};% + \pgfmathsetmacro{\yn}{8};% + \pgfmathsetmacro{\yc}{10};% + \pgfmathsetmacro{\yb}{12};% + \pgfmathsetmacro{\ya}{14};% + + % + % Styles + % + \ctikzset{bipoles/length=0.8cm}% + \tikzset{fleche/.style={<->,{Latex[]}-{Latex[]}}};% + + % + % Coordonnées + % + \coordinate (orig) at (0,0);% + + % Début de ligne + \coordinate (vlt) at (\xl,\yt);% + \coordinate (vln) at (\xl,\yn);% + \coordinate (vlc) at (\xl,\yc);% + \coordinate (vlb) at (\xl,\yb);% + \coordinate (vla) at (\xl,\ya);% + + % Fin de ligne + \coordinate (vmt) at (\xm,\yt);% + \coordinate (vmn) at (\xm,\yn);% + \coordinate (vmc) at (\xm,\yc);% + \coordinate (vmb) at (\xm,\yb);% + \coordinate (vma) at (\xm,\ya);% + + % Début Z ligne + \coordinate (zlt) at (\zl,\yt);% + \coordinate (zln) at (\zl,\yn);% + \coordinate (zlc) at (\zl,\yc);% + \coordinate (zlb) at (\zl,\yb);% + \coordinate (zla) at (\zl,\ya);% + + % Après résistance + \coordinate (xrt) at (\xr,\yt);% + \coordinate (xrn) at (\xr,\yn);% + \coordinate (xrc) at (\xr,\yc);% + \coordinate (xrb) at (\xr,\yb);% + \coordinate (xra) at (\xr,\ya);% + + % Après résistance et courant + \coordinate (xrit) at (\xri,\yt);% + \coordinate (xrin) at (\xri,\yn);% + \coordinate (xric) at (\xri,\yc);% + \coordinate (xrib) at (\xri,\yb);% + \coordinate (xria) at (\xri,\ya);% + + % Fin Z ligne + \coordinate (zmt) at (\zm,\yt);% + \coordinate (zmn) at (\zm,\yn);% + \coordinate (zmc) at (\zm,\yc);% + \coordinate (zmb) at (\zm,\yb);% + \coordinate (zma) at (\zm,\ya);% + + % Première 1/2 admittance + \coordinate (xlit) at (\xli,\yt);% + \coordinate (xlin) at (\xli,\yn);% + \coordinate (xlic) at (\xli,\yc);% + \coordinate (xlib) at (\xli,\yb);% + \coordinate (xlia) at (\xli,\ya);% + + % Seconde 1/2 admittance + \coordinate (xmit) at (\xmi,\yt);% + \coordinate (xmin) at (\xmi,\yn);% + \coordinate (xmic) at (\xmi,\yc);% + \coordinate (xmib) at (\xmi,\yb);% + \coordinate (xmia) at (\xmi,\ya);% + + % Terre + \coordinate (g) at (\zl/2+\zm/2,\yt);% + \coordinate (g2) at (\zl/2+\zm/2,\ytt);% + + % + % Dessin + % + % Tensions amont + \node[left] at (vla) {$\underline{V_{1,\arm}}$};% + \node[left] at (vlb) {$\underline{V_{1,\brm}}$};% + \node[left] at (vlc) {$\underline{V_{1,\crm}}$};% + \node[left] at (vln) {$\underline{V_{1,\nrm}}$};% + + % Tensions aval + \node[right] at (vma) {$\underline{V_{2,\arm}}$};% + \node[right] at (vmb) {$\underline{V_{2,\brm}}$};% + \node[right] at (vmc) {$\underline{V_{2,\crm}}$};% + \node[right] at (vmn) {$\underline{V_{2,\nrm}}$};% + + % Tension terre + \node[ground, \circuitikzbasekey/bipoles/length=2cm] at (g2) {};% + \node[left] at (g2) {$\underline{V_{\grm}}$};% + + % Câbles principaux + % Terre + \draw (xlit) to[short,-*] (g) to (xmit);% + \draw (xlit) to[short,-*] (g) to (xmit);% + \draw (g2) to[short, i=$\underline{I_{\grm}}$, *-] (g);% + % Neutre + \draw (vln) to[short,*-,i=$\underline{I_{1,\nrm}}$] (xlin) % + to[short, -*] (zln)% + to[R,l=$R_{\nrm}$] ($(zln)!0.5!(xrn)$)% + to[L,l=$L_{\nrm}$] (xrn)% + to[short,-] (xrin)% + to [short,-*] (zmn)% + to[short,*-] (xmin)% + to[short,-*,i<=$\underline{I_{2,\nrm}}$] (vmn);% + % C + \draw (vlc) to[short,*-,i=$\underline{I_{1,\crm}}$] (xlic)% + to[short, -*] (zlc)% + to[R,l=$R_{\crm}$] ($(zlc)!0.5!(xrc)$)% + to[L,l=$L_{\crm}$] (xrc)% + to[short,-] (xric)% + to [short,-*] (zmc)% + to[short,*-] (xmic)% + to[short,-*,i<=$\underline{I_{2,\crm}}$] (vmc);% + % B + \draw (vlb) to[short,*-,i=$\underline{I_{1,\brm}}$] (xlib)% + to[short, -*] (zlb)% + to[R,l=$R_{\brm}$] ($(zlb)!0.5!(xrb)$) % + to[L,l=$L_{\brm}$] (xrb)% + to[short,-] (xrib)% + to[short,-*] (zmb)% + to[short,*-] (xmib)% + to[short,-*,i<=$\underline{I_{2,\brm}}$] (vmb);% + % A + \draw (vla) to[short,*-,i=$\underline{I_{1,\arm}}$] (xlia)% + to[short, -*] (zla)% + to[R,l=$R_{\arm}$] ($(zla)!0.5!(xra)$)% + to [L,l=$L_{\arm}$] (xra)% + to[short,-] (xria)% + to [short,-*] (zma)% + to[short,*-] (xmia)% + to[short,-*,i<=$\underline{I_{2,\arm}}$] (vma);% + + % Mutuelles des lignes + \pgfmathsetmacro{\xrm}{\xri+0.0*(\zm-\xri)};% + \draw[fleche] (\xrm,\ya) to[bend left] node[midway, right]{$\underline{M_{\abrm}}$} (\xrm,\yb);% + \draw[fleche] (\xrm,\yb) to[bend left] node[midway, right]{$\underline{M_{\bcrm}}$} (\xrm,\yc);% + \draw[fleche] (\xrm,\yc) to[bend left] node[midway, right]{$\underline{M_{\cnrm}}$} (\xrm,\yn);% + \pgfmathsetmacro{\xrm}{\xri+0.25*(\zm-\xri)};% + \draw[fleche] (\xrm,\ya) to[bend left] node[near start, right]{$\underline{M_{\carm}}$} (\xrm,\yc);% + \pgfmathsetmacro{\xrm}{\xri+0.40*(\zm-\xri)};% + \draw[fleche] (\xrm,\yb) to[bend left] node[near end, right]{$\underline{M_{\bnrm}}$} (\xrm,\yn);% + \pgfmathsetmacro{\xrm}{\xri+0.75*(\zm-\xri)};% + \draw[fleche] (\xrm,\ya) to[bend left] node[midway, left]{$\underline{M_{\anrm}}$} (\xrm,\yn);% + + + % Première 1/2 admittance + \pgfmathsetmacro{\ylihaut}{\yt+0.95*(\yn-\yt)};% + \pgfmathsetmacro{\ylibas}{\ylihaut-1.2};% + \pgfmathsetmacro{\xliplus}{\xli+0.4};% + \pgfmathsetmacro{\xlimoins}{\xli-0.4};% + \draw (xlia) to[short,*-] (\xli,\ylihaut) -| (\xliplus,\ylihaut)% + to[R=$\dfrac{G_{\arm}}{2}$] (\xliplus,\ylibas) |- (\xli,\ylibas)% + to[short,-*] (\xli,\yt);% + \draw (\xli,\ylihaut) -| (\xlimoins,\ylihaut) to[C,l_=$\dfrac{C_{\arm}}{2}$] (\xlimoins,\ylibas) |- (\xli,\ylibas);% + + \pgfmathsetmacro{\ylihaut}{\yt+0.75*(\yn-\yt)};% + \pgfmathsetmacro{\ylibas}{\ylihaut-1.2};% + \pgfmathsetmacro{\xliref}{\xli+2};% + \pgfmathsetmacro{\xliplus}{\xliref+0.4};% + \pgfmathsetmacro{\xlimoins}{\xliref-0.4};% + \coordinate (ref) at (\xliref,0);% + \draw (xlib -| ref) to[short,*-] (\xliref,\ylihaut) -| (\xliplus,\ylihaut)% + to[R=$\dfrac{G_{\brm}}{2}$] (\xliplus,\ylibas) |- (\xliref,\ylibas)% + to[short,-*] (\xliref,\yt);% + \draw (\xliref,\ylihaut) -| (\xlimoins,\ylihaut)% + to[C,l_=$\dfrac{C_{\brm}}{2}$] (\xlimoins,\ylibas) |- (\xliref,\ylibas);% + \draw (xlia -| ref) to[C,l_=$\dfrac{C_{\abrm}}{2}$,*-] (xlib -| ref);% + + \pgfmathsetmacro{\ylihaut}{\yt+0.55*(\yn-\yt)};% + \pgfmathsetmacro{\ylibas}{\ylihaut-1.2};% + \pgfmathsetmacro{\xliref}{\xli+4} + \pgfmathsetmacro{\xliplus}{\xliref+0.4};% + \pgfmathsetmacro{\xlimoins}{\xliref-0.4};% + \coordinate (ref) at (\xliref,0);% + \draw (xlic -| ref) to[short,*-] (\xliref,\ylihaut) -| (\xliplus,\ylihaut)% + to[R=$\dfrac{G_{\crm}}{2}$] (\xliplus,\ylibas) |- (\xliref,\ylibas)% + to[short,-*] (\xliref,\yt);% + \draw (\xliref,\ylihaut) -| (\xlimoins,\ylihaut) % + to[C,l_=$\dfrac{C_{\crm}}{2}$] (\xlimoins,\ylibas) |- (\xliref,\ylibas);% + \draw (xlib -| ref) to[C,l_=$\dfrac{C_{\bcrm}}{2}$,*-*] (xlic -| ref);% + + \pgfmathsetmacro{\ylihaut}{\yt+0.35*(\yn-\yt)};% + \pgfmathsetmacro{\ylibas}{\ylihaut-1.2};% + \pgfmathsetmacro{\xliref}{\xli+6} + \pgfmathsetmacro{\xliplus}{\xliref+0.4};% + \pgfmathsetmacro{\xlimoins}{\xliref-0.4};% + \coordinate (ref) at (\xliref,0);% + \draw (xlin -| ref) to[short,*-] (\xliref,\ylihaut) -| (\xliplus,\ylihaut)% + to[R=$\dfrac{G_{\nrm}}{2}$] (\xliplus,\ylibas) |- (\xliref,\ylibas)% + to[short,-*] (\xliref,\yt);% + \draw (\xliref,\ylihaut) -| (\xlimoins,\ylihaut)% + to[C,l_=$\dfrac{C_{\nrm}}{2}$] (\xlimoins,\ylibas) |- (\xliref,\ylibas);% + \draw (xlic -| ref) to[C,l_=$\dfrac{C_{\cnrm}}{2}$,*-*] (xlin -| ref);% + \draw (xlia -| ref) to[C,l_=$\dfrac{C_{\carm}}{2}$,*-] (xlib -| ref) to[short,-*] (xlic -| ref);% + + \pgfmathsetmacro{\xliref}{\xli+8};% + \coordinate (ref) at (\xliref,0);% + \draw (xlib -| ref) to[C,l_=$\dfrac{C_{\bnrm}}{2}$,*-] (xlic -| ref) to[short,-*] (xlin -| ref);% + \pgfmathsetmacro{\xliref}{\xli+8.5};% + \coordinate (ref) at (\xliref,0);% + \draw (xlia -| ref) to[C,l_=$\dfrac{C_{\anrm}}{2}$,*-] (xlib -| ref) to[short,-*] (xlin -| ref);% + + % Seconde 1/2 admittance + \pgfmathsetmacro{\ymihaut}{\yt+0.95*(\yn-\yt)};% + \pgfmathsetmacro{\ymibas}{\ymihaut-1.2};% + \pgfmathsetmacro{\xmiplus}{\xmi+0.4};% + \pgfmathsetmacro{\xmimoins}{\xmi-0.4};% + \draw (xmia) to[short,*-] (\xmi,\ymihaut) -| (\xmiplus,\ymihaut) % + to[R,l=$\dfrac{G_{\arm}}{2}$] (\xmiplus,\ymibas) |- (\xmi,\ymibas) % + to[short,-*] (\xmi,\yt);% + \draw (\xmi,\ymihaut) -| (\xmimoins,\ymihaut) to[C,l_=$\dfrac{C_{\arm}}{2}$] (\xmimoins,\ymibas) |- (\xmi,\ymibas);% + + \pgfmathsetmacro{\ymihaut}{\yt+0.75*(\yn-\yt)};% + \pgfmathsetmacro{\ymibas}{\ymihaut-1.2};% + \pgfmathsetmacro{\xmiref}{\xmi-2};% + \pgfmathsetmacro{\xmiplus}{\xmiref+0.4};% + \pgfmathsetmacro{\xmimoins}{\xmiref-0.4};% + \coordinate (ref) at (\xmiref,0);% + \draw (xmib -| ref) to[short,*-] (\xmiref,\ymihaut) -| (\xmiplus,\ymihaut)% + to[R,l=$\dfrac{G_{\brm}}{2}$] (\xmiplus,\ymibas) |- (\xmiref,\ymibas)% + to[short,-*] (\xmiref,\yt);% + \draw (\xmiref,\ymihaut) -| (\xmimoins,\ymihaut)% + to[C,l_=$\dfrac{C_{\brm}}{2}$] (\xmimoins,\ymibas) |- (\xmiref,\ymibas);% + \draw (xmia -| ref) to[C,l^=$\dfrac{C_{\abrm}}{2}$,*-] (xmib -| ref);% + + \pgfmathsetmacro{\ymihaut}{\yt+0.55*(\yn-\yt)};% + \pgfmathsetmacro{\ymibas}{\ymihaut-1.2};% + \pgfmathsetmacro{\xmiref}{\xmi-4} + \pgfmathsetmacro{\xmiplus}{\xmiref+0.4};% + \pgfmathsetmacro{\xmimoins}{\xmiref-0.4};% + \coordinate (ref) at (\xmiref,0);% + \draw (xmic -| ref) to[short,*-] (\xmiref,\ymihaut) -| (\xmiplus,\ymihaut)% + to[R,l=$\dfrac{G_{\crm}}{2}$] (\xmiplus,\ymibas) |- (\xmiref,\ymibas)% + to[short,-*] (\xmiref,\yt);% + \draw (\xmiref,\ymihaut) -| (\xmimoins,\ymihaut)% + to[C,l_=$\dfrac{C_{\crm}}{2}$] (\xmimoins,\ymibas) |- (\xmiref,\ymibas);% + \draw (xmib -| ref) to[C,l^=$\dfrac{C_{\bcrm}}{2}$,*-*] (xmic -| ref);% + + \pgfmathsetmacro{\ymihaut}{\yt+0.35*(\yn-\yt)};% + \pgfmathsetmacro{\ymibas}{\ymihaut-1.2};% + \pgfmathsetmacro{\xmiref}{\xmi-6} + \pgfmathsetmacro{\xmiplus}{\xmiref+0.4};% + \pgfmathsetmacro{\xmimoins}{\xmiref-0.4};% + \coordinate (ref) at (\xmiref,0);% + \draw (xmin -| ref) to[short,*-] (\xmiref,\ymihaut) -| (\xmiplus,\ymihaut)% + to[R,l=$\dfrac{G_{\nrm}}{2}$] (\xmiplus,\ymibas) |- (\xmiref,\ymibas)% + to[short,-*] (\xmiref,\yt);% + \draw (\xmiref,\ymihaut) -| (\xmimoins,\ymihaut)% + to[C,l_=$\dfrac{C_{\nrm}}{2}$] (\xmimoins,\ymibas) |- (\xmiref,\ymibas);% + \draw (xmic -| ref) to[C,l^=$\dfrac{C_{\cnrm}}{2}$,*-*] (xmin -| ref);% + \draw (xmia -| ref) to[C,l^=$\dfrac{C_{\carm}}{2}$,*-] (xmib -| ref) to[short,-*] (xmic -| ref);% + + \pgfmathsetmacro{\xmiref}{\xmi-8};% + \coordinate (ref) at (\xmiref,0);% + \draw (xmib -| ref) to[C,l^=$\dfrac{C_{\bnrm}}{2}$,*-] (xmic -| ref) to[short,-*] (xmin -| ref);% + \pgfmathsetmacro{\xmiref}{\xmi-8.5};% + \coordinate (ref) at (\xmiref,0);% + \draw (xmia -| ref) to[C,l^=$\dfrac{C_{\anrm}}{2}$,*-] (xmib -| ref) to[short,-*] (xmin -| ref);% +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 120 +% End: diff --git a/doc/images/Line/European_Simplified_Line.tex b/doc/images/Line/European_Simplified_Line.tex new file mode 100644 index 00000000..a832da5e --- /dev/null +++ b/doc/images/Line/European_Simplified_Line.tex @@ -0,0 +1,168 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{european, straight voltages, cute inductors}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + % Version multifilaire + + % + % Définitions + % + \pgfmathsetmacro{\xl}{9};% + \pgfmathsetmacro{\zl}{11.5};% + \pgfmathsetmacro{\xr}{\zl+2.5};% + \pgfmathsetmacro{\xri}{\xr+1.5};% + \pgfmathsetmacro{\zm}{21};% + \pgfmathsetmacro{\xm}{23.5};% + \pgfmathsetmacro{\xli}{2.25};% + \pgfmathsetmacro{\xmi}{\xm-2.25};% + \pgfmathsetmacro{\yt}{0};% + \pgfmathsetmacro{\ytt}{-2};% + \pgfmathsetmacro{\yn}{8};% + \pgfmathsetmacro{\yc}{10};% + \pgfmathsetmacro{\yb}{12};% + \pgfmathsetmacro{\ya}{14};% + + % + % Styles + % + \ctikzset{bipoles/length=0.8cm}% + \tikzset{fleche/.style={<->,{Latex[]}-{Latex[]}}};% + + % + % Coordonnées + % + \coordinate (orig) at (0,0);% + + % Début de ligne + \coordinate (vlt) at (\xl,\yt);% + \coordinate (vln) at (\xl,\yn);% + \coordinate (vlc) at (\xl,\yc);% + \coordinate (vlb) at (\xl,\yb);% + \coordinate (vla) at (\xl,\ya);% + + % Fin de ligne + \coordinate (vmt) at (\xm,\yt);% + \coordinate (vmn) at (\xm,\yn);% + \coordinate (vmc) at (\xm,\yc);% + \coordinate (vmb) at (\xm,\yb);% + \coordinate (vma) at (\xm,\ya);% + + % Début Z ligne + \coordinate (zlt) at (\zl,\yt);% + \coordinate (zln) at (\zl,\yn);% + \coordinate (zlc) at (\zl,\yc);% + \coordinate (zlb) at (\zl,\yb);% + \coordinate (zla) at (\zl,\ya);% + + % Après résistance + \coordinate (xrt) at (\xr,\yt);% + \coordinate (xrn) at (\xr,\yn);% + \coordinate (xrc) at (\xr,\yc);% + \coordinate (xrb) at (\xr,\yb);% + \coordinate (xra) at (\xr,\ya);% + + % Après résistance et courant + \coordinate (xrit) at (\xri,\yt);% + \coordinate (xrin) at (\xri,\yn);% + \coordinate (xric) at (\xri,\yc);% + \coordinate (xrib) at (\xri,\yb);% + \coordinate (xria) at (\xri,\ya);% + + % Fin Z ligne + \coordinate (zmt) at (\zm,\yt);% + \coordinate (zmn) at (\zm,\yn);% + \coordinate (zmc) at (\zm,\yc);% + \coordinate (zmb) at (\zm,\yb);% + \coordinate (zma) at (\zm,\ya);% + + % Première 1/2 admittance + \coordinate (xlit) at (\xli,\yt);% + \coordinate (xlin) at (\xli,\yn);% + \coordinate (xlic) at (\xli,\yc);% + \coordinate (xlib) at (\xli,\yb);% + \coordinate (xlia) at (\xli,\ya);% + + % Seconde 1/2 admittance + \coordinate (xmit) at (\xmi,\yt);% + \coordinate (xmin) at (\xmi,\yn);% + \coordinate (xmic) at (\xmi,\yc);% + \coordinate (xmib) at (\xmi,\yb);% + \coordinate (xmia) at (\xmi,\ya);% + + % Terre + \coordinate (g) at (\zl/2+\zm/2,\yt);% + \coordinate (g2) at (\zl/2+\zm/2,\ytt);% + + % + % Dessin + % + % Tensions amont + \node[left] at (vla) {$\underline{V_{1,\arm}}$}; + \node[left] at (vlb) {$\underline{V_{1,\brm}}$}; + \node[left] at (vlc) {$\underline{V_{1,\crm}}$}; + \node[left] at (vln) {$\underline{V_{1,\nrm}}$}; + + % Tensions aval + \node[right] at (vma) {$\underline{V_{2,\arm}}$}; + \node[right] at (vmb) {$\underline{V_{2,\brm}}$}; + \node[right] at (vmc) {$\underline{V_{2,\crm}}$}; + \node[right] at (vmn) {$\underline{V_{2,\nrm}}$}; + + % Câbles principaux + % Neutre + \draw (vln) to[short,*-*,i=$\underline{I_{1,\nrm}}$](zln)% + to[R,l=$R_{\nrm}$] ($(zln)!0.5!(xrn)$) % + to[L,l=$L_{\nrm}$] (xrn)% + to[short,-] (xrin)% + to[short,-*] (zmn)% + to[short,-*,i<=$\underline{I_{2,\nrm}}$] (vmn);% + % C + \draw (vlc) to[short,*-*,i=$\underline{I_{1,\crm}}$] (zlc) % + to[R,l=$R_{\crm}$] ($(zlc)!0.5!(xrc)$) % + to[L,l=$L_{\crm}$] (xrc)% + to[short,-] (xric) % + to [short,-*] (zmc)% + to[short,-*,i<=$\underline{I_{2,\crm}}$] (vmc);% + % B + \draw (vlb) to[short,*-*,i=$\underline{I_{1,\brm}}$] (zlb) % + to[R,l=$R_{\brm}$] ($(zlb)!0.5!(xrb)$) % + to[L,l=$L_{\brm}$] (xrb)% + to[short,-] (xrib) % + to[short,-*] (zmb)% + to[short,-*,i<=$\underline{I_{2,\brm}}$] (vmb);% + % A + \draw (vla) to[short,*-*,i=$\underline{I_{1,\arm}}$] (zla)% + to[R,l=$R_{\arm}$] ($(zla)!0.5!(xra)$)% + to[L,l=$L_{\arm}$] (xra)% + to[short,-] (xria) % + to[short,-*] (zma)% + to[short,-*,i<=$\underline{I_{2,\arm}}$] (vma);% + + % Mutuelles des lignes + \pgfmathsetmacro{\xrm}{\xri+0.0*(\zm-\xri)};% + \draw[fleche] (\xrm,\ya) to[bend left] node[midway,right]{$\underline{M_{\abrm}}$} (\xrm,\yb);% + \draw[fleche] (\xrm,\yb) to[bend left] node[midway,right]{$\underline{M_{\bcrm}}$} (\xrm,\yc);% + \draw[fleche] (\xrm,\yc) to[bend left] node[midway,right]{$\underline{M_{\cnrm}}$} (\xrm,\yn);% + \pgfmathsetmacro{\xrm}{\xri+0.25*(\zm-\xri)};% + \draw[fleche] (\xrm,\ya) to[bend left] node[near start,right]{$\underline{M_{\carm}}$} (\xrm,\yc);% + \pgfmathsetmacro{\xrm}{\xri+0.40*(\zm-\xri)};% + \draw[fleche] (\xrm,\yb) to[bend left] node[near end,right]{$\underline{M_{\bnrm}}$} (\xrm,\yn);% + \pgfmathsetmacro{\xrm}{\xri+0.75*(\zm-\xri)};% + \draw[fleche] (\xrm,\ya) to[bend left] node[midway,left]{$\underline{M_{\anrm}}$} (\xrm,\yn);% + +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 120 +% End: diff --git a/doc/images/Load/American_Delta_Load.tex b/doc/images/Load/American_Delta_Load.tex new file mode 100644 index 00000000..c237e28f --- /dev/null +++ b/doc/images/Load/American_Delta_Load.tex @@ -0,0 +1,47 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{american}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \def\radius{2.3}% + \def\Radius{3}% + \ctikzset{bipoles/open/voltage/distance from node/.initial=0.1}% + + % Coordonnées + \coordinate (A) at (90:\Radius);% + \coordinate (B) at (210:\Radius);% + \coordinate (C) at (330:\Radius);% + \coordinate (A2) at ($(-\Radius,\Radius)-(1,0)$);% + \coordinate (C2) at (A2 |- B);% + \coordinate (B2) at (A2 |- B); %x of A2 and y of B + \coordinate (C2) at ($(B2)-(0,1.25)$);% + \coordinate (C3) at ($(C)-(0,1.25)$);% + + % Nœuds + \node[above] at (A) {A};% + \node[below] at (B) {B};% + \node[right] at (C) {C};% + + % Lignes + \draw (A) to[generic, v>=$\underline{V_{\arm}}-\underline{V_{\brm}}$, i=$\underline{I_{\abrm}}$, *-*] (B) % + to[generic, v>=$\underline{V_{\brm}}-\underline{V_{\crm}}$, i=$\underline{I_{\bcrm}}$, *-*] (C) % + to[generic, v>=$\underline{V_{\crm}}-\underline{V_{\arm}}$, i=$\underline{I_{\carm}}$, *-*] (A);% + \draw (A2) to[short,i=$\underline{I_{\arm}}$,*-*] (A);% + \draw (B2) to[short,i=$\underline{I_{\brm}}$,*-] (B);% + \draw (C) -- (C3);% + \draw (C2) to[short,i=$\underline{I_{\crm}}$,*-] (C3);% +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 120 +% End: diff --git a/doc/images/American_Star_Load.tex b/doc/images/Load/American_Star_Load.tex similarity index 84% rename from doc/images/American_Star_Load.tex rename to doc/images/Load/American_Star_Load.tex index 5b3e31d7..a901ce9c 100644 --- a/doc/images/American_Star_Load.tex +++ b/doc/images/Load/American_Star_Load.tex @@ -34,9 +34,9 @@ \node[above right] at (N) {N};% % Lines - \draw (A) to[short,*-] (A1) to[resistor, v<=$\underline{V_{\arm}}-\underline{V_{\nrm}}$, -*] (N);% - \draw (B) to[short,*-] (B1) to[resistor, v<=$\underline{V_{\brm}}-\underline{V_{\nrm}}$, -*] (N);% - \draw (C) to[short,*-] (C1) to[resistor, v<=$\underline{V_{\crm}}-\underline{V_{\nrm}}$, -*] (N);% + \draw (A) to[short,*-] (A1) to[generic, v>=$\underline{V_{\arm}}-\underline{V_{\nrm}}$, -*] (N);% + \draw (B) to[short,*-] (B1) to[generic, v>=$\underline{V_{\brm}}-\underline{V_{\nrm}}$, -*] (N);% + \draw (C) to[short,*-] (C1) to[generic, v>=$\underline{V_{\crm}}-\underline{V_{\nrm}}$, -*] (N);% \draw (A2) to[short,i=$\underline{I_{\arm}}$,*-*] (A);% \draw (B2) to[short,i=$\underline{I_{\brm}}$,*-*] (B);% \draw (C2) to[short,i=$\underline{I_{\crm}}$,*-] (C3);% diff --git a/doc/images/Load/European_Delta_Load.tex b/doc/images/Load/European_Delta_Load.tex new file mode 100644 index 00000000..1a0d096d --- /dev/null +++ b/doc/images/Load/European_Delta_Load.tex @@ -0,0 +1,47 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{european, straight voltages, cute inductors}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \def\radius{2.3}% + \def\Radius{3}% + \ctikzset{bipoles/open/voltage/distance from node/.initial=0.1}% + + % Coordonnées + \coordinate (A) at (90:\Radius);% + \coordinate (B) at (210:\Radius);% + \coordinate (C) at (330:\Radius);% + \coordinate (A2) at ($(-\Radius,\Radius)-(1,0)$);% + \coordinate (C2) at (A2 |- B);% + \coordinate (B2) at (A2 |- B); %x of A2 and y of B + \coordinate (C2) at ($(B2)-(0,1.25)$);% + \coordinate (C3) at ($(C)-(0,1.25)$);% + + % Nœuds + \node[above] at (A) {A};% + \node[below] at (B) {B};% + \node[right] at (C) {C};% + + % Lignes + \draw (A) to[generic, v<=$\underline{V_{\arm}}-\underline{V_{\brm}}$, i=$\underline{I_{\abrm}}$, *-*] (B) % + to[generic, v<=$\underline{V_{\brm}}-\underline{V_{\crm}}$, i=$\underline{I_{\bcrm}}$, *-*] (C) % + to[generic, v<=$\underline{V_{\crm}}-\underline{V_{\arm}}$, i=$\underline{I_{\carm}}$, *-*] (A);% + \draw (A2) to[short,i=$\underline{I_{\arm}}$,*-*] (A);% + \draw (B2) to[short,i=$\underline{I_{\brm}}$,*-] (B);% + \draw (C) -- (C3);% + \draw (C2) to[short,i=$\underline{I_{\crm}}$,*-] (C3);% +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 100 +% End: diff --git a/doc/images/European_Star_Load.tex b/doc/images/Load/European_Star_Load.tex similarity index 81% rename from doc/images/European_Star_Load.tex rename to doc/images/Load/European_Star_Load.tex index 3f1b001f..6fc9ad35 100644 --- a/doc/images/European_Star_Load.tex +++ b/doc/images/Load/European_Star_Load.tex @@ -1,7 +1,7 @@ \input{Preambule}% \begin{document} -\ctikzset{european,straight voltages}% +\ctikzset{european, straight voltages, cute inductors}% \begin{tikzpicture}[% show background rectangle,% tight background,% @@ -34,9 +34,9 @@ \node[above right] at (N) {N};% % Lines - \draw (A) to[short,*-] (A1) to[resistor, v<=$\underline{V_{\arm}}-\underline{V_{\nrm}}$, -*] (N);% - \draw (B) to[short,*-] (B1) to[resistor, v<=$\underline{V_{\brm}}-\underline{V_{\nrm}}$, -*] (N);% - \draw (C) to[short,*-] (C1) to[resistor, v<=$\underline{V_{\crm}}-\underline{V_{\nrm}}$, -*] (N);% + \draw (A) to[short,*-] (A1) to[generic, v<=$\underline{V_{\arm}}-\underline{V_{\nrm}}$, -*] (N);% + \draw (B) to[short,*-] (B1) to[generic, v<=$\underline{V_{\brm}}-\underline{V_{\nrm}}$, -*] (N);% + \draw (C) to[short,*-] (C1) to[generic, v<=$\underline{V_{\crm}}-\underline{V_{\nrm}}$, -*] (N);% \draw (A2) to[short,i=$\underline{I_{\arm}}$,*-*] (A);% \draw (B2) to[short,i=$\underline{I_{\brm}}$,*-*] (B);% \draw (C2) to[short,i=$\underline{I_{\crm}}$,*-] (C3);% diff --git a/doc/images/Makefile b/doc/images/Makefile index 512567d8..382627c3 100644 --- a/doc/images/Makefile +++ b/doc/images/Makefile @@ -9,25 +9,31 @@ PDF2SVG:=$(shell which pdf2svg) OUTPUT_FOLDER:=$(shell realpath ../_static/) # Files -TEX_FILES:=$(filter-out Preambule.tex, $(wildcard *.tex)) +TEX_FILES:=$(filter-out Preambule.tex, $(wildcard *.tex) $(wildcard **/*.tex)) PDF_FILES:=$(TEX_FILES:%.tex=%.pdf) -AUX_FILES:=$(TEX_FILES:%.tex=$(OUTPUT_FOLDER)/%.aux) -LOG_FILES:=$(TEX_FILES:%.tex=$(OUTPUT_FOLDER)/%.log) SVG_FILES:=$(TEX_FILES:%.tex=$(OUTPUT_FOLDER)/%.svg) +AUX_FILES:=$(TEX_FILES:%.tex=%.aux) $(wildcard $(OUTPUT_FOLDER)/*.aux) $(wildcard $(OUTPUT_FOLDER)/**/*.aux) +LOG_FILES:=$(TEX_FILES:%.tex=%.log) $(wildcard $(OUTPUT_FOLDER)/*.log) $(wildcard $(OUTPUT_FOLDER)/**/*.log) # Rules -all: | checks $(SVG_FILES) clean +all: | checks $(SVG_FILES) .PHONY: clean cleanall checks $(OUTPUT_FOLDER)/Domain_%.svg: Domain_%.tex Domain_Common.tikz Preambule.tex @$(LUALATEX) --jobname=$(basename $<) --file-line-error --interaction=nonstopmode \ --shell-escape --output-directory=$(OUTPUT_FOLDER) $< +$(OUTPUT_FOLDER)/Transformer/Winding%.svg: Transformer/Winding%.tex Transformer/Windings_Common.tikz Preambule.tex + @$(LUALATEX) --jobname=$(basename $<) --file-line-error --interaction=nonstopmode \ + --shell-escape --output-directory=$(OUTPUT_FOLDER) $< + $(OUTPUT_FOLDER)/%.svg: %.tex Preambule.tex @$(LUALATEX) --jobname=$(basename $<) --file-line-error --interaction=nonstopmode \ --shell-escape --output-directory=$(OUTPUT_FOLDER) $< + + clean: @rm -f $(AUX_FILES) $(LOG_FILES) $(PDF_FILES) *~ @$(LATEXMK) -c -output-directory=$(OUTPUT_FOLDER) diff --git a/doc/images/PotentialRef.tex b/doc/images/PotentialRef.tex new file mode 100644 index 00000000..8cca2c46 --- /dev/null +++ b/doc/images/PotentialRef.tex @@ -0,0 +1,25 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{european, straight voltages, cute inductors}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + + \coordinate (g) at (0,0); + \node[left] at (g) {$\underline{V} = 0$};% + \draw (g) to[short,*-] (0, 0.5); + +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 120 +% End: diff --git a/doc/images/PotentialRef_With_Ground.tex b/doc/images/PotentialRef_With_Ground.tex new file mode 100644 index 00000000..6f1ec88d --- /dev/null +++ b/doc/images/PotentialRef_With_Ground.tex @@ -0,0 +1,26 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{european, straight voltages, cute inductors}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + + \coordinate (g) at (0,0); + \node[ground] at (g) {};% + \node[left] at (g) {$\underline{V_{\grm}} = 0$};% + \draw (g) to[short,*-] (0, 0.5); + +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 120 +% End: diff --git a/doc/images/Preambule.tex b/doc/images/Preambule.tex index 3f5acb5f..fdee4d0a 100644 --- a/doc/images/Preambule.tex +++ b/doc/images/Preambule.tex @@ -30,7 +30,14 @@ \usepackage{mathtools}% \usepackage{siunitx}% \usepackage[siunitx]{circuitikz}% -\usetikzlibrary{calc,backgrounds,arrows.meta,patterns}% +\usetikzlibrary{calc,backgrounds,arrows.meta,patterns,positioning}% +\ctikzset{bipoles/length=1.2cm}% + +% Colors +\usepackage{xcolor}% +\definecolor{RoseauGreen}{HTML}{cad40e}% +\definecolor{RoseauGrey}{HTML}{adb9cb}% +\definecolor{RoseauBlue}{HTML}{234e83}% \DeclareMathOperator{\sign}{sign}% @@ -49,20 +56,32 @@ \newcommand{\brm}{\ensuremath{\mathrm{b}}}% \newcommand{\crm}{\ensuremath{\mathrm{c}}}% \newcommand{\nrm}{\ensuremath{\mathrm{n}}}% -\newcommand{\trm}{\ensuremath{\mathrm{t}}}% +\newcommand{\grm}{\ensuremath{\mathrm{g}}}% \newcommand{\abrm}{\ensuremath{\mathrm{ab}}}% \newcommand{\bcrm}{\ensuremath{\mathrm{bc}}}% \newcommand{\carm}{\ensuremath{\mathrm{ca}}}% \newcommand{\anrm}{\ensuremath{\mathrm{an}}}% \newcommand{\bnrm}{\ensuremath{\mathrm{bn}}}% \newcommand{\cnrm}{\ensuremath{\mathrm{cn}}}% -\newcommand{\atrm}{\ensuremath{\mathrm{at}}}% -\newcommand{\btrm}{\ensuremath{\mathrm{bt}}}% -\newcommand{\ctrm}{\ensuremath{\mathrm{ct}}}% -\newcommand{\ntrm}{\ensuremath{\mathrm{nt}}}% +\newcommand{\agrm}{\ensuremath{\mathrm{ag}}}% +\newcommand{\bgrm}{\ensuremath{\mathrm{bg}}}% +\newcommand{\cgrm}{\ensuremath{\mathrm{cg}}}% +\newcommand{\ngrm}{\ensuremath{\mathrm{ng}}}% \newcommand{\abcrm}{\ensuremath{\mathrm{abc}}}% \newcommand{\abcnrm}{\ensuremath{\mathrm{abcn}}}% +% Transformer +\newcommand{\Xrm}{\ensuremath{\mathrm{X}}}% +\newcommand{\Yrm}{\ensuremath{\mathrm{Y}}}% +\newcommand{\Zrm}{\ensuremath{\mathrm{Z}}}% +\newcommand{\xrm}{\ensuremath{\mathrm{x}}}% +\newcommand{\yrm}{\ensuremath{\mathrm{y}}}% +\newcommand{\zrm}{\ensuremath{\mathrm{z}}}% +\newcommand{\Arm}{\ensuremath{\mathrm{A}}}% +\newcommand{\Brm}{\ensuremath{\mathrm{B}}}% +\newcommand{\Crm}{\ensuremath{\mathrm{C}}}% +\newcommand{\Nrm}{\ensuremath{\mathrm{N}}}% + % Indices ou exposants \newcommand{\cons}{\ensuremath{\mathrm{cons.}}}% \renewcommand{\prod}{\ensuremath{\mathrm{prod.}}}% diff --git a/doc/images/Switch.tex b/doc/images/Switch.tex new file mode 100644 index 00000000..6d06b349 --- /dev/null +++ b/doc/images/Switch.tex @@ -0,0 +1,69 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{european, straight voltages, cute inductors}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + % Version multifilaire + + % + % Définitions + % + \pgfmathsetmacro{\xl}{0};% + \pgfmathsetmacro{\xlc}{1};% + \pgfmathsetmacro{\xrc}{3};% + \pgfmathsetmacro{\xr}{4};% + \pgfmathsetmacro{\yn}{0};% + \pgfmathsetmacro{\yc}{1};% + \pgfmathsetmacro{\yb}{2};% + \pgfmathsetmacro{\ya}{3};% + + % Début de ligne + \coordinate (vln) at (\xl,\yn); + \coordinate (vlc) at (\xl,\yc); + \coordinate (vlb) at (\xl,\yb); + \coordinate (vla) at (\xl,\ya); + + % Fin de ligne + \coordinate (vrn) at (\xr,\yn); + \coordinate (vrc) at (\xr,\yc); + \coordinate (vrb) at (\xr,\yb); + \coordinate (vra) at (\xr,\ya); + + % Tensions amont + \node[left] at (vla) {$\underline{V_{1,\arm}}$}; + \node[left] at (vlb) {$\underline{V_{1,\brm}}$}; + \node[left] at (vlc) {$\underline{V_{1,\crm}}$}; + \node[left] at (vln) {$\underline{V_{1,\nrm}}$}; + + % Tensions aval + \node[right] at (vra) {$\underline{V_{2,\arm}}$}; + \node[right] at (vrb) {$\underline{V_{2,\brm}}$}; + \node[right] at (vrc) {$\underline{V_{2,\crm}}$}; + \node[right] at (vrn) {$\underline{V_{2,\nrm}}$}; + + % Câbles + \draw (vla) to[short, i=$\underline{I_{1,\arm}}$, *-] (\xlc, \ya) -- (\xrc, \ya); + \draw (vlb) to[short, i=$\underline{I_{1,\brm}}$, *-] (\xlc, \yb) -- (\xrc, \yb); + \draw (vlc) to[short, i=$\underline{I_{1,\crm}}$, *-] (\xlc, \yc) -- (\xrc, \yc); + \draw (vln) to[short, i=$\underline{I_{1,\nrm}}$, *-] (\xlc, \yn) -- (\xrc, \yn); + + \draw (vra) to[short, i_=$\underline{I_{2,\arm}}$, *-] (\xrc, \ya); + \draw (vrb) to[short, i_=$\underline{I_{2,\brm}}$, *-] (\xrc, \yb); + \draw (vrc) to[short, i_=$\underline{I_{2,\crm}}$, *-] (\xrc, \yc); + \draw (vrn) to[short, i_=$\underline{I_{2,\nrm}}$, *-] (\xrc, \yn); + +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 120 +% End: diff --git a/doc/images/Transformer/American_Center_Tapped_Transformer.tex b/doc/images/Transformer/American_Center_Tapped_Transformer.tex new file mode 100644 index 00000000..e860695f --- /dev/null +++ b/doc/images/Transformer/American_Center_Tapped_Transformer.tex @@ -0,0 +1,92 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{american, bipoles/length=1cm}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + % Version multifilaire + + % + % Définitions + % + % No European transformer in circuitikz [BV, 17/07/2023] + \tikzset{ + transformer/.pic={ + \draw (-0.2,0) circle[radius=0.4] (0.2,0) circle[radius=0.4]; + }, + } + \pgfmathsetmacro{\xl}{0};% + \pgfmathsetmacro{\xy}{1.75};% + \pgfmathsetmacro{\xlt}{2.5};% + \pgfmathsetmacro{\xrt}{4.5};% + \pgfmathsetmacro{\xz}{6.5};% + \pgfmathsetmacro{\xm}{8};% + \pgfmathsetmacro{\xt}{0.5*(\xlt+\xrt)};% + + \pgfmathsetmacro{\yb}{0};% + \pgfmathsetmacro{\yn}{2};% + \pgfmathsetmacro{\ya}{4};% + \pgfmathsetmacro{\transformerheight}{\ya-\yb};% + \ctikzset{quadpoles/transformer/height=\transformerheight};% + \pgfmathsetmacro{\yt}{0.5*(\ya+\yb)};% + + % + % Dessin + % + % Transformer + \draw (\xt,\yt) node[transformer] (T) {}; + \node[above] at ($(T.base)-(0,0.2)$) {$k$};% + \draw (T.inner dot A1) node[circ] {}; % + \draw (T.inner dot B1) node[circ] {}; % + + % Tensions amont + \node[left] at (\xl,\ya) {$\underline{V_{1,\arm}}$}; + \node[left] at (\xl,\yb) {$\underline{V_{1,\brm}}$}; + + % Tensions aval + \node[right] at (\xm,\ya) {$\underline{V_{2,\arm}}$}; + \node[right] at (\xm,\yb) {$\underline{V_{2,\brm}}$}; + \node[right] at (\xm,\yn) {$\underline{V_{2,\nrm}}$}; + + % Câbles principaux + % A + \draw (\xl,\ya) to[short,*-*,i=$\underline{I_{1,\arm}}$] + (\xy,\ya) to[short] (T.A1);% + \draw (T.B1) -- (\xrt,\ya) to [generic, l=$\dfrac{\underline{Z_2}}{2}$, label distance=6pt, -] + (\xz,\ya) to[short,-*,i<=$\underline{I_{2,\arm}}$] (\xm,\ya);% + + % B + \draw (\xl,\yb) to[short,*-*,i=$\underline{I_{1,\brm}}$] + (\xy,\yb) to[short] (T.A2);% + \draw (T.B2) -- (\xrt,\yb) to [generic, l_=$\dfrac{\underline{Z_2}}{2}$, -] + (\xz,\yb) to[short,-*,i<=$\underline{I_{2,\brm}}$] (\xm,\yb);% + + + % Neutre + \draw (T-L2.midtap) -- (\xz,\yn) to[short,-*,i<=$\underline{I_{2,\nrm}}$] (\xm,\yn);% + + % Ym + \draw (\xy,\ya) to [generic, l=$\underline{Y_{\mathrm{m}}}$, v>=$\underline{U_{1,\abrm}}$, -] (\xy,\yb);% + + % Tensions + \draw (\xz,\ya) to [open, v^>=$\underline{U_{2,\arm}}$] (\xz,\yn);% + \draw (\xz,\yb) to [open, v>=$\underline{U_{2,\brm}}$] (\xz,\yn);% + \pgfmathsetmacro{\xr}{\xrt + 0.25};% + \draw (\xr,\ya) to [open, v^>=$\underline{U_{2,\arm}^0}$] (\xr,\yn);% + \draw (\xr,\yb) to [open, v>=$\underline{U_{2,\brm}^0}$] (\xr,\yn);% + +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "francais" +% coding: utf-8 +% TeX-master: "../../Manuscrit.tex" +% LaTeX-indent-level: 4 +% compile-command: "make -k -C ../../" +% End: diff --git a/doc/images/Transformer/American_Dyn11.tex b/doc/images/Transformer/American_Dyn11.tex new file mode 100644 index 00000000..18132503 --- /dev/null +++ b/doc/images/Transformer/American_Dyn11.tex @@ -0,0 +1,210 @@ +\input{Preambule}% + +\begin{document} + \ctikzset{american, bipoles/length=1cm}% + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + % + % Définitions + % + % No European transformer in circuitikz [BV, 17/07/2023] + \tikzset{ + transformer/.pic={ + \draw (-0.2,0) circle[radius=0.4] (0.2,0) circle[radius=0.4]; + }, + } + \pgfmathsetmacro{\xzero}{0};% + \pgfmathsetmacro{\xone}{1};% + \pgfmathsetmacro{\xtwo}{3};% + \pgfmathsetmacro{\xthree}{5};% + \pgfmathsetmacro{\xym}{7};% + \pgfmathsetmacro{\xtransformer}{10};% + \pgfmathsetmacro{\xtransformerm}{\xtransformer-1};% + \pgfmathsetmacro{\xtransformerp}{\xtransformer+1};% + \pgfmathsetmacro{\xztwom}{11.5};% + \pgfmathsetmacro{\xztwop}{13.5};% + \pgfmathsetmacro{\xfour}{15};% + \pgfmathsetmacro{\xfive}{17};% + \pgfmathsetmacro{\xsix}{19};% + \pgfmathsetmacro{\xseven}{20};% + \pgfmathsetmacro{\yn}{0};% + \pgfmathsetmacro{\yc}{2.5};% + \pgfmathsetmacro{\yb}{5};% + \pgfmathsetmacro{\ya}{7.5};% + \pgfmathsetmacro{\yxp}{\ya};% + \pgfmathsetmacro{\yxm}{\yb+0.6};% + \pgfmathsetmacro{\yyp}{\yb};% + \pgfmathsetmacro{\yym}{\yc+0.6};% + \pgfmathsetmacro{\yzp}{\yc};% + \pgfmathsetmacro{\yzm}{\yn+0.6};% + \pgfmathsetmacro{\yzero}{\yn-1};% + \pgfmathsetmacro{\yone}{\ya+1};% + \pgfmathsetmacro{\transformerheight}{\yxp-\yxm};% + \ctikzset{quadpoles/transformer/height=\transformerheight};% + + % Rectangles + \pgfmathsetmacro{\xtmp}{\xone+0.75*(\xtwo-\xone)};% + \draw[blue,dashed] (\xzero, \yzero) rectangle (\xtmp, \yone);% + \draw[blue] (\xtwo, \yzero) rectangle (\xthree, \yone);% + \draw[blue] (\xfour, \yzero) rectangle (\xfive, \yone);% + \pgfmathsetmacro{\xtmp}{\xsix-0.75*(\xsix-\xfive)};% + \draw[blue,dashed] (\xtmp, \yzero) rectangle (\xseven, \yone);% + + \pgfmathsetmacro{\xtmpleft}{\xthree+0.5};% + \pgfmathsetmacro{\xtmpright}{\xfour-0.5};% + \draw[blue,dashed] (\xtmpleft, \yzero) rectangle (\xtmpright,\yone);% + + % ABCN + \node at (3.5,\yb) [jump crossing,rotate=90](Y jump) {};% + \node at (3.5,\yc) [jump crossing,rotate=90](Z jump) {};% + \draw (\xone,\ya) node[left] {$\underline{V_{1,\arm}}$}% + to[short,-,i=$\underline{I_{1,\arm}}$] (\xtwo,\ya)% + to[short,-] (\xthree,\ya)% + to[short,-,i=$\underline{I_{\Xrm}}$] (\xym, \ya)% + to[short,-] (\xtransformerm, \ya);% + \draw (\xone,\yb) node[left] {$\underline{V_{1,\brm}}$}% + to[short,-,i=$\underline{I_{1,\brm}}$] (\xtwo,\yb)% + to[short, -] (Y jump.north)% + (Y jump.south)% + to[short,-] (\xthree,\yb)% + to[short,-,i=$\underline{I_{\Yrm}}$] (\xym, \yb)% + to[short,-] (\xtransformerm,\yb);% + \draw (\xone,\yc) node[left] {$\underline{V_{1,\crm}}$}% + to[short,-,i=$\underline{I_{1,\crm}}$] (\xtwo,\yc)% + to[short, -] (Z jump.north)% + (Z jump.south)% + to[short,-] (\xthree,\yc)% + to[short,-,i=$\underline{I_{\Zrm}}$] (\xym, \yc)% + to[short,-] (\xtransformerm,\yc);% + + % XYZ + % First winding (X) + \pgfmathsetmacro{\ytmp}{0.5*(\yxp+\yxm)};% + \node[transformer] (TX) at (\xtransformer,\ytmp) {}; + \draw (\xtransformerm, \yxp)% + to[short] (TX.A1);% + \draw (4.5,\yb) to [short, *-] (4.5,\yxm)% + to[short, -] (\xym,\yxm)% + to[short] (\xtransformerm,\yxm)% + to[short] (TX.A2);% + \draw (\xym,\yxp) to[generic,% + i>^=$\underline{I_{\mathrm{m},\arm}}$,% + l=$\underline{Y_{\mathrm{m},\arm}}$,% + v>=$\underline{U_{\Xrm}}$% + ] (\xym,\yxm);% + \node[above] at ($(TX.base)-(0,0.2)$) {$k$};% + \draw (TX.inner dot A1) node[circ] {}; % + \draw (TX.inner dot B1) node[circ] {}; % + + % First winding (Y) + \pgfmathsetmacro{\ytmp}{0.5*(\yyp+\yym)};% + \node[transformer] (TY) at (\xtransformer,\ytmp) {};% + \draw (\xtransformerm,\yyp)% + to[short] (TY.A1);% + \draw (4.5,\yc) to [short, *-] (4.5,\yym)% + to[short,-] (\xym,\yym)% + to[short] (\xtransformerm,\yym)% + to[short] (TY.A2);% + \draw (\xym,\yyp) to[generic,% + i>^=$\underline{I_{\mathrm{m},\brm}}$,% + l=$\underline{Y_{\mathrm{m},\brm}}$,% + v>=$\underline{U_{\Yrm}}$% + ] (\xym,\yym);% + \node[above] at ($(TY.base)-(0,0.2)$) {$k$};% + \draw (TY.inner dot A1) node[circ] {}; % + \draw (TY.inner dot B1) node[circ] {}; % + + % First winding (Z) + \pgfmathsetmacro{\ytmp}{0.5*(\yzp+\yzm)};% + \node[transformer] (TZ) at (\xtransformer,\ytmp) {};% + \draw (\xtransformerm,\yzp)% + to[short] (TZ.A1);% + \draw (3.5,\ya) to[short,*-] (Y jump.east)% + (Y jump.west)% + to[short, -] (Z jump.east)% + (Z jump.west)% + to[short,-] (3.5,\yzm)% + to[short] (\xym,\yzm)% + to[short] (\xtransformerm,\yzm)% + to[short] (TZ.A2);% + \draw (\xym,\yzp) to[generic,% + i>^=$\underline{I_{\mathrm{m},\crm}}$,% + l=$\underline{Y_{\mathrm{m},\crm}}$,% + v>=$\underline{U_{\Zrm}}$% + ] (\xym,\yzm);% + \node[above] at ($(TZ.base)-(0,0.2)$) {$k$};% + \draw (TZ.inner dot A1) node[circ] {}; % + \draw (TZ.inner dot B1) node[circ] {}; % + + % xyz + % Second winding (x) + \pgfmathsetmacro{\ytmp}{0.5*(\yxp+\yxm)};% + \draw (\xsix,\ya) node[right] {$\underline{V_{2,\arm}}$}% + to[short,-,i_=$\underline{I_{2,\arm}}$] (\xfive,\ya) % + to[short, -] (\xfour,\ya)% + to[short,-,i>_=$\underline{I_{\xrm}}$] (\xztwop, \ya)% + to[generic,l=$\underline{Z_{2,\arm}}$] (\xztwom, \ya)% + to[short] (\xtransformerp,\ya) % + to[short] (TX.B1);% + \draw (\xztwop, \yxm) to[open,v<=$\underline{U_{\xrm}}$] (\xztwop, \yxp);% + \draw (\xztwom, \yxm) to[open,v<=$\underline{U_{0,\xrm}}$] (\xztwom, \yxp);% + + % Second winding (y) + \node at (16,\yb) [jump crossing,rotate=90](y jump) {};% + \pgfmathsetmacro{\ytmp}{0.5*(\yyp+\yym)};% + \draw (\xsix,\yb) node[right] {$\underline{V_{2,\brm}}$}% + to[short,-,i_=$\underline{I_{2,\brm}}$] (\xfive,\yb)% + to[short, -] (y jump.south)% + (y jump.north)% + to[short, -] (\xfour,\yb)% + to[short,-,i>_=$\underline{I_{\yrm}}$] (\xztwop, \yb)% + to[generic,l=$\underline{Z_{2,\brm}}$] (\xztwom, \yb)% + to[short] (\xtransformerp,\yb)% + to[short] (TY.B1);% + \draw (16,\yym) to[short,*-] (\xtransformerp,\yym) to[short] (TY.B2);% + \draw (\xztwop, \yym) to[open,v<=$\underline{U_{\yrm}}$] (\xztwop, \yb);% + \draw (\xztwom, \yym) to[open,v<=$\underline{U_{0,\yrm}}$] (\xztwom, \yb);% + + % Second winding (z) + \node at (16,\yc) [jump crossing,rotate=90](z jump) {};% + \pgfmathsetmacro{\ytmp}{0.5*(\yzp+\yzm)};% + \draw (\xsix,\yc) node[right] {$\underline{V_{2,\crm}}$}% + to[short,-,i_=$\underline{I_{2,\crm}}$] (\xfive,\yc)% + to[short, -] (z jump.south)% + (z jump.north)% + to [short,-] (\xfour,\yc)% + to[short,-,i>_=$\underline{I_{\zrm}}$] (\xztwop, \yc)% + to[generic,l=$\underline{Z_{2,\crm}}$] (\xztwom, \yc)% + to[short] (\xtransformerp,\yc)% + to[short] (TZ.B1);% + \draw (16,\yzm) to[short,*-] (\xtransformerp,\yzm) to[short] (TZ.B2);% + \draw (\xztwop, \yzm) to[open,v<=$\underline{U_{\zrm}}$] (\xztwop, \yc);% + \draw (\xztwom, \yzm) to[open,v<=$\underline{U_{0,\zrm}}$] (\xztwom, \yc);% + + % Close the yn + \draw (\xsix,\yn) node[right] {$\underline{V_{2,\nrm}}$}% + to[short,-,i_=$\underline{I_{2,\nrm}}$] (\xfive,\yn)% + to[short,-] (16,\yn)% + to[short,-] (16,\yzm)% + to[short,-] (z jump.west)% + (z jump.east)% + to[short,-] (16,\yym)% + to[short,-] (y jump.west)% + (y jump.east)% + to[short,-] (16,\yxm)%% + to[short,-] (\xtransformerp,\yxm)% + to[short] (TX.B2);% + \end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 100 +% End: diff --git a/doc/images/Transformer/American_Single_Phase_Transformer.tex b/doc/images/Transformer/American_Single_Phase_Transformer.tex new file mode 100644 index 00000000..132553fb --- /dev/null +++ b/doc/images/Transformer/American_Single_Phase_Transformer.tex @@ -0,0 +1,79 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{american, bipoles/length=1cm}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + % Version multifilaire + + % + % Définitions + % + % No European transformer in circuitikz [BV, 17/07/2023] + \tikzset{ + transformer/.pic={ + \draw (-0.2,0) circle[radius=0.4] (0.2,0) circle[radius=0.4]; + }, + } + \pgfmathsetmacro{\xl}{0};% + \pgfmathsetmacro{\xy}{1.75};% + \pgfmathsetmacro{\xlt}{2.5};% + \pgfmathsetmacro{\xrt}{4.5};% + \pgfmathsetmacro{\xz}{6};% + \pgfmathsetmacro{\xm}{7.5};% + \pgfmathsetmacro{\xt}{0.5*(\xlt+\xrt)};% + + \pgfmathsetmacro{\yn}{0};% + \pgfmathsetmacro{\ya}{2};% + \pgfmathsetmacro{\transformerheight}{\ya-\yn};% + \ctikzset{quadpoles/transformer/height=\transformerheight};% + \pgfmathsetmacro{\yt}{0.5*(\ya+\yn)};% + + % + % Dessin + % + % Transformer + \draw (\xt,\yt) node[transformer] (T) {}; + \node[above] at ($(T.base)-(0,0.2)$) {$k$};% + \draw (T.inner dot A1) node[circ] {}; % + \draw (T.inner dot B1) node[circ] {}; % + + % Tensions amont + \node[left] at (\xl,\ya) {$\underline{V_{1,\arm}}$}; + \node[left] at (\xl,\yn) {$\underline{V_{1,\nrm}}$}; + + % Tensions aval + \node[right] at (\xm,\ya) {$\underline{V_{2,\arm}}$}; + \node[right] at (\xm,\yn) {$\underline{V_{2,\nrm}}$}; + + % Câbles principaux + % A + \draw (\xl,\ya) to[short,*-*,i=$\underline{I_{1,\arm}}$] + (\xy,\ya) to[short,-] (T.A1); + \draw (T.B1) -- (\xrt,\ya) to [generic, l=$\underline{Z_2}$, -] + (\xz,\ya) to[short,-*,i<=$\underline{I_{2,\arm}}$] (\xm,\ya);% + + % Neutre + \draw (\xl,\yn) to[short,*-*,i=$\underline{I_{1,\nrm}}$] + (\xy,\yn) to[short,-] (T.A2); + \draw (T.B2) to[short, -] (\xz,\yn) to[short,-*,i<=$\underline{I_{2,\nrm}}$] (\xm,\yn);% + + % Ym + \draw (\xy,\ya) to [generic, l=$\underline{Y_{\mathrm{m}}}$, v>=$\underline{U_{1,\arm}}$, -] (\xy,\yn);% + \draw (\xz,\ya) to [open, v>=$\underline{U_{2,\arm}}$] (\xz,\yn);% + +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "francais" +% coding: utf-8 +% TeX-master: "../../Manuscrit.tex" +% LaTeX-indent-level: 4 +% compile-command: "make -k -C ../../" +% End: diff --git a/doc/images/Transformer/American_Three_Phase_Transformer.tex b/doc/images/Transformer/American_Three_Phase_Transformer.tex new file mode 100644 index 00000000..94e727ca --- /dev/null +++ b/doc/images/Transformer/American_Three_Phase_Transformer.tex @@ -0,0 +1,178 @@ +\input{Preambule}% + +\begin{document} + \ctikzset{american, bipoles/length=1cm}% + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + % + % Définitions + % + % No European transformer in circuitikz [BV, 17/07/2023] + \tikzset{ + transformer/.pic={ + \draw (-0.2,0) circle[radius=0.4] (0.2,0) circle[radius=0.4]; + }, + } + \pgfmathsetmacro{\xzero}{0};% + \pgfmathsetmacro{\xone}{1};% + \pgfmathsetmacro{\xtwo}{3};% + \pgfmathsetmacro{\xthree}{5};% + \pgfmathsetmacro{\xym}{7};% + \pgfmathsetmacro{\xtransformer}{10};% + \pgfmathsetmacro{\xtransformerm}{\xtransformer-1};% + \pgfmathsetmacro{\xtransformerp}{\xtransformer+1};% + \pgfmathsetmacro{\xztwom}{11.5};% + \pgfmathsetmacro{\xztwop}{13.5};% + \pgfmathsetmacro{\xfour}{15};% + \pgfmathsetmacro{\xfive}{17};% + \pgfmathsetmacro{\xsix}{19};% + \pgfmathsetmacro{\xseven}{20};% + \pgfmathsetmacro{\yn}{0};% + \pgfmathsetmacro{\yc}{2.5};% + \pgfmathsetmacro{\yb}{5};% + \pgfmathsetmacro{\ya}{7.5};% + \pgfmathsetmacro{\yxp}{\ya+0.25};% + \pgfmathsetmacro{\yxm}{\yxp-2};% + \pgfmathsetmacro{\yyp}{\yxm-1};% + \pgfmathsetmacro{\yym}{\yyp-2};% + \pgfmathsetmacro{\yzp}{\yym-1};% + \pgfmathsetmacro{\yzm}{\yzp-2};% + \pgfmathsetmacro{\yzero}{\yn-1};% + \pgfmathsetmacro{\yone}{\ya+1};% + \pgfmathsetmacro{\transformerheight}{\yxp-\yxm};% + \ctikzset{quadpoles/transformer/height=\transformerheight};% + + % Rectangles + \pgfmathsetmacro{\xtmp}{\xone+0.75*(\xtwo-\xone)};% + \draw[blue,dashed] (\xzero, \yzero) rectangle (\xtmp,\yone);% + \draw[blue] (\xtwo,\yzero) rectangle (\xthree,\yone);% + \draw[blue] (\xfour, \yzero) rectangle (\xfive,\yone);% + \pgfmathsetmacro{\xtmp}{\xsix-0.75*(\xsix-\xfive)};% + \draw[blue,dashed] (\xtmp, \yzero) rectangle (\xseven,\yone);% + + \pgfmathsetmacro{\xtmpleft}{\xthree+0.5};% + \pgfmathsetmacro{\xtmpright}{\xfour-0.5};% + \draw[blue,dashed] (\xtmpleft, \yzero) rectangle (\xtmpright,\yone);% + + % ABCN + \draw (\xone,\ya) node[left] {$\underline{V_{1,\arm}}$}% + to[short,-*,i=$\underline{I_{1,\arm}}$] (\xtwo,\ya) node[right] {$\Arm$};% + \draw (\xone,\yb) node[left] {$\underline{V_{1,\brm}}$}% + to[short,-*,i=$\underline{I_{1,\brm}}$] (\xtwo,\yb) node[right] {$\Brm$};% + \draw (\xone,\yc) node[left] {$\underline{V_{1,\crm}}$}% + to[short,-*,i=$\underline{I_{1,\crm}}$] (\xtwo,\yc) node[right] {$\Crm$};% + \draw (\xone,\yn) node[left] {$\underline{V_{1,\nrm}}$}% + to[short,-*,i=$\underline{I_{1,\nrm}}$] (\xtwo,\yn) node[right] {$\Nrm$};% + + % XYZ + % First winding (X) + \pgfmathsetmacro{\ytmp}{0.5*(\yxp+\yxm)};% + \node[transformer] (TX) at (\xtransformer,\ytmp) {}; + \draw (\xthree,\yxp) node[left] {$\Xrm^+$}% + to[short,*-,i=$\underline{I_{\Xrm}}$] (\xym,\yxp)% + to[short] (TX.A1);% + \draw (\xthree,\yxm) node[left] {$\Xrm^-$}% + to[short,*-] (\xym,\yxm)% + to[short] (TX.A2);% + \draw (\xym,\yxp) to[generic,% + i>^=$\underline{I_{\mathrm{m},\arm}}$,% + l=$\underline{Y_{\mathrm{m},\arm}}$,% + v>=$\underline{U_{\Xrm}}$% + ] (\xym,\yxm);% + \node[above] at ($(TX.base)-(0,0.2)$) {$k$};% + \draw (TX.inner dot A1) node[circ] {}; % + \draw (TX.inner dot B1) node[circ] {}; % + + % First winding (Y) + \pgfmathsetmacro{\ytmp}{0.5*(\yyp+\yym)};% + \node[transformer] (TY) at (\xtransformer,\ytmp) {};% + \draw (\xthree,\yyp) node[left] {$\Yrm^+$}% + to[short,*-,i=$\underline{I_{\Yrm}}$] (\xym,\yyp)% + to[short] (TY.A1);% + \draw (\xthree,\yym) node[left] {$\Yrm^-$}% + to[short,*-] (\xym,\yym)% + to[short] (TY.A2);% + \draw (\xym,\yyp) to[generic,% + i>^=$\underline{I_{\mathrm{m},\brm}}$,% + l=$\underline{Y_{\mathrm{m},\brm}}$,% + v>=$\underline{U_{\Yrm}}$% + ] (\xym,\yym);% + \node[above] at ($(TY.base)-(0,0.2)$) {$k$};% + \draw (TY.inner dot A1) node[circ] {}; % + \draw (TY.inner dot B1) node[circ] {}; % + + % First winding (Z) + \pgfmathsetmacro{\ytmp}{0.5*(\yzp+\yzm)};% + \node[transformer] (TZ) at (\xtransformer,\ytmp) {};% + \draw (\xthree,\yzp) node[left] {$\Zrm^+$}% + to[short,*-,i=$\underline{I_{\Zrm}}$] (\xym,\yzp)% + to[short] (TZ.A1);% + \draw (\xthree,\yzm) node[left] {$\Zrm^-$}% + to[short,*-] (\xym,\yzm)% + to[short] (TZ.A2);% + \draw (\xym,\yzp) to[generic,% + i>^=$\underline{I_{\mathrm{m},\crm}}$,% + l=$\underline{Y_{\mathrm{m},\crm}}$,% + v>=$\underline{U_{\Zrm}}$% + ] (\xym,\yzm);% + \node[above] at ($(TZ.base)-(0,0.2)$) {$k$};% + \draw (TZ.inner dot A1) node[circ] {}; % + \draw (TZ.inner dot B1) node[circ] {}; % + + % xyz + % Second winding (x) + \pgfmathsetmacro{\ytmp}{0.5*(\yxp+\yxm)};% + \draw (\xfour,\yxp) node[right] {$\xrm^+$}% + to[short,*-,i>_=$\underline{I_{\xrm}}$] (\xztwop, \yxp) + to[generic,l=$\underline{Z_{2,\arm}}$] (\xztwom, \yxp) + to[short] (TX.B1);% + \draw (\xfour,\yxm) node[right] {$\xrm^-$}% + to[short,*-] (TX.B2);% + \draw (\xztwop, \yxm) to[open,v<=$\underline{U_{\xrm}}$] (\xztwop, \yxp);% + \draw (\xztwom, \yxm) to[open,v<=$\underline{U_{0,\xrm}}$] (\xztwom, \yxp);% + + % Second winding (y) + \pgfmathsetmacro{\ytmp}{0.5*(\yyp+\yym)};% + \draw (\xfour,\yyp) node[right] {$\yrm^+$}% + to[short,*-,i>_=$\underline{I_{\yrm}}$] (\xztwop, \yyp)% + to[generic,l=$\underline{Z_{2,\brm}}$] (\xztwom, \yyp)% + to[short] (TY.B1);% + \draw (\xfour,\yym) node[right] {$\yrm^-$}% + to[short,*-] (TY.B2);% + \draw (\xztwop, \yym) to[open,v<=$\underline{U_{\yrm}}$] (\xztwop, \yyp);% + \draw (\xztwom, \yym) to[open,v<=$\underline{U_{0,\yrm}}$] (\xztwom, \yyp);% + + % Second winding (z) + \pgfmathsetmacro{\ytmp}{0.5*(\yzp+\yzm)};% + \draw (\xfour,\yzp) node[right] {$\zrm^+$}% + to[short,*-,i>_=$\underline{I_{\zrm}}$] (\xztwop, \yzp)% + to[generic,l=$\underline{Z_{2,\crm}}$] (\xztwom, \yzp)% + to[short] (TZ.B1);% + \draw (\xfour,\yzm) node[right] {$\zrm^-$}% + to[short,*-] (TZ.B2);% + \draw (\xztwop, \yzm) to[open,v<=$\underline{U_{\zrm}}$] (\xztwop, \yzp);% + \draw (\xztwom, \yzm) to[open,v<=$\underline{U_{0,\zrm}}$] (\xztwom, \yzp);% + + % abcn + \draw (\xsix,\ya) node[right] {$\underline{V_{2,\arm}}$}% + to[short,-*,i_=$\underline{I_{2,\arm}}$] (\xfive,\ya) node[left] {$\arm$};% + \draw (\xsix,\yb) node[right] {$\underline{V_{2,\brm}}$}% + to[short,-*,i_=$\underline{I_{2,\brm}}$] (\xfive,\yb) node[left] {$\brm$};% + \draw (\xsix,\yc) node[right] {$\underline{V_{2,\crm}}$}% + to[short,-*,i_=$\underline{I_{2,\crm}}$] (\xfive,\yc) node[left] {$\crm$};% + \draw (\xsix,\yn) node[right] {$\underline{V_{2,\nrm}}$}% + to[short,-*,i_=$\underline{I_{2,\nrm}}$] (\xfive,\yn) node[left] {$\nrm$};% + \end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 100 +% End: diff --git a/doc/images/Transformer/European_Center_Tapped_Transformer.tex b/doc/images/Transformer/European_Center_Tapped_Transformer.tex new file mode 100644 index 00000000..7685f67d --- /dev/null +++ b/doc/images/Transformer/European_Center_Tapped_Transformer.tex @@ -0,0 +1,92 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{european, straight voltages, cute inductors, bipoles/length=1cm}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + % Version multifilaire + + % + % Définitions + % + % No European transformer in circuitikz [BV, 17/07/2023] + \tikzset{ + transformer/.pic={ + \draw (-0.2,0) circle[radius=0.4] (0.2,0) circle[radius=0.4]; + }, + } + \pgfmathsetmacro{\xl}{0};% + \pgfmathsetmacro{\xy}{1.75};% + \pgfmathsetmacro{\xlt}{2.5};% + \pgfmathsetmacro{\xrt}{4.5};% + \pgfmathsetmacro{\xz}{6.5};% + \pgfmathsetmacro{\xm}{8};% + \pgfmathsetmacro{\xtransformer}{0.5*(\xlt+\xrt)};% + \pgfmathsetmacro{\xtransformerm}{\xtransformer-1};% + \pgfmathsetmacro{\xtransformerp}{\xtransformer+1};% + + \pgfmathsetmacro{\yb}{0};% + \pgfmathsetmacro{\yn}{2};% + \pgfmathsetmacro{\ya}{4};% + \pgfmathsetmacro{\yt}{0.5*(\ya+\yb)};% + + % + % Dessin + % + % Transformer + \pic[local bounding box=T] at (\xtransformer,\yt) {transformer};% + \node[above=0.25cm] at (T.north) {$k$};% + + % Tensions amont + \node[left] at (\xl,\ya) {$\underline{V_{1,\arm}}$}; + \node[left] at (\xl,\yb) {$\underline{V_{1,\brm}}$}; + + % Tensions aval + \node[right] at (\xm,\ya) {$\underline{V_{2,\arm}}$}; + \node[right] at (\xm,\yb) {$\underline{V_{2,\brm}}$}; + \node[right] at (\xm,\yn) {$\underline{V_{2,\nrm}}$}; + + % Câbles principaux + % A + \draw (\xl,\ya) to[short,*-*,i=$\underline{I_{1,\arm}}$] + (\xy,\ya) to[short] (\xtransformerm,\ya) to[short] node[near start,above=0.25cm,circ] {} (T);% + \draw (\xtransformerp,\ya) to[short] node[near start,above=0.25cm,circ] {} (T);% + \draw (\xtransformerp,\ya) -- (\xrt,\ya) to [generic, l=$\dfrac{\underline{Z_2}}{2}$, label distance=6pt, -] + (\xz,\ya) to[short,-*,i<=$\underline{I_{2,\arm}}$] (\xm,\ya);% + + % B + \draw (\xl,\yb) to[short,*-*,i=$\underline{I_{1,\brm}}$] + (\xy,\yb) to[short] (\xtransformerm,\yb) to[short] (T);% + \draw (\xtransformerp,\yb) to[short] (T);% + \draw (\xtransformerp,\yb) -- (\xrt,\yb) to [generic, l_=$\dfrac{\underline{Z_2}}{2}$, -] + (\xz,\yb) to[short,-*,i<=$\underline{I_{2,\brm}}$] (\xm,\yb);% + + + % Neutre + \draw (T.east) to[short] (\xtransformerp,\yn) -- (\xz,\yn) to[short,-*,i<=$\underline{I_{2,\nrm}}$] (\xm,\yn);% + + % Ym + \draw (\xy,\ya) to [generic, l=$\underline{Y_{\mathrm{m}}}$, v<=$\underline{U_{1,\abrm}}$, -] (\xy,\yb);% + + % Tensions + \draw (\xz,\ya) to [open, v^<=$\underline{U_{2,\arm}}$] (\xz,\yn);% + \draw (\xz,\yb) to [open, v<=$\underline{U_{2,\brm}}$] (\xz,\yn);% + \pgfmathsetmacro{\xr}{\xrt + 0.25};% + \draw (\xr,\ya) to [open, v^<=$\underline{U_{2,\arm}^0}$] (\xr,\yn);% + \draw (\xr,\yb) to [open, v<=$\underline{U_{2,\brm}^0}$] (\xr,\yn);% + +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "francais" +% coding: utf-8 +% TeX-master: "../../Manuscrit.tex" +% LaTeX-indent-level: 4 +% compile-command: "make -k -C ../../" +% End: diff --git a/doc/images/Transformer/European_Dyn11.tex b/doc/images/Transformer/European_Dyn11.tex new file mode 100644 index 00000000..a6cfa628 --- /dev/null +++ b/doc/images/Transformer/European_Dyn11.tex @@ -0,0 +1,202 @@ +\input{Preambule}% + +\begin{document} + \ctikzset{european, straight voltages, cute inductors, bipoles/length=1cm}% + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + % + % Définitions + % + % No European transformer in circuitikz [BV, 17/07/2023] + \tikzset{ + transformer/.pic={ + \draw (-0.2,0) circle[radius=0.4] (0.2,0) circle[radius=0.4]; + }, + } + \pgfmathsetmacro{\xzero}{0};% + \pgfmathsetmacro{\xone}{1};% + \pgfmathsetmacro{\xtwo}{3};% + \pgfmathsetmacro{\xthree}{5};% + \pgfmathsetmacro{\xym}{7};% + \pgfmathsetmacro{\xtransformer}{10};% + \pgfmathsetmacro{\xtransformerm}{\xtransformer-1};% + \pgfmathsetmacro{\xtransformerp}{\xtransformer+1};% + \pgfmathsetmacro{\xztwom}{11.5};% + \pgfmathsetmacro{\xztwop}{13.5};% + \pgfmathsetmacro{\xfour}{15};% + \pgfmathsetmacro{\xfive}{17};% + \pgfmathsetmacro{\xsix}{19};% + \pgfmathsetmacro{\xseven}{20};% + \pgfmathsetmacro{\yn}{0};% + \pgfmathsetmacro{\yc}{2.5};% + \pgfmathsetmacro{\yb}{5};% + \pgfmathsetmacro{\ya}{7.5};% + \pgfmathsetmacro{\yxp}{\ya};% + \pgfmathsetmacro{\yxm}{\yb+0.6};% + \pgfmathsetmacro{\yyp}{\yb};% + \pgfmathsetmacro{\yym}{\yc+0.6};% + \pgfmathsetmacro{\yzp}{\yc};% + \pgfmathsetmacro{\yzm}{\yn+0.6};% + \pgfmathsetmacro{\yzero}{\yn-1};% + \pgfmathsetmacro{\yone}{\ya+1};% + + % Rectangles + \pgfmathsetmacro{\xtmp}{\xone+0.75*(\xtwo-\xone)};% + \draw[blue,dashed] (\xzero, \yzero) rectangle (\xtmp, \yone);% + \draw[blue] (\xtwo, \yzero) rectangle (\xthree, \yone);% + \draw[blue] (\xfour, \yzero) rectangle (\xfive, \yone);% + \pgfmathsetmacro{\xtmp}{\xsix-0.75*(\xsix-\xfive)};% + \draw[blue,dashed] (\xtmp, \yzero) rectangle (\xseven, \yone);% + + \pgfmathsetmacro{\xtmpleft}{\xthree+0.5};% + \pgfmathsetmacro{\xtmpright}{\xfour-0.5};% + \draw[blue,dashed] (\xtmpleft, \yzero) rectangle (\xtmpright,\yone);% + + % ABCN + \node at (3.5,\yb) [jump crossing,rotate=90](Y jump) {};% + \node at (3.5,\yc) [jump crossing,rotate=90](Z jump) {};% + \draw (\xone,\ya) node[left] {$\underline{V_{1,\arm}}$}% + to[short,-,i=$\underline{I_{1,\arm}}$] (\xtwo,\ya)% + to[short,-] (\xthree,\ya)% + to[short,-,i=$\underline{I_{\Xrm}}$] (\xym, \ya)% + to[short,-] (\xtransformerm, \ya);% + \draw (\xone,\yb) node[left] {$\underline{V_{1,\brm}}$}% + to[short,-,i=$\underline{I_{1,\brm}}$] (\xtwo,\yb)% + to[short, -] (Y jump.north)% + (Y jump.south)% + to[short,-] (\xthree,\yb)% + to[short,-,i=$\underline{I_{\Yrm}}$] (\xym, \yb)% + to[short,-] (\xtransformerm,\yb);% + \draw (\xone,\yc) node[left] {$\underline{V_{1,\crm}}$}% + to[short,-,i=$\underline{I_{1,\crm}}$] (\xtwo,\yc)% + to[short, -] (Z jump.north)% + (Z jump.south)% + to[short,-] (\xthree,\yc)% + to[short,-,i=$\underline{I_{\Zrm}}$] (\xym, \yc)% + to[short,-] (\xtransformerm,\yc);% + + % XYZ + % First winding (X) + \pgfmathsetmacro{\ytmp}{0.5*(\yxp+\yxm)};% + \pic[local bounding box=TX] at (\xtransformer,\ytmp) {transformer};% + \draw (\xtransformerm, \yxp)% + to[short] node[near start,above=0.25cm,circ] {} (TX);% + \draw (4.5,\yb) to [short, *-] (4.5,\yxm)% + to[short, -] (\xym,\yxm)% + to[short] (\xtransformerm,\yxm)% + to[short] (TX);% + \draw (\xym,\yxp) to[generic,% + i>^=$\underline{I_{\mathrm{m},\arm}}$,% + l=$\underline{Y_{\mathrm{m},\arm}}$,% + v<=$\underline{U_{\Xrm}}$% + ] (\xym,\yxm);% + \node[above] at (TX.north) {$k$};% + + % First winding (Y) + \pgfmathsetmacro{\ytmp}{0.5*(\yyp+\yym)};% + \pic[local bounding box=TY] at (\xtransformer,\ytmp) {transformer};% + \draw (\xtransformerm,\yyp)% + to[short] node[near start,above=0.25cm,circ] {} (TY);% + \draw (4.5,\yc) to [short, *-] (4.5,\yym)% + to[short,-] (\xym,\yym)% + to[short] (\xtransformerm,\yym)% + to[short] (TY);% + \draw (\xym,\yyp) to[generic,% + i>^=$\underline{I_{\mathrm{m},\brm}}$,% + l=$\underline{Y_{\mathrm{m},\brm}}$,% + v<=$\underline{U_{\Yrm}}$% + ] (\xym,\yym);% + \node[above] at (TY.north) {$k$};% + + % First winding (Z) + \pgfmathsetmacro{\ytmp}{0.5*(\yzp+\yzm)};% + \pic[local bounding box=TZ] at (\xtransformer,\ytmp) {transformer};% + \draw (\xtransformerm,\yzp)% + to[short] node[near start,above=0.25cm,circ] {} (TZ);% + \draw (3.5,\ya) to[short,*-] (Y jump.east)% + (Y jump.west)% + to[short, -] (Z jump.east)% + (Z jump.west)% + to[short,-] (3.5,\yzm)% + to[short] (\xym,\yzm)% + to[short] (\xtransformerm,\yzm)% + to[short] (TZ);% + \draw (\xym,\yzp) to[generic,% + i>^=$\underline{I_{\mathrm{m},\crm}}$,% + l=$\underline{Y_{\mathrm{m},\crm}}$,% + v<=$\underline{U_{\Zrm}}$% + ] (\xym,\yzm);% + \node[above] at (TZ.north) {$k$};% + + % xyz + % Second winding (x) + \pgfmathsetmacro{\ytmp}{0.5*(\yxp+\yxm)};% + \draw (\xsix,\ya) node[right] {$\underline{V_{2,\arm}}$}% + to[short,-,i_=$\underline{I_{2,\arm}}$] (\xfive,\ya) % + to[short, -] (\xfour,\ya)% + to[short,-,i>_=$\underline{I_{\xrm}}$] (\xztwop, \ya)% + to[generic,l=$\underline{Z_{2,\arm}}$] (\xztwom, \ya)% + to[short] (\xtransformerp,\ya) % + to[short] node[near start,above=0.25cm,circ] {} (TX);% + \draw (\xztwop, \yxm) to[open,v=$\underline{U_{\xrm}}$] (\xztwop, \yxp);% + \draw (\xztwom, \yxm) to[open,v=$\underline{U_{0,\xrm}}$] (\xztwom, \yxp);% + + % Second winding (y) + \node at (16,\yb) [jump crossing,rotate=90](y jump) {};% + \pgfmathsetmacro{\ytmp}{0.5*(\yyp+\yym)};% + \draw (\xsix,\yb) node[right] {$\underline{V_{2,\brm}}$}% + to[short,-,i_=$\underline{I_{2,\brm}}$] (\xfive,\yb)% + to[short, -] (y jump.south)% + (y jump.north)% + to[short, -] (\xfour,\yb)% + to[short,-,i>_=$\underline{I_{\yrm}}$] (\xztwop, \yb)% + to[generic,l=$\underline{Z_{2,\brm}}$] (\xztwom, \yb)% + to[short] (\xtransformerp,\yb)% + to[short] node[near start,above=0.25cm,circ] {} (TY);% + \draw (16,\yym) to[short,*-] (\xtransformerp,\yym) to[short] (TY);% + \draw (\xztwop, \yym) to[open,v=$\underline{U_{\yrm}}$] (\xztwop, \yb);% + \draw (\xztwom, \yym) to[open,v=$\underline{U_{0,\yrm}}$] (\xztwom, \yb);% + + % Second winding (z) + \node at (16,\yc) [jump crossing,rotate=90](z jump) {};% + \pgfmathsetmacro{\ytmp}{0.5*(\yzp+\yzm)};% + \draw (\xsix,\yc) node[right] {$\underline{V_{2,\crm}}$}% + to[short,-,i_=$\underline{I_{2,\crm}}$] (\xfive,\yc)% + to[short, -] (z jump.south)% + (z jump.north)% + to [short,-] (\xfour,\yc)% + to[short,-,i>_=$\underline{I_{\zrm}}$] (\xztwop, \yc)% + to[generic,l=$\underline{Z_{2,\crm}}$] (\xztwom, \yc)% + to[short] (\xtransformerp,\yc)% + to[short] node[near start,above=0.25cm,circ] {} (TZ);% + \draw (16,\yzm) to[short,*-] (\xtransformerp,\yzm) to[short] (TZ);% + \draw (\xztwop, \yzm) to[open,v=$\underline{U_{\zrm}}$] (\xztwop, \yc);% + \draw (\xztwom, \yzm) to[open,v=$\underline{U_{0,\zrm}}$] (\xztwom, \yc);% + + % Close the yn + \draw (\xsix,\yn) node[right] {$\underline{V_{2,\nrm}}$}% + to[short,-,i_=$\underline{I_{2,\nrm}}$] (\xfive,\yn)% + to[short,-] (16,\yn)% + to[short,-] (16,\yzm)% + to[short,-] (z jump.west)% + (z jump.east)% + to[short,-] (16,\yym)% + to[short,-] (y jump.west)% + (y jump.east)% + to[short,-] (16,\yxm)%% + to[short,-] (\xtransformerp,\yxm)% + to[short] (TX);% + \end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 100 +% End: diff --git a/doc/images/Transformer/European_Single_Phase_Transformer.tex b/doc/images/Transformer/European_Single_Phase_Transformer.tex new file mode 100644 index 00000000..352622ac --- /dev/null +++ b/doc/images/Transformer/European_Single_Phase_Transformer.tex @@ -0,0 +1,79 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{european, straight voltages, cute inductors, bipoles/length=1cm}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + % Version multifilaire + + % + % Définitions + % + % No European transformer in circuitikz [BV, 17/07/2023] + \tikzset{ + transformer/.pic={ + \draw (-0.2,0) circle[radius=0.4] (0.2,0) circle[radius=0.4]; + }, + } + \pgfmathsetmacro{\xl}{0};% + \pgfmathsetmacro{\xy}{1.75};% + \pgfmathsetmacro{\xlt}{2.5};% + \pgfmathsetmacro{\xrt}{4.5};% + \pgfmathsetmacro{\xz}{6};% + \pgfmathsetmacro{\xm}{7.5};% + \pgfmathsetmacro{\xtransformer}{0.5*(\xlt+\xrt)};% + \pgfmathsetmacro{\xtransformerm}{\xtransformer-1};% + \pgfmathsetmacro{\xtransformerp}{\xtransformer+1};% + + \pgfmathsetmacro{\yn}{0};% + \pgfmathsetmacro{\ya}{2};% + \pgfmathsetmacro{\yt}{0.5*(\ya+\yn)};% + + % + % Dessin + % + % Transformer + \pic[local bounding box=T] at (\xtransformer,\yt) {transformer};% + \node[above] at (T.north) {$k$};% + + % Tensions amont + \node[left] at (\xl,\ya) {$\underline{V_{1,\arm}}$}; + \node[left] at (\xl,\yn) {$\underline{V_{1,\nrm}}$}; + + % Tensions aval + \node[right] at (\xm,\ya) {$\underline{V_{2,\arm}}$}; + \node[right] at (\xm,\yn) {$\underline{V_{2,\nrm}}$}; + + % Câbles principaux + % A + \draw (\xl,\ya) to[short,*-*,i=$\underline{I_{1,\arm}}$] + (\xy,\ya) to[short] (\xtransformerm,\ya) to[short] node[near start,above=0.25cm,circ] {} (T);% + \draw (\xtransformerp,\ya) to[short] node[near start,above=0.25cm,circ] {} (T);% + \draw (\xtransformerp,\ya) -- (\xrt,\ya) to [generic, l=$\underline{Z_2}$, -] + (\xz,\ya) to[short,-*,i<=$\underline{I_{2,\arm}}$] (\xm,\ya);% + + % Neutre + \draw (\xl,\yn) to[short,*-*,i=$\underline{I_{1,\nrm}}$] + (\xy,\yn) to[short] (\xtransformerm,\yn) to[short] (T);% + \draw (\xtransformerp,\yn) to[short] (T);% + \draw (\xtransformerp,\yn) -- (\xz,\yn) to[short,-*,i<=$\underline{I_{2,\nrm}}$] (\xm,\yn);% + + % Ym + \draw (\xy,\ya) to [generic, l=$\underline{Y_{\mathrm{m}}}$, v<=$\underline{U_{1,\arm}}$, -] (\xy,\yn);% + \draw (\xz,\ya) to [open, v<=$\underline{U_{2,\arm}}$] (\xz,\yn);% + +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "francais" +% coding: utf-8 +% TeX-master: "../../Manuscrit.tex" +% LaTeX-indent-level: 4 +% compile-command: "make -k -C ../../" +% End: diff --git a/doc/images/Transformer/European_Three_Phase_Transformer.tex b/doc/images/Transformer/European_Three_Phase_Transformer.tex new file mode 100644 index 00000000..c293d3e5 --- /dev/null +++ b/doc/images/Transformer/European_Three_Phase_Transformer.tex @@ -0,0 +1,179 @@ +\input{Preambule}% + +\begin{document} + \ctikzset{european, straight voltages, cute inductors, bipoles/length=1cm}% + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + % + % Définitions + % + % No European transformer in circuitikz [BV, 17/07/2023] + \tikzset{ + transformer/.pic={ + \draw (-0.2,0) circle[radius=0.4] (0.2,0) circle[radius=0.4]; + }, + } + \pgfmathsetmacro{\xzero}{0};% + \pgfmathsetmacro{\xone}{1};% + \pgfmathsetmacro{\xtwo}{3};% + \pgfmathsetmacro{\xthree}{5};% + \pgfmathsetmacro{\xym}{7};% + \pgfmathsetmacro{\xtransformer}{10};% + \pgfmathsetmacro{\xtransformerm}{\xtransformer-1};% + \pgfmathsetmacro{\xtransformerp}{\xtransformer+1};% + \pgfmathsetmacro{\xztwom}{11.5};% + \pgfmathsetmacro{\xztwop}{13.5};% + \pgfmathsetmacro{\xfour}{15};% + \pgfmathsetmacro{\xfive}{17};% + \pgfmathsetmacro{\xsix}{19};% + \pgfmathsetmacro{\xseven}{20};% + \pgfmathsetmacro{\yn}{0};% + \pgfmathsetmacro{\yc}{2.5};% + \pgfmathsetmacro{\yb}{5};% + \pgfmathsetmacro{\ya}{7.5};% + \pgfmathsetmacro{\yxp}{\ya+0.25};% + \pgfmathsetmacro{\yxm}{\yxp-2};% + \pgfmathsetmacro{\yyp}{\yxm-1};% + \pgfmathsetmacro{\yym}{\yyp-2};% + \pgfmathsetmacro{\yzp}{\yym-1};% + \pgfmathsetmacro{\yzm}{\yzp-2};% + \pgfmathsetmacro{\yzero}{\yn-1};% + \pgfmathsetmacro{\yone}{\ya+1};% + + % Rectangles + \pgfmathsetmacro{\xtmp}{\xone+0.75*(\xtwo-\xone)};% + \draw[blue,dashed] (\xzero, \yzero) rectangle (\xtmp,\yone);% + \draw[blue] (\xtwo,\yzero) rectangle (\xthree,\yone);% + \draw[blue] (\xfour, \yzero) rectangle (\xfive,\yone);% + \pgfmathsetmacro{\xtmp}{\xsix-0.75*(\xsix-\xfive)};% + \draw[blue,dashed] (\xtmp, \yzero) rectangle (\xseven,\yone);% + + \pgfmathsetmacro{\xtmpleft}{\xthree+0.5};% + \pgfmathsetmacro{\xtmpright}{\xfour-0.5};% + \draw[blue,dashed] (\xtmpleft, \yzero) rectangle (\xtmpright,\yone);% + + % ABCN + \draw (\xone,\ya) node[left] {$\underline{V_{1,\arm}}$}% + to[short,-*,i=$\underline{I_{1,\arm}}$] (\xtwo,\ya) node[right] {$\Arm$};% + \draw (\xone,\yb) node[left] {$\underline{V_{1,\brm}}$}% + to[short,-*,i=$\underline{I_{1,\brm}}$] (\xtwo,\yb) node[right] {$\Brm$};% + \draw (\xone,\yc) node[left] {$\underline{V_{1,\crm}}$}% + to[short,-*,i=$\underline{I_{1,\crm}}$] (\xtwo,\yc) node[right] {$\Crm$};% + \draw (\xone,\yn) node[left] {$\underline{V_{1,\nrm}}$}% + to[short,-*,i=$\underline{I_{1,\nrm}}$] (\xtwo,\yn) node[right] {$\Nrm$};% + + % XYZ + % First winding (X) + \pgfmathsetmacro{\ytmp}{0.5*(\yxp+\yxm)};% + \pic[local bounding box=TX] at (\xtransformer,\ytmp) {transformer};% + \draw (\xthree,\yxp) node[left] {$\Xrm^+$}% + to[short,*-,i=$\underline{I_{\Xrm}}$] (\xym,\yxp)% + to[short] (\xtransformerm,\yxp)% + to[short] node[near start,above=0.25cm,circ] {} (TX);% + \draw (\xthree,\yxm) node[left] {$\Xrm^-$}% + to[short,*-] (\xym,\yxm)% + to[short] (\xtransformerm,\yxm)% + to[short] (TX);% + \draw (\xym,\yxp) to[generic,% + i>^=$\underline{I_{\mathrm{m},\arm}}$,% + l=$\underline{Y_{\mathrm{m},\arm}}$,% + v<=$\underline{U_{\Xrm}}$% + ] (\xym,\yxm);% + \node[above] at (TX.north) {$k$};% + + % First winding (Y) + \pgfmathsetmacro{\ytmp}{0.5*(\yyp+\yym)};% + \pic[local bounding box=TY] at (\xtransformer,\ytmp) {transformer};% + \draw (\xthree,\yyp) node[left] {$\Yrm^+$}% + to[short,*-,i=$\underline{I_{\Yrm}}$] (\xym,\yyp)% + to[short] (\xtransformerm,\yyp)% + to[short] node[near start,above=0.25cm,circ] {} (TY);% + \draw (\xthree,\yym) node[left] {$\Yrm^-$}% + to[short,*-] (\xym,\yym)% + to[short] (\xtransformerm,\yym)% + to[short] (TY);% + \draw (\xym,\yyp) to[generic,% + i>^=$\underline{I_{\mathrm{m},\brm}}$,% + l=$\underline{Y_{\mathrm{m},\brm}}$,% + v<=$\underline{U_{\Yrm}}$% + ] (\xym,\yym);% + \node[above] at (TY.north) {$k$};% + + % First winding (Z) + \pgfmathsetmacro{\ytmp}{0.5*(\yzp+\yzm)};% + \pic[local bounding box=TZ] at (\xtransformer,\ytmp) {transformer};% + \draw (\xthree,\yzp) node[left] {$\Zrm^+$}% + to[short,*-,i=$\underline{I_{\Zrm}}$] (\xym,\yzp)% + to[short] (\xtransformerm,\yzp)% + to[short] node[near start,above=0.25cm,circ] {} (TZ);% + \draw (\xthree,\yzm) node[left] {$\Zrm^-$}% + to[short,*-] (\xym,\yzm)% + to[short] (\xtransformerm,\yzm)% + to[short] (TZ);% + \draw (\xym,\yzp) to[generic,% + i>^=$\underline{I_{\mathrm{m},\crm}}$,% + l=$\underline{Y_{\mathrm{m},\crm}}$,% + v<=$\underline{U_{\Zrm}}$% + ] (\xym,\yzm);% + \node[above] at (TZ.north) {$k$};% + + % xyz + % Second winding (x) + \pgfmathsetmacro{\ytmp}{0.5*(\yxp+\yxm)};% + \draw (\xfour,\yxp) node[right] {$\xrm^+$}% + to[short,*-,i>_=$\underline{I_{\xrm}}$] (\xztwop, \yxp)% + to[generic,l=$\underline{Z_{2,\arm}}$] (\xztwom, \yxp)% + to[short] (\xtransformerp,\yxp) % + to[short] node[near start,above=0.25cm,circ] {} (TX);% + \draw (\xfour,\yxm) node[right] {$\xrm^-$}% + to[short,*-] (\xtransformerp,\yxm) to[short] (TX);% + \draw (\xztwop, \yxm) to[open,v=$\underline{U_{\xrm}}$] (\xztwop, \yxp);% + \draw (\xztwom, \yxm) to[open,v=$\underline{U_{0,\xrm}}$] (\xztwom, \yxp);% + + % Second winding (y) + \pgfmathsetmacro{\ytmp}{0.5*(\yyp+\yym)};% + \draw (\xfour,\yyp) node[right] {$\yrm^+$}% + to[short,*-,i>_=$\underline{I_{\yrm}}$] (\xztwop, \yyp)% + to[generic,l=$\underline{Z_{2,\brm}}$] (\xztwom, \yyp)% + to[short] (\xtransformerp,\yyp)% + to[short] node[near start,above=0.25cm,circ] {} (TY);% + \draw (\xfour,\yym) node[right] {$\yrm^-$}% + to[short,*-] (\xtransformerp,\yym) to[short] (TY);% + \draw (\xztwop, \yym) to[open,v=$\underline{U_{\yrm}}$] (\xztwop, \yyp);% + \draw (\xztwom, \yym) to[open,v=$\underline{U_{0,\yrm}}$] (\xztwom, \yyp);% + + % Second winding (z) + \pgfmathsetmacro{\ytmp}{0.5*(\yzp+\yzm)};% + \draw (\xfour,\yzp) node[right] {$\zrm^+$}% + to[short,*-,i>_=$\underline{I_{\zrm}}$] (\xztwop, \yzp)% + to[generic,l=$\underline{Z_{2,\crm}}$] (\xztwom, \yzp)% + to[short] (\xtransformerp,\yzp)% + to[short] node[near start,above=0.25cm,circ] {} (TZ);% + \draw (\xfour,\yzm) node[right] {$\zrm^-$}% + to[short,*-] (\xtransformerp,\yzm) to[short] (TZ);% + \draw (\xztwop, \yzm) to[open,v=$\underline{U_{\zrm}}$] (\xztwop, \yzp);% + \draw (\xztwom, \yzm) to[open,v=$\underline{U_{0,\zrm}}$] (\xztwom, \yzp);% + + % abcn + \draw (\xsix,\ya) node[right] {$\underline{V_{2,\arm}}$}% + to[short,-*,i_=$\underline{I_{2,\arm}}$] (\xfive,\ya) node[left] {$\arm$};% + \draw (\xsix,\yb) node[right] {$\underline{V_{2,\brm}}$}% + to[short,-*,i_=$\underline{I_{2,\brm}}$] (\xfive,\yb) node[left] {$\brm$};% + \draw (\xsix,\yc) node[right] {$\underline{V_{2,\crm}}$}% + to[short,-*,i_=$\underline{I_{2,\crm}}$] (\xfive,\yc) node[left] {$\crm$};% + \draw (\xsix,\yn) node[right] {$\underline{V_{2,\nrm}}$}% + to[short,-*,i_=$\underline{I_{2,\nrm}}$] (\xfive,\yn) node[left] {$\nrm$};% + \end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 100 +% End: diff --git a/doc/images/Transformer/Windings.tex b/doc/images/Transformer/Windings.tex new file mode 100644 index 00000000..df7cb96d --- /dev/null +++ b/doc/images/Transformer/Windings.tex @@ -0,0 +1,99 @@ +\input{Preambule}% + +\begin{document} + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \input{Transformer/Windings_Common.tikz}% + + % Phase displacement = 0 + \begin{scope}[local bounding box=Dd0] + \pic at (0,0) {left d};% + \pic at (5,0) {right d};% + \end{scope} + \node[left=0.1 of Dd0] {\textcolor{red}{Dd}0};% + \begin{scope} + [local bounding box=Yy0, shift={(11,0)}] + \pic at (0,0) {left y};% + \pic at (5,0) {right y};% + \end{scope} + \node[left=0.1 of Yy0] {\textcolor{RoseauBlue}{Yy}0};% + \begin{scope} + [local bounding box=Dz0, shift={(22,0)}] + \pic at (0,0) {left d};% + \pic at (5,0) {right z0};% + \end{scope} + \node[left=0.1 of Dz0] {\textcolor{red}{D}\textcolor{RoseauGreen}{z}0};% + + % Phase displacement = 6 + \begin{scope} + [local bounding box=Dd6, shift={(0,-5)}] + \pic at (0,0) {left d};% + \pic at (5,0) {right d6};% + \end{scope} + \node[left=0.1 of Dd6] {\textcolor{red}{Dd}6};% + \begin{scope} + [local bounding box=Yy6, shift={(11,-5)}] + \pic at (0,0) {left y};% + \pic at (5,0) {right y reverse};% + \end{scope} + \node[left=0.1 of Yy6] {\textcolor{RoseauBlue}{Yy}6};% + \begin{scope} + [local bounding box=Dz6, shift={(22,-5)}] + \pic at (0,0) {left d};% + \pic at (5,0) {right z6};% + \end{scope} + \node[left=0.1 of Dz6] {\textcolor{red}{D}\textcolor{RoseauGreen}{z}6};% + + % Phase displacement = 11 + \begin{scope} + [local bounding box=Dy11, shift={(0,-10)}] + \pic at (0,0) {left d};% + \pic at (5,0) {right y};% + \end{scope} + \node[left=0.1 of Dy11] {\textcolor{red}{D}\textcolor{RoseauBlue}{y}11};% + \begin{scope} + [local bounding box=Yd11, shift={(11,-10)}] + \pic at (0,0) {left y};% + \pic at (5,0) {right d11};% + \end{scope} + \node[left=0.1 of Yd11] {\textcolor{RoseauBlue}{Y}\textcolor{red}{d}11};% + \begin{scope} + [local bounding box=Yz11, shift={(22,-10)}] + \pic at (0,0) {left y};% + \pic at (5,0) {right z11};% + \end{scope} + \node[left=0.1 of Yz11] {\textcolor{RoseauBlue}{Y}\textcolor{RoseauGreen}{z}11};% + + % Phase displacement = 5 + \begin{scope} + [local bounding box=Dy5, shift={(0,-15)}] + \pic at (0,0) {left d};% + \pic at (5,0) {right y reverse};% + \end{scope} + \node[left=0.1 of Dy5] {\textcolor{red}{D}\textcolor{RoseauBlue}{y}5};% + \begin{scope} + [local bounding box=Yd5, shift={(11,-15)}] + \pic at (0,0) {left y};% + \pic at (5,0) {right d5};% + \end{scope} + \node[left=0.1 of Yd5] {\textcolor{RoseauBlue}{Y}\textcolor{red}{d}5};% + \begin{scope} + [local bounding box=Yz5, shift={(22,-15)}] + \pic at (0,0) {left y};% + \pic at (5,0) {right z5};% + \end{scope} + \node[left=0.1 of Yz5] {\textcolor{RoseauBlue}{Y}\textcolor{RoseauGreen}{z}5};% + \end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 100 +% End: diff --git a/doc/images/Transformer/Windings_Common.tikz b/doc/images/Transformer/Windings_Common.tikz new file mode 100644 index 00000000..451d9564 --- /dev/null +++ b/doc/images/Transformer/Windings_Common.tikz @@ -0,0 +1,303 @@ +% +% Definitions of windings +% +\pgfmathsetmacro{\yzero}{0}% +\pgfmathsetmacro{\yone}{-0.5}% +\pgfmathsetmacro{\ytwo}{-1}% +\pgfmathsetmacro{\ythree}{-1.5}% +\pgfmathsetmacro{\yfour}{-2}% +\pgfmathsetmacro{\yfive}{-2.5}% +\pgfmathsetmacro{\ysix}{-3}% +\pgfmathsetmacro{\yseven}{-3.5}% +\pgfmathsetmacro{\yeight}{-4}% + + +\pgfmathsetmacro{\xstep}{0.5}% +\pgfmathsetmacro{\xzero}{0}% +\pgfmathsetmacro{\xone}{0.25}% +\pgfmathsetmacro{\xtwo}{1.8}% +\pgfmathsetmacro{\xthree}{2}% +\pgfmathsetmacro{\xfour}{2.2}% +\pgfmathsetmacro{\xfive}{3.75}% +\pgfmathsetmacro{\xsix}{4}% + +\ctikzset{european, straight voltages, bipoles/length=1.2cm, cute inductors}% + +\tikzset{ + left d/.pic={ + \draw[red,text=black] (\xzero, \yzero) to[short, -] (\xsix, \yzero)% + to[short, -] (\xsix, \yone) node[right] {A}% + to[short, -] (\xfive, \yone)% + to[L, mirror, name=X] (\xstep, \yone)% + to[short] (\xsix, \yfour) node[right] {B} % + to[short, -] (\xfive, \yfour)% + to[L, mirror, name=Y] (\xstep, \yfour) % + to[short] (\xsix, \yseven) node[right] {C} % + to[short, -] (\xfive, \yseven)% + to[L, mirror, name=Z] (\xstep, \yseven) % + to[short,-] (\xzero, \yseven) to[short,-] (\xzero, \yzero);% + \path[fill=red,draw=red] (X.ul dot) node[circ]{}% + (Y.ul dot) node[circ]{}% + (Z.ul dot) node[circ]{};% + }, + right d/.pic={ + \draw[red,text=black] (\xzero,0) to[short, -] (\xsix, \yzero)% + to[short, -] (\xsix, \yseven)% + to[short, -] (\xfive, \yseven)% + to[L, mirror, name=z] (\xstep, \yseven)% + to[short, -] (\xzero, \yseven) % + to[short] (\xzero, \yseven) node[left] {c} % + to[short, -] (\xfive, \yfour) % + to[L, mirror, name=y] (\xstep, \yfour)% + to[short, -] (\xzero, \yfour) node[left] {b} % + to[short, -] (\xfive, \yone)% + to[L, mirror, name=x] (\xstep, \yone) % + to[short, -] (\xzero, \yone) node[left] {a} % + to[short, -] (\xzero, \yzero);% + \path[fill=red,draw=red] (x.ur dot) node[circ]{}% + (y.ur dot) node[circ]{}% + (z.ur dot) node[circ]{};% + }, + right d6/.pic={ + \draw[red, text=black] (\xzero, \yone) node [left] {a}% + to[short, -] (\xzero, \yzero)% + to[short, -] (\xfive, \yzero) % + to[short, -] (\xfive, \yone)% + to[L, mirror, name=x] (\xstep, \yone)% + to[short, -] (\xfive, \ythree)% + to[short, -] (\xzero, \ythree)% + to[short, -] (\xzero, \yfour) node[left] {b};% + \draw[red, text=black] (\xfive, \ythree)% + to[short, -] (\xfive, \yfour)% + to[L, mirror, name=y] (\xstep, \yfour)% + to[short, -] (\xfive, \ysix)% + to[short, -] (\xzero, \ysix)% + to[short, -] (\xzero, \yseven) node[left] {c};% + \draw[red, text=black] (\xfive, \ysix)% + to[short, -] (\xfive, \yseven)% + to[L, mirror, name=z] (\xstep, \yseven)% + to[short, -] (\xstep, \yeight)% + to[short, -] (\xsix, \yeight)% + to[short, -] (\xsix, \yone) + to[short, -] (\xfive, \yone);% + \path[fill=red,draw=red] (x.ur dot) node[circ]{}% + (y.ur dot) node[circ]{}% + (z.ur dot) node[circ]{};% + }, + right d11/.pic={ + \draw[red, text=black] (\xzero, \yone) node [left] {a}% + to[L, name=x] (\xfive, \yone)% + to[short, -] (\xsix, \yone)% + to[short, -] (\xsix, \yeight)% + to[short, -] (\xzero, \yeight)% + to[short, -] (\xzero, \yseven) node[left] {c}% + to[L, name=z] (\xfive, \yseven)% + to[short, -] (\xzero, \yfour) node[left] {b}% + to[L, name=y] (\xfive, \yfour)% + to[short, -] (\xzero, \yone);% + \path[fill=red,draw=red] (x.ul dot) node[circ]{}% + (y.ul dot) node[circ]{}% + (z.ul dot) node[circ]{};% + }, + right d5/.pic={ + \draw[red, text=black] (\xzero, \yone) node [left] {a}% + to[short, -] (\xzero, \ytwo)% + to[short, -] (\xfive, \ytwo)% + to[short, -] (\xfive, \yone)% + to[L, mirror, name=x] (\xstep, \yone)% + to[short, -] (\xstep, \yzero)% + to[short, -] (\xsix, \yzero)% + to[short, -] (\xsix, \yseven)% + to[short, -] (\xfive, \yseven);% + \draw[red, text=black] (\xzero, \yfour) node [left] {b}% + to[short, -] (\xzero, \yfive)% + to[short, -] (\xfive, \yfive)% + to[short, -] (\xfive, \yfour)% + to[L, mirror, name=y] (\xstep, \yfour)% + to[short, -] (\xfive, \ytwo);% + \draw[red, text=black] (\xzero, \yseven) node [left] {b}% + to[short, -] (\xzero, \yeight)% + to[short, -] (\xfive, \yeight)% + to[short, -] (\xfive, \yseven)% + to[L, mirror, name=z] (\xstep, \yseven)% + to[short, -] (\xfive, \yfive);% + \path[fill=red,draw=red] (x.ur dot) node[circ]{}% + (y.ur dot) node[circ]{}% + (z.ur dot) node[circ]{};% + }, + left y/.pic={ + \draw[RoseauBlue, text=black] (\xzero, \yone) to[short, -] (\xstep, \yone)% + to[L, -, name=X] (\xfive, \yone) node[right] {A}% + (\xzero,\yfour) to[short, -] (\xstep, \yfour)% + to[L, -, name=Y] (\xfive, \yfour) node[right] {B}% + (\xzero,\yseven) to[short, -] (\xstep, \yseven)% + to[L, -, name=Z] (\xfive, \yseven) node[right] {C}% + (\xzero,\yone) to[short, -] (\xzero,\yseven);% + \path[fill=RoseauBlue,draw=RoseauBlue] (X.ur dot) node[circ]{}% + (Y.ur dot) node[circ]{}% + (Z.ur dot) node[circ]{};% + }, + right y/.pic={ + \draw[RoseauBlue,text=black] (\xsix, \yone) to[short, -] (\xfive, \yone)% + to[L, -, mirror, name=x] (\xzero, \yone) node[left] {a}% + (\xsix, \yfour) to[short, -] (\xfive, \yfour)% + to[L, -, mirror, name=y] (\xzero,\yfour) node[left] {b}% + (\xsix, \yseven) to[short, -] (\xfive, \yseven)% + to[L, -, mirror, name=z] (\xzero,\yseven) node[left] {c} + (\xsix,\yone) to[short, -] (\xsix,\yseven);% + \path[fill=RoseauBlue,draw=RoseauBlue] (x.ur dot) node[circ]{}% + (y.ur dot) node[circ]{}% + (z.ur dot) node[circ]{};% + }, + right y reverse/.pic={ + \draw[RoseauBlue, text=black] (\xzero, \yone) node[left] {a} % + to[short, -] (\xzero, \ytwo)% + to[short, -] (\xsix, \ytwo)% + to[short, -] (\xsix, \yone)% + to[short, -] (\xfive, \yone)% + to[L, -, mirror, name=x] (\xstep,\yone);% + \draw[RoseauBlue, text=black] (\xzero, \yfour) node[left] {b} % + to[short, -] (\xzero, \yfive)% + to[short, -] (\xsix, \yfive)% + to[short, -] (\xsix, \yfour)% + to[short, -] (\xfive, \yfour)% + to[L, -, mirror, name=y] (\xstep,\yfour);% + \draw[RoseauBlue, text=black] (\xzero, \yseven) node[left] {c} % + to[short, -] (\xzero, \yeight)% + to[short, -] (\xsix, \yeight)% + to[short, -] (\xsix, \yseven)% + to[short, -] (\xfive, \yseven)% + to[L, -, mirror, name=z] (\xstep,\yseven);% + \draw[RoseauBlue] (\xstep, \yone) to[crossing] (\xstep, \ythree)% + to[short, -] (\xstep, \yfour)% + to[crossing] (\xstep, \ysix)% + to[short, -] (\xstep, \yseven);% + \path[fill=RoseauBlue,draw=RoseauBlue] (x.ur dot) node[circ]{}% + (y.ur dot) node[circ]{}% + (z.ur dot) node[circ]{};% + }, + right z0/.pic={ + \draw[RoseauGreen, text=black] (\xzero, \yone) node[left] {a} % + to[L, name=x1] (\xtwo, \yone)% + to[short, -] (\xtwo,0)% + to[short, -] (\xsix,0)% + to[short, -] (\xsix,\yseven)% + to[short, -] (\xfive,\yseven)% + to[L, mirror, name=z2] (\xfour, \yseven);% + \draw[RoseauGreen, text=black] (\xzero, \yfour) node[left] {b} % + to[L, name=y1] (\xtwo, \yfour)% + to[short, -] (\xfive, \yone)% + to[L, mirror, name=x2] (\xfour, \yone);% + \draw[RoseauGreen, text=black] (\xzero, \yseven) node[left] {b} % + to[L, name=z1] (\xtwo, \yseven)% + to[short, -] (\xfive, \yfour)% + to[L, mirror, name=y2] (\xfour, \yfour);% + \draw[RoseauGreen, text=black] (\xfour, \yseven) to[short, -] (\xfour, \yfour) to[short, -] (\xfour, \yone); + \path[fill=RoseauGreen,draw=RoseauGreen] (x1.ul dot) node[circ]{}% + (x2.ur dot) node[circ]{}% + (y1.ul dot) node[circ]{}% + (y2.ur dot) node[circ]{}% + (z1.ul dot) node[circ]{}% + (z2.ur dot) node[circ]{};% + }, + right z6/.pic={ + \draw[RoseauGreen, text=black] (\xzero, \yone) node[left] {a} % + to[short, -] (\xzero,\ytwo)% + to[short, -] (\xfive, \ytwo)% + to[short, -] (\xfive, \yone)% + to[L, mirror, name=x2] (\xfour, \yone)% + to[short, -](\xfour, 0)% + to[short, -] (\xfive, 0)% + to[short, -] (\xsix, 0)% + to[short, -] (\xsix, \yseven-0.25)% + to[short, -] (\xone, \yseven-0.25)% + to[short, -] (\xone, \yseven)% + to[L, name=z1] (\xtwo, \yseven);% + \draw[RoseauGreen, text=black] (\xzero, \yfour) node[left] {b} % + to[short, -] (\xzero,\yfive)% + to[short, -] (\xfive, \yfive)% + to[short, -] (\xfive, \yfour)% + to[L, mirror, name=y2] (\xfour, \yfour)% + to[short, -] (\xone, \yone)% + to[L, name=x1] (\xtwo, \yone);% + \draw[RoseauGreen, text=black] (\xzero, \yseven) node[left] {c} % + to[short, -] (\xzero,\yeight)% + to[short, -] (\xfive, \yeight)% + to[crossing] (\xfive, \yseven)% + to[L, mirror, name=z2] (\xfour, \yseven)% + to[short, -] (\xone, \yfour)% + to[L, name=y1] (\xtwo, \yfour);% + \draw[RoseauGreen] (\xtwo, \yone) to[crossing] (\xtwo, \ythree)% + to[short, -] (\xtwo, \yfour)% + to[crossing] (\xtwo, \ysix) + to[short, -] (\xtwo, \yseven);% + \path[fill=RoseauGreen,draw=RoseauGreen] (x1.ul dot) node[circ]{}% + (x2.ur dot) node[circ]{}% + (y1.ul dot) node[circ]{}% + (y2.ur dot) node[circ]{}% + (z1.ul dot) node[circ]{}% + (z2.ur dot) node[circ]{};% + }, + right z11/.pic={ + \draw[RoseauGreen, text=black] (\xzero, \yone) node[left] {a} % + to[L, name=x1] (\xtwo, \yone)% + to[short, -] (\xfive, \yfour)% + to[L, mirror, name=y2] (\xfour, \yfour);% + \draw[RoseauGreen, text=black] (\xzero, \yfour) node[left] {b} % + to[L, name=y1] (\xtwo, \yfour)% + to[short, -] (\xfive, \yseven)% + to[L, mirror, name=z2] (\xfour, \yseven);% + \draw[RoseauGreen, text=black] (\xzero, \yseven) node[left] {c} % + to[L, name=z1] (\xtwo, \yseven)% + to[short, -] (\xtwo, \yeight)% + to[short, -] (\xsix, \yeight)% + to[short, -] (\xsix, \yone)% + to[L, mirror, name=x2] (\xfour, \yone);% + \draw[RoseauGreen] (\xfour, \yone) to[short] (\xfour, \yfour) to[short] (\xfour, \yseven);% + \path[fill=RoseauGreen,draw=RoseauGreen] (x1.ul dot) node[circ]{}% + (x2.ur dot) node[circ]{}% + (y1.ul dot) node[circ]{}% + (y2.ur dot) node[circ]{}% + (z1.ul dot) node[circ]{}% + (z2.ur dot) node[circ]{};% + }, + right z5/.pic={ + \draw[RoseauGreen, text=black] (\xzero, \yone) node[left] {a} % + to[short, -] (\xzero, \ytwo)% + to[short, -] (\xfive, \ytwo)% + to[short, -] (\xfive, \yone)% + to[L, mirror, name=x2] (\xfour, \yone)% + to[short, -] (\xone, \yfour+0.25)% + to[short, -] (\xone, \yfour)% + to[L, name=y1] (\xtwo, \yfour);% + \draw[RoseauGreen, text=black] (\xzero, \yfour) node[left] {b} % + to[short, -] (\xzero, \yfive)% + to[short, -] (\xfive, \yfive)% + to[short, -] (\xfive, \yfour)% + to[L, mirror, name=y2] (\xfour, \yfour)% + to[short, -] (\xone, \yseven+0.25)% + to[short, -] (\xone, \yseven)% + to[L, name=z1] (\xtwo, \yseven);% + \draw[RoseauGreen, text=black] (\xzero, \yseven) node[left] {c} % + to[short, -] (\xzero, \yseven-0.25)% + to[short, -] (\xfive, \yseven-0.25)% + to[short, -] (\xfive, \yseven)% + to[L, mirror, name=z2] (\xfour, \yseven)% + to[crossing] (\xfour, \yeight)% + to[short, -] (\xsix, \yeight)% + to[short, -] (\xsix, 0)% + to[short, -] (\xone, 0) + to[short, -] (\xone, \yone)% + to[L, name=x1] (\xtwo, \yone);% + \draw[RoseauGreen] (\xtwo, \yone) to[crossing] (\xtwo, \ythree)% + to[short, -] (\xtwo, \yfour)% + to[crossing] (\xtwo, \ysix)% + to[short, -] (\xtwo, \yseven);% + \path[fill=RoseauGreen,draw=RoseauGreen] (x1.ul dot) node[circ]{}% + (x2.ur dot) node[circ]{}% + (y1.ul dot) node[circ]{}% + (y2.ur dot) node[circ]{}% + (z1.ul dot) node[circ]{}% + (z2.ur dot) node[circ]{};% + } +} diff --git a/doc/images/Transformer/Windings_Dd0.tex b/doc/images/Transformer/Windings_Dd0.tex new file mode 100644 index 00000000..71e2605f --- /dev/null +++ b/doc/images/Transformer/Windings_Dd0.tex @@ -0,0 +1,17 @@ +\input{Preambule}% + +\begin{document} + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \input{Transformer/Windings_Common.tikz}% + + \begin{scope}[local bounding box=Dd0] + \pic at (0,0) {left d};% + \pic at (5,0) {right d};% + \end{scope} + \node[left=0.1 of Dd0] {\textcolor{red}{Dd}0};% + \end{tikzpicture} +\end{document} diff --git a/doc/images/Transformer/Windings_Dd6.tex b/doc/images/Transformer/Windings_Dd6.tex new file mode 100644 index 00000000..a2fae0b1 --- /dev/null +++ b/doc/images/Transformer/Windings_Dd6.tex @@ -0,0 +1,17 @@ +\input{Preambule}% + +\begin{document} + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \input{Transformer/Windings_Common.tikz}% + + \begin{scope}[local bounding box=Dd6] + \pic at (0,0) {left d};% + \pic at (5,0) {right d6};% + \end{scope} + \node[left=0.1 of Dd6] {\textcolor{red}{Dd}6};% + \end{tikzpicture} +\end{document} diff --git a/doc/images/Transformer/Windings_Dy11.tex b/doc/images/Transformer/Windings_Dy11.tex new file mode 100644 index 00000000..19d56644 --- /dev/null +++ b/doc/images/Transformer/Windings_Dy11.tex @@ -0,0 +1,17 @@ +\input{Preambule}% + +\begin{document} + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \input{Transformer/Windings_Common.tikz}% + + \begin{scope}[local bounding box=Dy11] + \pic at (0,0) {left d};% + \pic at (5,0) {right y};% + \end{scope} + \node[left=0.1 of Dy11] {\textcolor{red}{D}\textcolor{RoseauBlue}{y}11};% + \end{tikzpicture} +\end{document} diff --git a/doc/images/Transformer/Windings_Dy5.tex b/doc/images/Transformer/Windings_Dy5.tex new file mode 100644 index 00000000..7a81c91d --- /dev/null +++ b/doc/images/Transformer/Windings_Dy5.tex @@ -0,0 +1,17 @@ +\input{Preambule}% + +\begin{document} + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \input{Transformer/Windings_Common.tikz}% + + \begin{scope}[local bounding box=Dy5] + \pic at (0,0) {left d};% + \pic at (5,0) {right y reverse};% + \end{scope} + \node[left=0.1 of Dy5] {\textcolor{red}{D}\textcolor{RoseauBlue}{y}5};% + \end{tikzpicture} +\end{document} diff --git a/doc/images/Transformer/Windings_Dz0.tex b/doc/images/Transformer/Windings_Dz0.tex new file mode 100644 index 00000000..630b867c --- /dev/null +++ b/doc/images/Transformer/Windings_Dz0.tex @@ -0,0 +1,17 @@ +\input{Preambule}% + +\begin{document} + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \input{Transformer/Windings_Common.tikz}% + + \begin{scope}[local bounding box=Dz0] + \pic at (0,0) {left d};% + \pic at (5,0) {right z0};% + \end{scope} + \node[left=0.1 of Dz0] {\textcolor{red}{D}\textcolor{RoseauGreen}{z}0};% + \end{tikzpicture} +\end{document} diff --git a/doc/images/Transformer/Windings_Dz6.tex b/doc/images/Transformer/Windings_Dz6.tex new file mode 100644 index 00000000..254eda80 --- /dev/null +++ b/doc/images/Transformer/Windings_Dz6.tex @@ -0,0 +1,17 @@ +\input{Preambule}% + +\begin{document} + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \input{Transformer/Windings_Common.tikz}% + + \begin{scope}[local bounding box=Dz6] + \pic at (0,0) {left d};% + \pic at (5,0) {right z6};% + \end{scope} + \node[left=0.1 of Dz6] {\textcolor{red}{D}\textcolor{RoseauGreen}{z}6};% + \end{tikzpicture} +\end{document} diff --git a/doc/images/Transformer/Windings_Yd11.tex b/doc/images/Transformer/Windings_Yd11.tex new file mode 100644 index 00000000..e544c8ad --- /dev/null +++ b/doc/images/Transformer/Windings_Yd11.tex @@ -0,0 +1,17 @@ +\input{Preambule}% + +\begin{document} + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \input{Transformer/Windings_Common.tikz}% + + \begin{scope}[local bounding box=Yd11] + \pic at (0,0) {left y};% + \pic at (5,0) {right d11};% + \end{scope} + \node[left=0.1 of Yd11] {\textcolor{RoseauBlue}{Y}\textcolor{red}{d}11};% + \end{tikzpicture} +\end{document} diff --git a/doc/images/Transformer/Windings_Yd5.tex b/doc/images/Transformer/Windings_Yd5.tex new file mode 100644 index 00000000..52aa9472 --- /dev/null +++ b/doc/images/Transformer/Windings_Yd5.tex @@ -0,0 +1,17 @@ +\input{Preambule}% + +\begin{document} + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \input{Transformer/Windings_Common.tikz}% + + \begin{scope}[local bounding box=Yd5] + \pic at (0,0) {left y};% + \pic at (5,0) {right d5};% + \end{scope} + \node[left=0.1 of Yd5] {\textcolor{RoseauBlue}{Y}\textcolor{red}{d}5};% + \end{tikzpicture} +\end{document} diff --git a/doc/images/Transformer/Windings_Yy0.tex b/doc/images/Transformer/Windings_Yy0.tex new file mode 100644 index 00000000..c4312c0a --- /dev/null +++ b/doc/images/Transformer/Windings_Yy0.tex @@ -0,0 +1,17 @@ +\input{Preambule}% + +\begin{document} + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \input{Transformer/Windings_Common.tikz}% + + \begin{scope}[local bounding box=Yy0] + \pic at (0,0) {left y};% + \pic at (5,0) {right y};% + \end{scope} + \node[left=0.1 of Yy0] {\textcolor{RoseauBlue}{Yy}0};% + \end{tikzpicture} +\end{document} diff --git a/doc/images/Transformer/Windings_Yy6.tex b/doc/images/Transformer/Windings_Yy6.tex new file mode 100644 index 00000000..80df1dbb --- /dev/null +++ b/doc/images/Transformer/Windings_Yy6.tex @@ -0,0 +1,17 @@ +\input{Preambule}% + +\begin{document} + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \input{Transformer/Windings_Common.tikz}% + + \begin{scope}[local bounding box=Yy6] + \pic at (0,0) {left y};% + \pic at (5,0) {right y reverse};% + \end{scope} + \node[left=0.1 of Yy6] {\textcolor{RoseauBlue}{Yy}6};% + \end{tikzpicture} +\end{document} diff --git a/doc/images/Transformer/Windings_Yz11.tex b/doc/images/Transformer/Windings_Yz11.tex new file mode 100644 index 00000000..ff371ea2 --- /dev/null +++ b/doc/images/Transformer/Windings_Yz11.tex @@ -0,0 +1,17 @@ +\input{Preambule}% + +\begin{document} + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \input{Transformer/Windings_Common.tikz}% + + \begin{scope}[local bounding box=Yz11] + \pic at (0,0) {left y};% + \pic at (5,0) {right z11};% + \end{scope} + \node[left=0.1 of Yz11] {\textcolor{RoseauBlue}{Y}\textcolor{RoseauGreen}{z}11};% + \end{tikzpicture} +\end{document} diff --git a/doc/images/Transformer/Windings_Yz5.tex b/doc/images/Transformer/Windings_Yz5.tex new file mode 100644 index 00000000..f5b456ff --- /dev/null +++ b/doc/images/Transformer/Windings_Yz5.tex @@ -0,0 +1,17 @@ +\input{Preambule}% + +\begin{document} + \begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \input{Transformer/Windings_Common.tikz}% + + \begin{scope}[local bounding box=Yz5] + \pic at (0,0) {left y};% + \pic at (5,0) {right z5};% + \end{scope} + \node[left=0.1 of Yz5] {\textcolor{RoseauBlue}{Y}\textcolor{RoseauGreen}{z}5};% + \end{tikzpicture} +\end{document} diff --git a/doc/images/American_Delta_Load.tex b/doc/images/VoltageSource/American_Delta_Voltage_Source.tex similarity index 77% rename from doc/images/American_Delta_Load.tex rename to doc/images/VoltageSource/American_Delta_Voltage_Source.tex index cdab5cfa..31cf6eb4 100644 --- a/doc/images/American_Delta_Load.tex +++ b/doc/images/VoltageSource/American_Delta_Voltage_Source.tex @@ -26,9 +26,9 @@ \node[above right] at (C) {C};% % Lignes - \draw (A) to[resistor, v<=$\underline{V_{\arm}}-\underline{V_{\brm}}$, i=$\underline{I_{\abrm}}$, *-*] (B) % - to[resistor, v<=$\underline{V_{\brm}}-\underline{V_{\crm}}$, i=$\underline{I_{\bcrm}}$, *-*] (C) % - to[resistor, v<=$\underline{V_{\crm}}-\underline{V_{\arm}}$, i=$\underline{I_{\carm}}$, *-*] (A);% + \draw (A) to[vsourcesin, v_=$\underline{U_{\arm\brm}}$, i^>=$\underline{I_{\abrm}}$, *-*] (B) % + to[vsourcesin, v_=$\underline{U_{\brm\crm}}$, i^>=$\underline{I_{\bcrm}}$, *-*] (C) % + to[vsourcesin, v_=$\underline{U_{\crm\arm}}$, i^>=$\underline{I_{\carm}}$, *-*] (A);% \draw (A2) to[short,i=$\underline{I_{\arm}}$,*-*] (A);% \draw (B) -- (B3);% \draw (B2) to[short,i=$\underline{I_{\brm}}$,*-] (B3);% @@ -42,5 +42,5 @@ % ispell-local-dictionary: "british" % coding: utf-8 % LaTeX-indent-level: 4 -% fill-column: 120 +% fill-column: 100 % End: diff --git a/doc/images/VoltageSource/American_Star_Voltage_Source.tex b/doc/images/VoltageSource/American_Star_Voltage_Source.tex new file mode 100644 index 00000000..fca10b41 --- /dev/null +++ b/doc/images/VoltageSource/American_Star_Voltage_Source.tex @@ -0,0 +1,55 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{american}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \def\Radius{3}% + + \ctikzset{bipoles/open/voltage/distance from node/.initial=0.1} + % \ctikzset{bipoles/generic/voltage/european label distance=0.8} + + % Coordinates + \coordinate (A) at (90:\Radius);% + \coordinate (B) at (210:\Radius);% + \coordinate (C) at (330:\Radius);% + \coordinate (N) at (0,0);% + \coordinate (A2) at ($(\Radius,\Radius)+(1,0)$);% + \coordinate (C2) at (A2 |- B); %x of A2 and y of B + \coordinate (B2) at ($(C2)-(0,1)$);% + \coordinate (B3) at ($(B)-(0,1)$);% + \coordinate (N2) at (A2 |- N);% + + % Nodes + \node[above] at (A) {A};% + \node[left] at (B) {B};% + \node[below] at (C) {C};% + \node[above left] at (N) {N};% + + % Lines + \draw (A) to[vsourcesin, v>=$\underline{U_{\anrm}}$, -*] (N);% + \draw (B) to[vsourcesin, v>=$\underline{U_{\bnrm}}$, -*] (N);% + \draw (C) to[vsourcesin, v>=$\underline{U_{\cnrm}}$, -*] (N);% + \draw (A2) to[short,i=$\underline{I_{\arm}}$,*-*] (A);% + \draw (B2) to[short,i=$\underline{I_{\brm}}$,*-] (B3);% + \draw (C2) to[short,i=$\underline{I_{\crm}}$,*-*] (C);% + \draw (B3) -- (B); \draw (N2) to[short, i=$\underline{I_{\nrm}}$, *-] (N);% + + % Line-to-line voltage + % \draw (A) to[open, v=$V_{m,\abrm}$] (B) + % to[open, v=$V_{\bcrm}$] (C) + % to[open, v=$V_{\carm}$] (A); +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 120 +% End: diff --git a/doc/images/European_Delta_Load.tex b/doc/images/VoltageSource/European_Delta_Voltage_Source.tex similarity index 75% rename from doc/images/European_Delta_Load.tex rename to doc/images/VoltageSource/European_Delta_Voltage_Source.tex index 2affcde5..7cde4c4a 100644 --- a/doc/images/European_Delta_Load.tex +++ b/doc/images/VoltageSource/European_Delta_Voltage_Source.tex @@ -1,7 +1,7 @@ \input{Preambule}% \begin{document} -\ctikzset{european,straight voltages}% +\ctikzset{european, straight voltages, cute inductors}% \begin{tikzpicture}[% show background rectangle,% tight background,% @@ -26,9 +26,9 @@ \node[above right] at (C) {C};% % Lignes - \draw (A) to[resistor, v<=$\underline{V_{\arm}}-\underline{V_{\brm}}$, i=$\underline{I_{\abrm}}$, *-*] (B) % - to[resistor, v<=$\underline{V_{\brm}}-\underline{V_{\crm}}$, i=$\underline{I_{\bcrm}}$, *-*] (C) % - to[resistor, v<=$\underline{V_{\crm}}-\underline{V_{\arm}}$, i=$\underline{I_{\carm}}$, *-*] (A);% + \draw (A) to[vsourcesin, v_<=$\underline{U_{\arm\brm}}$, i=$\underline{I_{\abrm}}$, *-*] (B) % + to[vsourcesin, v_<=$\underline{U_{\brm\crm}}$, i=$\underline{I_{\bcrm}}$, *-*] (C) % + to[vsourcesin, v_<=$\underline{U_{\crm\arm}}$, i=$\underline{I_{\carm}}$, *-*] (A);% \draw (A2) to[short,i=$\underline{I_{\arm}}$,*-*] (A);% \draw (B) -- (B3);% \draw (B2) to[short,i=$\underline{I_{\brm}}$,*-] (B3);% diff --git a/doc/images/VoltageSource/European_Star_Voltage_Source.tex b/doc/images/VoltageSource/European_Star_Voltage_Source.tex new file mode 100644 index 00000000..9a60f662 --- /dev/null +++ b/doc/images/VoltageSource/European_Star_Voltage_Source.tex @@ -0,0 +1,55 @@ +\input{Preambule}% + +\begin{document} +\ctikzset{european, straight voltages, cute inductors}% +\begin{tikzpicture}[% + show background rectangle,% + tight background,% + background rectangle/.style={fill=white}% + ] + \def\Radius{3}% + + \ctikzset{bipoles/open/voltage/distance from node/.initial=0.1} + % \ctikzset{bipoles/generic/voltage/european label distance=0.8} + + % Coordinates + \coordinate (A) at (90:\Radius);% + \coordinate (B) at (210:\Radius);% + \coordinate (C) at (330:\Radius);% + \coordinate (N) at (0,0);% + \coordinate (A2) at ($(\Radius,\Radius)+(1,0)$);% + \coordinate (C2) at (A2 |- B); %x of A2 and y of B + \coordinate (B2) at ($(C2)-(0,1)$);% + \coordinate (B3) at ($(B)-(0,1)$);% + \coordinate (N2) at (A2 |- N);% + + % Nodes + \node[above] at (A) {A};% + \node[left] at (B) {B};% + \node[below] at (C) {C};% + \node[above left] at (N) {N};% + + % Lines + \draw (A) to[vsourcesin, v<=$\underline{U_{\anrm}}$, -*] (N);% + \draw (B) to[vsourcesin, v<=$\underline{U_{\bnrm}}$, -*] (N);% + \draw (C) to[vsourcesin, v<=$\underline{U_{\cnrm}}$, -*] (N);% + \draw (A2) to[short,i=$\underline{I_{\arm}}$,*-*] (A);% + \draw (B2) to[short,i=$\underline{I_{\brm}}$,*-] (B3);% + \draw (C2) to[short,i=$\underline{I_{\crm}}$,*-*] (C);% + \draw (B3) -- (B); \draw (N2) to[short, i=$\underline{I_{\nrm}}$, *-] (N);% + + % Line-to-line voltage + % \draw (A) to[open, v=$V_{m,\abrm}$] (B) + % to[open, v=$V_{\bcrm}$] (C) + % to[open, v=$V_{\carm}$] (A); +\end{tikzpicture} +\end{document} +% Local Variables: +% mode: latex +% TeX-engine: luatex +% TeX-source-correlate-method-active: synctex +% ispell-local-dictionary: "british" +% coding: utf-8 +% LaTeX-indent-level: 4 +% fill-column: 120 +% End: diff --git a/doc/index.md b/doc/index.md index 930b0daf..d15875d2 100644 --- a/doc/index.md +++ b/doc/index.md @@ -1,6 +1,6 @@ # Roseau Load Flow -`Roseau Load Flow` is a load flow solver capable of modeling 3-phases unbalanced power systems with +`Roseau Load Flow` is a load flow solver capable of modeling 3-phase unbalanced power systems with a wide variety of models for lines, transformers, loads, and sources. This software is developed by [Roseau Technologies](https://www.roseautechnologies.com/en). @@ -8,11 +8,12 @@ by [Roseau Technologies](https://www.roseautechnologies.com/en). ## Installation -`roseau_load_flow` is compatible with Python 3.9 and above. It can be installed with: +`roseau-load-flow` is the python interface to the solver. It is compatible with Python version 3.9 +and newer and can be installed with: ```{toctree} --- -maxdepth: 3 +maxdepth: 2 caption: Installation --- Installation @@ -25,11 +26,21 @@ The following tutorials are available to help you get started: ```{toctree} --- maxdepth: 2 -caption: Tutorials +caption: Usage +--- +notebooks/index +``` + +## Models + +A description of the electrical models used for each component is available: + +```{toctree} +--- +maxdepth: 2 +caption: Models --- -notebooks/Getting_Started -notebooks/Advanced -notebooks/Short_Circuit +models/index ``` ## Solvers @@ -48,14 +59,14 @@ Solvers ```{toctree} --- -maxdepth: 3 +maxdepth: 2 caption: Changelog --- Changelog ``` -## API +## API Reference If you want the full documentation of all the classes and functions, you can refer to the following references: @@ -63,7 +74,7 @@ references: ```{toctree} --- maxdepth: 3 -caption: API +caption: API Reference --- autoapi/roseau/load_flow/index ``` diff --git a/doc/models/Bus.md b/doc/models/Bus.md new file mode 100644 index 00000000..2982ae82 --- /dev/null +++ b/doc/models/Bus.md @@ -0,0 +1,103 @@ +# Bus + +## Definition + +It represents a multi-phase node in the network that other elements (loads, lines, transformers, +voltage sources...) can connect to. A bus is a placeholder point where we want the voltage to be +computed during the load flow. + +```{image} /_static/Bus.svg +:alt: Bus diagram +:width: 100px +:align: center +``` + +No equation is added for a bus. + +## Usage + +A bus is identified by its unique id and must define the phases it is connected to. A bus must +have all the phases of the elements connected to it. + +```python +from roseau.load_flow import Bus, PowerLoad + +bus1 = Bus(id="bus1", phases="abcn") # A three-phase bus with a neutral +bus2 = Bus(id="bus2", phases="abc") # A three-phase bus without a neutral +bus3 = Bus(id="bus3", phases="an") # A single-phase bus + +PowerLoad(id="load1", bus=bus1, powers=[100, 0, 50j], phases="abcn") # OK +PowerLoad(id="load2", bus=bus1, powers=[100, 0, 50j], phases="abc") # OK +PowerLoad(id="load3", bus=bus2, powers=[100], phases="ab") # OK +PowerLoad( + id="load4", bus=bus3, powers=[100], phases="ab" +) # Error: bus3 does not have phase "b" +``` + +Since a bus represents a point in the network, it is possible to define the coordinates of this +point: + +```python +from shapely import Point +from roseau.load_flow import Bus + +bus = Bus(id="bus", phases="abc", geometry=Point(1.0, -2.5)) +``` + +This information is not used by the load flow solver but could be used to generate geographical +plots of the results. + +## Short-circuit + +The bus element can also be used to create a short-circuit in the network to perform +[short circuit analysis](../notebooks/Short_Circuit.ipynb). + +Here is an example of a simple short-circuit between two phases: + +```python +import functools as ft +import numpy as np +from roseau.load_flow import ( + Bus, + ElectricalNetwork, + Line, + LineParameters, + PotentialRef, + Q_, + VoltageSource, +) + +# Two buses +bus1 = Bus(id="bus1", phases="abcn") +bus2 = Bus(id="bus2", phases="abcn") + +# A line +lp = LineParameters(id="lp", z_line=Q_((0.3 + 0.35j) * np.eye(4), "ohm/km")) +line = Line(id="line", bus1=bus1, bus2=bus2, parameters=lp, length=Q_(1, "km")) + +# A voltage source on the first bus +un = 400 / np.sqrt(3) +voltages = Q_(un * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]), "V") +vs = VoltageSource(id="source", bus=bus1, voltages=voltages) + +# The neutral of the voltage source is fixed at potential 0 +pref = PotentialRef(id="pref", element=bus1, phase="n") + +# Create a short circuit on bus2 between phases "a" and "b" +bus2.short_circuit("a", "b") + +# Create a network and solve a load flow +en = ElectricalNetwork.from_element(bus1) +auth = ("username", "password") +en.solve_load_flow(auth=auth) + +# Get the currents flowing to the line from bus1 +# Notice the extremely high currents in phases "a" and "b" +en.res_branches[["current1"]].transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('current1', 'absolute') | ('current1', 'angle') | +# |:--------------|---------------------------:|------------------------:| +# | ('line', 'a') | 433.861 | -19.3987 | +# | ('line', 'b') | 433.861 | 160.601 | +# | ('line', 'c') | 0 | 0 | +# | ('line', 'n') | 0 | 0 | +``` diff --git a/doc/models/Ground.md b/doc/models/Ground.md new file mode 100644 index 00000000..1638e2ad --- /dev/null +++ b/doc/models/Ground.md @@ -0,0 +1,148 @@ +# Ground + +## Definition + +The ground element represents an earth connection where the earth is represented as an ideal +conductor. A ground can be used to connect several elements. A ground is mandatory in a line +model with shunt elements. The symbol of a ground element is: + +```{image} /_static/Ground.svg +:alt: A diagram of a ground element +:width: 100px +:align: center +``` + +This element adds the equation $\underline{I_{\mathrm{g}}} = 0$, where $\underline{I_{\mathrm{g}}}$ +is the sum of the currents of all elements connected to the ground. + +```{warning} +In electrical engineering, it is common to also add the equation $\underline{V_{\mathrm{g}}}=0$ when +defining a ground element. If you want to do so, you must add a `PotentialRef` element as defined in +[](PotentialRef.md). +``` + +## Usage + +In *Roseau Load Flow*, several grounds can be defined leading to ground elements with a non-zero +potential. Here is an example with two ground elements `g1` and `g2`. + +After solving this load flow, the following assertions will be verified: +* The potential of the ground `g1` will be 0V as defined by the potential reference `pref`. +* There is no reason for the potential of `g2` to be zero too. +* The sum of currents flowing through the shunt admittances of the second line will be zero as they + are all connected to the ground `g2` and no other elements are connected to this ground. +* The sum of currents flowing through the shunt admittances of the first line will be equal to the + sum of the currents of the elements connected to phase "a" of the first bus. + + +```python +import functools as ft +import numpy as np +from roseau.load_flow import ( + Q_, + Bus, + ElectricalNetwork, + Ground, + Line, + LineParameters, + PotentialRef, + PowerLoad, + VoltageSource, +) + +# Define two grounds elements +g1 = Ground(id="g1") +g2 = Ground(id="g2") + +# Define three buses +bus1 = Bus(id="bus1", phases="abc") +bus2 = Bus(id="bus2", phases="abc") +bus3 = Bus(id="bus3", phases="abc") + +# Define a voltage source on the first bus +un = 400 +voltages = Q_(un * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]), "V") +vs = VoltageSource(id="source", bus=bus1, voltages=voltages) + +# Define the impedance and admittance parameters of the lines (can be reused) +parameters = LineParameters( + id="parameters", + z_line=Q_((0.12 + 0.1j) * np.eye(3), "ohm/km"), + y_shunt=Q_(2e-4j * np.eye(3), "S/km"), +) + +# Define a line between bus1 and bus2 (using g1 for the shunt connections) +line1 = Line( + id="line1", + bus1=bus1, + bus2=bus2, + parameters=parameters, + length=Q_(2, "km"), + ground=g1, +) + +# Define a line between bus2 and bus3 (using g2 for the shunt connections) +line2 = Line( + id="line2", + bus1=bus2, + bus2=bus3, + parameters=parameters, + length=Q_(2.5, "km"), + ground=g2, +) + +# Add a load on bus3 +load = PowerLoad( + id="load", + bus=bus3, + powers=Q_(np.array([5.0, 2.5, 0]) * (1 - 0.3j), "kVA"), +) + +# Set the phase "a" of the first bus to the ground g1 +g1.connect(bus=bus1, phase="a") + +# Set the potential of the ground element g1 to 0V +pref = PotentialRef(id="pref", element=g1) + +# Create a network and solve a load flow +en = ElectricalNetwork.from_element(bus1) +auth = ("username", "password") +en.solve_load_flow(auth=auth) + +# Get the ground potentials +# The potential of g1 is 0 as defined by the potential reference element +# The potential of g2 has no reason to be zero +en.res_grounds.transform([np.abs, ft.partial(np.angle, deg=True)]) +# | ground_id | ('potential', 'absolute') | ('potential', 'angle') | +# |:------------|----------------------------:|-------------------------:| +# | g1 | 0 | 0 | +# | g2 | 230.949 | 149.997 | + +# As requested, the potential of the phase "a" of bus1 is zero +en.res_buses.transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('potential', 'absolute') | ('potential', 'angle') | +# |:--------------|----------------------------:|-------------------------:| +# | ('bus1', 'a') | 0 | 0 | +# | ('bus1', 'b') | 400 | -180 | +# | ('bus1', 'c') | 400 | 120 | +# | ('bus2', 'a') | 4.19152 | -126.007 | +# | ('bus2', 'b') | 398.525 | 179.238 | +# | ('bus2', 'c') | 397.913 | 120.016 | +# | ('bus3', 'a') | 9.41474 | -126.102 | +# | ('bus3', 'b') | 396.739 | 178.283 | +# | ('bus3', 'c') | 395.28 | 120.043 | + +# The requested voltages of the voltage sources are respected +en.res_buses_voltages.transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('voltage', 'absolute') | ('voltage', 'angle') | +# |:---------------|--------------------------:|-----------------------:| +# | ('bus1', 'ab') | 400 | 6.31922e-19 | +# | ('bus1', 'bc') | 400 | -120 | +# | ('bus1', 'ca') | 400 | 120 | +# | ('bus2', 'ab') | 396.121 | -1.25675 | +# | ('bus2', 'bc') | 393.528 | -120.45 | +# | ('bus2', 'ca') | 399.634 | 119.467 | +# | ('bus3', 'ab') | 391.499 | -2.85404 | +# | ('bus3', 'bc') | 385.429 | -121.026 | +# | ('bus3', 'ca') | 399.18 | 118.807 | +``` diff --git a/doc/models/Line/ShuntLine.md b/doc/models/Line/ShuntLine.md new file mode 100644 index 00000000..d2254c9e --- /dev/null +++ b/doc/models/Line/ShuntLine.md @@ -0,0 +1,161 @@ +# Shunt line + +The first model of line which can be used is a PI model with series impedance and shunt admittance. The +corresponding diagram is: + +````{tab} European standards +```{image} /_static/Line/European_Shunt_Line.svg +:alt: Shunt line diagram +:width: 1000px +:align: center +``` +```` +````{tab} American standards +```{image} /_static/Line/American_Shunt_Line.svg +:alt: Shunt line diagram +:width: 1000px +:align: center +``` +```` + +## Equations + +The corresponding equations are: + +```{math} +\left\{ + \begin{aligned} + \underline{V_1} &= \underline{a} \cdot \underline{V_2} - \underline{b} \cdot \underline{I_2} + \underline{g} + \cdot \underline{V_{\mathrm{g}}} \\ + \underline{I_1} &= \underline{c} \cdot \underline{V_2} - \underline{d} \cdot \underline{I_2} + \underline{h} + \cdot \underline{V_{\mathrm{g}}} \\ + \underline{I_{\mathrm{g}}} &= \underline{f}^\top \cdot \left(\underline{V_1} + \underline{V_2} - 2\cdot + \underline{V_{\mathrm{g}}}\right) + \end{aligned} +\right. +``` + +where + +```{math} +\left\{ + \begin{aligned} + \underline{a} &= \mathcal{I}_4 + \dfrac{1}{2} \cdot \underline{Z} \cdot \underline{Y} \\ + \underline{b} &= \underline{Z} \\ + \underline{c} &= \underline{Y} + \dfrac{1}{4}\cdot \underline{Y} \cdot \underline{Z} \cdot \underline{Y} \\ + \underline{d} &= \mathcal{I}_4 + \dfrac{1}{2} \cdot \underline{Y} \cdot \underline{Z} \\ + \underline{f} &= -\dfrac{1}{2} \cdot \begin{pmatrix} \underline{y_{\mathrm{ag}}} & \underline{y_{\mathrm{bg}} + } & \underline{y_{\mathrm{cg}}} & \underline{y_{\mathrm{ng}}} \end{pmatrix} ^\top \\ + \underline{g} &= \underline{Z} \cdot \underline{f} \\ + \underline{h} &= 2 \cdot \underline{f} + \frac{1}{2}\cdot \underline{Y} \cdot \underline{Z} \cdot \underline{f} \\ + \end{aligned} +\right. +``` + +with $\underline{Z}$ the series impedance matrix and $\underline{Y}$ the shunt admittance matrix. + +## Usage + +To create a shunt line, create an instance of `LineParameter` with the `y_shunt` argument. The +`ground` argument of the `Line` constructor is mandatory for shunt lines. Here is a line that +connects a constant power load to a voltage source. + +```python +import functools as ft +import numpy as np +from roseau.load_flow import ( + Bus, + ElectricalNetwork, + Line, + LineParameters, + PotentialRef, + PowerLoad, + Q_, + VoltageSource, + Ground, +) + +# Two buses +bus1 = Bus(id="bus1", phases="abcn") +bus2 = Bus(id="bus2", phases="abcn") + +# Create a ground element and set its potential to zero +ground = Ground(id="ground") +pref = PotentialRef(id="pref", element=ground) + +# A shunt line +z_line = Q_( + np.array( + [ + [0.3 + 0.35j, 0.25j, 0.25j, 0.25j], + [0.25j, 0.3 + 0.35j, 0.25j, 0.25j], + [0.25j, 0.25j, 0.3 + 0.35j, 0.25j], + [0.25j, 0.25j, 0.25j, 0.3 + 0.35j], + ] + ), + "ohm/km", +) +y_shunt = Q_( + np.array( + [ + [20 + 475j, -68j, -10j, -68j], + [-68j, 20 + 475j, -68j, -10j], + [-10j, -68j, 20 + 475j, -68j], + [-68j, -10j, -68j, 20 + 475j], + ] + ), + "uS/km", # micro Siemens per kilometer +) +line_parameters = LineParameters(id="line_parameters", z_line=z_line, y_shunt=y_shunt) +line = Line( + id="line", + bus1=bus1, + bus2=bus2, + parameters=line_parameters, + length=Q_(1, "km"), + ground=ground, +) + +# A voltage source on the first bus +un = 400 / np.sqrt(3) +voltages = Q_(un * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]), "V") +vs = VoltageSource(id="source", bus=bus1, voltages=voltages) + + +# A power load on the second bus +load = PowerLoad( + id="load", bus=bus2, powers=Q_(np.array([5.0, 2.5, 0]) * (1 - 0.3j), "kVA") +) + +# Create a network and solve a load flow +en = ElectricalNetwork.from_element(bus1) +auth = ("username", "password") +en.solve_load_flow(auth=auth) + +# The current "entering" into the line from the bus1 +en.res_branches[["current1"]].transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('current1', 'absolute') | ('current1', 'angle') | +# |:--------------|---------------------------:|------------------------:| +# | ('line', 'a') | 23.9459 | 15.6886 | +# | ('line', 'b') | 11.2926 | -104.492 | +# | ('line', 'c') | 0.119763 | -157.68 | +# | ('line', 'n') | 20.6151 | 167.381 | + +# The current "entering" into the line from the bus2 +en.res_branches[["current2"]].transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('current2', 'absolute') | ('current2', 'angle') | +# |:--------------|---------------------------:|------------------------:| +# | ('line', 'a') | 23.9202 | -164.585 | +# | ('line', 'b') | 11.2551 | 74.9044 | +# | ('line', 'c') | 5.68434e-14 | 0 | +# | ('line', 'n') | 20.6273 | -12.625 | + +# The losses of the line can also be accessed. One can remark that there are shunt losses +en.res_lines_losses +# | | 'series_losses' | 'shunt_losses' | 'total_losses' | +# |:--------------|-------------------------:|---------------------:|------------------:| +# | ('line', 'a') | 171.841+57.2802j | -1.59017-26.6385j | 170.251+ 30.6417j | +# | ('line', 'b') | 38.1291+12.7097j | 1.01834-28.5657j | 39.1474 -15.856j | +# | ('line', 'c') | 0.00107497+0.000358324j | 3.69511-27.4104j | 3.69618-27.41j | +# | ('line', 'n') | 127.574 +42.5246j | 0.0351686+0.0139828j | 127.609+42.5385j | +``` diff --git a/doc/models/Line/SimplifiedLine.md b/doc/models/Line/SimplifiedLine.md new file mode 100644 index 00000000..94337e7e --- /dev/null +++ b/doc/models/Line/SimplifiedLine.md @@ -0,0 +1,109 @@ +# Simplified line + +If the line is modeled with only series impedance, the model is simplified as there is no coupling +with the ground. This is a common model of short lines, typically in distribution networks. + +The corresponding diagram is: + +````{tab} European standards +```{image} /_static/Line/European_Simplified_Line.svg +:alt: Simplified line diagram +:width: 600px +:align: center +``` +```` +````{tab} American standards +```{image} /_static/Line/American_Simplified_Line.svg +:alt: Simplified line diagram +:width: 600px +:align: center +``` +```` + +## Equations + +With $\underline{Y} = 0$, the equations become: + +```{math} +\left\{ + \begin{aligned} + \underline{V_1} - \underline{V_2} &= \underline{Z} \cdot \underline{I_1} \\ + \underline{I_2} &= -\underline{I_1} + \end{aligned} +\right. +``` + +## Usage + +To create a simplified line, create an instance of `LineParameter` without providing `y_shunt`. +Here is a simplified line connecting a constant power load to a voltage source. + +```python +import functools as ft +import numpy as np +from roseau.load_flow import ( + Bus, + ElectricalNetwork, + Line, + LineParameters, + PotentialRef, + PowerLoad, + Q_, + VoltageSource, +) + +# Two buses +bus1 = Bus(id="bus1", phases="abcn") +bus2 = Bus(id="bus2", phases="abcn") + +# A line +lp = LineParameters(id="lp", z_line=Q_(0.35 * np.eye(4), "ohm/km")) +line = Line(id="line", bus1=bus1, bus2=bus2, parameters=lp, length=Q_(1, "km")) + +# A voltage source on the first bus +un = 400 / np.sqrt(3) +voltages = Q_(un * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]), "V") +vs = VoltageSource(id="source", bus=bus1, voltages=voltages) + +# The neutral of the voltage source is fixed at potential 0 +pref = PotentialRef(id="pref", element=bus1, phase="n") + +# A power load on the second bus +load = PowerLoad( + id="load", bus=bus2, powers=Q_(np.array([5.0, 2.5, 0]) * (1 - 0.3j), "kVA") +) + +# Create a network and solve a load flow +en = ElectricalNetwork.from_element(bus1) +auth = ("username", "password") +en.solve_load_flow(auth=auth) + +# The current flowing into the line from bus1 +en.res_branches[["current1"]].transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('current1', 'absolute') | ('current1', 'angle') | +# |:--------------|---------------------------:|------------------------:| +# | ('line', 'a') | 24.1958 | 16.4456 | +# | ('line', 'b') | 11.3722 | -105.263 | +# | ('line', 'c') | 0 | 0 | +# | ('line', 'n') | 20.628 | 168.476 | + +# The current flowing into the line from bus2 +en.res_branches[["current2"]].transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('current2', 'absolute') | ('current2', 'angle') | +# |:--------------|---------------------------:|------------------------:| +# | ('line', 'a') | 24.1958 | -163.554 | +# | ('line', 'b') | 11.3722 | 74.7366 | +# | ('line', 'c') | 0 | 0 | +# | ('line', 'n') | 20.628 | -11.5242 | + +# The two currents are equal in magnitude and opposite in phase, as expected + +# The losses of the line can also be accessed. One can remark that there are no shunt losses +en.res_lines_losses +# | | 'series_losses' | 'shunt_losses' | 'total_losses' | +# |:--------------|-----------------------:|---------------:|----------------------:| +# | ('line', 'a') | 204.904 -2.66329e-15 | 0j | 204.904 -2.66329e-15 | +# | ('line', 'b') | 45.2646 -8.96306e-16 | 0j | 45.2646 -8.96306e-16 | +# | ('line', 'c') | 0j | 0j | 0j | +# | ('line', 'n') | 148.93 + 6.11606e-15 | 0j | 148.93 + 6.11606e-15 | +``` diff --git a/doc/models/Line/index.md b/doc/models/Line/index.md new file mode 100644 index 00000000..9bab8346 --- /dev/null +++ b/doc/models/Line/index.md @@ -0,0 +1,169 @@ +# Lines + +## Definition + +Lines are modeled using passive components lumped in a PI section. The lumped parameters are +defined using the series impedance matrix $\underline{Z}$ and the shunt admittance matrix +$\underline{Y}$. + +## Matrices definition + +Before diving into the different line models, lets define the series impedance matrix $Z$, and the +shunt admittance matrix $Y$ used to model the lines. + +### Series impedance matrix + +The series impedance matrix $\underline{Z}$, in $\Omega$, consists of the series resistance of the +conductors ($R\in{\mathbb{R}^+}^4$), the self-inductances ($L\in\mathbb{R}^4$) and the mutual +inductances ($M\in\mathbb{R}^{12}$). + +```{math} +\begin{aligned} + \underline{Z} &= R + j \cdot X \\ + \underline{Z} &= \begin{pmatrix} + \underline{Z_{\mathrm{aa}}} & \underline{Z_{\mathrm{ab}}} & \underline{Z_{\mathrm{ac}}} & \underline{Z_{\mathrm{an}}}\\ + \underline{Z_{\mathrm{ba}}} & \underline{Z_{\mathrm{bb}}} & \underline{Z_{\mathrm{bc}}} & \underline{Z_{\mathrm{bn}}}\\ + \underline{Z_{\mathrm{ca}}} & \underline{Z_{\mathrm{cb}}} & \underline{Z_{\mathrm{cc}}} & \underline{Z_{\mathrm{cn}}}\\ + \underline{Z_{\mathrm{na}}} & \underline{Z_{\mathrm{nb}}} & \underline{Z_{\mathrm{nc}}} & \underline{Z_{\mathrm{nn}}}\\ + \end{pmatrix}\\ + \underline{Z} &= \underbrace{ + \begin{pmatrix} + R_{\mathrm{a}} & 0 & 0 & 0\\ + 0 & R_{\mathrm{b}} & 0 & 0\\ + 0 & 0 & R_{\mathrm{c}} & 0\\ + 0 & 0 & 0 & R_{\mathrm{n}}\\ + \end{pmatrix} + }_{R} + j \cdot \underbrace{ + \omega \cdot + \begin{pmatrix} + L_{\mathrm{a}} & M_{\mathrm{ab}} & M_{\mathrm{ac}} & M_{\mathrm{an}}\\ + M_{\mathrm{ba}} & L_{\mathrm{b}} & M_{\mathrm{bc}} & M_{\mathrm{bn}}\\ + M_{\mathrm{ca}} & M_{\mathrm{cb}} & L_{\mathrm{c}} & M_{\mathrm{cn}}\\ + M_{\mathrm{na}} & M_{\mathrm{nb}} & M_{\mathrm{nc}} & L_{\mathrm{n}}\\ + \end{pmatrix} + }_{X} +\end{aligned} +``` + +### Admittance matrix + +```{warning} +The admittance matrix $\underline{y}$ shouldn't be confused with the shunt admittance matrix +$\underline{Y}$ defined below. +``` + +$\underline{y}$ represents the admittances between each node, while $\underline{Y}$ is used to +compute the currents and voltages. + +```{math} +\begin{aligned} + \underline{y} &= G + j \cdot B \\ + \underline{y} &= \begin{pmatrix} + \underline{y_{\mathrm{ag}}} & \underline{y_{\mathrm{ab}}} & \underline{y_{\mathrm{ac}}} & \underline{y_{\mathrm{an}}}\\ + \underline{y_{\mathrm{ab}}} & \underline{y_{\mathrm{bg}}} & \underline{y_{\mathrm{bc}}} & \underline{y_{\mathrm{bn}}}\\ + \underline{y_{\mathrm{ac}}} & \underline{y_{\mathrm{bc}}} & \underline{y_{\mathrm{cg}}} & \underline{y_{\mathrm{cn}}}\\ + \underline{y_{\mathrm{an}}} & \underline{y_{\mathrm{bn}}} & \underline{y_{\mathrm{cn}}} & \underline{y_{\mathrm{ng}}} + \end{pmatrix}\\ + \underline{y} &= \underbrace{ + \begin{pmatrix} + G_{\mathrm{a}} & 0 & 0 & 0\\ + 0 & G_{\mathrm{b}} & 0 & 0\\ + 0 & 0 & G_{\mathrm{c}} & 0\\ + 0 & 0 & 0 & G_{\mathrm{n}} + \end{pmatrix} + }_{G} + j \cdot \underbrace{ + \omega \cdot + \begin{pmatrix} + C_{\mathrm{a}} & C_{\mathrm{ab}} & C_{\mathrm{ac}} & C_{\mathrm{an}}\\ + C_{\mathrm{ab}} & C_{\mathrm{b}} & C_{\mathrm{bc}} & C_{\mathrm{bn}}\\ + C_{\mathrm{ac}} & C_{\mathrm{bc}} & C_{\mathrm{c}} & C_{\mathrm{cn}}\\ + C_{\mathrm{an}} & C_{\mathrm{bn}} & C_{\mathrm{cn}} & C_{\mathrm{n}} + \end{pmatrix} + }_{B} +\end{aligned} +``` + +with $G\in\mathbb{R}^4$ the conductance of the line, $B\in\mathbb{R}^4$ the susceptance of the line and +$C\in\mathbb{R}^{16}$ the transverse susceptances of the line. + +### Shunt admittance matrix + +The shunt admittance matrix $\underline{Y}$ is defined from the admittance matrix $\underline{y}$ as: + +```{math} +\underline{Y} = +\begin{pmatrix} + \underline{Y_{\mathrm{aa}}} & \underline{Y_{\mathrm{ab}}} & \underline{Y_{\mathrm{ac}}} & \underline{Y_{\mathrm{an}}}\\ + \underline{Y_{\mathrm{ba}}} & \underline{Y_{\mathrm{bb}}} & \underline{Y_{\mathrm{bc}}} & \underline{Y_{\mathrm{bn}}}\\ + \underline{Y_{\mathrm{ca}}} & \underline{Y_{\mathrm{cb}}} & \underline{Y_{\mathrm{cc}}} & \underline{Y_{\mathrm{cn}}}\\ + \underline{Y_{\mathrm{na}}} & \underline{Y_{\mathrm{nb}}} & \underline{Y_{\mathrm{nc}}} & \underline{Y_{\mathrm{nn}}}\\ +\end{pmatrix} +\quad \text{with} \quad +\left\{ + \begin{aligned} + \underline{Y_{ii}} &= \sum_{k\in\{\mathrm{a},\mathrm{b},\mathrm{c},\mathrm{n},\mathrm{g}\}}{\underline{y_{ik}}}\\ + \underline{Y_{ij}} &= -\underline{y_{ij}}\\ + \end{aligned} +\right.\text{, }\forall(i,j)\in\{\mathrm{a},\mathrm{b},\mathrm{c},\mathrm{n}\}^2 +``` + +(models-line_parameters)= +## Line parameters + +The parameters of the lines are defined using the `LineParameters` class. It takes the series +impedance matrix $\underline{Z}$ and optionally, the shunt admittance matrix $\underline{Y}$. The +first one must be given in $\Omega/km$ (or an equivalent unit) and the second must be given in +$S/km$ (or an equivalent unit). + +```python +import numpy as np + +from roseau.load_flow import LineParameters, Q_ + +# An impedance matrix +z_line = Q_( + np.array( + [ + [0.3 + 0.35j, 0.25j, 0.25j, 0.25j], + [0.25j, 0.3 + 0.35j, 0.25j, 0.25j], + [0.25j, 0.25j, 0.3 + 0.35j, 0.25j], + [0.25j, 0.25j, 0.25j, 0.3 + 0.35j], + ] + ), + "ohm/km", +) + +# A shunt admittance matrix +y_shunt = Q_( + np.array( + [ + [20 + 475j, -68j, -10j, -68j], + [-68j, 20 + 475j, -68j, -10j], + [-10j, -68j, 20 + 475j, -68j], + [-68j, -10j, -68j, 20 + 475j], + ] + ), + "uS/km", # micro Siemens per kilometer +) + +# The line parameter for a simple line (no shunt) +simple_line_parameters = LineParameters(id="simple_line_parameters", z_line=z_line) + +# The line parameter for a line with a shunt +shunt_line_parameters = LineParameters( + id="shunt_line_parameters", z_line=z_line, y_shunt=y_shunt +) +``` + +## Available models + +The following line models are available in *Roseau Load Flow*: + +```{toctree} +--- +maxdepth: 2 +caption: Lines +--- +ShuntLine +SimplifiedLine +``` diff --git a/doc/models/Load/CurrentLoad.md b/doc/models/Load/CurrentLoad.md new file mode 100644 index 00000000..1d5909b6 --- /dev/null +++ b/doc/models/Load/CurrentLoad.md @@ -0,0 +1,111 @@ +# Current loads (I) + +They represent loads for which the current is considered constant, i.e. the power is proportional +to the voltage. + +*ZIP* equation: $S = 0 \times V^0 + i \times V^1 + 0 \times V^2 \implies S \propto V$ + +## Equations + +The equations are the following (star loads): + +```{math} +\left\{ + \begin{aligned} + \underline{I_{\mathrm{abc}}} &= \mathrm{constant} \\ + \underline{I_{\mathrm{n}}} &= -\sum_{p\in\{\mathrm{a},\mathrm{b},\mathrm{c}\}}\underline{I_{p}} + \end{aligned} +\right. +``` + +And the following (delta loads): + +```{math} +\left\{ + \begin{aligned} + \underline{I_{\mathrm{ab}}} &= \mathrm{constant} \\ + \underline{I_{\mathrm{bc}}} &= \mathrm{constant} \\ + \underline{I_{\mathrm{ca}}} &= \mathrm{constant} + \end{aligned} +\right. +``` + +## Example + +```python +import functools as ft +import numpy as np +from roseau.load_flow import ( + Bus, + ElectricalNetwork, + Line, + LineParameters, + PotentialRef, + CurrentLoad, + Q_, + VoltageSource, +) + +# Two buses +bus1 = Bus(id="bus1", phases="abcn") +bus2 = Bus(id="bus2", phases="abcn") + +# A line +lp = LineParameters(id="lp", z_line=Q_(0.35 * np.eye(4), "ohm/km")) +line = Line(id="line", bus1=bus1, bus2=bus2, parameters=lp, length=Q_(1, "km")) + +# A voltage source on the first bus +un = 400 / np.sqrt(3) +voltages = Q_(un * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]), "V") +vs = VoltageSource(id="source", bus=bus1, voltages=voltages) + +# The neutral of the voltage source is fixed at potential 0 +pref = PotentialRef(id="pref", element=bus1, phase="n") + +# A current load on the second bus +load = CurrentLoad( + id="load", + bus=bus2, + currents=Q_(5 * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]), "A"), +) + +# Create a network and solve a load flow +en = ElectricalNetwork.from_element(bus1) +auth = ("username", "password") +en.solve_load_flow(auth=auth) + +# Get the current of the load (equal to the one provided) +en.res_loads["current"].transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | absolute | angle | +# |:--------------|------------:|--------:| +# | ('load', 'a') | 5 | 0 | +# | ('load', 'b') | 5 | -120 | +# | ('load', 'c') | 5 | 120 | +# | ('load', 'n') | 1.77636e-15 | 180 | + +# Get the voltages of the network +en.res_buses_voltages.transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('voltage', 'absolute') | ('voltage', 'angle') | +# |:---------------|--------------------------:|-----------------------:| +# | ('bus1', 'an') | 230.94 | 0 | +# | ('bus1', 'bn') | 230.94 | -120 | +# | ('bus1', 'cn') | 230.94 | 120 | +# | ('bus2', 'an') | 229.19 | 0 | +# | ('bus2', 'bn') | 229.19 | -120 | +# | ('bus2', 'cn') | 229.19 | 120 | + +# Modify the load value to create an unbalanced load +load.currents = Q_( + np.array([5.0, 2.5, 0]) * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]), "A" +) +en.solve_load_flow(auth=auth) + +# Get the currents of the loads of the network +en.res_loads["current"].transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | absolute | angle | +# |:--------------|-----------:|--------:| +# | ('load', 'a') | 5 | 0 | +# | ('load', 'b') | 2.5 | -120 | +# | ('load', 'c') | 0 | 180 | +# | ('load', 'n') | 4.33013 | 150 | +``` diff --git a/doc/models/Load/FlexibleLoad.md b/doc/models/Load/FlexibleLoad.md new file mode 100644 index 00000000..0b328956 --- /dev/null +++ b/doc/models/Load/FlexibleLoad.md @@ -0,0 +1,422 @@ +# Flexible loads + +They are a special case of power loads: instead of being constant, the power will depend on the +voltage measured at the load and the control applied to the load. + +## Equations + +The equations are the following (star loads): + +```{math} +\left\{ + \begin{aligned} + \underline{I_{\mathrm{abc}}} &= \left(\frac{ + \underline{S_{\mathrm{abc}}}(\underline{V_{\mathrm{abc}}}-\underline{V_{\mathrm{n}}}) + }{\underline{V_{\mathrm{abc}}}-\underline{V_{\mathrm{n}}}}\right)^{\star} \\ + \underline{I_{\mathrm{n}}} &= -\sum_{p\in\{\mathrm{a},\mathrm{b},\mathrm{c}\}}\underline{I_{p}} + \end{aligned} +\right. +``` + +And the following (delta loads): + +```{math} +\left\{ + \begin{aligned} + \underline{I_{\mathrm{ab}}} &= \left(\frac{\underline{S_{\mathrm{ab}}}(\underline{V_{\mathrm{a}}}-\underline + {V_{\mathrm{b}}})}{\underline{V_{\mathrm{a}}}-\underline{V_{\mathrm{b}}}}\right)^{\star} \\ + \underline{I_{\mathrm{bc}}} &= \left(\frac{\underline{S_{\mathrm{bc}}}(\underline{V_{\mathrm{b}}}-\underline + {V_{\mathrm{c}}})}{\underline{V_{\mathrm{b}}}-\underline{V_{\mathrm{c}}}}\right)^{\star} \\ + \underline{I_{\mathrm{ca}}} &= \left(\frac{\underline{S_{\mathrm{ca}}}(\underline{V_{\mathrm{c}}}-\underline + {V_{\mathrm{a}}})}{\underline{V_{\mathrm{c}}}-\underline{V_{\mathrm{a}}}}\right)^{\star} + \end{aligned} +\right. +``` + +The expression $\underline{S}(U)$ depends on four parameters: +* The theoretical power $\underline{S^{\mathrm{th.}}}$ that the load would have if no control is applied. +* The maximal power $S^{\max}$ that can be injected/consumed by the load. For a PV installation, this is + usually the rated power of the inverter. +* The type of control (see below). +* The type of projection (see below). + +(models-flexible_load-controls)= +## Controls + +There are four available types of control. + +### Constant control + +No control is applied, this is equivalent to a classical power load. The constant control can be +built like this: + +```python +from roseau.load_flow import Control + +# Use the constructor. Note that the voltages are not important in this case. +control = Control(type="constant", u_min=0.0, u_down=0.0, u_up=0.0, u_max=0.0) + +# Or prefer using the shortcut +control = Control.constant() +``` + +(models-flexible_load-p_u_control)= +### P(U) control + +Control the maximum active power of a load (often a PV inverter) based on the voltage $P^{\max}(U)$. + +```{note} +The functions $s_{\alpha}$ used for the P(U) controls are derived from the *soft clipping function* of +{cite:p}`Klimek_2020`. +``` + +#### Production + +With this control, the following soft clipping family of functions $s_{\alpha}(U)$ is used. The +default value of `alpha` is 1000. + +```{image} /_static/Control_PU_Prod.svg +:alt: P(U) production control +:width: 600 +:align: center +``` + +The final $P$ is then $P(U) = \max(s_{\alpha}(U) \times S^{\max}, P^{\mathrm{th.}})$ + +```python +from roseau.load_flow import Control, Q_ + +# Use the constructor. Note that u_min and u_down are useless with the production control +production_control = Control( + type="p_max_u_production", u_min=0, u_down=0, u_up=Q_(240, "V"), u_max=Q_(250, "V") +) + +# Or prefer the shortcut +production_control = Control.p_max_u_production(u_up=Q_(240, "V"), u_max=Q_(250, "V")) +``` + +#### Consumption + +With this control, the following soft clipping family of functions $s_{\alpha}(U)$ is used. The +default value of `alpha` is 1000. + +```{image} /_static/Control_PU_Cons.svg +:alt: P(U) consumption control +:width: 600 +:align: center +``` + +The final $P$ is then $P(U) = \min(s_{\alpha}(U) \times S^{\max}, P^{\mathrm{th.}})$ + +```python +from roseau.load_flow import Control, Q_ + +# Use the constructor. Note that u_max and u_up are useless with the consumption control +consumption_control = Control( + type="p_max_u_consumption", u_min=Q_(210, "V"), u_down=Q_(220, "V"), u_up=0, u_max=0 +) + +# Or prefer the shortcut +consumption_control = Control.p_max_u_consumption(u_min=Q_(210, "V"), u_down=Q_(220, "V")) +``` + +(models-flexible_load-q_u_control)= +### Q(U) control + +Control the reactive power based on the voltage $Q(U)$. With this control, the following soft +clipping family of functions $s_{\alpha}(U)$ is used. The default value of `alpha` is 1000. + +```{image} /_static/Control_QU.svg +:alt: Q(U) control +:width: 600 +:align: center +``` + +The final $Q$ is then $Q(U) = s_{\alpha}(U) \times S^{\max}$ + +```{note} +The function $s_{\alpha}$ used for the Q(U) control is derived from the *soft clipping function* of +{cite:p}`Klimek_2020`. +``` + +```python +from roseau.load_flow import Control, Q_ + +# Use the constructor. Note that all the voltages are important. +control = Control( + type="q_u", + u_min=Q_(210, "V"), + u_down=Q_(220, "V"), + u_up=Q_(240, "V"), + u_max=Q_(250, "V"), +) + +# Or prefer the shortcut +control = Control.q_u( + u_min=Q_(210, "V"), u_down=Q_(220, "V"), u_up=Q_(240, "V"), u_max=Q_(250, "V") +) +``` + +(models-flexible_load-projection)= +## Projection + +The different controls may produce values for $P$ and $Q$ that are not feasible. The feasibility +domain in the $(P, Q)$ space is a part of the circle of radius $S^{\max}$. In these cases, the +solution found by the control algorithm has to be projected on the feasible domain. That's why we +need to define how the projection is done. There are three available projection types: the +*Euclidean* projection, the projection at *Constant $P$* and the projection at *Constant $Q$*. + +The projection accepts two approximation parameters: `alpha` and `epsilon`. +* `alpha` is used to compute soft sign function and soft projection function. The higher `alpha` + is, the better the approximations are. +* `epsilon` is used to approximate a smooth square root function: + ```{math} + \sqrt{S} = \sqrt{\varepsilon \times \exp\left(\frac{-{|S|}^2}{\varepsilon}\right) + {|S|}^2} + ``` + The lower `epsilon` is, the better the approximations are. + +### Euclidean projection + +A Euclidean projection on the feasible domain. This is the default value for projections when it is +not specified. + +```{image} /_static/Euclidean_Projection.svg +:width: 300 +:align: center +``` + +```python +from roseau.load_flow import Projection + +projection = Projection(type="euclidean") # alpha and epsilon can be provided +``` + +### Constant $P$ + +Keep the value of $P$ computed by the control and project $Q$ on the feasible domain. + +```{image} /_static/Constant_P_Projection.svg +:width: 300 +:align: center +``` + +```python +from roseau.load_flow import Projection + +projection = Projection(type="keep_p") # alpha and epsilon can be provided +``` + +### Constant $Q$ + +Keep the value of $Q$ computed by the control and project $P$ on the feasible domain. + +```{image} /_static/Constant_Q_Projection.svg +:width: 300 +:align: center +``` + +```python +from roseau.load_flow import Projection + +projection = Projection(type="keep_q") # alpha and epsilon can be provided +``` + +(models-flexible_load-flexible_parameters)= +## Flexible parameters + +A flexible parameter is a combination of a control on the active power, a control on the reactive +power, a projection and a maximal apparent power for one phase. + +### Example + +Here, we define a flexible parameter with: +* a constant control on $P$ (meaning, no control), +* a control $Q(U)$ on $Q$, +* a projection which keeps $P$ constant, +* an $S^{\max}$ of 5 kVA. + +```python +from roseau.load_flow import FlexibleParameter, Control, Projection, Q_ + +fp = FlexibleParameter( + control_p=Control.constant(), + control_q=Control.q_u( + u_min=Q_(210, "V"), u_down=Q_(220, "V"), u_up=Q_(240, "V"), u_max=Q_(250, "V") + ), + projection=Projection(type="keep_p"), + s_max=Q_(5, "kVA"), +) +``` + +### Usage + +To create a flexible load, create a `PowerLoad` passing it a list of `FlexibleParameter` objects +using the `flexible_params` parameter, one for each phase of the load. + +#### Scenario 1: Same $Q(U)$ control on all phases + +In this scenario, we apply the same $Q(U)$ control on the three phases of a load. We define a +flexible parameter with constant $P$ control and use it three times in the load constructor. + +```python +import numpy as np + +from roseau.load_flow import FlexibleParameter, Control, Projection, Q_, PowerLoad, Bus + +bus = Bus(id="bus", phases="abcn") + +# Create a flexible parameter object +fp = FlexibleParameter( + control_p=Control.constant(), + control_q=Control.q_u( + u_min=Q_(210, "V"), u_down=Q_(220, "V"), u_up=Q_(240, "V"), u_max=Q_(250, "V") + ), + projection=Projection(type="keep_p"), + s_max=Q_(5, "kVA"), +) + +# Use it for the three phases of the load +load = PowerLoad( + id="load", + bus=bus, + powers=Q_(np.array([1000, 1000, 1000]) * (1 - 0.3j), "VA"), + flexible_params=[fp, fp, fp], # <- this makes the load "flexible" +) +``` + +The created load is a three-phase star-connected load as the phases inherited from the bus include +`"n"`. The `powers` parameter of the `PowerLoad` constructor represents the theoretical powers of +the three phases of the load. The load is flexible on its three phases with the same flexible +parameters. + +#### Scenario 2: Different controls on different phases + +In this scenario, we create a load with only two phases and a neutral connected to a three-phase +bus with a neutral. Two different controls are applied by the load on the two phases. + +```python +import numpy as np + +from roseau.load_flow import FlexibleParameter, Control, Projection, Q_, PowerLoad, Bus + +bus = Bus(id="bus", phases="abcn") + +# Create a first flexible parameter (Q(U) control) +fp1 = FlexibleParameter( + control_p=Control.constant(), + control_q=Control.q_u( + u_min=Q_(210, "V"), u_down=Q_(220, "V"), u_up=Q_(240, "V"), u_max=Q_(250, "V") + ), + projection=Projection(type="keep_p"), + s_max=Q_(5, "kVA"), +) + +# Create a second flexible parameter (P(U) control) +fp2 = FlexibleParameter( + control_p=Control.p_max_u_consumption(u_min=Q_(210, "V"), u_down=Q_(220, "V")), + control_q=Control.constant(), + projection=Projection(type="euclidean"), + s_max=Q_(3, "kVA"), +) + +# Use them in a load +load = PowerLoad( + id="load", + bus=bus, + phases="abn", + powers=Q_(np.array([1000, 1000]) * (1 - 0.3j), "VA"), + flexible_params=[fp1, fp2], +) +``` + +The first element of the load is connected between phase "a" and "n" of the bus. Its control is a +$Q(U)$ control with a projection at constant $P$ and an $S^{\max}$ of 5 kVA. + +The second element of the load is connected between phase "b" and "n" of the bus. Its control is a +$P(U)$ control with an Euclidean projection and an $S^{\max}$ of 3 kVA. + +#### Scenario 3: PQ(U) control + +Finally, it is possible to combine $P(U)$ and $Q(U)$ controls, for example by first using all +available reactive power before reducing the active power in order to limit the impact for the +client. + +```python +import numpy as np + +from roseau.load_flow import FlexibleParameter, Control, Projection, Q_, PowerLoad, Bus + +bus = Bus(id="bus", phases="abc") + +# Create a flexible parameter +fp = FlexibleParameter( + control_p=Control.p_max_u_production(u_up=Q_(245, "V"), u_max=Q_(250, "V")), + control_q=Control.q_u( + u_min=Q_(210, "V"), u_down=Q_(220, "V"), u_up=Q_(240, "V"), u_max=Q_(245, "V") + ), + projection=Projection(type="euclidean"), + s_max=Q_(5, "kVA"), +) + +# Or using the shortcut +fp = FlexibleParameter.pq_u_production( + up_up=Q_(245, "V"), + up_max=Q_(250, "V"), + uq_min=Q_(210, "V"), + uq_down=Q_(220, "V"), + uq_up=Q_(240, "V"), + uq_max=Q_(245, "V"), + s_max=Q_(5, "kVA"), +) + +# Use it in a load +load = PowerLoad( + id="load", + bus=bus, + powers=Q_(-np.array([1000, 1000, 1000]), "VA"), + flexible_params=[fp, fp, fp], +) +``` + +In this example, the same flexible parameter is used to control all phases of the three-phase +delta-connected load. In the flexible parameter, one can remark that the $Q(U)$ control on high +voltages triggers at 240 V (production) and reaches its maximum at 245 V. The $P(U)$ control +however triggers at 245 V and is maxed out at 250 V. + +Using this configuration, a *sequential PQ(U) control* has been created for this load. A +*simultaneous PQ(U) control* could have been defined by using the same voltage thresholds for both +controls. + +## Feasible domains + +Depending on the mix of controls and projection used through this class, the feasible domains in +the $(P, Q)$ space changes. Here is an illustration with a theoretical production power +($P^{\mathrm{th.}} < 0$). + +```{list-table} +:class: borderless +:header-rows: 1 +:widths: 20 20 20 20 20 + +* - + - $Q^{\mathrm{const.}}$ + - $Q(U)$ with an Euclidean projection + - $Q(U)$ with a constant P projection + - $Q(U)$ with a constant Q projection +* - $P^{\mathrm{const.}}$ + - ![image](/_static/Domain_Pconst_Qconst.svg) + - ![image](/_static/Domain_Pconst_QU_Eucl.svg) + - ![image](/_static/Domain_Pconst_QU_P.svg) + - ![image](/_static/Domain_Pconst_QU_Q.svg) +* - $P^{\max}(U)$ + - ![image](/_static/Domain_PmaxU_Qconst.svg) + - ![image](/_static/Domain_PmaxU_QU.svg) + - ![image](/_static/Domain_PmaxU_QU.svg) + - ![image](/_static/Domain_PmaxU_QU.svg) +``` + +## Bibliography + +```{bibliography} +:filter: docname in docnames +``` diff --git a/doc/models/Load/ImpedanceLoad.md b/doc/models/Load/ImpedanceLoad.md new file mode 100644 index 00000000..f3948d56 --- /dev/null +++ b/doc/models/Load/ImpedanceLoad.md @@ -0,0 +1,109 @@ +# Impedance loads (Z) + +They represent loads for which the impedance is considered constant, i.e the power is proportional +to the square of the voltage. + +*ZIP* equation: $S = 0 \times V^0 + 0 \times V^1 + z \times V^2 \implies S \propto V^2$ + +## Equations + +The equations are the following (star loads): + +```{math} +\left\{ + \begin{aligned} + \underline{I_{\mathrm{abc}}} &= \frac{\underline{V_{\mathrm{abc}}}-\underline{V_{\mathrm{n}}}}{ + \underline{Z_{\mathrm{abc}}}} \\ + \underline{I_{\mathrm{n}}} &= -\sum_{p\in\{\mathrm{a},\mathrm{b},\mathrm{c}\}}\underline{I_{p}} + \end{aligned} +\right. +``` + +And the following (delta loads): + +```{math} +\left\{ + \begin{aligned} + \underline{I_{\mathrm{ab}}} &= \frac{\underline{V_{\mathrm{a}}}-\underline{V_{\mathrm{b}}}}{\underline{Z_{\mathrm{ab}}}} \\ + \underline{I_{\mathrm{bc}}} &= \frac{\underline{V_{\mathrm{b}}}-\underline{V_{\mathrm{c}}}}{\underline{Z_{\mathrm{bc}}}} \\ + \underline{I_{\mathrm{ca}}} &= \frac{\underline{V_{\mathrm{c}}}-\underline{V_{\mathrm{a}}}}{\underline{Z_{\mathrm{ca}}}} + \end{aligned} +\right. +``` + +## Example + +```python +import functools as ft +import numpy as np +from roseau.load_flow import ( + Bus, + ElectricalNetwork, + Line, + LineParameters, + PotentialRef, + ImpedanceLoad, + Q_, + VoltageSource, +) + +# Two buses +bus1 = Bus(id="bus1", phases="abcn") +bus2 = Bus(id="bus2", phases="abcn") + +# A line +lp = LineParameters(id="lp", z_line=Q_(0.35 * np.eye(4), "ohm/km")) +line = Line(id="line", bus1=bus1, bus2=bus2, parameters=lp, length=Q_(1, "km")) + +# A voltage source on the first bus +un = 400 / np.sqrt(3) +voltages = Q_(un * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]), "V") +vs = VoltageSource(id="source", bus=bus1, voltages=voltages) + +# The neutral of the voltage source is fixed at potential 0 +pref = PotentialRef(id="pref", element=bus1, phase="n") + +# A power load on the second bus +load = ImpedanceLoad( + id="load", bus=bus2, impedances=Q_(np.array([40 + 3j, 40 + 3j, 40 + 3j]), "ohm") +) + +# Create a network and solve a load flow +en = ElectricalNetwork.from_element(bus1) +auth = ("username", "password") +en.solve_load_flow(auth=auth) + +# Get the impedances of the load (the result is equal to the provided impedance +load.res_voltages / load.res_currents[:3] +# array([40.+3.j, 40.+3.j, 40.+3.j]) + +# Get the voltages of the network +en.res_buses_voltages.transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('voltage', 'absolute') | ('voltage', 'angle') | +# |:---------------|--------------------------:|-----------------------:| +# | ('bus1', 'an') | 230.94 | -6.40192e-19 | +# | ('bus1', 'bn') | 230.94 | -120 | +# | ('bus1', 'cn') | 230.94 | 120 | +# | ('bus2', 'an') | 228.948 | 0.0370675 | +# | ('bus2', 'bn') | 228.948 | -119.963 | +# | ('bus2', 'cn') | 228.948 | 120.037 | + +# Modify the load value to create an unbalanced load +load.impedances = Q_(np.array([40 + 4j, 20 + 2j, 10 + 1j]), "ohm") +en.solve_load_flow(auth=auth) + +# Get the impedance of the load +load.res_voltages / load.res_currents[:3] +# array([40.+4.j, 20.+2.j, 10.+1.j]) + +# Get the voltages of the network +en.res_buses_voltages.transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('voltage', 'absolute') | ('voltage', 'angle') | +# |:---------------|--------------------------:|-----------------------:| +# | ('bus1', 'an') | 230.94 | 0 | +# | ('bus1', 'bn') | 230.94 | -120 | +# | ('bus1', 'cn') | 230.94 | 120 | +# | ('bus2', 'an') | 232.313 | -0.792296 | +# | ('bus2', 'bn') | 228.33 | -118.76 | +# | ('bus2', 'cn') | 218.703 | 119.891 | +``` diff --git a/doc/models/Load/PowerLoad.md b/doc/models/Load/PowerLoad.md new file mode 100644 index 00000000..e59e12c3 --- /dev/null +++ b/doc/models/Load/PowerLoad.md @@ -0,0 +1,120 @@ +# Power loads (P) + +They represent loads for which the power is considered constant, i.e. it is independent of the +voltage. + +*ZIP* equation: $S = s \times V^0 + 0 \times V^1 + 0 \times V^2 \implies S = \mathrm{constant}$ + +## Equations + +The equations are the following (star loads): + +```{math} +\left\{ + \begin{aligned} + \underline{I_{\mathrm{abc}}} &= \left(\frac{\underline{S_{\mathrm{abc}}}}{\underline{V_{\mathrm{abc}}} + -\underline{V_{\mathrm{n}}}}\right)^{\star} \\ + \underline{I_{\mathrm{n}}} &= -\sum_{p\in\{\mathrm{a},\mathrm{b},\mathrm{c}\}}\underline{I_{p}} + \end{aligned} +\right. +``` + +And the following (delta loads): + +```{math} +\left\{ + \begin{aligned} + \underline{I_{\mathrm{ab}}} &= \left(\frac{\underline{S_{\mathrm{ab}}}}{\underline{V_{\mathrm{a}}}-\underline + {V_{\mathrm{b}}}}\right)^{\star} \\ + \underline{I_{\mathrm{bc}}} &= \left(\frac{\underline{S_{\mathrm{bc}}}}{\underline{V_{\mathrm{b}}}-\underline + {V_{\mathrm{c}}}}\right)^{\star} \\ + \underline{I_{\mathrm{ca}}} &= \left(\frac{\underline{S_{\mathrm{ca}}}}{\underline{V_{\mathrm{c}}}-\underline + {V_{\mathrm{a}}}}\right)^{\star} + \end{aligned} +\right. +``` + +## Example + +```python +import functools as ft +import numpy as np +from roseau.load_flow import ( + Bus, + ElectricalNetwork, + Line, + LineParameters, + PotentialRef, + PowerLoad, + Q_, + VoltageSource, +) + +# Two buses +bus1 = Bus(id="bus1", phases="abcn") +bus2 = Bus(id="bus2", phases="abcn") + +# A line +lp = LineParameters(id="lp", z_line=Q_(0.35 * np.eye(4), "ohm/km")) +line = Line(id="line", bus1=bus1, bus2=bus2, parameters=lp, length=Q_(1, "km")) + +# A voltage source on the first bus +un = 400 / np.sqrt(3) +voltages = Q_(un * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]), "V") +vs = VoltageSource(id="source", bus=bus1, voltages=voltages) + +# The neutral of the voltage source is fixed at potential 0 +pref = PotentialRef(id="pref", element=bus1, phase="n") + +# A power load on the second bus +load = PowerLoad(id="load", bus=bus2, powers=Q_((1000 - 300j) * np.ones(3), "VA")) + +# Create a network and solve a load flow +en = ElectricalNetwork.from_element(bus1) +auth = ("username", "password") +en.solve_load_flow(auth=auth) + +# Get the powers of the loads in the network +en.res_loads["power"] +# | | power | +# |:--------------|---------------------------:| +# | ('load', 'a') | 1000-300j | +# | ('load', 'b') | 1000-300j | +# | ('load', 'c') | 1000-300j | +# | ('load', 'n') | -5.57569e-31+ 2.25385e-32j | + +# Get the voltages of the network +en.res_buses_voltages.transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('voltage', 'absolute') | ('voltage', 'angle') | +# |:---------------|--------------------------:|-----------------------:| +# | ('bus1', 'an') | 230.94 | 9.69325e-22 | +# | ('bus1', 'bn') | 230.94 | -120 | +# | ('bus1', 'cn') | 230.94 | 120 | +# | ('bus2', 'an') | 229.414 | -0.113552 | +# | ('bus2', 'bn') | 229.414 | -120.114 | +# | ('bus2', 'cn') | 229.414 | 119.886 | + +# Modify the load value to create an unbalanced load +load.powers = Q_(np.array([5.0, 2.5, 0]) * (1 - 0.3j), "kVA") +en.solve_load_flow(auth=auth) + +# Get the powers of the loads in the network +en.res_loads["power"] +# | | power | +# |:--------------|-----------------------:| +# | ('load', 'a') | 5154.28 - 1581.93j | +# | ('load', 'b') | 2494.65 - 668.07j | +# | ('load', 'c') | 0 | +# | ('load', 'n') | -148.93 + 3.78664e-14j | + +# Get the voltages of the network +en.res_buses_voltages.transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('voltage', 'absolute') | ('voltage', 'angle') | +# |:---------------|--------------------------:|-----------------------:| +# | ('bus1', 'an') | 230.94 | 4.05321e-24 | +# | ('bus1', 'bn') | 230.94 | -120 | +# | ('bus1', 'cn') | 230.94 | 120 | +# | ('bus2', 'an') | 215.746 | -0.253646 | +# | ('bus2', 'bn') | 229.513 | -121.963 | +# | ('bus2', 'cn') | 235.788 | 121.314 | +``` diff --git a/doc/models/Load/index.md b/doc/models/Load/index.md new file mode 100644 index 00000000..4b4af8b6 --- /dev/null +++ b/doc/models/Load/index.md @@ -0,0 +1,76 @@ +# Loads + +## Definition + +The load element can be used to model consumption loads (with positive active power) as well as +generation loads (with negative active power). + +## Connections + +A load can be either star-connected or delta-connected depending on whether its phases include a +neutral or not. + +### Star (wye) connection + +Here is the diagram of a star-connected three-phase load: + +````{tab} European standards +```{image} /_static/Load/European_Star_Load.svg +:alt: Star load diagram +:width: 300px +:align: center +``` +```` +````{tab} American standards +```{image} /_static/Load/American_Star_Load.svg +:alt: Star load diagram +:width: 300px +:align: center +``` +```` + +In *Roseau Load Flow*, the `phases` argument of the constructor must contain `"n"` for star loads. + +### Delta connection + +Here is the diagram of a delta-connected three-phase load: + +````{tab} European standards +```{image} /_static/Load/European_Delta_Load.svg +:alt: Delta load diagram +:width: 300px +:align: center +``` +```` +````{tab} American standards +```{image} /_static/Load/American_Delta_Load.svg +:alt: Delta load diagram +:width: 300px +:align: center +``` +```` + +In *Roseau Load Flow*, the `phases` argument of the constructor must **not** contain `"n"` for delta +loads. + +## Available models + +The *ZIP* model is commonly used to represent electric loads in static grid analysis. This model +considers the voltage dependency of loads. ZIP stands for the three load types: + +* Z = constant impedance load +* I = constant current load +* P = constant power load + +The following load models are available in *Roseau Load Flow*: + +```{toctree} +--- +maxdepth: 2 +caption: Loads +--- +ImpedanceLoad +CurrentLoad +PowerLoad +FlexibleLoad +``` diff --git a/doc/models/PotentialRef.md b/doc/models/PotentialRef.md new file mode 100644 index 00000000..248c867a --- /dev/null +++ b/doc/models/PotentialRef.md @@ -0,0 +1,49 @@ +# Potential Reference + +## Definition + +As the electrical potentials of the elements of the network are defined as a difference from a +reference point, we need to define this reference point. The potential reference element sets the +potential of the point where it is connected to $0$ Volt. The symbol of a potential reference is: + +```{image} /_static/PotentialRef.svg +:alt: A diagram of a potential reference element +:width: 100px +:align: center +``` + +```{note} +One and only one potential reference per galvanically isolated section of the network can be set. +``` + +## Usage + +It is common to consider the earth as the reference of potentials $0V$. In *Roseau Load Flow*, the +ground element which represents an earth connection does not add any potential reference equation, +i.e. its potential is not fixed at $0V$. If you want to set its potential to $0V$, you must attach +a potential reference element explicitly: + +```python +from roseau.load_flow.models import Ground, PotentialRef + +g = Ground(id="ground") +p_ref = PotentialRef(id="pref", element=g) +``` + +With this code snippet, you have defined the following element: + +```{image} /_static/PotentialRef_With_Ground.svg +:alt: A diagram of a potential reference connected to a ground element +:width: 100px +:align: center +``` + +It is also possible to set the reference of potentials to any phase of any bus in the network. +For example, to fix the potential of phase "a" of some bus to $0V$: + +```python +from roseau.load_flow.models import Bus, PotentialRef + +bus = Bus(id="bus", phases="abcn") +p_ref = PotentialRef(id="pref", element=bus, phase="a") +``` diff --git a/doc/models/Switch.md b/doc/models/Switch.md new file mode 100644 index 00000000..c0d03c85 --- /dev/null +++ b/doc/models/Switch.md @@ -0,0 +1,95 @@ +# Switch + +## Definition + +It represents an ideal switch, a lossless element that connects two buses. + +```{image} /_static/Switch.svg +:alt: Switch diagram +:width: 300px +:align: center +``` + +## Equations + +The associated equations are: +```{math} +\left\{ + \begin{aligned} + \underline{I_1} &= - \underline{I_2}\\ + \underline{V_1} &= \underline{V_2}\\ + \end{aligned} +\right. +``` + +## Example + +Here is a switch connecting a constant power load to a voltage source. + +```python +import functools as ft +import numpy as np +from roseau.load_flow import ( + Q_, + Bus, + ElectricalNetwork, + PotentialRef, + PowerLoad, + Switch, + VoltageSource, +) + +# Two buses +bus1 = Bus(id="bus1", phases="abcn") +bus2 = Bus(id="bus2", phases="abcn") + +# A line +switch = Switch(id="switch", bus1=bus1, bus2=bus2) + +# A voltage source on the first bus +un = 400 / np.sqrt(3) +voltages = un * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]) +vs = VoltageSource(id="source", bus=bus1, voltages=voltages) + +# The neutral of the voltage source is fixed at potential 0 +pref = PotentialRef(id="pref", element=bus1, phase="n") + +# A power load on the second bus +load = PowerLoad(id="load", bus=bus2, powers=[5000 + 1600j, 2500 + 800j, 0]) + +# Create a network and solve a load flow +en = ElectricalNetwork.from_element(bus1) +auth = ("username", "password") +en.solve_load_flow(auth=auth) + +# The current flowing into the line from bus1 +en.res_branches[["current1"]].transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('current1', 'absolute') | ('current1', 'angle') | +# |:----------------|---------------------------:|------------------------:| +# | ('switch', 'a') | 22.7321 | -17.7447 | +# | ('switch', 'b') | 11.3661 | -137.745 | +# | ('switch', 'c') | 0 | 0 | +# | ('switch', 'n') | 19.6866 | 132.255 | + +# The current flowing into the line from bus2 +en.res_branches[["current2"]].transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('current2', 'absolute') | ('current2', 'angle') | +# |:----------------|---------------------------:|------------------------:| +# | ('switch', 'a') | 22.7321 | 162.255 | +# | ('switch', 'b') | 11.3661 | 42.2553 | +# | ('switch', 'c') | 0 | 0 | +# | ('switch', 'n') | 19.6866 | -47.7447 | + +# The two currents are equal in magnitude and opposite in phase, as expected + +# The two buses have the same voltages +en.res_buses_voltages.transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('voltage', 'absolute') | ('voltage', 'angle') | +# |:---------------|--------------------------:|-----------------------:| +# | ('bus1', 'an') | 230.94 | 0 | +# | ('bus1', 'bn') | 230.94 | -120 | +# | ('bus1', 'cn') | 230.94 | 120 | +# | ('bus2', 'an') | 230.94 | 0 | +# | ('bus2', 'bn') | 230.94 | -120 | +# | ('bus2', 'cn') | 230.94 | 120 | +``` diff --git a/doc/models/Transformer/Center_Tapped_Transformer.md b/doc/models/Transformer/Center_Tapped_Transformer.md new file mode 100644 index 00000000..c97af4b0 --- /dev/null +++ b/doc/models/Transformer/Center_Tapped_Transformer.md @@ -0,0 +1,159 @@ +# Center-tapped transformer + +Center-tapped transformers allow to convert two phases primary connection into a split-phase +secondary connection, with the neutral at the center secondary winding. It is modelled as follows: + +````{tab} European standards +```{image} /_static/Transformer/European_Center_Tapped_Transformer.svg +:alt: Center-tapped transformer diagram +:width: 500px +:align: center +``` +```` + +````{tab} American standards +```{image} /_static/Transformer/American_Center_Tapped_Transformer.svg +:alt: Center-tapped transformer diagram +:width: 500px +:align: center +``` +```` + +Non-ideal models are used in *Roseau Load Flow*. The series impedances $\underline{Z_2}$ and the +magnetizing admittances $\underline{Y_{\mathrm{m}}}$ are included in the model. + +```{note} +Figures and equations on this page are related to a transformer connected between the phases $\mathrm{a}$ and $\mathrm +{b}$. Nevertheless, center-tapped transformers can be connected between any two phases **as long as the center phase +at the secondary is always $\mathrm{n}$**. +``` + +## Equations + +The following equations are used: + +```{math} +\begin{equation} + \left\{ + \begin{aligned} + \underline{U_{2,\mathrm{a}}^0} &= -\underline{U_{2,\mathrm{b}}^0} \\ + k \cdot \underline{U_{1,\mathrm{ab}}} &= \underline{U_{2,\mathrm{a}}^0} - \underline{U_{2,\mathrm + {b}}^0} \\ + \underline{I_{1,\mathrm{a}}} - Y_{\mathrm{m}} \cdot \underline{U_{1,\mathrm{ab}}} &= + -k \cdot \frac{\underline{I_{2,\mathrm{a}}} + \underline{I_{2,\mathrm{b}}}}{2} \\ + \underline{I_{1,\mathrm{a}}} &= -\underline{I_{1,\mathrm{n}}} \\ + \underline{I_{2,\mathrm{a}}} + \underline{I_{2,\mathrm{b}}} + \underline{I_{2,\mathrm{n}}} &= 0 \\ + \end{aligned} + \right. +\end{equation} +``` + +Where $\underline{Z_2}$ is the series impedance, $\underline{Y_{\mathrm{m}}}$ is the magnetizing +admittance of the transformer, $k$ the transformation ratio, and: + +```{math} +\begin{equation} + \left\{ + \begin{aligned} + \underline{U_{2,\mathrm{a}}^0} &= \underline{U_{2,\mathrm{a}}} - \frac{Z_2}{2} \underline{I_{2,\mathrm{a}}} \\ + \underline{U_{2,\mathrm{b}}^0} &= \underline{U_{2,\mathrm{b}}} - \frac{Z_2}{2} \underline{I_{2,\mathrm{b}}} + \end{aligned} + \right. +\end{equation} +``` + +## Example + +```python +import functools as ft +import numpy as np +from roseau.load_flow import ( + Bus, + ElectricalNetwork, + Ground, + Line, + LineParameters, + PotentialRef, + PowerLoad, + Transformer, + TransformerParameters, + VoltageSource, +) + +# Create a ground and set it as the reference potential +ground = Ground("ground") +pref = PotentialRef("pref", ground) + +# Create a source bus and voltage source (MV) +source_bus = Bus("source_bus", phases="abcn") +ground.connect(source_bus) +voltages = 20e3 / np.sqrt(3) * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]) +vs = VoltageSource(id="vs", bus=source_bus, voltages=voltages) + +# Create a load bus and a load (MV) +load_bus = Bus(id="load_bus", phases="abc") +mv_load = PowerLoad("mv_load", load_bus, powers=[10000, 10000, 10000]) + +# Connect the two MV buses with a line +lp = LineParameters.from_name_mv("S_AL_150") +line = Line("line", source_bus, load_bus, parameters=lp, length=1.0, ground=ground) + +# Create a low-voltage bus and a load +lv_bus = Bus(id="lv_bus", phases="abn") +ground.connect(lv_bus) +lv_load = PowerLoad("lv_load", lv_bus, powers=[-2000, 0]) + +# Create a transformer +tp = TransformerParameters( + "t", + "center", # <--- Center-tapped transformer + sn=630e3, + uhv=20000.0, + ulv=230.0, + i0=0.018, + p0=1300.0, + psc=6500.0, + vsc=0.04, +) +transformer = Transformer("transfo", load_bus, lv_bus, parameters=tp) + +# Create the network and solve the load flow +en = ElectricalNetwork.from_element(source_bus) +en.solve_load_flow() + +# The current flowing into the the line and transformer from the source side +en.res_branches[["current1"]].dropna().transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('current1', 'absolute') | ('current1', 'angle') | +# |:-----------------|---------------------------:|------------------------:| +# | ('line', 'a') | 1.58451 | 45.1554 | +# | ('line', 'b') | 1.28415 | -55.5618 | +# | ('line', 'c') | 1.84471 | -178 | +# | ('transfo', 'a') | 0.564366 | -63.5557 | +# | ('transfo', 'b') | 0.564366 | 116.444 | + +# The current flowing into the line and transformer from the load side +en.res_branches[["current2"]].transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('current2', 'absolute') | ('current2', 'angle') | +# |:-----------------|---------------------------:|------------------------:| +# | ('line', 'a') | 1.22632 | 155.665 | +# | ('line', 'b') | 0.726784 | 19.6741 | +# | ('line', 'c') | 0.866034 | -60.0009 | +# | ('transfo', 'a') | 17.3904 | 30.0135 | +# | ('transfo', 'b') | 0 | 0 | +# | ('transfo', 'n') | 17.3904 | -149.987 | +# We can see the secondary phase "b" of the transformer does not carry any current as +# the load has 0VA on this phase. + +# The voltages at the buses of the network +en.res_buses_voltages.transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('voltage', 'absolute') | ('voltage', 'angle') | +# |:---------------------|--------------------------:|-----------------------:| +# | ('source_bus', 'an') | 11547 | 9.20565e-25 | +# | ('source_bus', 'bn') | 11547 | -120 | +# | ('source_bus', 'cn') | 11547 | 120 | +# | ('load_bus', 'ab') | 19999.8 | 29.9994 | +# | ('load_bus', 'bc') | 19999.9 | -90.0009 | +# | ('load_bus', 'ca') | 19999.7 | 149.999 | +# | ('lv_bus', 'an') | 115.006 | 30.0135 | +# | ('lv_bus', 'bn') | 114.999 | -150.001 | +``` diff --git a/doc/models/Transformer/Single_Phase_Transformer.md b/doc/models/Transformer/Single_Phase_Transformer.md new file mode 100644 index 00000000..a1eab472 --- /dev/null +++ b/doc/models/Transformer/Single_Phase_Transformer.md @@ -0,0 +1,136 @@ +# Single-phase transformer + +Single-phase transformers are modelled as follows: + +````{tab} European standards +```{image} /_static/Transformer/European_Single_Phase_Transformer.svg +:alt: Single-phase transformer diagram +:width: 500px +:align: center +``` +```` + +````{tab} American standards +```{image} /_static/Transformer/American_Single_Phase_Transformer.svg +:alt: Single-phase transformer diagram +:width: 500px +:align: center +``` +```` + +Non-ideal transformer models are used in *Roseau Load Flow*. The series impedances $\underline{Z_2}$ +and the magnetizing admittances $\underline{Y_{\mathrm{m}}}$ are included in the model. + +```{note} +Figures and equations on this page are related to a transformer connected between the phases $\mathrm{a}$ and $\mathrm +{n}$. Nevertheless, single-phase transformers can be connected between any two phases. +``` + +## Equations + +The following equations are used: + +```{math} +\begin{equation} + \left\{ + \begin{aligned} + k \cdot \underline{U_{1,\mathrm{a}}} &= \underline{U_{2,\mathrm{a}}} - \underline{Z_2} \cdot \underline{I_{2, + \mathrm{a}}} \\ + \underline{I_{1,\mathrm{a}}} - \underline{Y_{\mathrm{m}}} \cdot \underline{U_{1,\mathrm{a}}} &= -k \cdot + \underline{I_{2,\mathrm{a}}} \\ + \underline{I_{1,\mathrm{a}}} &= -\underline{I_{1,\mathrm{n}}} \\ + \underline{I_{2,\mathrm{a}}} &= -\underline{I_{2,\mathrm{n}}} \\ + \end{aligned} + \right. +\end{equation} +``` + +Where $\underline{Z_2}$ is the series impedance, $\underline{Y_{\mathrm{m}}}$ is the magnetizing +admittance of the transformer, and $k$ the transformation ratio. + +## Example + +The following examples shows a single-phase load connected via an isolating single-phase transformer +to a three-phase voltage source. + +```python +import functools as ft +import numpy as np +from roseau.load_flow import ( + Bus, + ElectricalNetwork, + PotentialRef, + PowerLoad, + Transformer, + TransformerParameters, + VoltageSource, +) + +# Create the source bus and the voltage source +bus1 = Bus(id="bus1", phases="abcn") +pref1 = PotentialRef(id="pref1", element=bus1) + +voltages = 400 / np.sqrt(3) * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]) +vs = VoltageSource(id="vs", bus=bus1, voltages=voltages) + +# Create the load bus and the load +bus2 = Bus(id="bus2", phases="an") +pref2 = PotentialRef(id="pref2", element=bus2) + +load = PowerLoad(id="load", bus=bus2, powers=[100], phases="an") + +# Create the transformer +tp = TransformerParameters( + id="Example_TP", + type="single", # <--- Single-phase transformer + sn=800, + uhv=400, + ulv=400, + i0=0.022, + p0=17, + psc=25, + vsc=0.032, +) +transformer = Transformer( + id="transfo", + bus1=bus1, + bus2=bus2, + phases1="an", + phases2="an", + parameters=tp, +) + +# Create the network and solve the load flow +en = ElectricalNetwork.from_element(bus1) +en.solve_load_flow() + +# The current flowing into the transformer from the source side +en.res_branches[["current1"]].transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('current1', 'absolute') | ('current1', 'angle') | +# |:-----------------|---------------------------:|------------------------:| +# | ('transfo', 'a') | 0.462811 | -0.956008 | +# | ('transfo', 'n') | 0.462811 | 179.044 | + +# The current flowing into the transformer from the load side +en.res_branches[["current2"]].transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('current2', 'absolute') | ('current2', 'angle') | +# |:-----------------|---------------------------:|------------------------:| +# | ('transfo', 'a') | 0.438211 | 179.85 | +# | ('transfo', 'n') | 0.438211 | -0.149761 | + +# The power flow in the transformer +en.res_branches[["power1", "power2"]].abs() +# | | power1 | power2 | +# |:-----------------|---------:|---------:| +# | ('transfo', 'a') | 106.882 | 100 | +# | ('transfo', 'n') | 0 | 0 | + +# The voltages at the buses of the network +en.res_buses_voltages.transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('voltage', 'absolute') | ('voltage', 'angle') | +# |:---------------|--------------------------:|-----------------------:| +# | ('bus1', 'an') | 230.94 | 0 | +# | ('bus1', 'bn') | 230.94 | -120 | +# | ('bus1', 'cn') | 230.94 | 120 | +# | ('bus2', 'an') | 228.2 | -0.149761 | +``` diff --git a/doc/models/Transformer/Three_Phase_Transformer.md b/doc/models/Transformer/Three_Phase_Transformer.md new file mode 100644 index 00000000..0e464336 --- /dev/null +++ b/doc/models/Transformer/Three_Phase_Transformer.md @@ -0,0 +1,677 @@ +(three-phase-transformer)= +# Three-phase transformer + +Three-phase transformers are modeled with three spearate single-phase non-ideal transformers. The +windings of the individual transformers are connected with different configurations to the primary +side (generally the high voltage side) and to the secondary side (generally the low voltage side). +The non-ideal transformer losses are represented by $\underline{Z_2}$ the series impedances and +$\underline{Y_{\mathrm{m}}}$ the magnetizing admittances. + +````{tab} European standards +```{image} /_static/Transformer/European_Three_Phase_Transformer.svg +:alt: Three-phase transformer diagram +:width: 700px +:align: center +``` +```` + +````{tab} American standards +```{image} /_static/Transformer/American_Three_Phase_Transformer.svg +:alt: Three-phase transformer diagram +:width: 700px +:align: center +``` +```` + +For example, the windings with a $Dyn11$ configuration are represented by the following diagram: + +````{tab} European standards +```{image} /_static/Transformer/European_Dyn11.svg +:alt: Dyn11 windings diagram +:width: 700px +:align: center +``` +```` + +````{tab} American standards +```{image} /_static/Transformer/American_Dyn11.svg +:alt: Dyn11 windings diagram +:width: 700px +:align: center +``` +```` + +## Windings + +There are several ways to connect the windings of the individual internal transformers in *Roseau Load +Flow*. They are represented in the following windings diagrams: + +### Wye secondary + +```{list-table} +:class: borderless +:widths: 400 400 + +* - ![image](/_static/Transformer/Windings_Dy11.svg) + - ![image](/_static/Transformer/Windings_Yy0.svg) +* - ![image](/_static/Transformer/Windings_Dy5.svg) + - ![image](/_static/Transformer/Windings_Yy6.svg) +``` + +### Delta secondary + +```{list-table} +:class: borderless +:widths: 400 400 + +* - ![image](/_static/Transformer/Windings_Dd0.svg) + - ![image](/_static/Transformer/Windings_Yd11.svg) +* - ![image](/_static/Transformer/Windings_Dd6.svg) + - ![image](/_static/Transformer/Windings_Yd5.svg) +``` + +### Zigzag secondary + +```{list-table} +:class: borderless +:widths: 400 400 + +* - ![image](/_static/Transformer/Windings_Dz0.svg) + - ![image](/_static/Transformer/Windings_Yz11.svg) +* - ![image](/_static/Transformer/Windings_Dz6.svg) + - ![image](/_static/Transformer/Windings_Yz5.svg) +``` + +## Equations + +The following equations are used to model 3-phase transformers: + +```{math} +\begin{equation} + \left\{ + \begin{aligned} + K_{\mathrm{UXYZ}} \cdot \underline{U_{\mathrm{XYZ}}} + &= K_{\mathrm{VABC}} \cdot \underline{V_{\mathrm{ABC}}} - K_{\mathrm{N}} \cdot \underline{V_{\mathrm{N}}} \\ + K_{\mathrm{Uxyz}} \cdot \left( M_{\mathrm{TV}}\cdot \underline{U_{\mathrm{XYZ}}} + \underline{Z_2} \cdot + \underline{I_{\mathrm{xyz}}} \right) + &= K_{\mathrm{Vabc}} \cdot \underline{V_{\mathrm{abc}}} - K_{\mathrm{n}} \cdot \underline{V_{\mathrm{n}}} \\ + K_{\mathrm{IABC}} \cdot \underline{I_{\mathrm{ABC}}} &= K_{\mathrm{IXYZ}} \cdot + \left( \underline{Y_{\mathrm{m}}} \cdot \underline{U_{\mathrm{XYZ}}} + M_{\mathrm{TI}} \cdot + \underline{I_{\mathrm{xyz}}} \right)\\ + K_{\mathrm{Iabc}} \cdot \underline{I_{\mathrm{abc}}} &= K_{\mathrm{Ixyz}} \cdot \underline{I_{\mathrm{xyz}}} \\ + \underline{I_{\mathrm{N}}} &= - K_{\mathrm{N}}^\top \cdot \underline{I_{\mathrm{ABC}}} \\ + \underline{I_{\mathrm{n}}} &= - K_{\mathrm{n}}^\top \cdot \underline{I_{\mathrm{abc}}} + \end{aligned} + \right. +\end{equation} +``` + +Where $\underline{Z_2}$ is the series impedance and $\underline{Y_{\mathrm{m}}}$ is the magnetizing +admittance of the transformer. The other quantities are the matrices defined below. + +## Matrices + +The following matrices are used to model the windings configurations described above: + +### Transformation matrices + +```{list-table} +:class: borderless +:header-rows: 1 +:stub-columns: 1 +:align: center + +* - Winding + - $M_{\mathrm{TV}}$ + - $M_{\mathrm{TI}}$ + +* - Dd, Yy, Dy and Yd + - $k\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $k\begin{pmatrix} + -1 & 0 & 0\\ + 0 & -1 & 0\\ + 0 & 0 & -1 + \end{pmatrix}$ + +* - Yz + - $k\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $k\begin{pmatrix} + -1 & 0 & 1\\ + 1 & -1 & 0\\ + 0 & 1 & -1 + \end{pmatrix}$ + +* - Dz + - $k\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $k\begin{pmatrix} + -1 & 1 & 0\\ + 0 & -1 & 1\\ + 1 & 0 & -1 + \end{pmatrix}$ +``` + +Where $k$ is the tranformation ratio of the internal transformers defined as: +```{list-table} +:class: borderless +:header-rows: 1 +:stub-columns: 1 +:align: center + +* - Winding + - $k$ +* - Dy + - $\dfrac{U_{\mathrm{LV}}}{\sqrt{3} \cdot U_{\mathrm{HV}}}$ +* - Yy + - $\dfrac{U_{\mathrm{LV}}}{U_{\mathrm{HV}}}$ +* - Dd + - $\dfrac{U_{\mathrm{LV}}}{U_{\mathrm{HV}}}$ +* - Yd + - $\dfrac{\sqrt{3} \cdot U_{\mathrm{LV}}}{U_{\mathrm{HV}}}$ +* - Dz + - $\dfrac{U_{\mathrm{LV}}}{3 \cdot U_{\mathrm{HV}}}$ +* - Yz + - $\dfrac{U_{\mathrm{LV}}}{\sqrt{3} \cdot U_{\mathrm{HV}}}$ +``` + +### Primary winding matrices + +```{list-table} +:class: borderless +:header-rows: 1 +:stub-columns: 1 +:align: center + +* - Winding + - $K_{\mathrm{VABC}}$ + - $K_{\mathrm{UXYZ}}$ + - $K_{\mathrm{IABC}}$ + - $K_{\mathrm{IXYZ}}$ + - $K_{\mathrm{N}}$ + +* - Dx + - $\begin{pmatrix} + 1 & -1 & 0\\ + 0 & 1 & -1\\ + -1 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & -1\\ + -1 & 1 & 0\\ + 0 & -1 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 0\\ + 0\\ + 0 + \end{pmatrix}$ + +* - Yx + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1\\ + 1\\ + 1 + \end{pmatrix}$ + +* - Zx + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & -1\\ + -1 & 1 & 0\\ + 0 & -1 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1\\ + 1\\ + 1 + \end{pmatrix}$ +``` + +### Secondary windings matrices + +#### Direct + +```{list-table} +:class: borderless +:header-rows: 1 +:stub-columns: 1 +:align: center + +* - Winding + - $K_{\mathrm{Vabc}}$ + - $K_{\mathrm{Uxyz}}$ + - $K_{\mathrm{Iabc}}$ + - $K_{\mathrm{Ixyz}}$ + - $K_{\mathrm{n}}$ +* - Dd0 + - $\begin{pmatrix} + 1 & -1 & 0\\ + 0 & 1 & -1\\ + -1 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & -1\\ + -1 & 1 & 0\\ + 0 & -1 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 0\\ + 0\\ + 0 + \end{pmatrix}$ + +* - Yd11 + - $\begin{pmatrix} + 1 & 0 & -1\\ + -1 & 1 & 0\\ + 0 & -1 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & -1 & 0\\ + 0 & 1 & -1\\ + -1 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 0\\ + 0\\ + 0 + \end{pmatrix}$ + +* - Yy0 and Dy11 + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1\\ + 1\\ + 1 + \end{pmatrix}$ + +* - Dz0 + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & -1\\ + -1 & 1 & 0\\ + 0 & -1 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1\\ + 1\\ + 1 + \end{pmatrix}$ + +* - Yz11 + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & -1 & 0\\ + 0 & 1 & -1\\ + -1 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1\\ + 1\\ + 1 + \end{pmatrix}$ +``` + +#### Inverse + +```{list-table} +:class: borderless +:header-rows: 1 +:stub-columns: 1 +:align: center + +* - Winding + - $K_{\mathrm{Vabc}}$ + - $K_{\mathrm{Uxyz}}$ + - $K_{\mathrm{Iabc}}$ + - $K_{\mathrm{Ixyz}}$ + - $K_{\mathrm{n}}$ +* - Dd6 + - $\begin{pmatrix} + 1 & -1 & 0\\ + 0 & 1 & -1\\ + -1 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + -1 & 0 & 0\\ + 0 & -1 & 0\\ + 0 & 0 & -1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + -1 & 0 & 1\\ + 1 & -1 & 0\\ + 0 & 1 & -1 + \end{pmatrix}$ + - $\begin{pmatrix} + 0\\ + 0\\ + 0 + \end{pmatrix}$ + +* - Yd5 + - $\begin{pmatrix} + 1 & 0 & -1\\ + -1 & 1 & 0\\ + 0 & -1 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + -1 & 0 & 0\\ + 0 & -1 & 0\\ + 0 & 0 & -1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + -1 & 1 & 0\\ + 0 & -1 & 1\\ + 1 & 0 & -1 + \end{pmatrix}$ + - $\begin{pmatrix} + 0\\ + 0\\ + 0 + \end{pmatrix}$ + +* - Yy6 and Dy5 + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + -1 & 0 & 0\\ + 0 & -1 & 0\\ + 0 & 0 & -1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + -1 & 0 & 0\\ + 0 & -1 & 0\\ + 0 & 0 & -1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1\\ + 1\\ + 1 + \end{pmatrix}$ + +* - Dz6 + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + -1 & 0 & 1\\ + 1 & -1 & 0\\ + 0 & 1 & -1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + -1 & 0 & 0\\ + 0 & -1 & 0\\ + 0 & 0 & -1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1\\ + 1\\ + 1 + \end{pmatrix}$ + +* - Yz5 + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + -1 & 1 & 0\\ + 0 & -1 & 1\\ + 1 & 0 & -1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1 & 0 & 0\\ + 0 & 1 & 0\\ + 0 & 0 & 1 + \end{pmatrix}$ + - $\begin{pmatrix} + -1 & 0 & 0\\ + 0 & -1 & 0\\ + 0 & 0 & -1 + \end{pmatrix}$ + - $\begin{pmatrix} + 1\\ + 1\\ + 1 + \end{pmatrix}$ +``` + +## Example + +The following example shows a 160kVA MV/LV transformer with a $Dyn11$ configuration that +connects a voltage source on the MV network to a load on the LV network. + +```python +import functools as ft +import numpy as np +from roseau.load_flow import ( + Bus, + ElectricalNetwork, + Ground, + PotentialRef, + PowerLoad, + Transformer, + TransformerParameters, + VoltageSource, +) + +# Create a MV bus +bus_mv = Bus(id="bus_mv", phases="abc") + +# Create a LV bus +bus_lv = Bus(id="bus_lv", phases="abcn") + +# Set the potential references of the MV and LV networks +pref_mv = PotentialRef(id="pref_mv", element=bus_mv) +pref_lv = PotentialRef(id="pref_lv", element=bus_lv, phase="n") + +# Create a voltage source and connect it to the MV bus +voltages = 20e3 * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]) +vs = VoltageSource(id="vs", bus=bus_mv, voltages=voltages) + +# Create a MV/LV transformer +tp = TransformerParameters( + id="SE_Minera_A0Ak_100_kVA", + type="Dyn11", + sn=100.0 * 1e3, + uhv=20e3, + ulv=400.0, + i0=0.5 / 100, + p0=145.0, + psc=1250.0, + vsc=4.0 / 100, +) +transformer = Transformer( + id="transfo", + bus1=bus_mv, + bus2=bus_lv, + phases1="abc", + phases2="abcn", + parameters=tp, + tap=1.025, +) + +# Create a LV load +load = PowerLoad(id="load", bus=bus_lv, phases="abcn", powers=[3e3, 3e3, 3e3]) + +# Create the network and solve the load flow +en = ElectricalNetwork.from_element(bus_mv) +auth = ("username", "password") +en.solve_load_flow(auth=auth) + +# The current flowing into the transformer from the MV bus +en.res_branches[["current1"]].dropna().transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('current1', 'absolute') | ('current1', 'angle') | +# |:-----------------|---------------------------:|------------------------:| +# | ('transfo', 'a') | 0.275904 | -38.8165 | +# | ('transfo', 'b') | 0.275904 | -158.817 | +# | ('transfo', 'c') | 0.275904 | 81.1835 | + +# The current flowing into the transformer from the LV bus +en.res_branches[["current2"]].transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('current2', 'absolute') | ('current2', 'angle') | +# |:-----------------|---------------------------:|------------------------:| +# | ('transfo', 'a') | 12.6872 | 179.813 | +# | ('transfo', 'b') | 12.6872 | 59.8133 | +# | ('transfo', 'c') | 12.6872 | -60.1867 | +# | ('transfo', 'n') | 2.25156e-13 | -80.4634 | + +# The voltages at the buses of the network +en.res_buses_voltages.transform([np.abs, ft.partial(np.angle, deg=True)]) +# | | ('voltage', 'absolute') | ('voltage', 'angle') | +# |:-----------------|--------------------------:|-----------------------:| +# | ('bus_mv', 'ab') | 20000 | 0 | +# | ('bus_mv', 'bc') | 20000 | -120 | +# | ('bus_mv', 'ca') | 20000 | 120 | +# | ('bus_lv', 'an') | 236.459 | -0.186695 | +# | ('bus_lv', 'bn') | 236.459 | -120.187 | +# | ('bus_lv', 'cn') | 236.459 | 119.813 | +``` diff --git a/doc/models/Transformer/index.md b/doc/models/Transformer/index.md new file mode 100644 index 00000000..366e9b70 --- /dev/null +++ b/doc/models/Transformer/index.md @@ -0,0 +1,149 @@ +# Transformers + +## Definition + +*Roseau Load Flow* can model single-phase, center-tapped and three-phase transformers. + +(models-transformer_parameters)= +## Transformer parameters + +Transformers are modeled with the following parameters: +* $U_{1,\mathrm{nom.}}$: the phase-to-phase nominal voltage of the high voltages side (in V). This + parameter is called `uhv` in the code. +* $U_{2,\mathrm{nom.}}$: the phase-to-phase nominal voltage of the low voltages side (in V). This + parameter is called `ulv` in the code. +* $S_{\mathrm{nom.}}$: the nominal power of the transformer (in VA). This parameter is called `sn` + in the code. +* $i_0$: the current during off-load test (in %). This parameter is called `i0` in the code. +* $P_0$: the losses during off-load test (in W). This parameter is called `p0` in the code. +* $P_{\mathrm{sc}}$: the losses during short circuit test (in W). This parameter is called `psc` + in the code. +* $V_{\mathrm{sc}}$: the voltage on LV side during short circuit test (in %). This parameter is + called `vsc` in the code. + +For three-phase transformers, the windings configuration is also required. See the dedicated page +of [three-phase transformers](Three_Phase_Transformer.md) for more details. + +These parameters come from off-load and short-circuit tests. Internally, these parameters are +converted into a series impedance $\underline{Z_2}$ and the magnetizing admittance +$\underline{Y_{\mathrm{m}}}$. + +First, we define the following quantities: +* $i_{1,\mathrm{nom.}}=\dfrac{S_{\mathrm{nom.}}}{U_{1,\mathrm{nom.}}}$: the nominal current of the + winding on the primary side of the transformer +* $i_{2,\mathrm{nom.}}=\dfrac{S_{\mathrm{nom.}}}{U_{2,\mathrm{nom.}}}$: the nominal current of the + winding on the secondary side of the transformer. + +### Off-load test + +We note $P_0$ the losses and $i_1^0$ the current in the primary winding of the transformer during +this test. The following values can be computed: + +```{math} +\begin{aligned} + i_0&=100\cdot \frac{i_1^0}{i_{1,\mathrm{nom.}}} \qquad \text{(in %)} \\ + S_0 &= U_0\cdot i_1^0 = U_{1,\mathrm{nom.}}\cdot (i_0\cdot i_{1,\mathrm{nom.}}) = i_0\cdot S_{\mathrm{nom.}} + \qquad \text{(in VA)}\\ + R_{\mathrm{iron}} &= \dfrac{U_{1,\mathrm{nom.}}^2}{P_0} \qquad \text{(in Ohm)}\\ + L_{\mathrm{m}} &= \dfrac{U_{1,\mathrm{nom.}}}{\omega\sqrt{S_0^2-P_0^2}} \text{(in H)} +\end{aligned} +``` + +Then, $\underline{Y_{\mathrm{m}}}$ can be deduced: +```{math} +\underline{Y_{\mathrm{m}}} = \left\{ + \begin{aligned} + \frac{1}{R_{\mathrm{iron}}+j\omega L_{\mathrm{m}}} & \qquad \text{if } i_0\cdot S_{\mathrm{nom.}} > P_0 \\ + \frac{1}{R_{\mathrm{iron}}} & \qquad \text{otherwise} + \end{aligned} +\right. +``` + +### Short-circuit test + +We note $P_{\mathrm{sc}}$ the losses, $U_{2,\mathrm{sc}}$ the voltage on LV side during this test. The following +values can be computed: + +```{math} +\begin{aligned} + V_{\mathrm{sc}}&= 100\cdot \frac{U_{2,\mathrm{sc}}}{U_{2,\mathrm{nom.}}} \qquad \text{(in %)} \\ + Z_2&=\frac{U_{2,\mathrm{sc}}}{i_{2,\mathrm{nom.}}}=U_{2,\mathrm{sc}}\cdot\frac{U_{2,\mathrm{nom.}}}{ + S_{\mathrm{nom.}}} =V_{\mathrm{sc}}\cdot\frac{U_{2,\mathrm{nom.}}^2}{S_{\mathrm{nom.}}} \qquad \text{(in Ohm)}\\ + R_2&=\frac{P_{\mathrm{sc}}}{i_{2,\mathrm{nom.}}^2} = \frac{P_{\mathrm{sc}}\cdot U_{2,\mathrm{nom.}}^2}{ + S_{\mathrm{nom.}}^2} \qquad \text{(in Ohm)} \\ + X_2&= L_2\cdot\omega = \sqrt{Z_2^2-R_2^2} \qquad \text{(in Ohm)} +\end{aligned} +``` + +Then, $\underline{Z_2}$ can be deduced: +```{math} +\underline{Z_2} = R_2+j\cdot X_2 +``` + +## Usage + +To define the parameters of the transformers, use the `TransformerParameters` class. It takes as +arguments the elements described in the previous section and converts them into the series +impedance and the magnetizing admittance. The `type` argument of the constructor can take the +following values: + +* `"single"` to model a single-phase transformer +* `"center"` to model a center-tapped transformer +* Any windings (`"Dd0"`, `"Dz6"`, etc.) to model a three-phase transformer. + +```python +from roseau.load_flow import TransformerParameters, Q_ + +# The transformer parameters for a single-phase transformer +single_phase_transformer_parameters = TransformerParameters( + id="single_phase_transformer_parameters", + type="single", # <--- single-phase transformer + uhv=Q_(20, "kV"), + ulv=Q_(400, "V"), + sn=Q_(160, "kVA"), + p0=Q_(300, "W"), + i0=Q_(1.4, "%"), + psc=Q_(2000, "W"), + vsc=Q_(4, "%"), +) + +# The transformer parameters for a three-phase transformer +three_phase_transformer_parameters = TransformerParameters( + id="three_phase_transformer_parameters", + type="Dyn11", # <--- three-phase transformer with delta primary and wye secondary + uhv=Q_(20, "kV"), + ulv=Q_(400, "V"), + sn=Q_(160, "kVA"), + p0=Q_(300, "W"), + i0=Q_(1.4, "%"), + psc=Q_(2000, "W"), + vsc=Q_(4, "%"), +) + +# The transformer parameters for a center-tapped transformer +center_tapped_transformer_parameters = TransformerParameters( + id="center_tapped_transformer_parameters", + type="center", # <--- center-tapped transformer + uhv=Q_(20, "kV"), + ulv=Q_(400, "V"), + sn=Q_(160, "kVA"), + p0=Q_(300, "W"), + i0=Q_(1.4, "%"), + psc=Q_(2000, "W"), + vsc=Q_(4, "%"), +) +``` + +## Available models + +The following transformer models are available in *Roseau Load Flow*: + +```{toctree} +--- +maxdepth: 2 +caption: Transformers +--- +Single_Phase_Transformer +Three_Phase_Transformer +Center_Tapped_Transformer +``` diff --git a/doc/models/VoltageSource.md b/doc/models/VoltageSource.md new file mode 100644 index 00000000..b5c8554d --- /dev/null +++ b/doc/models/VoltageSource.md @@ -0,0 +1,110 @@ +# Voltage source + +## Definition + +It represents an ideal voltage source that maintains a fixed voltage independently of the load +resistance or the output current. + +## Connections + +A voltage source can be either star-connected or delta-connected depending on whether its phases +include a neutral or not. + +### Star (wye) connection + +The diagram of the star voltage source is: + +````{tab} European standards +```{image} /_static/VoltageSource/European_Star_Voltage_Source.svg +:alt: Star voltage source diagram +:width: 400px +:align: center +``` +```` +````{tab} American standards +```{image} /_static/VoltageSource/American_Star_Voltage_Source.svg +:alt: Star voltage source diagram +:width: 400px +:align: center +``` +```` +The equations that model a star voltage source are: + +```{math} +\left\{ + \begin{split} + \underline{V_{\mathrm{a}}}-\underline{V_{\mathrm{n}}} &= \underline{U_{\mathrm{an}}} \\ + \underline{V_{\mathrm{b}}}-\underline{V_{\mathrm{n}}} &= \underline{U_{\mathrm{bn}}} \\ + \underline{V_{\mathrm{c}}}-\underline{V_{\mathrm{n}}} &= \underline{U_{\mathrm{cn}}} + \end{split} +\right. +``` + +Where $\underline{U}\in\mathbb{C}^3$ is the voltage vector (user defined parameter) and +$\underline{V}\in\mathbb{C}^4$ is the node potentials vector (variable). + +### Delta connection + +The diagram of the delta voltage source is: + +````{tab} European standards +```{image} /_static/VoltageSource/European_Delta_Voltage_Source.svg +:alt: Delta voltage source diagram +:width: 400px +:align: center +``` +```` +````{tab} American standards +```{image} /_static/VoltageSource/American_Delta_Voltage_Source.svg +:alt: Delta voltage source diagram +:width: 400px +:align: center +``` +```` +The equations that model a delta voltage source are: + +```{math} +\left\{ + \begin{split} + \underline{V_{\mathrm{a}}}-\underline{V_{\mathrm{b}}} &= \underline{U_{\mathrm{ab}}} \\ + \underline{V_{\mathrm{b}}}-\underline{V_{\mathrm{c}}} &= \underline{U_{\mathrm{bc}}} \\ + \underline{V_{\mathrm{c}}}-\underline{V_{\mathrm{a}}} &= \underline{U_{\mathrm{ca}}} + \end{split} +\right. +``` + +Where $\underline{U}\in\mathbb{C}^3$ is the voltage vector (user defined parameter) and +$\underline{V}\in\mathbb{C}^3$ is the node potentials vector (variable). + + +## Usage + +A voltage source defined with a neutral phase is a star voltage source, otherwise it is a delta +voltage source. The voltage vector must have the same size as the number of the phase-to-phase +or phase-to-neutral connections of the source. + +```python +import numpy as np +from roseau.load_flow import Bus, VoltageSource + +bus = Bus(id="bus", phases="abcn") + +# Star connection +un = 400 / np.sqrt(3) # 400V phase-to-phase -> 230V phase-to-neutral +voltages = un * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]) +VoltageSource( + id="vs", bus=bus, phases="abcn", voltages=voltages +) # Voltages are considered phase-to-neutral because phases="abcn" + +# Delta connection +un = 400 # 400V phase-to-phase +voltages = un * np.exp([0, -2j * np.pi / 3, 2j * np.pi / 3]) +VoltageSource( + id="vs", bus=bus, phases="abc", voltages=voltages +) # Voltages are considered phase-to-phase because phases="abc" + +# Incorrect voltage vector +un = 400 +voltages = un * np.exp([0, -2j * np.pi / 3]) # Only two elements!! +VoltageSource(id="vs", bus=bus, phases="abc", voltages=voltages) # Error +``` diff --git a/doc/models/index.md b/doc/models/index.md new file mode 100644 index 00000000..e35cbe98 --- /dev/null +++ b/doc/models/index.md @@ -0,0 +1,18 @@ +# Models + +A description of the electrical models used for each component is available: + +```{toctree} +--- +maxdepth: 2 +caption: Models +--- +PotentialRef +Ground +Bus +VoltageSource +Load/index +Line/index +Switch +Transformer/index +``` diff --git a/doc/notebooks/Getting_Started.ipynb b/doc/notebooks/Getting_Started.ipynb index e7a61c50..2ba76cc3 100644 --- a/doc/notebooks/Getting_Started.ipynb +++ b/doc/notebooks/Getting_Started.ipynb @@ -7,7 +7,7 @@ "source": [ "# Getting started\n", "\n", - "*Make sure you have followed the* [installation instructions][installation].\n", + "*Make sure you have followed the* [installation instructions](../Installation.md).\n", "\n", "In this tutorial you will learn how to:\n", "\n", @@ -18,9 +18,7 @@ "5. Save the network and the results to the disk for later analysis;\n", "6. Load the saved network and the results from the disk.\n", "\n", - "Let's start by importing everything we will need.\n", - "\n", - "[installation]: https://roseautechnologies.github.io/Roseau_Load_Flow/installation" + "Let's start by importing everything we will need." ] }, { @@ -68,6 +66,9 @@ "\n", " A power load can be made flexible (controllable) by using the following class:\n", " * `FlexibleParameter`: This object defines the parameters of the flexible load's control (Maximum power, projection, type, etc.)\n", + "\n", + " Note that flexible loads are an [advanced](Advanced.ipynb#Usage-of-the-flexible-loads)\n", + " feature that most users don't need.\n", "* Sources:\n", " * `VoltageSource`: A voltage source has a constant voltage and an infinite power source.\n", "* Others:\n", @@ -81,7 +82,7 @@ "\n", "![Network](../_static/Getting_Started_Tutorial.svg)\n", "\n", - "[api-models]: https://roseautechnologies.github.io/Roseau_Load_Flow/autoapi/roseau/load_flow/models\n" + "[api-models]: ../autoapi/roseau/load_flow/models/index.html\n" ] }, { @@ -195,6 +196,16 @@ "\n", "`input` should never be used to read passwords and secret credentials as the terminal might save the password in\n", "plain text in its history. Use `getpass.getpass` that provides the necessary protections instead.\n", + "\n", + "\n", + "
\n", + "\n", + "**Tip:**\n", + "\n", + "Pycharm users who use the [Run/Debug](https://www.jetbrains.com/help/pycharm/run-debug-configuration-python.html)\n", + "functionality are encouraged to enable the \"Emulate terminal in output console\" if they want to\n", + "use `getpass.getpass` to avoid the execution blocking or warnings from `getpass` like\n", + "`GetPassWarning: Can not control echo on the terminal.`\n", "
\n" ] }, @@ -433,7 +444,7 @@ "\n", "**Important:**\n", "\n", - "Everywhere in `roseau_load_flow`, the `voltages` of an element depend on the element's `phases`.\n", + "Everywhere in `roseau-load-flow`, the `voltages` of an element depend on the element's `phases`.\n", "Voltages of elements connected in a *Star (wye)* configuration (elements that have a neutral connection indicated by the presence of the `'n'` char in their `phases` attribute) are the\n", "**phase-to-neutral** voltages. Voltages of elements connected in a *Delta* configuration (elements\n", "that do not have a neutral connection indicated by the absence of the `'n'` char from their\n", diff --git a/doc/notebooks/Short_Circuit.ipynb b/doc/notebooks/Short_Circuit.ipynb index e39c09fe..f0ff132a 100644 --- a/doc/notebooks/Short_Circuit.ipynb +++ b/doc/notebooks/Short_Circuit.ipynb @@ -2,18 +2,25 @@ "cells": [ { "cell_type": "markdown", + "metadata": { + "collapsed": false + }, "source": [ "# Short Circuit\n", "\n", "Let's see how we can make a short circuit calculation." - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 7, + "metadata": { + "ExecuteTime": { + "end_time": "2023-06-09T12:44:12.206802774Z", + "start_time": "2023-06-09T12:44:12.205783999Z" + }, + "collapsed": false + }, "outputs": [], "source": [ "import getpass\n", @@ -21,17 +28,13 @@ "import numpy as np\n", "\n", "from roseau.load_flow import *" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2023-06-09T12:44:12.206802774Z", - "start_time": "2023-06-09T12:44:12.205783999Z" - } - } + ] }, { "cell_type": "markdown", + "metadata": { + "collapsed": false + }, "source": [ "We will start by creating a simple network composed of two LV lines.\n", "As usual with short-circuit calculations, we won't add any loads.\n", @@ -39,17 +42,21 @@ "
\n", "\n", "**Note:**\n", - "While impedance and currents loads could technically be added to the network, it is not possible to add a power load on the same bus as the one we want to compute the short-circuit on. This is because having `S = UI*` with `U=0` is impossible.\n", + "While impedance and current loads could technically be added to the network, it is not possible to add a power load on the same bus as the one we want to compute the short-circuit on. This is because having `I = (S/U)*` with `U=0` is impossible.\n", "\n", "
" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 14, + "metadata": { + "ExecuteTime": { + "end_time": "2023-06-09T13:15:01.378991576Z", + "start_time": "2023-06-09T13:15:01.256773716Z" + }, + "collapsed": false + }, "outputs": [], "source": [ "# Create three buses\n", @@ -57,13 +64,13 @@ "bus1 = Bus(id=\"b1\", phases=\"abcn\")\n", "bus2 = Bus(id=\"b2\", phases=\"abcn\")\n", "\n", - "# Define the reference of potentials to be the neutral of the source bus\n", + "# Define the reference of potentials\n", "ground = Ground(id=\"gnd\")\n", - "pref = PotentialRef(id=\"pref\", element=ground) # Fix the potential of the ground at 0 V\n", + "pref = PotentialRef(id=\"pref\", element=ground)\n", "ground.connect(bus=source_bus)\n", "\n", "# Create a LV source at the first bus\n", - "un = 400 / np.sqrt(3) # Volts (phase-to-neutral because the source is connected to the neutral)\n", + "un = 400 / np.sqrt(3)\n", "source_voltages = [un, un * np.exp(-2j * np.pi / 3), un * np.exp(2j * np.pi / 3)]\n", "vs = VoltageSource(id=\"vs\", bus=source_bus, phases=\"abcn\", voltages=source_voltages)\n", "\n", @@ -75,74 +82,223 @@ "\n", "# Create network\n", "en = ElectricalNetwork.from_element(source_bus)" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2023-06-09T13:15:01.378991576Z", - "start_time": "2023-06-09T13:15:01.256773716Z" - } - } + ] }, { "cell_type": "markdown", + "metadata": { + "collapsed": false + }, "source": [ "## Phase-to-phase\n", "\n", - "We can now add a short circuit. Let's first make a phase-to-phase short circuit:" - ], - "metadata": { - "collapsed": false - } + "We can now add a short circuit. Let's first create a phase-to-phase short circuit:" + ] }, { "cell_type": "code", "execution_count": 3, - "outputs": [], - "source": [ - "bus2.short_circuit(\"a\", \"b\")" - ], "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2023-06-09T09:38:08.084249736Z", "start_time": "2023-06-09T09:38:08.065034794Z" - } - } + }, + "collapsed": false + }, + "outputs": [], + "source": [ + "bus2.short_circuit(\"a\", \"b\")" + ] }, { "cell_type": "markdown", - "source": [ - "Let's run the load flow, and get the current results." - ], "metadata": { "collapsed": false - } + }, + "source": [ + "Let's run the load flow, and get the current results." + ] }, { "cell_type": "code", "execution_count": 4, - "outputs": [], - "source": [ - "# Authentication\n", - "auth = (input(\"Please enter your username:\"), getpass.getpass(\"Please enter your password:\"))" - ], "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2023-06-09T09:38:19.164884465Z", "start_time": "2023-06-09T09:38:10.964544407Z" - } - } + }, + "collapsed": false + }, + "outputs": [], + "source": [ + "# Authentication\n", + "auth = (input(\"Please enter your username:\"), getpass.getpass(\"Please enter your password:\"))" + ] }, { "cell_type": "code", "execution_count": 6, + "metadata": { + "ExecuteTime": { + "end_time": "2023-06-09T09:38:25.046565516Z", + "start_time": "2023-06-09T09:38:25.001491534Z" + }, + "collapsed": false + }, "outputs": [ { "data": { - "text/plain": " current1 current2 \\\nbranch_id phase \nline1 a 376.726141+75.273614j -3.765079e+02-7.516544e+01j \n b -376.137057-74.958399j 3.761182e+02+7.496233e+01j \n c -0.4933660-0.4185120j 4.929085e-01+2.055072e-01j \n n -0.0957190+0.1032970j -1.031467e-01-2.394060e-03j \nline2 a 376.507942+75.165439j -3.764496e+02-7.493254e+01j \n b -376.118181-74.962326j 3.764496e+02+7.493254e+01j \n c -0.4929090-0.2055070j -1.421085e-14+1.136868e-13j \n n 0.1031470+0.0023940j 4.263256e-14+0.000000e+00j \n\n power1 power2 \\\nbranch_id phase \nline1 a 87001.175581-17383.696547j -6.962717e+04+2.413923e+04j \n b 58424.246079+66571.961003j -4.114025e+04-5.981005e+04j \n c -26.733437-00146.99870000j -1.490257e+01+1.267102e+02j \n n 0.0000000000+0.0000000000j -1.488217e-01+8.492953e-01j \nline2 a 69627.173712-24139.231256j -1.421789e+04+4.199279e+04j \n b 41140.247738+59810.047467j 1.421789e+04-4.199279e+04j \n c 14.902575-00126.71022600j 2.725799e-11+1.047715e-11j \n n 0.1488220000-0.8492950000j 2.078778e-13-1.048707e-12j \n\n potential1 potential2 \nbranch_id phase \nline1 a 230.9401008-0.0000000j 190.149827-26.152266j \n b -115.470054-200.000000j -74.719733-173.911328j \n c -115.470054+200.000000j -117.063139+208.259546j \n n 0.00000000+0.00000000j 1.63304500-8.19595200j \nline2 a 190.149827-26.152266j 57.686778-100.066962j \n b -74.719733-173.911328j 57.686778-100.066962j \n c -117.063139+208.259546j -120.249589+224.732658j \n n 1.63304500-8.19595200j 4.876033-024.5987340j ", - "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
current1current2power1power2potential1potential2
branch_idphase
line1a376.726141+75.273614j-3.765079e+02-7.516544e+01j87001.175581-17383.696547j-6.962717e+04+2.413923e+04j230.9401008-0.0000000j190.149827-26.152266j
b-376.137057-74.958399j3.761182e+02+7.496233e+01j58424.246079+66571.961003j-4.114025e+04-5.981005e+04j-115.470054-200.000000j-74.719733-173.911328j
c-0.4933660-0.4185120j4.929085e-01+2.055072e-01j-26.733437-00146.99870000j-1.490257e+01+1.267102e+02j-115.470054+200.000000j-117.063139+208.259546j
n-0.0957190+0.1032970j-1.031467e-01-2.394060e-03j0.0000000000+0.0000000000j-1.488217e-01+8.492953e-01j0.00000000+0.00000000j1.63304500-8.19595200j
line2a376.507942+75.165439j-3.764496e+02-7.493254e+01j69627.173712-24139.231256j-1.421789e+04+4.199279e+04j190.149827-26.152266j57.686778-100.066962j
b-376.118181-74.962326j3.764496e+02+7.493254e+01j41140.247738+59810.047467j1.421789e+04-4.199279e+04j-74.719733-173.911328j57.686778-100.066962j
c-0.4929090-0.2055070j-1.421085e-14+1.136868e-13j14.902575-00126.71022600j2.725799e-11+1.047715e-11j-117.063139+208.259546j-120.249589+224.732658j
n0.1031470+0.0023940j4.263256e-14+0.000000e+00j0.1488220000-0.8492950000j2.078778e-13-1.048707e-12j1.63304500-8.19595200j4.876033-024.5987340j
\n
" + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
current1current2power1power2potential1potential2
branch_idphase
line1a376.726141+75.273614j-3.765079e+02-7.516544e+01j87001.175581-17383.696547j-6.962717e+04+2.413923e+04j230.9401008-0.0000000j190.149827-26.152266j
b-376.137057-74.958399j3.761182e+02+7.496233e+01j58424.246079+66571.961003j-4.114025e+04-5.981005e+04j-115.470054-200.000000j-74.719733-173.911328j
c-0.4933660-0.4185120j4.929085e-01+2.055072e-01j-26.733437-00146.99870000j-1.490257e+01+1.267102e+02j-115.470054+200.000000j-117.063139+208.259546j
n-0.0957190+0.1032970j-1.031467e-01-2.394060e-03j0.0000000000+0.0000000000j-1.488217e-01+8.492953e-01j0.00000000+0.00000000j1.63304500-8.19595200j
line2a376.507942+75.165439j-3.764496e+02-7.493254e+01j69627.173712-24139.231256j-1.421789e+04+4.199279e+04j190.149827-26.152266j57.686778-100.066962j
b-376.118181-74.962326j3.764496e+02+7.493254e+01j41140.247738+59810.047467j1.421789e+04-4.199279e+04j-74.719733-173.911328j57.686778-100.066962j
c-0.4929090-0.2055070j-1.421085e-14+1.136868e-13j14.902575-00126.71022600j2.725799e-11+1.047715e-11j-117.063139+208.259546j-120.249589+224.732658j
n0.1031470+0.0023940j4.263256e-14+0.000000e+00j0.1488220000-0.8492950000j2.078778e-13-1.048707e-12j1.63304500-8.19595200j4.876033-024.5987340j
\n", + "
" + ], + "text/plain": [ + " current1 current2 \\\n", + "branch_id phase \n", + "line1 a 376.726141+75.273614j -3.765079e+02-7.516544e+01j \n", + " b -376.137057-74.958399j 3.761182e+02+7.496233e+01j \n", + " c -0.4933660-0.4185120j 4.929085e-01+2.055072e-01j \n", + " n -0.0957190+0.1032970j -1.031467e-01-2.394060e-03j \n", + "line2 a 376.507942+75.165439j -3.764496e+02-7.493254e+01j \n", + " b -376.118181-74.962326j 3.764496e+02+7.493254e+01j \n", + " c -0.4929090-0.2055070j -1.421085e-14+1.136868e-13j \n", + " n 0.1031470+0.0023940j 4.263256e-14+0.000000e+00j \n", + "\n", + " power1 power2 \\\n", + "branch_id phase \n", + "line1 a 87001.175581-17383.696547j -6.962717e+04+2.413923e+04j \n", + " b 58424.246079+66571.961003j -4.114025e+04-5.981005e+04j \n", + " c -26.733437-00146.99870000j -1.490257e+01+1.267102e+02j \n", + " n 0.0000000000+0.0000000000j -1.488217e-01+8.492953e-01j \n", + "line2 a 69627.173712-24139.231256j -1.421789e+04+4.199279e+04j \n", + " b 41140.247738+59810.047467j 1.421789e+04-4.199279e+04j \n", + " c 14.902575-00126.71022600j 2.725799e-11+1.047715e-11j \n", + " n 0.1488220000-0.8492950000j 2.078778e-13-1.048707e-12j \n", + "\n", + " potential1 potential2 \n", + "branch_id phase \n", + "line1 a 230.9401008-0.0000000j 190.149827-26.152266j \n", + " b -115.470054-200.000000j -74.719733-173.911328j \n", + " c -115.470054+200.000000j -117.063139+208.259546j \n", + " n 0.00000000+0.00000000j 1.63304500-8.19595200j \n", + "line2 a 190.149827-26.152266j 57.686778-100.066962j \n", + " b -74.719733-173.911328j 57.686778-100.066962j \n", + " c -117.063139+208.259546j -120.249589+224.732658j \n", + " n 1.63304500-8.19595200j 4.876033-024.5987340j " + ] }, "execution_count": 6, "metadata": {}, @@ -152,34 +308,198 @@ "source": [ "en.solve_load_flow(auth=auth)\n", "en.res_branches" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2023-06-09T09:38:25.046565516Z", - "start_time": "2023-06-09T09:38:25.001491534Z" - } - } + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "## Multi-phase\n", + "Looking at the line results of the second bus of the line \"line2\", which is \"bus2\" where we\n", + "added the short circuit, one can notice that:\n", "\n", - "We can also make a multi-phase short circuit, by first removing the current short-circuit and adding another one." - ], + "* the potentials of phases \"a\" and \"b\" are equal;\n", + "* the currents and powers in phases \"a\" and \"b\" are equal with opposite signs, i.e. the sum of the currents is zero;\n", + "* the currents and powers in these two phases are very high;\n", + "\n", + "which is expected from a short circuit." + ] + }, + { + "cell_type": "markdown", "metadata": { "collapsed": false - } + }, + "source": [ + "## Multi-phase\n", + "\n", + "It is possible to create short circuits between several phases, not only two. Let's first\n", + "remove the existing short-circuit then create a new one between phases \"a\", \"b\", and \"c\"." + ] }, { "cell_type": "code", "execution_count": 8, + "metadata": { + "ExecuteTime": { + "end_time": "2023-06-09T09:38:47.669356250Z", + "start_time": "2023-06-09T09:38:47.628914940Z" + }, + "collapsed": false + }, "outputs": [ { "data": { - "text/plain": " current1 current2 \\\nbranch_id phase \nline1 a 371.737757-146.296806j -3.715461e+02+1.463893e+02j \n b -325.125461-309.415778j 3.251080e+02+3.094177e+02j \n c -46.494657+455.595154j 4.650593e+01-4.557992e+02j \n n -0.11763900+0.11743000j -6.777239e-02-7.800686e-03j \nline2 a 371.546147-146.389264j -3.715851e+02+1.465620e+02j \n b -325.107990-309.417735j 3.252783e+02+3.093020e+02j \n c -46.505929+455.799198j 4.630677e+01-4.558639e+02j \n n 0.06777200+0.00780100j 7.105427e-15+4.263256e-14j \n\n power1 power2 \\\nbranch_id phase \nline1 a 85849.157555+33785.800020j -6.352586e+04-2.464708e+04j \n b 99425.410149+29296.835634j -7.575517e+04-2.003848e+04j \n c 96487.771322+43308.665615j -7.540992e+04-3.185850e+04j \n n 0.0000000000+0.0000000000j -4.016327e-01+5.328110e-01j \nline2 a 63525.864916+24647.076142j 3.541552e+03-1.646579e+03j \n b 75755.171610+20038.477314j 1.413844e+00+4.388761e+03j \n c 75409.916329+31858.500204j -3.542966e+03-2.742182e+03j \n n 0.4016330000-0.5328110000j -7.629415e-13-1.012519e-12j \n\n potential1 potential2 \nbranch_id phase \nline1 a 230.9401008+0.0000000j 170.626282-0.890279j \n b -115.470054-200.000000j -91.485558-148.706685j \n c -115.470054+200.000000j -85.882505+156.682747j \n n 0.00000000+0.00000000j 6.7417810-7.0857840j \nline2 a 170.6262802-0.8902790j -6.7353330+7.0878040j \n b -91.485558-148.706685j -6.7353330+7.0878040j \n c -85.882505+156.682747j -6.7353330+7.0878040j \n n 6.74178100-7.08578400j 20.205999-21.263413j ", - "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
current1current2power1power2potential1potential2
branch_idphase
line1a371.737757-146.296806j-3.715461e+02+1.463893e+02j85849.157555+33785.800020j-6.352586e+04-2.464708e+04j230.9401008+0.0000000j170.626282-0.890279j
b-325.125461-309.415778j3.251080e+02+3.094177e+02j99425.410149+29296.835634j-7.575517e+04-2.003848e+04j-115.470054-200.000000j-91.485558-148.706685j
c-46.494657+455.595154j4.650593e+01-4.557992e+02j96487.771322+43308.665615j-7.540992e+04-3.185850e+04j-115.470054+200.000000j-85.882505+156.682747j
n-0.11763900+0.11743000j-6.777239e-02-7.800686e-03j0.0000000000+0.0000000000j-4.016327e-01+5.328110e-01j0.00000000+0.00000000j6.7417810-7.0857840j
line2a371.546147-146.389264j-3.715851e+02+1.465620e+02j63525.864916+24647.076142j3.541552e+03-1.646579e+03j170.6262802-0.8902790j-6.7353330+7.0878040j
b-325.107990-309.417735j3.252783e+02+3.093020e+02j75755.171610+20038.477314j1.413844e+00+4.388761e+03j-91.485558-148.706685j-6.7353330+7.0878040j
c-46.505929+455.799198j4.630677e+01-4.558639e+02j75409.916329+31858.500204j-3.542966e+03-2.742182e+03j-85.882505+156.682747j-6.7353330+7.0878040j
n0.06777200+0.00780100j7.105427e-15+4.263256e-14j0.4016330000-0.5328110000j-7.629415e-13-1.012519e-12j6.74178100-7.08578400j20.205999-21.263413j
\n
" + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
current1current2power1power2potential1potential2
branch_idphase
line1a371.737757-146.296806j-3.715461e+02+1.463893e+02j85849.157555+33785.800020j-6.352586e+04-2.464708e+04j230.9401008+0.0000000j170.626282-0.890279j
b-325.125461-309.415778j3.251080e+02+3.094177e+02j99425.410149+29296.835634j-7.575517e+04-2.003848e+04j-115.470054-200.000000j-91.485558-148.706685j
c-46.494657+455.595154j4.650593e+01-4.557992e+02j96487.771322+43308.665615j-7.540992e+04-3.185850e+04j-115.470054+200.000000j-85.882505+156.682747j
n-0.11763900+0.11743000j-6.777239e-02-7.800686e-03j0.0000000000+0.0000000000j-4.016327e-01+5.328110e-01j0.00000000+0.00000000j6.7417810-7.0857840j
line2a371.546147-146.389264j-3.715851e+02+1.465620e+02j63525.864916+24647.076142j3.541552e+03-1.646579e+03j170.6262802-0.8902790j-6.7353330+7.0878040j
b-325.107990-309.417735j3.252783e+02+3.093020e+02j75755.171610+20038.477314j1.413844e+00+4.388761e+03j-91.485558-148.706685j-6.7353330+7.0878040j
c-46.505929+455.799198j4.630677e+01-4.558639e+02j75409.916329+31858.500204j-3.542966e+03-2.742182e+03j-85.882505+156.682747j-6.7353330+7.0878040j
n0.06777200+0.00780100j7.105427e-15+4.263256e-14j0.4016330000-0.5328110000j-7.629415e-13-1.012519e-12j6.74178100-7.08578400j20.205999-21.263413j
\n", + "
" + ], + "text/plain": [ + " current1 current2 \\\n", + "branch_id phase \n", + "line1 a 371.737757-146.296806j -3.715461e+02+1.463893e+02j \n", + " b -325.125461-309.415778j 3.251080e+02+3.094177e+02j \n", + " c -46.494657+455.595154j 4.650593e+01-4.557992e+02j \n", + " n -0.11763900+0.11743000j -6.777239e-02-7.800686e-03j \n", + "line2 a 371.546147-146.389264j -3.715851e+02+1.465620e+02j \n", + " b -325.107990-309.417735j 3.252783e+02+3.093020e+02j \n", + " c -46.505929+455.799198j 4.630677e+01-4.558639e+02j \n", + " n 0.06777200+0.00780100j 7.105427e-15+4.263256e-14j \n", + "\n", + " power1 power2 \\\n", + "branch_id phase \n", + "line1 a 85849.157555+33785.800020j -6.352586e+04-2.464708e+04j \n", + " b 99425.410149+29296.835634j -7.575517e+04-2.003848e+04j \n", + " c 96487.771322+43308.665615j -7.540992e+04-3.185850e+04j \n", + " n 0.0000000000+0.0000000000j -4.016327e-01+5.328110e-01j \n", + "line2 a 63525.864916+24647.076142j 3.541552e+03-1.646579e+03j \n", + " b 75755.171610+20038.477314j 1.413844e+00+4.388761e+03j \n", + " c 75409.916329+31858.500204j -3.542966e+03-2.742182e+03j \n", + " n 0.4016330000-0.5328110000j -7.629415e-13-1.012519e-12j \n", + "\n", + " potential1 potential2 \n", + "branch_id phase \n", + "line1 a 230.9401008+0.0000000j 170.626282-0.890279j \n", + " b -115.470054-200.000000j -91.485558-148.706685j \n", + " c -115.470054+200.000000j -85.882505+156.682747j \n", + " n 0.00000000+0.00000000j 6.7417810-7.0857840j \n", + "line2 a 170.6262802-0.8902790j -6.7353330+7.0878040j \n", + " b -91.485558-148.706685j -6.7353330+7.0878040j \n", + " c -85.882505+156.682747j -6.7353330+7.0878040j \n", + " n 6.74178100-7.08578400j 20.205999-21.263413j " + ] }, "execution_count": 8, "metadata": {}, @@ -191,34 +511,192 @@ "bus2.short_circuit(\"a\", \"b\", \"c\")\n", "en.solve_load_flow(auth=auth)\n", "en.res_branches" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2023-06-09T09:38:47.669356250Z", - "start_time": "2023-06-09T09:38:47.628914940Z" - } - } + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "## Phase-to-ground\n", - "\n", - "Finally, we can make a phase-to-ground short-circuit." - ], + "Now the potentials of the three phases are equal and the currents and powers add up to\n", + "zero at the bus where the short circuit is applied." + ] + }, + { + "cell_type": "markdown", "metadata": { "collapsed": false - } + }, + "source": [ + "## Phase-to-ground\n", + "\n", + "Phase-to-ground short-circuits are also possible. Let's remove the existing short-circuit\n", + "and create a new one between phase \"a\" and ground." + ] }, { "cell_type": "code", "execution_count": 15, + "metadata": { + "ExecuteTime": { + "end_time": "2023-06-09T13:15:05.411101257Z", + "start_time": "2023-06-09T13:15:05.383349808Z" + }, + "collapsed": false + }, "outputs": [ { "data": { - "text/plain": " current1 current2 \\\nbranch_id phase \nline1 a 96.012654-188.549830j -9.579721e+01+1.886470e+02j \n b 0.5278520-0.4176090j -5.447323e-01+4.163191e-01j \n c -0.4126860-0.5103670j 4.341498e-01+2.786264e-01j \n n -0.0396740-0.0650550j -1.739503e-01+1.803321e-01j \nline2 a 95.797205-188.647037j -9.590970e+01+1.889045e+02j \n b 0.5447320-0.4163190j 1.136868e-13-5.684342e-14j \n c -0.4341500-0.2786260j -5.684342e-14-1.136868e-13j \n n 0.1739500-0.1803320j 2.842171e-14+4.263256e-14j \n\n power1 power2 \\\nbranch_id phase \nline1 a 22173.172540+43543.718061j -1.685871e+04-2.947666e+04j \n b 22.570709-00153.79182900j -3.386010e+00+1.921577e+02j \n c -54.420413-00141.46933500j -2.119180e+01+1.217538e+02j \n n 0.0000000000+0.0000000000j 4.190759e+00+1.361504e+01j \nline2 a 16858.712030+29476.655117j 0.000000e+00+0.000000e+00j \n b 3.386010-000192.157653000j -1.469214e-11-4.671278e-11j \n c 21.191795-00121.75379700j -1.998991e-13-3.635331e-11j \n n -4.190759-00013.615042000j -7.607391e-12+4.295299e-12j \n\n potential1 potential2 \nbranch_id phase \nline1 a 230.9401008-0.0000000j 160.2978106-7.9652950j \n b -115.470054-200.000000j -166.266602-225.684569j \n c -115.470054+200.000000j -162.048885+176.443020j \n n 0.00000000+0.00000000j -50.7214930-25.6873780j \nline2 a 160.2978106-7.9652950j 0.00000000+0.00000000j \n b -166.266602-225.684569j -267.742704-277.018629j \n c -162.048885+176.443020j -255.110334+129.313498j \n n -50.7214930-25.6873780j -152.108420-77.035237j ", - "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
current1current2power1power2potential1potential2
branch_idphase
line1a96.012654-188.549830j-9.579721e+01+1.886470e+02j22173.172540+43543.718061j-1.685871e+04-2.947666e+04j230.9401008-0.0000000j160.2978106-7.9652950j
b0.5278520-0.4176090j-5.447323e-01+4.163191e-01j22.570709-00153.79182900j-3.386010e+00+1.921577e+02j-115.470054-200.000000j-166.266602-225.684569j
c-0.4126860-0.5103670j4.341498e-01+2.786264e-01j-54.420413-00141.46933500j-2.119180e+01+1.217538e+02j-115.470054+200.000000j-162.048885+176.443020j
n-0.0396740-0.0650550j-1.739503e-01+1.803321e-01j0.0000000000+0.0000000000j4.190759e+00+1.361504e+01j0.00000000+0.00000000j-50.7214930-25.6873780j
line2a95.797205-188.647037j-9.590970e+01+1.889045e+02j16858.712030+29476.655117j0.000000e+00+0.000000e+00j160.2978106-7.9652950j0.00000000+0.00000000j
b0.5447320-0.4163190j1.136868e-13-5.684342e-14j3.386010-000192.157653000j-1.469214e-11-4.671278e-11j-166.266602-225.684569j-267.742704-277.018629j
c-0.4341500-0.2786260j-5.684342e-14-1.136868e-13j21.191795-00121.75379700j-1.998991e-13-3.635331e-11j-162.048885+176.443020j-255.110334+129.313498j
n0.1739500-0.1803320j2.842171e-14+4.263256e-14j-4.190759-00013.615042000j-7.607391e-12+4.295299e-12j-50.7214930-25.6873780j-152.108420-77.035237j
\n
" + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
current1current2power1power2potential1potential2
branch_idphase
line1a96.012654-188.549830j-9.579721e+01+1.886470e+02j22173.172540+43543.718061j-1.685871e+04-2.947666e+04j230.9401008-0.0000000j160.2978106-7.9652950j
b0.5278520-0.4176090j-5.447323e-01+4.163191e-01j22.570709-00153.79182900j-3.386010e+00+1.921577e+02j-115.470054-200.000000j-166.266602-225.684569j
c-0.4126860-0.5103670j4.341498e-01+2.786264e-01j-54.420413-00141.46933500j-2.119180e+01+1.217538e+02j-115.470054+200.000000j-162.048885+176.443020j
n-0.0396740-0.0650550j-1.739503e-01+1.803321e-01j0.0000000000+0.0000000000j4.190759e+00+1.361504e+01j0.00000000+0.00000000j-50.7214930-25.6873780j
line2a95.797205-188.647037j-9.590970e+01+1.889045e+02j16858.712030+29476.655117j0.000000e+00+0.000000e+00j160.2978106-7.9652950j0.00000000+0.00000000j
b0.5447320-0.4163190j1.136868e-13-5.684342e-14j3.386010-000192.157653000j-1.469214e-11-4.671278e-11j-166.266602-225.684569j-267.742704-277.018629j
c-0.4341500-0.2786260j-5.684342e-14-1.136868e-13j21.191795-00121.75379700j-1.998991e-13-3.635331e-11j-162.048885+176.443020j-255.110334+129.313498j
n0.1739500-0.1803320j2.842171e-14+4.263256e-14j-4.190759-00013.615042000j-7.607391e-12+4.295299e-12j-50.7214930-25.6873780j-152.108420-77.035237j
\n", + "
" + ], + "text/plain": [ + " current1 current2 \\\n", + "branch_id phase \n", + "line1 a 96.012654-188.549830j -9.579721e+01+1.886470e+02j \n", + " b 0.5278520-0.4176090j -5.447323e-01+4.163191e-01j \n", + " c -0.4126860-0.5103670j 4.341498e-01+2.786264e-01j \n", + " n -0.0396740-0.0650550j -1.739503e-01+1.803321e-01j \n", + "line2 a 95.797205-188.647037j -9.590970e+01+1.889045e+02j \n", + " b 0.5447320-0.4163190j 1.136868e-13-5.684342e-14j \n", + " c -0.4341500-0.2786260j -5.684342e-14-1.136868e-13j \n", + " n 0.1739500-0.1803320j 2.842171e-14+4.263256e-14j \n", + "\n", + " power1 power2 \\\n", + "branch_id phase \n", + "line1 a 22173.172540+43543.718061j -1.685871e+04-2.947666e+04j \n", + " b 22.570709-00153.79182900j -3.386010e+00+1.921577e+02j \n", + " c -54.420413-00141.46933500j -2.119180e+01+1.217538e+02j \n", + " n 0.0000000000+0.0000000000j 4.190759e+00+1.361504e+01j \n", + "line2 a 16858.712030+29476.655117j 0.000000e+00+0.000000e+00j \n", + " b 3.386010-000192.157653000j -1.469214e-11-4.671278e-11j \n", + " c 21.191795-00121.75379700j -1.998991e-13-3.635331e-11j \n", + " n -4.190759-00013.615042000j -7.607391e-12+4.295299e-12j \n", + "\n", + " potential1 potential2 \n", + "branch_id phase \n", + "line1 a 230.9401008-0.0000000j 160.2978106-7.9652950j \n", + " b -115.470054-200.000000j -166.266602-225.684569j \n", + " c -115.470054+200.000000j -162.048885+176.443020j \n", + " n 0.00000000+0.00000000j -50.7214930-25.6873780j \n", + "line2 a 160.2978106-7.9652950j 0.00000000+0.00000000j \n", + " b -166.266602-225.684569j -267.742704-277.018629j \n", + " c -162.048885+176.443020j -255.110334+129.313498j \n", + " n -50.7214930-25.6873780j -152.108420-77.035237j " + ] }, "execution_count": 15, "metadata": {}, @@ -227,32 +705,50 @@ ], "source": [ "bus2.clear_short_circuits()\n", - "bus2.short_circuit(\"a\", ground=ground)\n", + "bus2.short_circuit(\"a\", ground=ground) # ground MUST be passed as a keyword argument\n", "en.solve_load_flow(auth=auth)\n", "en.res_branches" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2023-06-09T13:15:05.411101257Z", - "start_time": "2023-06-09T13:15:05.383349808Z" - } - } + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "en.res_grounds" + ] }, { "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here the potential at phase \"a\" of bus \"bus2\" is zero, equal to the ground potential.\n", + "The sum of the currents in the other phases is also zero indicating that the current\n", + "of phase \"a\" went through the ground." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, "source": [ "## Additional notes\n", "\n", "The library will prevent the user from making mistakes, for example when trying to add a power load with the short-circuit, or when forgetting parameters." - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 16, + "metadata": { + "ExecuteTime": { + "end_time": "2023-06-09T13:15:14.199462325Z", + "start_time": "2023-06-09T13:15:14.101886478Z" + }, + "collapsed": false + }, "outputs": [ { "name": "stderr", @@ -266,28 +762,28 @@ "evalue": "The power load 'load' is connected on bus 'b2' that already has a short-circuit. It makes the short-circuit calculation impossible. [bad_short_circuit]", "output_type": "error", "traceback": [ - "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", - "\u001B[0;31mRoseauLoadFlowException\u001B[0m Traceback (most recent call last)", - "Cell \u001B[0;32mIn[16], line 1\u001B[0m\n\u001B[0;32m----> 1\u001B[0m load \u001B[38;5;241m=\u001B[39m \u001B[43mPowerLoad\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mload\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mbus\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mbus2\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mpowers\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43m[\u001B[49m\u001B[38;5;241;43m10\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m10\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m10\u001B[39;49m\u001B[43m]\u001B[49m\u001B[43m)\u001B[49m\n", - "File \u001B[0;32m~/.pyenv/versions/3.11.3/envs/roseau_load_flow_engine/lib/python3.11/site-packages/roseau/load_flow/models/loads/loads.py:281\u001B[0m, in \u001B[0;36mPowerLoad.__init__\u001B[0;34m(self, id, bus, powers, phases, flexible_params, **kwargs)\u001B[0m\n\u001B[1;32m 276\u001B[0m msg \u001B[38;5;241m=\u001B[39m (\n\u001B[1;32m 277\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mThe power load \u001B[39m\u001B[38;5;132;01m{\u001B[39;00m\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mid\u001B[38;5;132;01m!r}\u001B[39;00m\u001B[38;5;124m is connected on bus \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mbus\u001B[38;5;241m.\u001B[39mid\u001B[38;5;132;01m!r}\u001B[39;00m\u001B[38;5;124m that already has a short-circuit. \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 278\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mIt makes the short-circuit calculation impossible.\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 279\u001B[0m )\n\u001B[1;32m 280\u001B[0m logger\u001B[38;5;241m.\u001B[39merror(msg)\n\u001B[0;32m--> 281\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m RoseauLoadFlowException(msg\u001B[38;5;241m=\u001B[39mmsg, code\u001B[38;5;241m=\u001B[39mRoseauLoadFlowExceptionCode\u001B[38;5;241m.\u001B[39mBAD_SHORT_CIRCUIT)\n\u001B[1;32m 282\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m flexible_params:\n\u001B[1;32m 283\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mlen\u001B[39m(flexible_params) \u001B[38;5;241m!=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_size:\n", - "\u001B[0;31mRoseauLoadFlowException\u001B[0m: The power load 'load' is connected on bus 'b2' that already has a short-circuit. It makes the short-circuit calculation impossible. [bad_short_circuit]" + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mRoseauLoadFlowException\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[16], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m load \u001b[38;5;241m=\u001b[39m \u001b[43mPowerLoad\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mload\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbus\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbus2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpowers\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m10\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m10\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m10\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/roseau_load_flow_engine/lib/python3.11/site-packages/roseau/load_flow/models/loads/loads.py:281\u001b[0m, in \u001b[0;36mPowerLoad.__init__\u001b[0;34m(self, id, bus, powers, phases, flexible_params, **kwargs)\u001b[0m\n\u001b[1;32m 276\u001b[0m msg \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 277\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe power load \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mid\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m is connected on bus \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbus\u001b[38;5;241m.\u001b[39mid\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m that already has a short-circuit. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 278\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIt makes the short-circuit calculation impossible.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 279\u001b[0m )\n\u001b[1;32m 280\u001b[0m logger\u001b[38;5;241m.\u001b[39merror(msg)\n\u001b[0;32m--> 281\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m RoseauLoadFlowException(msg\u001b[38;5;241m=\u001b[39mmsg, code\u001b[38;5;241m=\u001b[39mRoseauLoadFlowExceptionCode\u001b[38;5;241m.\u001b[39mBAD_SHORT_CIRCUIT)\n\u001b[1;32m 282\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m flexible_params:\n\u001b[1;32m 283\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(flexible_params) \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_size:\n", + "\u001b[0;31mRoseauLoadFlowException\u001b[0m: The power load 'load' is connected on bus 'b2' that already has a short-circuit. It makes the short-circuit calculation impossible. [bad_short_circuit]" ] } ], "source": [ "load = PowerLoad(\"load\", bus=bus2, powers=[10, 10, 10])" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2023-06-09T13:15:14.199462325Z", - "start_time": "2023-06-09T13:15:14.101886478Z" - } - } + ] }, { "cell_type": "code", "execution_count": 17, + "metadata": { + "ExecuteTime": { + "end_time": "2023-06-09T13:15:16.667926670Z", + "start_time": "2023-06-09T13:15:16.600860501Z" + }, + "collapsed": false + }, "outputs": [ { "name": "stderr", @@ -301,31 +797,17 @@ "evalue": "For the short-circuit on bus 'b2', at least two phases (or a phase and a ground) should be given (only ('a',) is given). [bad_phase]", "output_type": "error", "traceback": [ - "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", - "\u001B[0;31mRoseauLoadFlowException\u001B[0m Traceback (most recent call last)", - "Cell \u001B[0;32mIn[17], line 2\u001B[0m\n\u001B[1;32m 1\u001B[0m bus2\u001B[38;5;241m.\u001B[39mremove_short_circuit()\n\u001B[0;32m----> 2\u001B[0m \u001B[43mbus2\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mshort_circuit\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43ma\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m)\u001B[49m\n", - "File \u001B[0;32m~/.pyenv/versions/3.11.3/envs/roseau_load_flow_engine/lib/python3.11/site-packages/roseau/load_flow/models/buses.py:178\u001B[0m, in \u001B[0;36mBus.short_circuit\u001B[0;34m(self, ground, *phases)\u001B[0m\n\u001B[1;32m 173\u001B[0m msg \u001B[38;5;241m=\u001B[39m (\n\u001B[1;32m 174\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mFor the short-circuit on bus \u001B[39m\u001B[38;5;132;01m{\u001B[39;00m\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mid\u001B[38;5;132;01m!r}\u001B[39;00m\u001B[38;5;124m, at least two phases (or a phase and a ground) should be \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 175\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mgiven (only \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mphases\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m is given).\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 176\u001B[0m )\n\u001B[1;32m 177\u001B[0m logger\u001B[38;5;241m.\u001B[39merror(msg)\n\u001B[0;32m--> 178\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m RoseauLoadFlowException(msg\u001B[38;5;241m=\u001B[39mmsg, code\u001B[38;5;241m=\u001B[39mRoseauLoadFlowExceptionCode\u001B[38;5;241m.\u001B[39mBAD_PHASE)\n\u001B[1;32m 179\u001B[0m duplicates \u001B[38;5;241m=\u001B[39m [item \u001B[38;5;28;01mfor\u001B[39;00m item \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mset\u001B[39m(phases) \u001B[38;5;28;01mif\u001B[39;00m phases\u001B[38;5;241m.\u001B[39mcount(item) \u001B[38;5;241m>\u001B[39m \u001B[38;5;241m1\u001B[39m]\n\u001B[1;32m 180\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m duplicates:\n", - "\u001B[0;31mRoseauLoadFlowException\u001B[0m: For the short-circuit on bus 'b2', at least two phases (or a phase and a ground) should be given (only ('a',) is given). [bad_phase]" + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mRoseauLoadFlowException\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[17], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m bus2\u001b[38;5;241m.\u001b[39mremove_short_circuit()\n\u001b[0;32m----> 2\u001b[0m \u001b[43mbus2\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshort_circuit\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43ma\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/roseau_load_flow_engine/lib/python3.11/site-packages/roseau/load_flow/models/buses.py:178\u001b[0m, in \u001b[0;36mBus.short_circuit\u001b[0;34m(self, ground, *phases)\u001b[0m\n\u001b[1;32m 173\u001b[0m msg \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 174\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFor the short-circuit on bus \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mid\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m, at least two phases (or a phase and a ground) should be \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 175\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgiven (only \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mphases\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m is given).\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 176\u001b[0m )\n\u001b[1;32m 177\u001b[0m logger\u001b[38;5;241m.\u001b[39merror(msg)\n\u001b[0;32m--> 178\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m RoseauLoadFlowException(msg\u001b[38;5;241m=\u001b[39mmsg, code\u001b[38;5;241m=\u001b[39mRoseauLoadFlowExceptionCode\u001b[38;5;241m.\u001b[39mBAD_PHASE)\n\u001b[1;32m 179\u001b[0m duplicates \u001b[38;5;241m=\u001b[39m [item \u001b[38;5;28;01mfor\u001b[39;00m item \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mset\u001b[39m(phases) \u001b[38;5;28;01mif\u001b[39;00m phases\u001b[38;5;241m.\u001b[39mcount(item) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m]\n\u001b[1;32m 180\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m duplicates:\n", + "\u001b[0;31mRoseauLoadFlowException\u001b[0m: For the short-circuit on bus 'b2', at least two phases (or a phase and a ground) should be given (only ('a',) is given). [bad_phase]" ] } ], "source": [ "bus2.short_circuit(\"a\")" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2023-06-09T13:15:16.667926670Z", - "start_time": "2023-06-09T13:15:16.600860501Z" - } - } - }, - { - "cell_type": "markdown", - "source": [], - "metadata": { - "collapsed": false - } + ] } ], "metadata": { diff --git a/doc/notebooks/index.md b/doc/notebooks/index.md new file mode 100644 index 00000000..4803d8a4 --- /dev/null +++ b/doc/notebooks/index.md @@ -0,0 +1,13 @@ +# Tutorials + +The following tutorials are available to help you get started: + +```{toctree} +--- +maxdepth: 2 +caption: Tutorials +--- +Getting_Started +Advanced +Short_Circuit +``` diff --git a/poetry.lock b/poetry.lock index 9791e1fa..8eb381b5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "aiofiles" @@ -37,15 +37,26 @@ files = [ {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, ] +[[package]] +name = "anyascii" +version = "0.3.2" +description = "Unicode to ASCII transliteration" +optional = false +python-versions = ">=3.3" +files = [ + {file = "anyascii-0.3.2-py3-none-any.whl", hash = "sha256:3b3beef6fc43d9036d3b0529050b0c48bfad8bc960e9e562d7223cfb94fe45d4"}, + {file = "anyascii-0.3.2.tar.gz", hash = "sha256:9d5d32ef844fe225b8bc7cba7f950534fae4da27a9bf3a6bea2cb0ea46ce4730"}, +] + [[package]] name = "anyio" -version = "3.7.0" +version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.7" files = [ - {file = "anyio-3.7.0-py3-none-any.whl", hash = "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0"}, - {file = "anyio-3.7.0.tar.gz", hash = "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce"}, + {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, + {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, ] [package.dependencies] @@ -54,7 +65,7 @@ idna = ">=2.8" sniffio = ">=1.1" [package.extras] -doc = ["Sphinx (>=6.1.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme", "sphinxcontrib-jquery"] +doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] trio = ["trio (<0.22)"] @@ -141,13 +152,13 @@ python-dateutil = ">=2.7.0" [[package]] name = "astroid" -version = "2.15.5" +version = "2.15.6" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.7.2" files = [ - {file = "astroid-2.15.5-py3-none-any.whl", hash = "sha256:078e5212f9885fa85fbb0cf0101978a336190aadea6e13305409d099f71b2324"}, - {file = "astroid-2.15.5.tar.gz", hash = "sha256:1039262575027b441137ab4a62a793a9b43defb42c32d5670f38686207cd780f"}, + {file = "astroid-2.15.6-py3-none-any.whl", hash = "sha256:389656ca57b6108f939cf5d2f9a2a825a3be50ba9d589670f393236e0a03b91c"}, + {file = "astroid-2.15.6.tar.gz", hash = "sha256:903f024859b7c7687d7a7f3a3f73b17301f8e42dfd9cc9df9d4418172d3e2dbd"}, ] [package.dependencies] @@ -235,36 +246,33 @@ lxml = ["lxml"] [[package]] name = "black" -version = "23.3.0" +version = "23.7.0" description = "The uncompromising code formatter." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, + {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, + {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, + {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, + {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, + {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, + {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, + {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, + {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, + {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, + {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, ] [package.dependencies] @@ -304,13 +312,13 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] [[package]] name = "certifi" -version = "2023.5.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] @@ -402,97 +410,97 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.1.0" +version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] [[package]] name = "click" -version = "8.1.3" +version = "8.1.6" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, + {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, ] [package.dependencies] @@ -688,35 +696,35 @@ files = [ [[package]] name = "distlib" -version = "0.3.6" +version = "0.3.7" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, - {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, ] [[package]] name = "docutils" -version = "0.19" +version = "0.20.1" description = "Docutils -- Python Documentation Utilities" optional = false python-versions = ">=3.7" files = [ - {file = "docutils-0.19-py3-none-any.whl", hash = "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc"}, - {file = "docutils-0.19.tar.gz", hash = "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6"}, + {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, + {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, ] [[package]] name = "exceptiongroup" -version = "1.1.1" +version = "1.1.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, - {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, + {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, + {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, ] [package.extras] @@ -724,17 +732,17 @@ test = ["pytest (>=6)"] [[package]] name = "execnet" -version = "1.9.0" +version = "2.0.2" description = "execnet: rapid multi-Python deployment" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.7" files = [ - {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"}, - {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, + {file = "execnet-2.0.2-py3-none-any.whl", hash = "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41"}, + {file = "execnet-2.0.2.tar.gz", hash = "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"}, ] [package.extras] -testing = ["pre-commit"] +testing = ["hatch", "pre-commit", "pytest", "tox"] [[package]] name = "executing" @@ -752,13 +760,13 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] [[package]] name = "fastjsonschema" -version = "2.17.1" +version = "2.18.0" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, - {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, + {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, + {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, ] [package.extras] @@ -766,18 +774,18 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.12.0" +version = "3.12.2" description = "A platform independent file lock." optional = false python-versions = ">=3.7" files = [ - {file = "filelock-3.12.0-py3-none-any.whl", hash = "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9"}, - {file = "filelock-3.12.0.tar.gz", hash = "sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718"}, + {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, + {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, ] [package.extras] -docs = ["furo (>=2023.3.27)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] [[package]] name = "fiona" @@ -853,13 +861,13 @@ sphinx-basic-ng = "*" [[package]] name = "geopandas" -version = "0.13.0" +version = "0.13.2" description = "Geographic pandas extensions" optional = false python-versions = ">=3.8" files = [ - {file = "geopandas-0.13.0-py3-none-any.whl", hash = "sha256:2a5d7f2dfa46c6679ca2d2358b49420be08bab31a7882b500bdb2ae8be40603a"}, - {file = "geopandas-0.13.0.tar.gz", hash = "sha256:330b5a3faf8062efc6f424bf339f6e88f835b846027b48241d37da9b7c7b2485"}, + {file = "geopandas-0.13.2-py3-none-any.whl", hash = "sha256:101cfd0de54bcf9e287a55b5ea17ebe0db53a5e25a28bacf100143d0507cabd9"}, + {file = "geopandas-0.13.2.tar.gz", hash = "sha256:e5b56d9c20800c77bcc0c914db3f27447a37b23b2cd892be543f5001a694a968"}, ] [package.dependencies] @@ -871,13 +879,13 @@ shapely = ">=1.7.1" [[package]] name = "identify" -version = "2.5.24" +version = "2.5.26" description = "File identification library for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, - {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, + {file = "identify-2.5.26-py2.py3-none-any.whl", hash = "sha256:c22a8ead0d4ca11f1edd6c9418c3220669b3b7533ada0a0ffa6cc0ef85cf9b54"}, + {file = "identify-2.5.26.tar.gz", hash = "sha256:7243800bce2f58404ed41b7c002e53d4d22bcf3ae1b7900c2d7aefd95394bf7f"}, ] [package.extras] @@ -907,13 +915,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.6.0" +version = "6.8.0" description = "Read metadata from Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.6.0-py3-none-any.whl", hash = "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed"}, - {file = "importlib_metadata-6.6.0.tar.gz", hash = "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705"}, + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, ] [package.dependencies] @@ -922,7 +930,7 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "iniconfig" @@ -937,13 +945,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.23.1" +version = "6.25.0" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.23.1-py3-none-any.whl", hash = "sha256:77aeffab056c21d16f1edccdc9e5ccbf7d96eb401bd6703610a21be8b068aadc"}, - {file = "ipykernel-6.23.1.tar.gz", hash = "sha256:1aba0ae8453e15e9bc6b24e497ef6840114afcdb832ae597f32137fa19d42a6f"}, + {file = "ipykernel-6.25.0-py3-none-any.whl", hash = "sha256:f0042e867ac3f6bca1679e6a88cbd6a58ed93a44f9d0866aecde6efe8de76659"}, + {file = "ipykernel-6.25.0.tar.gz", hash = "sha256:e342ce84712861be4b248c4a73472be4702c1b0dd77448bfd6bcfb3af9d5ddf9"}, ] [package.dependencies] @@ -1020,13 +1028,13 @@ files = [ [[package]] name = "ipywidgets" -version = "8.0.6" +version = "8.0.7" description = "Jupyter interactive widgets" optional = false python-versions = ">=3.7" files = [ - {file = "ipywidgets-8.0.6-py3-none-any.whl", hash = "sha256:a60bf8d2528997e05ac83fd19ea2fbe65f2e79fbe1b2b35779bdfc46c2941dcc"}, - {file = "ipywidgets-8.0.6.tar.gz", hash = "sha256:de7d779f2045d60de9f6c25f653fdae2dba57898e6a1284494b3ba20b6893bb8"}, + {file = "ipywidgets-8.0.7-py3-none-any.whl", hash = "sha256:e0aed0c95a1e55b6a123f64305245578bdc09e52965a34941c2b6a578b8c64a0"}, + {file = "ipywidgets-8.0.7.tar.gz", hash = "sha256:50ace0a8886e9a0d68b980db82f94c25d55d21ff2340ed36f802dd9365e94acf"}, ] [package.dependencies] @@ -1105,35 +1113,37 @@ dev = ["hypothesis"] [[package]] name = "jsonpointer" -version = "2.3" +version = "2.4" description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ - {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"}, - {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"}, + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, ] [[package]] name = "jsonschema" -version = "4.17.3" +version = "4.18.4" description = "An implementation of JSON Schema validation for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, - {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, + {file = "jsonschema-4.18.4-py3-none-any.whl", hash = "sha256:971be834317c22daaa9132340a51c01b50910724082c2c1a2ac87eeec153a3fe"}, + {file = "jsonschema-4.18.4.tar.gz", hash = "sha256:fb3642735399fa958c0d2aad7057901554596c63349f4f6b283c493cf692a25d"}, ] [package.dependencies] -attrs = ">=17.4.0" +attrs = ">=22.2.0" fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} -pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +rpds-py = ">=0.7.1" uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} @@ -1141,6 +1151,20 @@ webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-n format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +[[package]] +name = "jsonschema-specifications" +version = "2023.7.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, + {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, +] + +[package.dependencies] +referencing = ">=0.28.0" + [[package]] name = "jupyter" version = "1.0.0" @@ -1163,13 +1187,13 @@ qtconsole = "*" [[package]] name = "jupyter-client" -version = "8.2.0" +version = "8.3.0" description = "Jupyter protocol implementation and client libraries" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_client-8.2.0-py3-none-any.whl", hash = "sha256:b18219aa695d39e2ad570533e0d71fb7881d35a873051054a84ee2a17c4b7389"}, - {file = "jupyter_client-8.2.0.tar.gz", hash = "sha256:9fe233834edd0e6c0aa5f05ca2ab4bdea1842bfd2d8a932878212fc5301ddaf0"}, + {file = "jupyter_client-8.3.0-py3-none-any.whl", hash = "sha256:7441af0c0672edc5d28035e92ba5e32fadcfa8a4e608a434c228836a89df6158"}, + {file = "jupyter_client-8.3.0.tar.gz", hash = "sha256:3af69921fe99617be1670399a0b857ad67275eefcfa291e2c81a160b7b650f5f"}, ] [package.dependencies] @@ -1210,13 +1234,13 @@ test = ["flaky", "pexpect", "pytest"] [[package]] name = "jupyter-core" -version = "5.3.0" +version = "5.3.1" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.3.0-py3-none-any.whl", hash = "sha256:d4201af84559bc8c70cead287e1ab94aeef3c512848dde077b7684b54d67730d"}, - {file = "jupyter_core-5.3.0.tar.gz", hash = "sha256:6db75be0c83edbf1b7c9f91ec266a9a24ef945da630f3120e1a0046dc13713fc"}, + {file = "jupyter_core-5.3.1-py3-none-any.whl", hash = "sha256:ae9036db959a71ec1cac33081eeb040a79e681f08ab68b0883e9a676c7a90dce"}, + {file = "jupyter_core-5.3.1.tar.gz", hash = "sha256:5ba5c7938a7f97a6b0481463f7ff0dbac7c15ba48cf46fa4035ca6e838aa1aba"}, ] [package.dependencies] @@ -1254,13 +1278,13 @@ test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>= [[package]] name = "jupyter-server" -version = "2.6.0" +version = "2.7.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.6.0-py3-none-any.whl", hash = "sha256:19525a1515b5999618a91b3e99ec9f6869aa8c5ba73e0b6279fcda918b54ba36"}, - {file = "jupyter_server-2.6.0.tar.gz", hash = "sha256:ae4af349f030ed08dd78cb7ac1a03a92d886000380c9ea6283f3c542a81f4b06"}, + {file = "jupyter_server-2.7.0-py3-none-any.whl", hash = "sha256:6a77912aff643e53fa14bdb2634884b52b784a4be77ce8e93f7283faed0f0849"}, + {file = "jupyter_server-2.7.0.tar.gz", hash = "sha256:36da0a266d31a41ac335a366c88933c17dfa5bb817a48f5c02c16d303bc9477f"}, ] [package.dependencies] @@ -1286,7 +1310,7 @@ websocket-client = "*" [package.extras] docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] -test = ["ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] [[package]] name = "jupyter-server-fileid" @@ -1347,32 +1371,32 @@ test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytes [[package]] name = "jupyter-ydoc" -version = "0.2.4" +version = "0.2.5" description = "Document structures for collaborative editing using Ypy" optional = false python-versions = ">=3.7" files = [ - {file = "jupyter_ydoc-0.2.4-py3-none-any.whl", hash = "sha256:d1a51c73ead6f6417bec0450f53c577a66abe8d43e9c2d8a1acaf7a17259f843"}, - {file = "jupyter_ydoc-0.2.4.tar.gz", hash = "sha256:a3f670a69135e90493ffb91d6788efe2632bf42c6cc42a25f25c2e6eddd55a0e"}, + {file = "jupyter_ydoc-0.2.5-py3-none-any.whl", hash = "sha256:5759170f112c70320a84217dd98d287699076ae65a7f88d458d57940a9f2b882"}, + {file = "jupyter_ydoc-0.2.5.tar.gz", hash = "sha256:5a02ca7449f0d875f73e8cb8efdf695dddef15a8e71378b1f4eda6b7c90f5382"}, ] [package.dependencies] importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -y-py = ">=0.5.3,<0.6.0" +y-py = ">=0.6.0,<0.7.0" [package.extras] dev = ["click", "jupyter-releaser"] -test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.3.1,<0.4.0)"] +test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.8.4,<0.9.0)"] [[package]] name = "jupyterlab" -version = "3.6.4" +version = "3.6.5" description = "JupyterLab computational environment" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab-3.6.4-py3-none-any.whl", hash = "sha256:8a4e495a096ae2315af2b07acaac9d38917b6927ebd891834ddf83b28f53e881"}, - {file = "jupyterlab-3.6.4.tar.gz", hash = "sha256:862fb4a06c759a9b0a12de6bf434a8681a42e52fff0593c120e3fbad6847889f"}, + {file = "jupyterlab-3.6.5-py3-none-any.whl", hash = "sha256:4d13665c2c2f42c753140d88b52ff8722cd5b38629b934f5612bfa5490bcdc65"}, + {file = "jupyterlab-3.6.5.tar.gz", hash = "sha256:ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923"}, ] [package.dependencies] @@ -1416,13 +1440,13 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.22.1" +version = "2.24.0" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_server-2.22.1-py3-none-any.whl", hash = "sha256:1c8eb55c7cd70a50a51fef42a7b4e26ef2f7fc48728f0290604bd89b1dd156e6"}, - {file = "jupyterlab_server-2.22.1.tar.gz", hash = "sha256:dfaaf898af84b9d01ae9583b813f378b96ee90c3a66f24c5186ea5d1bbdb2089"}, + {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, + {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, ] [package.dependencies] @@ -1436,21 +1460,35 @@ packaging = ">=21.3" requests = ">=2.28" [package.extras] -docs = ["autodoc-traits", "docutils (<0.20)", "jinja2 (<3.2.0)", "mistune (<3)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi"] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "jupyterlab-widgets" -version = "3.0.7" +version = "3.0.8" description = "Jupyter interactive widgets for JupyterLab" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_widgets-3.0.7-py3-none-any.whl", hash = "sha256:c73f8370338ec19f1bec47254752d6505b03601cbd5a67e6a0b184532f73a459"}, - {file = "jupyterlab_widgets-3.0.7.tar.gz", hash = "sha256:c3a50ed5bf528a0c7a869096503af54702f86dda1db469aee1c92dc0c01b43ca"}, + {file = "jupyterlab_widgets-3.0.8-py3-none-any.whl", hash = "sha256:4715912d6ceab839c9db35953c764b3214ebbc9161c809f6e0510168845dfdf5"}, + {file = "jupyterlab_widgets-3.0.8.tar.gz", hash = "sha256:d428ab97b8d87cc7c54cbf37644d6e0f0e662f23876e05fa460a73ec3257252a"}, ] +[[package]] +name = "latexcodec" +version = "2.0.1" +description = "A lexer and codec to work with LaTeX code in Python." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "latexcodec-2.0.1-py2.py3-none-any.whl", hash = "sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271"}, + {file = "latexcodec-2.0.1.tar.gz", hash = "sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a"}, +] + +[package.dependencies] +six = ">=1.4.1" + [[package]] name = "lazy-object-proxy" version = "1.9.0" @@ -1498,13 +1536,13 @@ files = [ [[package]] name = "markdown-it-py" -version = "2.2.0" +version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, - {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, ] [package.dependencies] @@ -1517,7 +1555,7 @@ compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0 linkify = ["linkify-it-py (>=1,<3)"] plugins = ["mdit-py-plugins"] profiling = ["gprof2dot"] -rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] @@ -1595,21 +1633,21 @@ traitlets = "*" [[package]] name = "mdit-py-plugins" -version = "0.3.5" +version = "0.4.0" description = "Collection of plugins for markdown-it-py" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mdit-py-plugins-0.3.5.tar.gz", hash = "sha256:eee0adc7195e5827e17e02d2a258a2ba159944a0748f59c5099a4a27f78fcf6a"}, - {file = "mdit_py_plugins-0.3.5-py3-none-any.whl", hash = "sha256:ca9a0714ea59a24b2b044a1831f48d817dd0c817e84339f20e7889f392d77c4e"}, + {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"}, + {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"}, ] [package.dependencies] -markdown-it-py = ">=1.0.0,<3.0.0" +markdown-it-py = ">=1.0.0,<4.0.0" [package.extras] code-style = ["pre-commit"] -rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] +rtd = ["myst-parser", "sphinx-book-theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] @@ -1625,13 +1663,13 @@ files = [ [[package]] name = "mistune" -version = "2.0.5" -description = "A sane Markdown parser with useful plugins and renderers" +version = "3.0.1" +description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "mistune-2.0.5-py2.py3-none-any.whl", hash = "sha256:bad7f5d431886fcbaf5f758118ecff70d31f75231b34024a1341120340a65ce8"}, - {file = "mistune-2.0.5.tar.gz", hash = "sha256:0246113cb2492db875c6be56974a7c893333bf26cd92891c85f63151cee09d34"}, + {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, + {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, ] [[package]] @@ -1647,27 +1685,27 @@ files = [ [[package]] name = "myst-parser" -version = "1.0.0" +version = "2.0.0" description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "myst-parser-1.0.0.tar.gz", hash = "sha256:502845659313099542bd38a2ae62f01360e7dd4b1310f025dd014dfc0439cdae"}, - {file = "myst_parser-1.0.0-py3-none-any.whl", hash = "sha256:69fb40a586c6fa68995e6521ac0a525793935db7e724ca9bac1d33be51be9a4c"}, + {file = "myst_parser-2.0.0-py3-none-any.whl", hash = "sha256:7c36344ae39c8e740dad7fdabf5aa6fc4897a813083c6cc9990044eb93656b14"}, + {file = "myst_parser-2.0.0.tar.gz", hash = "sha256:ea929a67a6a0b1683cdbe19b8d2e724cd7643f8aa3e7bb18dd65beac3483bead"}, ] [package.dependencies] -docutils = ">=0.15,<0.20" +docutils = ">=0.16,<0.21" jinja2 = "*" -markdown-it-py = ">=1.0.0,<3.0.0" -mdit-py-plugins = ">=0.3.4,<0.4.0" +markdown-it-py = ">=3.0,<4.0" +mdit-py-plugins = ">=0.4,<1.0" pyyaml = "*" -sphinx = ">=5,<7" +sphinx = ">=6,<8" [package.extras] code-style = ["pre-commit (>=3.0,<4.0)"] -linkify = ["linkify-it-py (>=1.0,<2.0)"] -rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.7.5,<0.8.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +linkify = ["linkify-it-py (>=2.0,<3.0)"] +rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.8.2,<0.9.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] @@ -1730,32 +1768,32 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.4.0" +version = "7.7.3" description = "Converting Jupyter Notebooks" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "nbconvert-7.4.0-py3-none-any.whl", hash = "sha256:af5064a9db524f9f12f4e8be7f0799524bd5b14c1adea37e34e83c95127cc818"}, - {file = "nbconvert-7.4.0.tar.gz", hash = "sha256:51b6c77b507b177b73f6729dba15676e42c4e92bcb00edc8cc982ee72e7d89d7"}, + {file = "nbconvert-7.7.3-py3-none-any.whl", hash = "sha256:3022adadff3f86578a47fab7c2228bb3ca9c56a24345642a22f917f6168b48fc"}, + {file = "nbconvert-7.7.3.tar.gz", hash = "sha256:4a5996bf5f3cd16aa0431897ba1aa4c64842c2079f434b3dc6b8c4b252ef3355"}, ] [package.dependencies] beautifulsoup4 = "*" -bleach = "*" +bleach = "!=5.0.0" defusedxml = "*" importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" markupsafe = ">=2.0" -mistune = ">=2.0.3,<3" +mistune = ">=2.0.3,<4" nbclient = ">=0.5.0" -nbformat = ">=5.1" +nbformat = ">=5.7" packaging = "*" pandocfilters = ">=1.4.1" pygments = ">=2.4.1" tinycss2 = "*" -traitlets = ">=5.0" +traitlets = ">=5.1" [package.extras] all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] @@ -1763,18 +1801,18 @@ docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sp qtpdf = ["nbconvert[qtpng]"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] -webpdf = ["pyppeteer (>=1,<1.1)"] +test = ["flaky", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] +webpdf = ["playwright"] [[package]] name = "nbformat" -version = "5.9.0" +version = "5.9.1" description = "The Jupyter Notebook format" optional = false python-versions = ">=3.8" files = [ - {file = "nbformat-5.9.0-py3-none-any.whl", hash = "sha256:8c8fa16d6d05062c26177754bfbfac22de644888e2ef69d27ad2a334cf2576e5"}, - {file = "nbformat-5.9.0.tar.gz", hash = "sha256:e98ebb6120c3efbafdee2a40af2a140cadee90bb06dd69a2a63d9551fcc7f976"}, + {file = "nbformat-5.9.1-py3-none-any.whl", hash = "sha256:b7968ebf4811178a4108ee837eae1442e3f054132100f0359219e9ed1ce3ca45"}, + {file = "nbformat-5.9.1.tar.gz", hash = "sha256:3a7f52d040639cbd8a3890218c8b0ffb93211588c57446c90095e32ba5881b5d"}, ] [package.dependencies] @@ -1884,39 +1922,36 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" [[package]] name = "numpy" -version = "1.24.3" +version = "1.25.1" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "numpy-1.24.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3c1104d3c036fb81ab923f507536daedc718d0ad5a8707c6061cdfd6d184e570"}, - {file = "numpy-1.24.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:202de8f38fc4a45a3eea4b63e2f376e5f2dc64ef0fa692838e31a808520efaf7"}, - {file = "numpy-1.24.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8535303847b89aa6b0f00aa1dc62867b5a32923e4d1681a35b5eef2d9591a463"}, - {file = "numpy-1.24.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d926b52ba1367f9acb76b0df6ed21f0b16a1ad87c6720a1121674e5cf63e2b6"}, - {file = "numpy-1.24.3-cp310-cp310-win32.whl", hash = "sha256:f21c442fdd2805e91799fbe044a7b999b8571bb0ab0f7850d0cb9641a687092b"}, - {file = "numpy-1.24.3-cp310-cp310-win_amd64.whl", hash = "sha256:ab5f23af8c16022663a652d3b25dcdc272ac3f83c3af4c02eb8b824e6b3ab9d7"}, - {file = "numpy-1.24.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9a7721ec204d3a237225db3e194c25268faf92e19338a35f3a224469cb6039a3"}, - {file = "numpy-1.24.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d6cc757de514c00b24ae8cf5c876af2a7c3df189028d68c0cb4eaa9cd5afc2bf"}, - {file = "numpy-1.24.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76e3f4e85fc5d4fd311f6e9b794d0c00e7002ec122be271f2019d63376f1d385"}, - {file = "numpy-1.24.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1d3c026f57ceaad42f8231305d4653d5f05dc6332a730ae5c0bea3513de0950"}, - {file = "numpy-1.24.3-cp311-cp311-win32.whl", hash = "sha256:c91c4afd8abc3908e00a44b2672718905b8611503f7ff87390cc0ac3423fb096"}, - {file = "numpy-1.24.3-cp311-cp311-win_amd64.whl", hash = "sha256:5342cf6aad47943286afa6f1609cad9b4266a05e7f2ec408e2cf7aea7ff69d80"}, - {file = "numpy-1.24.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7776ea65423ca6a15255ba1872d82d207bd1e09f6d0894ee4a64678dd2204078"}, - {file = "numpy-1.24.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ae8d0be48d1b6ed82588934aaaa179875e7dc4f3d84da18d7eae6eb3f06c242c"}, - {file = "numpy-1.24.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecde0f8adef7dfdec993fd54b0f78183051b6580f606111a6d789cd14c61ea0c"}, - {file = "numpy-1.24.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4749e053a29364d3452c034827102ee100986903263e89884922ef01a0a6fd2f"}, - {file = "numpy-1.24.3-cp38-cp38-win32.whl", hash = "sha256:d933fabd8f6a319e8530d0de4fcc2e6a61917e0b0c271fded460032db42a0fe4"}, - {file = "numpy-1.24.3-cp38-cp38-win_amd64.whl", hash = "sha256:56e48aec79ae238f6e4395886b5eaed058abb7231fb3361ddd7bfdf4eed54289"}, - {file = "numpy-1.24.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4719d5aefb5189f50887773699eaf94e7d1e02bf36c1a9d353d9f46703758ca4"}, - {file = "numpy-1.24.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ec87a7084caa559c36e0a2309e4ecb1baa03b687201d0a847c8b0ed476a7187"}, - {file = "numpy-1.24.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea8282b9bcfe2b5e7d491d0bf7f3e2da29700cec05b49e64d6246923329f2b02"}, - {file = "numpy-1.24.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210461d87fb02a84ef243cac5e814aad2b7f4be953b32cb53327bb49fd77fbb4"}, - {file = "numpy-1.24.3-cp39-cp39-win32.whl", hash = "sha256:784c6da1a07818491b0ffd63c6bbe5a33deaa0e25a20e1b3ea20cf0e43f8046c"}, - {file = "numpy-1.24.3-cp39-cp39-win_amd64.whl", hash = "sha256:d5036197ecae68d7f491fcdb4df90082b0d4960ca6599ba2659957aafced7c17"}, - {file = "numpy-1.24.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:352ee00c7f8387b44d19f4cada524586f07379c0d49270f87233983bc5087ca0"}, - {file = "numpy-1.24.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7d6acc2e7524c9955e5c903160aa4ea083736fde7e91276b0e5d98e6332812"}, - {file = "numpy-1.24.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:35400e6a8d102fd07c71ed7dcadd9eb62ee9a6e84ec159bd48c28235bbb0f8e4"}, - {file = "numpy-1.24.3.tar.gz", hash = "sha256:ab344f1bf21f140adab8e47fdbc7c35a477dc01408791f8ba00d018dd0bc5155"}, + {file = "numpy-1.25.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:77d339465dff3eb33c701430bcb9c325b60354698340229e1dff97745e6b3efa"}, + {file = "numpy-1.25.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d736b75c3f2cb96843a5c7f8d8ccc414768d34b0a75f466c05f3a739b406f10b"}, + {file = "numpy-1.25.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a90725800caeaa160732d6b31f3f843ebd45d6b5f3eec9e8cc287e30f2805bf"}, + {file = "numpy-1.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c6c9261d21e617c6dc5eacba35cb68ec36bb72adcff0dee63f8fbc899362588"}, + {file = "numpy-1.25.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0def91f8af6ec4bb94c370e38c575855bf1d0be8a8fbfba42ef9c073faf2cf19"}, + {file = "numpy-1.25.1-cp310-cp310-win32.whl", hash = "sha256:fd67b306320dcadea700a8f79b9e671e607f8696e98ec255915c0c6d6b818503"}, + {file = "numpy-1.25.1-cp310-cp310-win_amd64.whl", hash = "sha256:c1516db588987450b85595586605742879e50dcce923e8973f79529651545b57"}, + {file = "numpy-1.25.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6b82655dd8efeea69dbf85d00fca40013d7f503212bc5259056244961268b66e"}, + {file = "numpy-1.25.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e8f6049c4878cb16960fbbfb22105e49d13d752d4d8371b55110941fb3b17800"}, + {file = "numpy-1.25.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41a56b70e8139884eccb2f733c2f7378af06c82304959e174f8e7370af112e09"}, + {file = "numpy-1.25.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5154b1a25ec796b1aee12ac1b22f414f94752c5f94832f14d8d6c9ac40bcca6"}, + {file = "numpy-1.25.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:38eb6548bb91c421261b4805dc44def9ca1a6eef6444ce35ad1669c0f1a3fc5d"}, + {file = "numpy-1.25.1-cp311-cp311-win32.whl", hash = "sha256:791f409064d0a69dd20579345d852c59822c6aa087f23b07b1b4e28ff5880fcb"}, + {file = "numpy-1.25.1-cp311-cp311-win_amd64.whl", hash = "sha256:c40571fe966393b212689aa17e32ed905924120737194b5d5c1b20b9ed0fb171"}, + {file = "numpy-1.25.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3d7abcdd85aea3e6cdddb59af2350c7ab1ed764397f8eec97a038ad244d2d105"}, + {file = "numpy-1.25.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a180429394f81c7933634ae49b37b472d343cccb5bb0c4a575ac8bbc433722f"}, + {file = "numpy-1.25.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d412c1697c3853c6fc3cb9751b4915859c7afe6a277c2bf00acf287d56c4e625"}, + {file = "numpy-1.25.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20e1266411120a4f16fad8efa8e0454d21d00b8c7cee5b5ccad7565d95eb42dd"}, + {file = "numpy-1.25.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f76aebc3358ade9eacf9bc2bb8ae589863a4f911611694103af05346637df1b7"}, + {file = "numpy-1.25.1-cp39-cp39-win32.whl", hash = "sha256:247d3ffdd7775bdf191f848be8d49100495114c82c2bd134e8d5d075fb386a1c"}, + {file = "numpy-1.25.1-cp39-cp39-win_amd64.whl", hash = "sha256:1d5d3c68e443c90b38fdf8ef40e60e2538a27548b39b12b73132456847f4b631"}, + {file = "numpy-1.25.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:35a9527c977b924042170a0887de727cd84ff179e478481404c5dc66b4170009"}, + {file = "numpy-1.25.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d3fe3dd0506a28493d82dc3cf254be8cd0d26f4008a417385cbf1ae95b54004"}, + {file = "numpy-1.25.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:012097b5b0d00a11070e8f2e261128c44157a8689f7dedcf35576e525893f4fe"}, + {file = "numpy-1.25.1.tar.gz", hash = "sha256:9a3a9f3a61480cc086117b426a8bd86869c213fc4072e606f01c4e4b66eb92bf"}, ] [[package]] @@ -1943,36 +1978,36 @@ files = [ [[package]] name = "pandas" -version = "2.0.2" +version = "2.0.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.8" files = [ - {file = "pandas-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ebb9f1c22ddb828e7fd017ea265a59d80461d5a79154b49a4207bd17514d122"}, - {file = "pandas-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1eb09a242184092f424b2edd06eb2b99d06dc07eeddff9929e8667d4ed44e181"}, - {file = "pandas-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7319b6e68de14e6209460f72a8d1ef13c09fb3d3ef6c37c1e65b35d50b5c145"}, - {file = "pandas-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd46bde7309088481b1cf9c58e3f0e204b9ff9e3244f441accd220dd3365ce7c"}, - {file = "pandas-2.0.2-cp310-cp310-win32.whl", hash = "sha256:51a93d422fbb1bd04b67639ba4b5368dffc26923f3ea32a275d2cc450f1d1c86"}, - {file = "pandas-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:66d00300f188fa5de73f92d5725ced162488f6dc6ad4cecfe4144ca29debe3b8"}, - {file = "pandas-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02755de164da6827764ceb3bbc5f64b35cb12394b1024fdf88704d0fa06e0e2f"}, - {file = "pandas-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0a1e0576611641acde15c2322228d138258f236d14b749ad9af498ab69089e2d"}, - {file = "pandas-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6b5f14cd24a2ed06e14255ff40fe2ea0cfaef79a8dd68069b7ace74bd6acbba"}, - {file = "pandas-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50e451932b3011b61d2961b4185382c92cc8c6ee4658dcd4f320687bb2d000ee"}, - {file = "pandas-2.0.2-cp311-cp311-win32.whl", hash = "sha256:7b21cb72958fc49ad757685db1919021d99650d7aaba676576c9e88d3889d456"}, - {file = "pandas-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:c4af689352c4fe3d75b2834933ee9d0ccdbf5d7a8a7264f0ce9524e877820c08"}, - {file = "pandas-2.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:69167693cb8f9b3fc060956a5d0a0a8dbfed5f980d9fd2c306fb5b9c855c814c"}, - {file = "pandas-2.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:30a89d0fec4263ccbf96f68592fd668939481854d2ff9da709d32a047689393b"}, - {file = "pandas-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a18e5c72b989ff0f7197707ceddc99828320d0ca22ab50dd1b9e37db45b010c0"}, - {file = "pandas-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7376e13d28eb16752c398ca1d36ccfe52bf7e887067af9a0474de6331dd948d2"}, - {file = "pandas-2.0.2-cp38-cp38-win32.whl", hash = "sha256:6d6d10c2142d11d40d6e6c0a190b1f89f525bcf85564707e31b0a39e3b398e08"}, - {file = "pandas-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:e69140bc2d29a8556f55445c15f5794490852af3de0f609a24003ef174528b79"}, - {file = "pandas-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b42b120458636a981077cfcfa8568c031b3e8709701315e2bfa866324a83efa8"}, - {file = "pandas-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f908a77cbeef9bbd646bd4b81214cbef9ac3dda4181d5092a4aa9797d1bc7774"}, - {file = "pandas-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:713f2f70abcdade1ddd68fc91577cb090b3544b07ceba78a12f799355a13ee44"}, - {file = "pandas-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf3f0c361a4270185baa89ec7ab92ecaa355fe783791457077473f974f654df5"}, - {file = "pandas-2.0.2-cp39-cp39-win32.whl", hash = "sha256:598e9020d85a8cdbaa1815eb325a91cfff2bb2b23c1442549b8a3668e36f0f77"}, - {file = "pandas-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:77550c8909ebc23e56a89f91b40ad01b50c42cfbfab49b3393694a50549295ea"}, - {file = "pandas-2.0.2.tar.gz", hash = "sha256:dd5476b6c3fe410ee95926873f377b856dbc4e81a9c605a0dc05aaccc6a7c6c6"}, + {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, + {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, + {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, + {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, + {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, + {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, + {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, + {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, + {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, + {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, + {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, ] [package.dependencies] @@ -1986,7 +2021,7 @@ pytz = ">=2020.1" tzdata = ">=2022.1" [package.extras] -all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.0.0)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] +all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] aws = ["s3fs (>=2021.08.0)"] clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] @@ -2005,7 +2040,7 @@ plot = ["matplotlib (>=3.6.1)"] postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] spss = ["pyreadstat (>=1.1.2)"] sql-other = ["SQLAlchemy (>=1.4.16)"] -test = ["hypothesis (>=6.34.2)", "pytest (>=7.0.0)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.6.3)"] [[package]] @@ -2096,28 +2131,28 @@ xarray = ["xarray"] [[package]] name = "platformdirs" -version = "3.5.1" +version = "3.9.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.5.1-py3-none-any.whl", hash = "sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5"}, - {file = "platformdirs-3.5.1.tar.gz", hash = "sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f"}, + {file = "platformdirs-3.9.1-py3-none-any.whl", hash = "sha256:ad8291ae0ae5072f66c16945166cb11c63394c7a3ad1b1bc9828ca3162da8c2f"}, + {file = "platformdirs-3.9.1.tar.gz", hash = "sha256:1b42b450ad933e981d56e59f1b97495428c9bd60698baab9f3eb3d00d5822421"}, ] [package.extras] -docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.2.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" -version = "1.0.0" +version = "1.2.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, ] [package.extras] @@ -2126,13 +2161,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "3.3.2" +version = "3.3.3" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.8" files = [ - {file = "pre_commit-3.3.2-py2.py3-none-any.whl", hash = "sha256:8056bc52181efadf4aac792b1f4f255dfd2fb5a350ded7335d251a68561e8cb6"}, - {file = "pre_commit-3.3.2.tar.gz", hash = "sha256:66e37bec2d882de1f17f88075047ef8962581f83c234ac08da21a0c58953d1f0"}, + {file = "pre_commit-3.3.3-py2.py3-none-any.whl", hash = "sha256:10badb65d6a38caff29703362271d7dca483d01da88f9d7e05d0b97171c136cb"}, + {file = "pre_commit-3.3.3.tar.gz", hash = "sha256:a2256f489cd913d575c145132ae196fe335da32d91a8294b7afe6622335dd023"}, ] [package.dependencies] @@ -2144,13 +2179,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prometheus-client" -version = "0.17.0" +version = "0.17.1" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.6" files = [ - {file = "prometheus_client-0.17.0-py3-none-any.whl", hash = "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce"}, - {file = "prometheus_client-0.17.0.tar.gz", hash = "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b"}, + {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, + {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, ] [package.extras] @@ -2158,13 +2193,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.38" +version = "3.0.39" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, - {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, + {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, + {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, ] [package.dependencies] @@ -2221,6 +2256,40 @@ files = [ [package.extras] tests = ["pytest"] +[[package]] +name = "pybtex" +version = "0.24.0" +description = "A BibTeX-compatible bibliography processor in Python" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" +files = [ + {file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f"}, + {file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755"}, +] + +[package.dependencies] +latexcodec = ">=1.0.4" +PyYAML = ">=3.01" +six = "*" + +[package.extras] +test = ["pytest"] + +[[package]] +name = "pybtex-docutils" +version = "1.0.2" +description = "A docutils backend for pybtex." +optional = false +python-versions = ">=3.6" +files = [ + {file = "pybtex-docutils-1.0.2.tar.gz", hash = "sha256:43aa353b6d498fd5ac30f0073a98e332d061d34fe619d3d50d1761f8fd4aa016"}, + {file = "pybtex_docutils-1.0.2-py3-none-any.whl", hash = "sha256:6f9e3c25a37bcaac8c4f69513272706ec6253bb708a93d8b4b173f43915ba239"}, +] + +[package.dependencies] +docutils = ">=0.8" +pybtex = ">=0.16" + [[package]] name = "pycparser" version = "2.21" @@ -2248,96 +2317,50 @@ plugins = ["importlib-metadata"] [[package]] name = "pyproj" -version = "3.5.0" +version = "3.6.0" description = "Python interface to PROJ (cartographic projections and coordinate transformations library)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pyproj-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6475ce653880938468a1a1b7321267243909e34b972ba9e53d5982c41d555918"}, - {file = "pyproj-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:61e4ad57d89b03a7b173793b31bca8ee110112cde1937ef0f42a70b9120c827d"}, - {file = "pyproj-3.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bdd2021bb6f7f346bfe1d2a358aa109da017d22c4704af2d994e7c7ee0a7a53"}, - {file = "pyproj-3.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5674923351e76222e2c10c58b5e1ac119d7a46b270d822c463035971b06f724b"}, - {file = "pyproj-3.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd5e2b6aa255023c4acd0b977590f1f7cc801ba21b4d806fcf6dfac3474ebb83"}, - {file = "pyproj-3.5.0-cp310-cp310-win32.whl", hash = "sha256:6f316a66031a14e9c5a88c91f8b77aa97f5454895674541ed6ab630b682be35d"}, - {file = "pyproj-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:f7c2f4d9681e810cf40239caaca00079930a6d9ee6591139b88d592d36051d82"}, - {file = "pyproj-3.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7572983134e310e0ca809c63f1722557a040fe9443df5f247bf11ba887eb1229"}, - {file = "pyproj-3.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eccb417b91d0be27805dfc97550bfb8b7db94e9fe1db5ebedb98f5b88d601323"}, - {file = "pyproj-3.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:621d78a9d8bf4d06e08bef2471021fbcb1a65aa629ad4a20c22e521ce729cc20"}, - {file = "pyproj-3.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9a024370e917c899bff9171f03ea6079deecdc7482a146a2c565f3b9df134ea"}, - {file = "pyproj-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b7c2113c4d11184a238077ec85e31eda1dcc58ffeb9a4429830e0a7036e787d"}, - {file = "pyproj-3.5.0-cp311-cp311-win32.whl", hash = "sha256:a730f5b4c98c8a0f312437873e6e34dbd4cc6dc23d5afd91a6691c62724b1f68"}, - {file = "pyproj-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:e97573de0ab3bbbcb4c7748bc41f4ceb6da10b45d35b1a294b5820701e7c25f0"}, - {file = "pyproj-3.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2b708fd43453b985642b737d4a6e7f1d6a0ab1677ffa4e14cc258537b49224b0"}, - {file = "pyproj-3.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b60d93a200639e8367c6542a964fd0aa2dbd152f256c1831dc18cd5aa470fb8a"}, - {file = "pyproj-3.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38862fe07316ae12b79d82d298e390973a4f00b684f3c2d037238e20e00610ba"}, - {file = "pyproj-3.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71b65f2a38cd9e16883dbb0f8ae82bdf8f6b79b1b02975c78483ab8428dbbf2f"}, - {file = "pyproj-3.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b752b7d9c4b08181c7e8c0d9c7f277cbefff42227f34d3310696a87c863d9dd3"}, - {file = "pyproj-3.5.0-cp38-cp38-win32.whl", hash = "sha256:b937215bfbaf404ec8f03ca741fc3f9f2c4c2c5590a02ccddddd820ae3c71331"}, - {file = "pyproj-3.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:97ed199033c2c770e7eea2ef80ff5e6413426ec2d7ec985b869792f04ab95d05"}, - {file = "pyproj-3.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:052c49fce8b5d55943a35c36ccecb87350c68b48ba95bc02a789770c374ef819"}, - {file = "pyproj-3.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1507138ea28bf2134d31797675380791cc1a7156a3aeda484e65a78a4aba9b62"}, - {file = "pyproj-3.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c02742ef3d846401861a878a61ef7ad911ea7539d6cc4619ddb52dbdf7b45aee"}, - {file = "pyproj-3.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:385b0341861d3ebc8cad98337a738821dcb548d465576527399f4955ca24b6ed"}, - {file = "pyproj-3.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fe6bb1b68a35d07378d38be77b5b2f8dd2bea5910c957bfcc7bee55988d3910"}, - {file = "pyproj-3.5.0-cp39-cp39-win32.whl", hash = "sha256:5c4b85ac10d733c42d73a2e6261c8d6745bf52433a31848dd1b6561c9a382da3"}, - {file = "pyproj-3.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:1798ff7d65d9057ebb2d017ffe8403268b8452f24d0428b2140018c25c7fa1bc"}, - {file = "pyproj-3.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d711517a8487ef3245b08dc82f781a906df9abb3b6cb0ce0486f0eeb823ca570"}, - {file = "pyproj-3.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:788a5dadb532644a64efe0f5f01bf508c821eb7e984f13a677d56002f1e8a67a"}, - {file = "pyproj-3.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73f7960a97225812f9b1d7aeda5fb83812f38de9441e3476fcc8abb3e2b2f4de"}, - {file = "pyproj-3.5.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fde5ece4d2436b5a57c8f5f97b49b5de06a856d03959f836c957d3e609f2de7e"}, - {file = "pyproj-3.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e08db25b61cf024648d55973cc3d1c3f1d0818fabf594d5f5a8e2318103d2aa0"}, - {file = "pyproj-3.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a87b419a2a352413fbf759ecb66da9da50bd19861c8f26db6a25439125b27b9"}, - {file = "pyproj-3.5.0.tar.gz", hash = "sha256:9859d1591c1863414d875ae0759e72c2cffc01ab989dc64137fbac572cc81bf6"}, + {file = "pyproj-3.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e600f6a2771d3b41aeb2cc1efd96771ae9a01451013da1dd48ff272e7c6e34ef"}, + {file = "pyproj-3.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d7f6cd045df29aae960391dfe06a575c110af598f1dea5add8be6ca42332b0f5"}, + {file = "pyproj-3.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:557e6592855111c84eda176ddf6b130f55d5e2b9cb1c017b8c91b69f37f474f5"}, + {file = "pyproj-3.6.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de6288b6ceabdeeac01abf627c74414822d322d8f55dc8efe4d29dedd27c5719"}, + {file = "pyproj-3.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e427ccdbb1763872416549bdfa9fa1f5f169054653c4daf674e71480cc39cf11"}, + {file = "pyproj-3.6.0-cp310-cp310-win32.whl", hash = "sha256:1283d3c1960edbb74828f5f3405b27578a9a27f7766ab6a3956f4bd851f08239"}, + {file = "pyproj-3.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:9de1aab71234bfd3fd648a1152519b5ee152c43113d7d8ea52590a0140129501"}, + {file = "pyproj-3.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:00fab048596c17572fa8980014ef117dbb2a445e6f7ba3b9ddfcc683efc598e7"}, + {file = "pyproj-3.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba5e7c8ddd6ed5a3f9fcf95ea80ba44c931913723de2ece841c94bb38b200c4a"}, + {file = "pyproj-3.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08dfc5c9533c78a97afae9d53b99b810a4a8f97c3be9eb2b8f323b726c736403"}, + {file = "pyproj-3.6.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18a8bdb87aeb41b60a2e91d32f623227de3569fb83b4c64b174c3a7c5b0ed3ae"}, + {file = "pyproj-3.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfe392dfc0eba2248dc08c976a72f52ff9da2bddfddfd9ff5dcf18e8e88200c7"}, + {file = "pyproj-3.6.0-cp311-cp311-win32.whl", hash = "sha256:78276c6b0c831255c97c56dff7313a3571f327a284d8ac63d6a56437a72ed0e0"}, + {file = "pyproj-3.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:8fbac2eb9a0e425d7d6b7c6f4ebacd675cf3bdef0c59887057b8b4b0374e7c12"}, + {file = "pyproj-3.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:95120d65cbc5983dfd877076f28dbc18b9b329cbee38ca6e217bb7a5a043c099"}, + {file = "pyproj-3.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:830e6de7cfe43853967afee5ef908dfd5aa72d1ec12af9b9e3fecc179886e346"}, + {file = "pyproj-3.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e342b3010b2b20134671564ff9a8c476e5e512bf589477480aded1a5813af7c8"}, + {file = "pyproj-3.6.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23787460fab85ba2f857ee60ffb2e8e21fd9bd5db9833c51c1c05b2a6d9f0be5"}, + {file = "pyproj-3.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:595376e4d3bb72b7dceeccbce0f4c43053d47561f17a1ad0224407e9980ee849"}, + {file = "pyproj-3.6.0-cp39-cp39-win32.whl", hash = "sha256:4d8a9773503085eada59b6892c96ddf686ab8cf64cfdc18ad744d13ee76dfa6f"}, + {file = "pyproj-3.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:137a07404f937f264b11b7130cd4cfa00002dbe4333b222e8056db84849c2ea4"}, + {file = "pyproj-3.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2799499a4045e4fb73e44c31bdacab0593a253a7a4b6baae6fdd27d604cf9bc2"}, + {file = "pyproj-3.6.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f04f6297c615c3b17f835df2556ac8fb9b4f51f281e960437eaf0cd80e7ae26a"}, + {file = "pyproj-3.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a4d2d438b007cb1f8d5f6f308d53d7ff9a2508cff8f9da6e2a93b76ffd98aaf"}, + {file = "pyproj-3.6.0.tar.gz", hash = "sha256:a5b111865b3f0f8b77b3983f2fbe4dd6248fc09d3730295949977c8dcd988062"}, ] [package.dependencies] certifi = "*" -[[package]] -name = "pyrsistent" -version = "0.19.3" -description = "Persistent/Functional/Immutable data structures" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, - {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, - {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, - {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, - {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, - {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, -] - [[package]] name = "pytest" -version = "7.3.1" +version = "7.4.0" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.3.1-py3-none-any.whl", hash = "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362"}, - {file = "pytest-7.3.1.tar.gz", hash = "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3"}, + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, ] [package.dependencies] @@ -2349,7 +2372,7 @@ pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" @@ -2450,66 +2473,65 @@ files = [ [[package]] name = "pywinpty" -version = "2.0.10" +version = "2.0.11" description = "Pseudo terminal support for Windows from Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pywinpty-2.0.10-cp310-none-win_amd64.whl", hash = "sha256:4c7d06ad10f6e92bc850a467f26d98f4f30e73d2fe5926536308c6ae0566bc16"}, - {file = "pywinpty-2.0.10-cp311-none-win_amd64.whl", hash = "sha256:7ffbd66310b83e42028fc9df7746118978d94fba8c1ebf15a7c1275fdd80b28a"}, - {file = "pywinpty-2.0.10-cp37-none-win_amd64.whl", hash = "sha256:38cb924f2778b5751ef91a75febd114776b3af0ae411bc667be45dd84fc881d3"}, - {file = "pywinpty-2.0.10-cp38-none-win_amd64.whl", hash = "sha256:902d79444b29ad1833b8d5c3c9aabdfd428f4f068504430df18074007c8c0de8"}, - {file = "pywinpty-2.0.10-cp39-none-win_amd64.whl", hash = "sha256:3c46aef80dd50979aff93de199e4a00a8ee033ba7a03cadf0a91fed45f0c39d7"}, - {file = "pywinpty-2.0.10.tar.gz", hash = "sha256:cdbb5694cf8c7242c2ecfaca35c545d31fa5d5814c3d67a4e628f803f680ebea"}, + {file = "pywinpty-2.0.11-cp310-none-win_amd64.whl", hash = "sha256:452f10ac9ff8ab9151aa8cea9e491a9612a12250b1899278c6a56bc184afb47f"}, + {file = "pywinpty-2.0.11-cp311-none-win_amd64.whl", hash = "sha256:6701867d42aec1239bc0fedf49a336570eb60eb886e81763db77ea2b6c533cc3"}, + {file = "pywinpty-2.0.11-cp38-none-win_amd64.whl", hash = "sha256:0ffd287751ad871141dc9724de70ea21f7fc2ff1af50861e0d232cf70739d8c4"}, + {file = "pywinpty-2.0.11-cp39-none-win_amd64.whl", hash = "sha256:e4e7f023c28ca7aa8e1313e53ba80a4d10171fe27857b7e02f99882dfe3e8638"}, + {file = "pywinpty-2.0.11.tar.gz", hash = "sha256:e244cffe29a894876e2cd251306efd0d8d64abd5ada0a46150a4a71c0b9ad5c5"}, ] [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.6" files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] @@ -2644,6 +2666,21 @@ packaging = "*" [package.extras] test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] +[[package]] +name = "referencing" +version = "0.30.0" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.30.0-py3-none-any.whl", hash = "sha256:c257b08a399b6c2f5a3510a50d28ab5dbc7bbde049bcaf954d43c446f83ab548"}, + {file = "referencing-0.30.0.tar.gz", hash = "sha256:47237742e990457f7512c7d27486394a9aadaf876cbfaa4be65b27b4f4d47c6b"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + [[package]] name = "regex" version = "2023.6.3" @@ -2764,13 +2801,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "requests-mock" -version = "1.10.0" +version = "1.11.0" description = "Mock out responses from the requests package" optional = false python-versions = "*" files = [ - {file = "requests-mock-1.10.0.tar.gz", hash = "sha256:59c9c32419a9fb1ae83ec242d98e889c45bd7d7a65d48375cc243ec08441658b"}, - {file = "requests_mock-1.10.0-py2.py3-none-any.whl", hash = "sha256:2fdbb637ad17ee15c06f33d31169e71bf9fe2bdb7bc9da26185be0dd8d842699"}, + {file = "requests-mock-1.11.0.tar.gz", hash = "sha256:ef10b572b489a5f28e09b708697208c4a3b2b89ef80a9f01584340ea357ec3c4"}, + {file = "requests_mock-1.11.0-py2.py3-none-any.whl", hash = "sha256:f7fae383f228633f6bececebdab236c478ace2284d6292c6e7e2867b9ab74d15"}, ] [package.dependencies] @@ -2779,7 +2816,7 @@ six = "*" [package.extras] fixture = ["fixtures"] -test = ["fixtures", "mock", "purl", "pytest", "requests-futures", "sphinx", "testrepository (>=0.0.18)", "testtools"] +test = ["fixtures", "mock", "purl", "pytest", "requests-futures", "sphinx", "testtools"] [[package]] name = "rfc3339-validator" @@ -2806,6 +2843,112 @@ files = [ {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, ] +[[package]] +name = "rpds-py" +version = "0.9.2" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.9.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ab6919a09c055c9b092798ce18c6c4adf49d24d4d9e43a92b257e3f2548231e7"}, + {file = "rpds_py-0.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d55777a80f78dd09410bd84ff8c95ee05519f41113b2df90a69622f5540c4f8b"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a216b26e5af0a8e265d4efd65d3bcec5fba6b26909014effe20cd302fd1138fa"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29cd8bfb2d716366a035913ced99188a79b623a3512292963d84d3e06e63b496"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44659b1f326214950a8204a248ca6199535e73a694be8d3e0e869f820767f12f"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:745f5a43fdd7d6d25a53ab1a99979e7f8ea419dfefebcab0a5a1e9095490ee5e"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a987578ac5214f18b99d1f2a3851cba5b09f4a689818a106c23dbad0dfeb760f"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf4151acb541b6e895354f6ff9ac06995ad9e4175cbc6d30aaed08856558201f"}, + {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:03421628f0dc10a4119d714a17f646e2837126a25ac7a256bdf7c3943400f67f"}, + {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:13b602dc3e8dff3063734f02dcf05111e887f301fdda74151a93dbbc249930fe"}, + {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fae5cb554b604b3f9e2c608241b5d8d303e410d7dfb6d397c335f983495ce7f6"}, + {file = "rpds_py-0.9.2-cp310-none-win32.whl", hash = "sha256:47c5f58a8e0c2c920cc7783113df2fc4ff12bf3a411d985012f145e9242a2764"}, + {file = "rpds_py-0.9.2-cp310-none-win_amd64.whl", hash = "sha256:4ea6b73c22d8182dff91155af018b11aac9ff7eca085750455c5990cb1cfae6e"}, + {file = "rpds_py-0.9.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e564d2238512c5ef5e9d79338ab77f1cbbda6c2d541ad41b2af445fb200385e3"}, + {file = "rpds_py-0.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f411330a6376fb50e5b7a3e66894e4a39e60ca2e17dce258d53768fea06a37bd"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e7521f5af0233e89939ad626b15278c71b69dc1dfccaa7b97bd4cdf96536bb7"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8d3335c03100a073883857e91db9f2e0ef8a1cf42dc0369cbb9151c149dbbc1b"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d25b1c1096ef0447355f7293fbe9ad740f7c47ae032c2884113f8e87660d8f6e"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a5d3fbd02efd9cf6a8ffc2f17b53a33542f6b154e88dd7b42ef4a4c0700fdad"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5934e2833afeaf36bd1eadb57256239785f5af0220ed8d21c2896ec4d3a765f"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:095b460e117685867d45548fbd8598a8d9999227e9061ee7f012d9d264e6048d"}, + {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:91378d9f4151adc223d584489591dbb79f78814c0734a7c3bfa9c9e09978121c"}, + {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:24a81c177379300220e907e9b864107614b144f6c2a15ed5c3450e19cf536fae"}, + {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:de0b6eceb46141984671802d412568d22c6bacc9b230174f9e55fc72ef4f57de"}, + {file = "rpds_py-0.9.2-cp311-none-win32.whl", hash = "sha256:700375326ed641f3d9d32060a91513ad668bcb7e2cffb18415c399acb25de2ab"}, + {file = "rpds_py-0.9.2-cp311-none-win_amd64.whl", hash = "sha256:0766babfcf941db8607bdaf82569ec38107dbb03c7f0b72604a0b346b6eb3298"}, + {file = "rpds_py-0.9.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1440c291db3f98a914e1afd9d6541e8fc60b4c3aab1a9008d03da4651e67386"}, + {file = "rpds_py-0.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0f2996fbac8e0b77fd67102becb9229986396e051f33dbceada3debaacc7033f"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f30d205755566a25f2ae0382944fcae2f350500ae4df4e795efa9e850821d82"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:159fba751a1e6b1c69244e23ba6c28f879a8758a3e992ed056d86d74a194a0f3"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1f044792e1adcea82468a72310c66a7f08728d72a244730d14880cd1dabe36b"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9251eb8aa82e6cf88510530b29eef4fac825a2b709baf5b94a6094894f252387"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01899794b654e616c8625b194ddd1e5b51ef5b60ed61baa7a2d9c2ad7b2a4238"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0c43f8ae8f6be1d605b0465671124aa8d6a0e40f1fb81dcea28b7e3d87ca1e1"}, + {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:207f57c402d1f8712618f737356e4b6f35253b6d20a324d9a47cb9f38ee43a6b"}, + {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b52e7c5ae35b00566d244ffefba0f46bb6bec749a50412acf42b1c3f402e2c90"}, + {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:978fa96dbb005d599ec4fd9ed301b1cc45f1a8f7982d4793faf20b404b56677d"}, + {file = "rpds_py-0.9.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6aa8326a4a608e1c28da191edd7c924dff445251b94653988efb059b16577a4d"}, + {file = "rpds_py-0.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aad51239bee6bff6823bbbdc8ad85136c6125542bbc609e035ab98ca1e32a192"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd4dc3602370679c2dfb818d9c97b1137d4dd412230cfecd3c66a1bf388a196"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd9da77c6ec1f258387957b754f0df60766ac23ed698b61941ba9acccd3284d1"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:190ca6f55042ea4649ed19c9093a9be9d63cd8a97880106747d7147f88a49d18"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:876bf9ed62323bc7dcfc261dbc5572c996ef26fe6406b0ff985cbcf460fc8a4c"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa2818759aba55df50592ecbc95ebcdc99917fa7b55cc6796235b04193eb3c55"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9ea4d00850ef1e917815e59b078ecb338f6a8efda23369677c54a5825dbebb55"}, + {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5855c85eb8b8a968a74dc7fb014c9166a05e7e7a8377fb91d78512900aadd13d"}, + {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:14c408e9d1a80dcb45c05a5149e5961aadb912fff42ca1dd9b68c0044904eb32"}, + {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:65a0583c43d9f22cb2130c7b110e695fff834fd5e832a776a107197e59a1898e"}, + {file = "rpds_py-0.9.2-cp38-none-win32.whl", hash = "sha256:71f2f7715935a61fa3e4ae91d91b67e571aeb5cb5d10331ab681256bda2ad920"}, + {file = "rpds_py-0.9.2-cp38-none-win_amd64.whl", hash = "sha256:674c704605092e3ebbbd13687b09c9f78c362a4bc710343efe37a91457123044"}, + {file = "rpds_py-0.9.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:07e2c54bef6838fa44c48dfbc8234e8e2466d851124b551fc4e07a1cfeb37260"}, + {file = "rpds_py-0.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7fdf55283ad38c33e35e2855565361f4bf0abd02470b8ab28d499c663bc5d7c"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:890ba852c16ace6ed9f90e8670f2c1c178d96510a21b06d2fa12d8783a905193"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50025635ba8b629a86d9d5474e650da304cb46bbb4d18690532dd79341467846"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517cbf6e67ae3623c5127206489d69eb2bdb27239a3c3cc559350ef52a3bbf0b"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0836d71ca19071090d524739420a61580f3f894618d10b666cf3d9a1688355b1"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c439fd54b2b9053717cca3de9583be6584b384d88d045f97d409f0ca867d80f"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f68996a3b3dc9335037f82754f9cdbe3a95db42bde571d8c3be26cc6245f2324"}, + {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7d68dc8acded354c972116f59b5eb2e5864432948e098c19fe6994926d8e15c3"}, + {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f963c6b1218b96db85fc37a9f0851eaf8b9040aa46dec112611697a7023da535"}, + {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a46859d7f947061b4010e554ccd1791467d1b1759f2dc2ec9055fa239f1bc26"}, + {file = "rpds_py-0.9.2-cp39-none-win32.whl", hash = "sha256:e07e5dbf8a83c66783a9fe2d4566968ea8c161199680e8ad38d53e075df5f0d0"}, + {file = "rpds_py-0.9.2-cp39-none-win_amd64.whl", hash = "sha256:682726178138ea45a0766907957b60f3a1bf3acdf212436be9733f28b6c5af3c"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:196cb208825a8b9c8fc360dc0f87993b8b260038615230242bf18ec84447c08d"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:c7671d45530fcb6d5e22fd40c97e1e1e01965fc298cbda523bb640f3d923b387"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83b32f0940adec65099f3b1c215ef7f1d025d13ff947975a055989cb7fd019a4"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f67da97f5b9eac838b6980fc6da268622e91f8960e083a34533ca710bec8611"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03975db5f103997904c37e804e5f340c8fdabbb5883f26ee50a255d664eed58c"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:987b06d1cdb28f88a42e4fb8a87f094e43f3c435ed8e486533aea0bf2e53d931"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c861a7e4aef15ff91233751619ce3a3d2b9e5877e0fcd76f9ea4f6847183aa16"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02938432352359805b6da099c9c95c8a0547fe4b274ce8f1a91677401bb9a45f"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ef1f08f2a924837e112cba2953e15aacfccbbfcd773b4b9b4723f8f2ddded08e"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:35da5cc5cb37c04c4ee03128ad59b8c3941a1e5cd398d78c37f716f32a9b7f67"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:141acb9d4ccc04e704e5992d35472f78c35af047fa0cfae2923835d153f091be"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:79f594919d2c1a0cc17d1988a6adaf9a2f000d2e1048f71f298b056b1018e872"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:a06418fe1155e72e16dddc68bb3780ae44cebb2912fbd8bb6ff9161de56e1798"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b2eb034c94b0b96d5eddb290b7b5198460e2d5d0c421751713953a9c4e47d10"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b08605d248b974eb02f40bdcd1a35d3924c83a2a5e8f5d0fa5af852c4d960af"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a0805911caedfe2736935250be5008b261f10a729a303f676d3d5fea6900c96a"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab2299e3f92aa5417d5e16bb45bb4586171c1327568f638e8453c9f8d9e0f020"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c8d7594e38cf98d8a7df25b440f684b510cf4627fe038c297a87496d10a174f"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b9ec12ad5f0a4625db34db7e0005be2632c1013b253a4a60e8302ad4d462afd"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1fcdee18fea97238ed17ab6478c66b2095e4ae7177e35fb71fbe561a27adf620"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:933a7d5cd4b84f959aedeb84f2030f0a01d63ae6cf256629af3081cf3e3426e8"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:686ba516e02db6d6f8c279d1641f7067ebb5dc58b1d0536c4aaebb7bf01cdc5d"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0173c0444bec0a3d7d848eaeca2d8bd32a1b43f3d3fde6617aac3731fa4be05f"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d576c3ef8c7b2d560e301eb33891d1944d965a4d7a2eacb6332eee8a71827db6"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed89861ee8c8c47d6beb742a602f912b1bb64f598b1e2f3d758948721d44d468"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1054a08e818f8e18910f1bee731583fe8f899b0a0a5044c6e680ceea34f93876"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99e7c4bb27ff1aab90dcc3e9d37ee5af0231ed98d99cb6f5250de28889a3d502"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c545d9d14d47be716495076b659db179206e3fd997769bc01e2d550eeb685596"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9039a11bca3c41be5a58282ed81ae422fa680409022b996032a43badef2a3752"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fb39aca7a64ad0c9490adfa719dbeeb87d13be137ca189d2564e596f8ba32c07"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2d8b3b3a2ce0eaa00c5bbbb60b6713e94e7e0becab7b3db6c5c77f979e8ed1f1"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:99b1c16f732b3a9971406fbfe18468592c5a3529585a45a35adbc1389a529a03"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c27ee01a6c3223025f4badd533bea5e87c988cb0ba2811b690395dfe16088cfe"}, + {file = "rpds_py-0.9.2.tar.gz", hash = "sha256:8d70e8f14900f2657c249ea4def963bed86a29b81f81f5b76b5a9215680de945"}, +] + [[package]] name = "send2trash" version = "1.8.2" @@ -2824,13 +2967,13 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "67.8.0" +version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.8.0-py3-none-any.whl", hash = "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f"}, - {file = "setuptools-67.8.0.tar.gz", hash = "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102"}, + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, ] [package.extras] @@ -2938,20 +3081,20 @@ files = [ [[package]] name = "sphinx" -version = "6.2.1" +version = "7.1.0" description = "Python documentation generator" optional = false python-versions = ">=3.8" files = [ - {file = "Sphinx-6.2.1.tar.gz", hash = "sha256:6d56a34697bb749ffa0152feafc4b19836c755d90a7c59b72bc7dfd371b9cc6b"}, - {file = "sphinx-6.2.1-py3-none-any.whl", hash = "sha256:97787ff1fa3256a3eef9eda523a63dbf299f7b47e053cfcf684a1c2a8380c912"}, + {file = "sphinx-7.1.0-py3-none-any.whl", hash = "sha256:9bdfb5a2b28351d4fdf40a63cd006dbad727f793b243e669fc950d7116c634af"}, + {file = "sphinx-7.1.0.tar.gz", hash = "sha256:8f336d0221c3beb23006b3164ed1d46db9cebcce9cb41cdb9c5ecd4bcc509be0"}, ] [package.dependencies] alabaster = ">=0.7,<0.8" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.18.1,<0.20" +docutils = ">=0.18.1,<0.21" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" @@ -2973,36 +3116,36 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-autoapi" -version = "2.1.0" +version = "2.1.1" description = "Sphinx API documentation generator" optional = false python-versions = ">=3.7" files = [ - {file = "sphinx-autoapi-2.1.0.tar.gz", hash = "sha256:5b5c58064214d5a846c9c81d23f00990a64654b9bca10213231db54a241bc50f"}, - {file = "sphinx_autoapi-2.1.0-py2.py3-none-any.whl", hash = "sha256:b25c7b2cda379447b8c36b6a0e3bdf76e02fd64f7ca99d41c6cbdf130a01768f"}, + {file = "sphinx-autoapi-2.1.1.tar.gz", hash = "sha256:fbadb96e79020d6b0ec45d888517bf816d6b587a2d340fbe1ec31135e300a6c8"}, + {file = "sphinx_autoapi-2.1.1-py2.py3-none-any.whl", hash = "sha256:d8da890477bd18e3327cafdead9d5a44a7d798476c6fa32492100e288250a5a3"}, ] [package.dependencies] +anyascii = "*" astroid = ">=2.7" Jinja2 = "*" PyYAML = "*" sphinx = ">=5.2.0" -unidecode = "*" [package.extras] -docs = ["sphinx", "sphinx-rtd-theme"] +docs = ["furo", "sphinx", "sphinx-design"] dotnet = ["sphinxcontrib-dotnetdomain"] go = ["sphinxcontrib-golangdomain"] [[package]] name = "sphinx-basic-ng" -version = "1.0.0b1" +version = "1.0.0b2" description = "A modern skeleton for Sphinx themes." optional = false python-versions = ">=3.7" files = [ - {file = "sphinx_basic_ng-1.0.0b1-py3-none-any.whl", hash = "sha256:ade597a3029c7865b24ad0eda88318766bcc2f9f4cef60df7e28126fde94db2a"}, - {file = "sphinx_basic_ng-1.0.0b1.tar.gz", hash = "sha256:89374bd3ccd9452a301786781e28c8718e99960f2d4f411845ea75fc7bb5a9b0"}, + {file = "sphinx_basic_ng-1.0.0b2-py3-none-any.whl", hash = "sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b"}, + {file = "sphinx_basic_ng-1.0.0b2.tar.gz", hash = "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9"}, ] [package.dependencies] @@ -3076,6 +3219,24 @@ files = [ lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] +[[package]] +name = "sphinxcontrib-bibtex" +version = "2.5.0" +description = "Sphinx extension for BibTeX style citations." +optional = false +python-versions = ">=3.6" +files = [ + {file = "sphinxcontrib-bibtex-2.5.0.tar.gz", hash = "sha256:71b42e5db0e2e284f243875326bf9936aa9a763282277d75048826fef5b00eaa"}, + {file = "sphinxcontrib_bibtex-2.5.0-py3-none-any.whl", hash = "sha256:748f726eaca6efff7731012103417ef130ecdcc09501b4d0c54283bf5f059f76"}, +] + +[package.dependencies] +docutils = ">=0.8" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +pybtex = ">=0.24" +pybtex-docutils = ">=1.0.0" +Sphinx = ">=2.1" + [[package]] name = "sphinxcontrib-devhelp" version = "1.0.2" @@ -3091,6 +3252,20 @@ files = [ lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] +[[package]] +name = "sphinxcontrib-googleanalytics" +version = "0.4" +description = "Sphinx extension googleanalytics" +optional = false +python-versions = "*" +files = [ + {file = "sphinxcontrib-googleanalytics-0.4.tar.gz", hash = "sha256:4b19c1f0fce5df6c7da5633201b64a9e5b0cb3210a14fdb4134942ceee8c5d12"}, + {file = "sphinxcontrib_googleanalytics-0.4-py3-none-any.whl", hash = "sha256:a6574983f9a58e5864ec10d34dc99914c4d647108b22c9249c8f0038b0cb18b3"}, +] + +[package.dependencies] +Sphinx = ">=0.6" + [[package]] name = "sphinxcontrib-htmlhelp" version = "2.0.1" @@ -3209,13 +3384,13 @@ test = ["flake8", "isort", "pytest"] [[package]] name = "tokenize-rt" -version = "5.0.0" +version = "5.1.0" description = "A wrapper around the stdlib `tokenize` which roundtrips." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tokenize_rt-5.0.0-py2.py3-none-any.whl", hash = "sha256:c67772c662c6b3dc65edf66808577968fb10badfc2042e3027196bed4daf9e5a"}, - {file = "tokenize_rt-5.0.0.tar.gz", hash = "sha256:3160bc0c3e8491312d0485171dea861fc160a240f5f5766b72a1165408d10740"}, + {file = "tokenize_rt-5.1.0-py2.py3-none-any.whl", hash = "sha256:9b7bb843e77dd6ed0be5564bfaaba200083911e0497841cd3e9235a6a9794d74"}, + {file = "tokenize_rt-5.1.0.tar.gz", hash = "sha256:08f0c2daa94c4052e53c2fcaa8e32585e6ae9bdfc800974092d031401694e002"}, ] [[package]] @@ -3266,13 +3441,13 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] [[package]] name = "typing-extensions" -version = "4.6.3" +version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.6.3-py3-none-any.whl", hash = "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26"}, - {file = "typing_extensions-4.6.3.tar.gz", hash = "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"}, + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, ] [[package]] @@ -3286,40 +3461,29 @@ files = [ {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, ] -[[package]] -name = "unidecode" -version = "1.3.6" -description = "ASCII transliterations of Unicode text" -optional = false -python-versions = ">=3.5" -files = [ - {file = "Unidecode-1.3.6-py3-none-any.whl", hash = "sha256:547d7c479e4f377b430dd91ac1275d593308dce0fc464fb2ab7d41f82ec653be"}, - {file = "Unidecode-1.3.6.tar.gz", hash = "sha256:fed09cf0be8cf415b391642c2a5addfc72194407caee4f98719e40ec2a72b830"}, -] - [[package]] name = "uri-template" -version = "1.2.0" +version = "1.3.0" description = "RFC 6570 URI Template Processor" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "uri_template-1.2.0-py3-none-any.whl", hash = "sha256:f1699c77b73b925cf4937eae31ab282a86dc885c333f2e942513f08f691fc7db"}, - {file = "uri_template-1.2.0.tar.gz", hash = "sha256:934e4d09d108b70eb8a24410af8615294d09d279ce0e7cbcdaef1bd21f932b06"}, + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, ] [package.extras] -dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-noqa", "flake8-requirements", "flake8-type-annotations", "flake8-use-fstring", "mypy", "pep8-naming"] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] [[package]] name = "urllib3" -version = "2.0.2" +version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.2-py3-none-any.whl", hash = "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e"}, - {file = "urllib3-2.0.2.tar.gz", hash = "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc"}, + {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, + {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, ] [package.extras] @@ -3330,23 +3494,23 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.23.0" +version = "20.24.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.23.0-py3-none-any.whl", hash = "sha256:6abec7670e5802a528357fdc75b26b9f57d5d92f29c5462ba0fbe45feacc685e"}, - {file = "virtualenv-20.23.0.tar.gz", hash = "sha256:a85caa554ced0c0afbd0d638e7e2d7b5f92d23478d05d17a76daeac8f279f924"}, + {file = "virtualenv-20.24.2-py3-none-any.whl", hash = "sha256:43a3052be36080548bdee0b42919c88072037d50d56c28bd3f853cbe92b953ff"}, + {file = "virtualenv-20.24.2.tar.gz", hash = "sha256:fd8a78f46f6b99a67b7ec5cf73f92357891a7b3a40fd97637c27f854aae3b9e0"}, ] [package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.11,<4" -platformdirs = ">=3.2,<4" +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<4" [package.extras] -docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.7.1)", "time-machine (>=2.9)"] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] name = "wcwidth" @@ -3387,13 +3551,13 @@ files = [ [[package]] name = "websocket-client" -version = "1.5.2" +version = "1.6.1" description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.7" files = [ - {file = "websocket-client-1.5.2.tar.gz", hash = "sha256:c7d67c13b928645f259d9b847ab5b57fd2d127213ca41ebd880de1f553b7c23b"}, - {file = "websocket_client-1.5.2-py3-none-any.whl", hash = "sha256:f8c64e28cd700e7ba1f04350d66422b6833b82a796b525a51e740b8cc8dab4b1"}, + {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, + {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, ] [package.extras] @@ -3403,13 +3567,13 @@ test = ["websockets"] [[package]] name = "widgetsnbextension" -version = "4.0.7" +version = "4.0.8" description = "Jupyter interactive widgets for Jupyter Notebook" optional = false python-versions = ">=3.7" files = [ - {file = "widgetsnbextension-4.0.7-py3-none-any.whl", hash = "sha256:be3228a73bbab189a16be2d4a3cd89ecbd4e31948bfdc64edac17dcdee3cd99c"}, - {file = "widgetsnbextension-4.0.7.tar.gz", hash = "sha256:ea67c17a7cd4ae358f8f46c3b304c40698bc0423732e3f273321ee141232c8be"}, + {file = "widgetsnbextension-4.0.8-py3-none-any.whl", hash = "sha256:2e37f0ce9da11651056280c7efe96f2db052fe8fc269508e3724f5cbd6c93018"}, + {file = "widgetsnbextension-4.0.8.tar.gz", hash = "sha256:9ec291ba87c2dfad42c3d5b6f68713fa18be1acd7476569516b2431682315c17"}, ] [[package]] @@ -3498,114 +3662,114 @@ files = [ [[package]] name = "y-py" -version = "0.5.9" +version = "0.6.0" description = "Python bindings for the Y-CRDT built from yrs (Rust)" optional = false python-versions = "*" files = [ - {file = "y_py-0.5.9-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:afa9a11aa2880dd8689894f3269b653e6d3bd1956963d5329be9a5bf021dab62"}, - {file = "y_py-0.5.9-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e370ce076781adea161b04d2f666e8b4f89bc7e8927ef842fbb0283d3bfa73e0"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67dad339f9b6701f74ff7a6e901c7909eca4eea02cf955b28d87a42650bd1be"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae82a6d9cbaff8cb7505e81b5b7f9cd7756bb7e7110aef7914375fe56b012a90"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c7ca64a2a97f708569dcabd55865915943e30267bf6d26c4d212d005951efe62"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55098440e32339c2dc3d652fb36bb77a4927dee5fd4ab0cb1fe12fdd163fd4f5"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9052a814e8b7ec756371a191f38de68b956437e0bb429c2dd503e658f298f9"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95d13b38c9055d607565b77cbae12e2bf0c1671c5cb8f2ee2e1230d41d2d6d34"}, - {file = "y_py-0.5.9-cp310-none-win32.whl", hash = "sha256:5dbd8d177ec7b9fef4a7b6d22eb2f8d5606fd5aac31cf2eab0dc18f0b3504c7c"}, - {file = "y_py-0.5.9-cp310-none-win_amd64.whl", hash = "sha256:d373c6bb8e21d5f7ec0833b76fa1ab480086ada602ef5bbf4724a25a21a00b6a"}, - {file = "y_py-0.5.9-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:f8f238144a302f17eb26b122cad9382fcff5ec6653b8a562130b9a5e44010098"}, - {file = "y_py-0.5.9-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:25637e3d011ca6f877a24f3083ff2549d1d619406d7e8a1455c445527205046c"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ffebe5e62cbfee6e24593927dedba77dc13ac4cfb9c822074ab566b1fb63d59"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b0ed760e6aa5316227a0ba2d5d29634a4ef2d72c8bc55169ac01664e17e4b536"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91be189fae8ba242528333e266e38d65cae3d9a09fe45867fab8578a3ddf2ea2"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3ae6d22b7cc599220a26b06da6ead9fd582eea5fdb6273b06fa3f060d0a26a7"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:065f90501cf008375d70be6ce72dd41745e09d088f0b545f5f914d2c3f04f7ae"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:742c486d5b792c4ad76e09426161302edddca85efe826fa01dcee50907326cd7"}, - {file = "y_py-0.5.9-cp311-none-win32.whl", hash = "sha256:2692c808bf28f797f8d693f45dc86563ac3b1626579f67ce9546dca69644d687"}, - {file = "y_py-0.5.9-cp311-none-win_amd64.whl", hash = "sha256:c1f5f287cc7ae127ed6a2fb1546e631b316a41d087d7d2db9caa3e5f59906dcf"}, - {file = "y_py-0.5.9-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9a59603cf42c20d02ee5add2e3d0ce48e89c480a2a02f642fb77f142c4f37958"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b44473bb32217c78e18db66f497f6c8be33e339bab5f52398bb2468c904d5140"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1906f13e8d5ebfbd9c7948f57bc6f6f53b451b19c99350f42a0f648147a8acfe"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:202b2a3e42e0a1eaedee26f8a3bc73cd9f994c4c2b15511ea56b9838178eb380"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13b9d2959d9a26536b6ad118fb026ff19bd79da52e4addf6f3a562e7c01d516e"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3ddedaa95284f4f22a92b362f658f3d92f272d8c0fa009051bd5490c4d5a04"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85585e669d7679126e4a04e4bc0a063a641175a74eecfe47539e8da3e5b1da6e"}, - {file = "y_py-0.5.9-cp37-none-win32.whl", hash = "sha256:caf9b1feb69379d424a1d3d7c899b8e0389a3fb3131d39c3c03dcc3d4a93dbdc"}, - {file = "y_py-0.5.9-cp37-none-win_amd64.whl", hash = "sha256:7353af0e9c1f42fbf0ab340e253eeb333d58c890fa91d3eadb1b9adaf9336732"}, - {file = "y_py-0.5.9-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ed0fd5265905cc7e23709479bc152d69f4972dec32fa322d20cb77f749707e78"}, - {file = "y_py-0.5.9-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:db1ac7f2d1862eb4c448cf76183399d555a63dbe2452bafecb1c2f691e36d687"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa685f7e43ce490dfb1e392ac48f584b75cd21f05dc526c160d15308236ce8a0"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c42f3a6cd20153925b00c49af855a3277989d411bb8ea849095be943ee160821"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:753aaae817d658a1e9d271663439d8e83d9d8effa45590ecdcadc600c7cf77e3"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc8e5f38842a4b043c9592bfa9a740147ddb8fac2d7a5b7bf6d52466c090ec23"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd3cb0d13ac92e7b9235d1024dba9af0788161246f12dcf1f635d634ccb206a"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9983e99e3a61452b39ffce98206c7e4c6d260f4e917c8fe53fb54aaf25df89a3"}, - {file = "y_py-0.5.9-cp38-none-win32.whl", hash = "sha256:63ef8e5b76cd54578a7fd5f72d8c698d9ccd7c555c7900ebfd38a24d397c3b15"}, - {file = "y_py-0.5.9-cp38-none-win_amd64.whl", hash = "sha256:fe70d0134fe2115c08866f0cac0eb5c0788093872b5026eb438a74e1ebafd659"}, - {file = "y_py-0.5.9-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:05f805b58422d5d7c8e7e8e2141d1c3cac4daaa4557ae6a9b84b141fe8d6289e"}, - {file = "y_py-0.5.9-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a7977eeaceaeb0dfffcc5643c985c337ebc33a0b1d792ae0a9b1331cdd97366f"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:800e73d2110b97a74c52db2c8ce03a78e96f0d66a7e0c87d8254170a67c2db0e"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:add793f5f5c7c7a3eb1b09ffc771bdaae10a0bd482a370bf696b83f8dee8d1b4"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8b67ae37af8aac6160fda66c0f73bcdf65c06da9022eb76192c3fc45cfab994"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2532ea5aefb223fd688c93860199d348a7601d814aac9e8784d816314588ddeb"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df78a0409dca11554a4b6442d7a8e61f762c3cfc78d55d98352392869a6b9ae0"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2da2a9e28dceab4832945a745cad507579f52b4d0c9e2f54ae156eb56875861"}, - {file = "y_py-0.5.9-cp39-none-win32.whl", hash = "sha256:fdafb93bfd5532b13a53c4090675bcd31724160017ecc73e492dc1211bc0377a"}, - {file = "y_py-0.5.9-cp39-none-win_amd64.whl", hash = "sha256:73200c59bb253b880825466717941ac57267f2f685b053e183183cb6fe82874d"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:af6df5ec1d66ee2d962026635d60e84ad35fc01b2a1e36b993360c0ce60ae349"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:0c0e333c20b0a6ce4a5851203d45898ab93f16426c342420b931e190c5b71d3d"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7434c77cd23592973ed63341b8d337e6aebaba5ed40d7f22e2d43dfd0c3a56e"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e30fe2491d095c6d695a2c96257967fd3e2497f0f777030c8492d03c18d46e2a"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a57d81260e048caacf43a2f851766687f53e8a8356df6947fb0eee7336a7e2de"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d4dfc276f988175baaa4ab321c3321a16ce33db3356c9bc5f4dea0db3de55aa"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb68445414940efe547291340e91604c7b8379b60822678ef29f4fc2a0e11c62"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd6f373dbf592ad83aaf95c16abebc8678928e49bd509ebd593259e1908345ae"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:76b3480e7037ac9390c450e2aff9e46e2c9e61520c0d88afe228110ec728adc5"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:9484a3fc33f812234e58a5ee834b42bb0a628054d61b5c06c323aa56c12e557d"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d87d0c2e87990bc00c049742d36a5dbbb1510949459af17198728890ee748a"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fce5feb57f6231376eb10d1fb68c60da106ffa0b520b3129471c466eff0304cc"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c1e9a866146d250e9e16d99fe22a40c82f5b592ab85da97e5679fc3841c7ce"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d722d6a27230c1f395535da5cee6a9a16497c6343afd262c846090075c083009"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f54625b9ed4e787872c45d3044dcfd04c0da4258d9914f3d32308830b35246c"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9513ae81fcc805671ae134c4c7421ca322acf92ce8b33817e1775ea8c0176973"}, - {file = "y_py-0.5.9.tar.gz", hash = "sha256:50cfa0532bcee27edb8c64743b49570e28bb76a00cd384ead1d84b6f052d9368"}, + {file = "y_py-0.6.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ebbebc4f6a9e0c89c7b57035f91043b038e804dd1953845d8a66066f4526c853"}, + {file = "y_py-0.6.0-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:2c230bc01b96081550b7583b77d00404fd39825657f4064b919a10515f660cdf"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5f5975c1a8c2ca99980571b8811d151db8590de9cc96346572a81e0f6f1e30e"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e5f89cf9ef1daf12f438a075415a02f227594e4b0494c78d3b83cb83651631f5"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efb3225b58dc67152c004da3c26ae5bad0afebbb3c7509d853bdd87eaa655137"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaaec9718f8a23924c95294d41d87829b113bc9a606a3667dfb995afc45c9920"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fb03947937b0fcb09eb2b94eb08d8e8030ef0ed70af777684ab670bd369bc3c"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f79ef7303e332e91d738e66e9bb7fce0243d0407a02631a58ebc0bf2fb8743d0"}, + {file = "y_py-0.6.0-cp310-none-win32.whl", hash = "sha256:1667b8a67ace756c04f03778e86fc359028c98905212f8686afb48c26c252bda"}, + {file = "y_py-0.6.0-cp310-none-win_amd64.whl", hash = "sha256:cca539c3804a580992304b18a33f1980282d9097a723f0bd01971477cb365b28"}, + {file = "y_py-0.6.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:5743e94c982585f05e02d9a3345dd9b1f28d90fa128df9f60b0eb357a76d2c32"}, + {file = "y_py-0.6.0-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:281535bb4f18fe09e5517a63b8206dd6f26ad6fb7e7c25c62bf785e594adab4d"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69e05e01594e99c934562124b159720533b7ad887dde7762d460916aac47a8e4"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a752ba8875ed2038dfc7d62738536cb22b4e308951cb925a7fe8fef782c6db08"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea7d796bb55d08dd1a60736beb724004f2cbdc207592b5f301a5ff314b17137"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5126786f914ff53ea2f04f9da790db168db172521cc4f114d5501badd2f6b96"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b71cd495d322da25a53a6a830b591a2c0c46db22bb0b3556fca0bbdb1d45a18e"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0624a5adf29d29330a336eecdf15874871f559d50944d542012665e1c3a18265"}, + {file = "y_py-0.6.0-cp311-none-win32.whl", hash = "sha256:374ffef1939c42286ea18e2a413c9974430226227f8f1480bbee469933aa675b"}, + {file = "y_py-0.6.0-cp311-none-win_amd64.whl", hash = "sha256:9242f3a5c6293e634817d9984c60523ffb34cf5b41501c5958681a75745946e6"}, + {file = "y_py-0.6.0-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9dad6af2d83a2b0618ba3c1a2fc6657c5303cf4e9f1a65cc3fea40ffbcc552e2"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74d5ebb5f9ef0c4c1f7bdd9ab5e53b9d8be4c7464905f39761b22b6ce0d327d3"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a027c39296c925f0b81e28a0fefab8c5964a0ea2b50fa05cbddf5e5ab167a380"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49adf7e25c3b3bac9f19bee181ef5253659ebe5747a7141860692015222b2007"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47b3604c874d25616a097adaaabcad6e77729e23c5d029092b8149af1a08b2a5"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a5a882591c8e1b1d6fbdb7ab43884907cef2b6a18e36c7ae85589e5f55371e5"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:30b9337e4f3d541879a8187af121be1bd42ea110372a21895a1a3f800a6bd1c3"}, + {file = "y_py-0.6.0-cp37-none-win32.whl", hash = "sha256:ef0f08edb2094869e4d12346ee68d5154cb3d23bc3b1e7679222fae12228261c"}, + {file = "y_py-0.6.0-cp37-none-win_amd64.whl", hash = "sha256:391a232c328c2be1de4cb152ed3e9427826e4cbd9d645feacb3dbb344b122e10"}, + {file = "y_py-0.6.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:eb60fe68774117378efdbd368ef83cf1417e61d4bc39c6be8e7f4ee91fb7428a"}, + {file = "y_py-0.6.0-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:4f025c50301d9ddbbc2384f98d3ff1dbfe43606146b747e23a17774a02faffe9"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4181b28f736cae3bb4517090ae5eeca318c075c0106466f13a4ed6682265fc8a"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6273d84605ee55b3ac52742018f94602dab9b0457f29e6f787021c473b02fed"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1eefb6371cd6e072cf467b897f85bd0d7575f3a3e944fb8675f84fb59aedd071"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b75c2199a125ef8926f3216fb324c3bcd8b1b4b6c0b428888cc753ee4c85f81f"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035ba7ce31bb87bd7b5977eee71ee2ff71e54d347a35e2079362b1c23731dccd"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:418aaa796a22b0102de09b36b6c6294d0a485f04bc8866c3b28f17e7022c44ba"}, + {file = "y_py-0.6.0-cp38-none-win32.whl", hash = "sha256:fc48db294d327a5cc10ee49f73f1fa1478240cc827c9029e0871106e327353ac"}, + {file = "y_py-0.6.0-cp38-none-win_amd64.whl", hash = "sha256:d1301bfeaa26f78f4b0e5f96e0f22761b38cc407713f70550a1be490945fd6d7"}, + {file = "y_py-0.6.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:e48b5b30242c7d517be85b48246b21e4e26540505a1ffe4fe473e239a8ec56d3"}, + {file = "y_py-0.6.0-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:479da40ef1205de52d87209534bf8e713a782e01eeed3df8dff44d21085e3f63"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7c3eaf65b162e59486a48bea5dd2035937952f15e008a14813e8cb7c24d7b"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a20a4d10c8f0ee2b6df265d182d0be0ecd2ba7348c0a20b9df7d4d39df895801"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:304e88a3deaff9906faa7ba514cf82f4ca4bad1ea88728206ff906e66179abd3"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6377e3cbab8f5b8b918130e9f924358f98ca1bea12a8096d3fadea191f7137f1"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44fdd64598e9ed4008158e5e60be5e1e2daeed6fae0ab2bf0002461e960709d"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:51f1997dae6d77b12b50502871c7a9aae22e84048e83b64fe6d4f18dec2e4700"}, + {file = "y_py-0.6.0-cp39-none-win32.whl", hash = "sha256:9f56888aeb07ca76a5cd552581bb3735fcd2d8c18165b946fdb6e4507b10e76c"}, + {file = "y_py-0.6.0-cp39-none-win_amd64.whl", hash = "sha256:11345294820908d5b8af9c6616ea908dda8b3e554ee6f6d50be6a2e15940f63e"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4c16d50d0728abd915bd9e2e0c3ce982005ba78b60e4b6666aadc592d9982c79"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:eccf67d09a4df42a7be2a5427c1b2e0b89bec862f519ded754bd452df516b380"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:513a2fe1318c247fc3b3c3ad208488e870a216784f2a3e6dbe2688c92f671c86"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76e2b14004cadb237499a8a068fd7a8b805b5c1fd0508530473e087c7dd25163"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c276a7eb3ae3360f5a2fc503f1e4535d4a2f1c8cfc22af4595ad752e9a94fd77"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71f7689c25bd7608e1e7a76a13138cb202455fac165018693a3e8e5675f54b82"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0505e2ca36408b754774a2bb20d93b5c7def3873406c13e1855de6f007f8a94"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f143fdcda7a6a89bf96d9b359142a7ca3315e8a9018aa46b0abbdeb47d7192e"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:9a920bf096d1eecb0f30afc38ee56bfcb9e2c863c33db96fc9d30d4ac0dbee58"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:97812f9443fd846012d60ecacffa2a11992d02ad9f8618d4faae8e596736c646"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83115cbbd4f6d3b38ebe06d80b1d0dbf1b10e53947f71df16f6145a4f0d14716"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cac9259839b32706336b3f521cacfd16fc7cefee609bd9c2b5123099328d696"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e76be7258010ce8cbb93a841f78f52901bba1253a51213d3535972d13aa4e89e"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b488be17d83173acb7f07c7e3430d2c66d0bd55b821683089311699562b58b"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b9f24b00972e5685d0b9bbd01413d9c33d124145343fb92667f0e076f040ad"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95083c4cdbd593497a695e841b2ad050c0b9a8a9e374f8496aa478cebfcf9cc9"}, + {file = "y_py-0.6.0.tar.gz", hash = "sha256:46836169f7dc2957df8513cfe4bc2009175b3a473e630af421a8e75ee1c48f98"}, ] [[package]] name = "ypy-websocket" -version = "0.8.2" +version = "0.8.4" description = "WebSocket connector for Ypy" optional = false python-versions = ">=3.7" files = [ - {file = "ypy_websocket-0.8.2-py3-none-any.whl", hash = "sha256:9049d5a7d61c26c2b5a39757c9ffcbe2274bf3553adeea8de7fe1c04671d4145"}, - {file = "ypy_websocket-0.8.2.tar.gz", hash = "sha256:491b2cc4271df4dde9be83017c15f4532b597dc43148472eb20c5aeb838a5b46"}, + {file = "ypy_websocket-0.8.4-py3-none-any.whl", hash = "sha256:b1ba0dfcc9762f0ca168d2378062d3ca1299d39076b0f145d961359121042be5"}, + {file = "ypy_websocket-0.8.4.tar.gz", hash = "sha256:43a001473f5c8abcf182f603049cf305cbc855ad8deaa9dfa0f3b5a7cea9d0ff"}, ] [package.dependencies] aiofiles = ">=22.1.0,<23" aiosqlite = ">=0.17.0,<1" -y-py = ">=0.5.3,<0.6.0" +y-py = ">=0.6.0,<0.7.0" [package.extras] test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] [[package]] name = "zipp" -version = "3.15.0" +version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, - {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, + {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, + {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "57740d05db43b0ac7c41d9f3fd48800604d28793d4ce29e037ee6c6c0886502b" +content-hash = "99c12bc1e220216ff730fc24eaec696e8e2cd9b101ebdbe57a51bedb5702b539" diff --git a/pyproject.toml b/pyproject.toml index a4a1daf3..72a44e74 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.poetry] -name = "roseau_load_flow" +name = "roseau-load-flow" version = "0.4.0" description = "Highly capable three-phase load flow solver" authors = [ @@ -55,7 +55,7 @@ pre-commit = "^3.0.0" black = { version = "^23.1.0", extras = ["jupyter"] } [tool.poetry.group.doc.dependencies] -Sphinx = "^6.2.0" +sphinx = "^7.0.1" myst-parser = ">=0.16.1" sphinx-math-dollar = "^1.2.1" sphinx-autoapi = "^2.0.0" @@ -64,6 +64,8 @@ sphinx-inline-tabs = ">=2022.1.2b11" jupyter = "^1.0.0" nbsphinx = ">=0.8.9" furo = ">=2022.9.29" +sphinxcontrib-googleanalytics = ">=0.3" +sphinxcontrib-bibtex = "^2.5.0" [tool.poetry.group.docker] optional = true diff --git a/roseau/load_flow/__init__.py b/roseau/load_flow/__init__.py index cb4eed7c..d075d507 100644 --- a/roseau/load_flow/__init__.py +++ b/roseau/load_flow/__init__.py @@ -42,7 +42,7 @@ from roseau.load_flow.units import Q_, ureg from roseau.load_flow.utils._versions import show_versions -__version__ = importlib.metadata.version("roseau_load_flow") +__version__ = importlib.metadata.version("roseau-load-flow") __all__ = [ "__author__", diff --git a/roseau/load_flow/converters.py b/roseau/load_flow/converters.py index d2f8717b..32417120 100644 --- a/roseau/load_flow/converters.py +++ b/roseau/load_flow/converters.py @@ -132,7 +132,7 @@ def calculate_voltages(potentials: np.ndarray, phases: str) -> np.ndarray: # we know "n" is the last phase voltages = potentials[:-1] - potentials[-1] else: # Vab, Vbc, Vca - if len(phases) == 2: + if len(phases) == 2: # noqa: SIM108 # V = potentials[0] - potentials[1] (but as array) voltages = potentials[:1] - potentials[1:] else: diff --git a/roseau/load_flow/models/__init__.py b/roseau/load_flow/models/__init__.py index afd38767..d01ec42e 100644 --- a/roseau/load_flow/models/__init__.py +++ b/roseau/load_flow/models/__init__.py @@ -1,6 +1,8 @@ """ -This module contains the models used to represent the network elements. The -models are used to build the network and to perform the load flow analysis. +This module contains the models used to represent the network elements. The models are used to +build the network and to perform the load flow analysis. + +Equations, diagrams, and examples can be found in the :doc:`/models/index` page. """ from roseau.load_flow.models.branches import AbstractBranch from roseau.load_flow.models.buses import Bus diff --git a/roseau/load_flow/models/branches.py b/roseau/load_flow/models/branches.py index 78eaf638..15b13214 100644 --- a/roseau/load_flow/models/branches.py +++ b/roseau/load_flow/models/branches.py @@ -16,7 +16,13 @@ class AbstractBranch(Element): - """This is an abstract class for all the branches (lines, switches and transformers) of the network.""" + """Base class of all the branches (lines, switches and transformers) of the network. + + See Also: + :doc:`Line models documentation `, + :doc:`Transformer models documentation ` and + :doc:`Switch model documentation ` + """ branch_type: BranchType diff --git a/roseau/load_flow/models/buses.py b/roseau/load_flow/models/buses.py index a2a0ff62..c274f49c 100644 --- a/roseau/load_flow/models/buses.py +++ b/roseau/load_flow/models/buses.py @@ -19,7 +19,11 @@ class Bus(Element): - """An electrical bus.""" + """An electrical bus. + + See Also: + :doc:`Bus model documentation ` + """ allowed_phases = frozenset({"ab", "bc", "ca", "an", "bn", "cn", "abn", "bcn", "can", "abc", "abcn"}) """The allowed phases for a bus are: diff --git a/roseau/load_flow/models/core.py b/roseau/load_flow/models/core.py index bfdca36c..b117105d 100644 --- a/roseau/load_flow/models/core.py +++ b/roseau/load_flow/models/core.py @@ -39,7 +39,7 @@ def __init__(self, id: Id, **kwargs: Any) -> None: """ super().__init__(id) self._connected_elements: list[Element] = [] - self._network: Optional["ElectricalNetwork"] = None + self._network: Optional[ElectricalNetwork] = None @property def network(self) -> Optional["ElectricalNetwork"]: diff --git a/roseau/load_flow/models/grounds.py b/roseau/load_flow/models/grounds.py index 29ce57ae..627116a0 100644 --- a/roseau/load_flow/models/grounds.py +++ b/roseau/load_flow/models/grounds.py @@ -28,6 +28,10 @@ class Ground(Element): To connect a ground to a line with shunt components, pass the ground object to the :class:`Line` constructor. Note that the ground connection is mandatory for shunt lines. + + + See Also: + :doc:`Ground model documentation ` """ allowed_phases = frozenset({"a", "b", "c", "n"}) diff --git a/roseau/load_flow/models/lines/lines.py b/roseau/load_flow/models/lines/lines.py index 40611f1e..e9303ee5 100644 --- a/roseau/load_flow/models/lines/lines.py +++ b/roseau/load_flow/models/lines/lines.py @@ -20,7 +20,11 @@ class Switch(AbstractBranch): - """A general purpose switch branch.""" + """A general purpose switch branch. + + See Also: + :doc:`Switch model documentation ` + """ branch_type = BranchType.SWITCH @@ -127,29 +131,8 @@ def _check_elements(self) -> None: class Line(AbstractBranch): """An electrical line PI model with series impedance and optional shunt admittance. - .. math:: - V_1 &= a \\cdot V_2 - b \\cdot I_2 + g \\cdot V_{\\mathrm{g}} \\\\ - I_1 &= c \\cdot V_2 - d \\cdot I_2 + h \\cdot V_{\\mathrm{g}} \\\\ - I_{\\mathrm{g}} &= f^t \\cdot \\left(V_1 + V_2 - 2\\cdot V_{\\mathrm{g}}\\right) - - where - - .. math:: - a &= \\mathcal{I}_4 + \\dfrac{1}{2} \\cdot Z \\cdot Y \\\\ - b &= Z \\\\ - c &= Y + \\dfrac{1}{4}\\cdot Y \\cdot Z \\cdot Y \\\\ - d &= \\mathcal{I}_4 + \\dfrac{1}{2} \\cdot Y \\cdot Z \\\\ - f &= -\\dfrac{1}{2} \\cdot \\begin{pmatrix} y_{\\mathrm{ag}} & y_{\\mathrm{bg}} & y_{\\mathrm{cg}} & - y_{\\mathrm{ng}} \\end{pmatrix} ^t \\\\ - g &= Z \\cdot f \\\\ - h &= 2 \\cdot f + \\frac{1}{2}\\cdot Y \\cdot Z \\cdot f \\\\ - - If the line does not define a shunt admittance, the following simplified equations are used - instead: - - .. math:: - \\left(V_1 - V_2\\right) &= Z \\cdot I_1 \\\\ - I_2 &= -I_1 + See Also: + :doc:`Line documentation ` """ branch_type = BranchType.LINE diff --git a/roseau/load_flow/models/lines/parameters.py b/roseau/load_flow/models/lines/parameters.py index 065b54b5..8ded124b 100644 --- a/roseau/load_flow/models/lines/parameters.py +++ b/roseau/load_flow/models/lines/parameters.py @@ -30,7 +30,11 @@ class LineParameters(Identifiable, JsonMixin): - """A class to store the line parameters of lines""" + """A class to store the line parameters of lines + + See Also: + :ref:`Line parameters documentation ` + """ _type_re = "|".join(x.code() for x in LineType) _material_re = "|".join(x.code() for x in ConductorType) diff --git a/roseau/load_flow/models/loads/flexible_parameters.py b/roseau/load_flow/models/loads/flexible_parameters.py index 214d1e80..bd8de127 100644 --- a/roseau/load_flow/models/loads/flexible_parameters.py +++ b/roseau/load_flow/models/loads/flexible_parameters.py @@ -23,27 +23,15 @@ class Control(JsonMixin): * ``"constant"``: no control is applied. In this case, a simple :class:`PowerLoad` without `flexible_params` could have been used instead. * ``"p_max_u_production"``: control the maximum production active power of the load (inverter) based on the - voltage :math:`P^{\\max}_{\\mathrm{prod}}(U)`. With this control, the following functions are used - (depending on the :math:`\\alpha` value). - - .. image:: /_static/Control_PU_Prod.svg - :width: 600 - :align: center + voltage :math:`P^{\\max}_{\\mathrm{prod}}(U)`. * ``"p_max_u_consumption"``: control the maximum consumption active power of the load based on the voltage - :math:`P^{\\max}_{\\mathrm{cons}}(U)`. With this control, the following functions are used - (depending on the :math:`\\alpha` value). - - .. image:: /_static/Control_PU_Cons.svg - :width: 600 - :align: center + :math:`P^{\\max}_{\\mathrm{cons}}(U)`. - * ``"q_u"``: control the reactive power based on the voltage :math:`Q(U)`. With this control, the following - functions are used (depending on the :math:`\\alpha` value). + * ``"q_u"``: control the reactive power based on the voltage :math:`Q(U)`. - .. image:: /_static/Control_QU.svg - :width: 600 - :align: center + See Also: + :ref:`Control documentation ` """ DEFAULT_ALPHA: float = 1000.0 @@ -195,9 +183,8 @@ def constant(cls) -> Self: def p_max_u_production(cls, u_up: float, u_max: float, alpha: float = DEFAULT_ALPHA) -> Self: """Create a control of the type ``"p_max_u_production"``. - .. image:: /_static/Control_PU_Prod.svg - :width: 600 - :align: center + See Also: + :ref:`$P(U)$ control documentation ` Args: u_up: @@ -225,9 +212,8 @@ def p_max_u_production(cls, u_up: float, u_max: float, alpha: float = DEFAULT_AL def p_max_u_consumption(cls, u_min: float, u_down: float, alpha: float = DEFAULT_ALPHA) -> Self: """Create a control of the type ``"p_max_u_consumption"``. - .. image:: /_static/Control_PU_Cons.svg - :width: 600 - :align: center + See Also: + :ref:`$P(U)$ control documentation ` Args: u_min: @@ -255,9 +241,8 @@ def p_max_u_consumption(cls, u_min: float, u_down: float, alpha: float = DEFAULT def q_u(cls, u_min: float, u_down: float, u_up: float, u_max: float, alpha: float = DEFAULT_ALPHA) -> Self: """Create a control of the type ``"q_u"``. - .. image:: /_static/Control_QU.svg - :width: 600 - :align: center + See Also: + :ref:`$Q(U)$ control documentation ` Args: u_min: @@ -348,22 +333,11 @@ class Projection(JsonMixin): The three possible projection types are: * ``"euclidean"``: for an Euclidean projection on the feasible space; - - .. image:: /_static/Euclidean_Projection.svg - :width: 300 - :align: center - * ``"keep_p"``: for maintaining a constant P; - - .. image:: /_static/Constant_P_Projection.svg - :width: 300 - :align: center - * ``"keep_q"``: for maintaining a constant Q. - .. image:: /_static/Constant_Q_Projection.svg - :width: 300 - :align: center + See Also: + :ref:`Projection documentation ` """ DEFAULT_ALPHA: float = 1000.0 @@ -384,10 +358,6 @@ def __init__(self, type: ProjectionType, alpha: float = DEFAULT_ALPHA, epsilon: epsilon: This value is used to make a smooth sqrt function. It is only used in the Euclidean projection. - - .. math:: - \\sqrt{S} = \\sqrt{\\varepsilon \\times - \\exp\\left(\\frac{-{|S|}^2}{\\varepsilon}\\right) + {|S|}^2} """ self.type = type self._alpha = alpha @@ -467,30 +437,8 @@ class FlexibleParameter(JsonMixin): For multi-phase loads, you need to use a `FlexibleParameter` instance per phase. - Depending on the mix of controls and projection used through this class, the feasible domains in the :math:`(P, Q)` - space changes. Here is an illustration with a theoretical power depicting a production (negative - :math:`P^{\\mathrm{theo.}}`). - - .. list-table:: - :class: borderless - :header-rows: 1 - :widths: 20 20 20 20 20 - - * - - - :math:`Q^{\\mathrm{const.}}` - - :math:`Q(U)` with an Euclidean projection - - :math:`Q(U)` with a constant P projection - - :math:`Q(U)` with a constant Q projection - * - :math:`P^{\\mathrm{const.}}` - - .. image:: /_static/Domain_Pconst_Qconst.svg - - .. image:: /_static/Domain_Pconst_QU_Eucl.svg - - .. image:: /_static/Domain_Pconst_QU_P.svg - - .. image:: /_static/Domain_Pconst_QU_Q.svg - * - :math:`P^{\\max}(U)` - - .. image:: /_static/Domain_PmaxU_Qconst.svg - - .. image:: /_static/Domain_PmaxU_QU.svg - - .. image:: /_static/Domain_PmaxU_QU.svg - - .. image:: /_static/Domain_PmaxU_QU.svg + See Also: + :ref:`Flexible Parameters documentation ` """ control_class: type[Control] = Control @@ -560,9 +508,8 @@ def p_max_u_production( ) -> Self: """Build flexible parameters for production ``P(U)`` control with a Euclidean projection. - .. image:: /_static/Control_PU_Prod.svg - :width: 600 - :align: center + See Also: + :ref:`$P(U)$ control documentation ` Args: u_up: @@ -613,9 +560,8 @@ def p_max_u_consumption( ) -> Self: """Build flexible parameters for consumption ``P(U)`` control with a Euclidean projection. - .. image:: /_static/Control_PU_Cons.svg - :width: 600 - :align: center + See Also: + :ref:`$P(U)$ control documentation ` Args: u_min: @@ -665,9 +611,8 @@ def q_u( ) -> Self: """Build flexible parameters for ``Q(U)`` control with a Euclidean projection. - .. image:: /_static/Control_QU.svg - :width: 600 - :align: center + See Also: + :ref:`$Q(U)$ control documentation ` Args: u_min: diff --git a/roseau/load_flow/models/loads/loads.py b/roseau/load_flow/models/loads/loads.py index 31b8e6f2..53a96a85 100644 --- a/roseau/load_flow/models/loads/loads.py +++ b/roseau/load_flow/models/loads/loads.py @@ -21,32 +21,10 @@ class AbstractLoad(Element, ABC): The subclasses of this class can be used to depict: * star-connected loads using a `phases` constructor argument containing a `"n"` - - .. tab:: European Standards - - .. image:: /_static/European_Star_Load.svg - :width: 300px - :align: center - - .. tab:: American Standards - - .. image:: /_static/American_Star_Load.svg - :width: 300px - :align: center - * delta-connected loads using a `phases` constructor argument which doesn't contain `"n"` - .. tab:: European Standards - - .. image:: /_static/European_Delta_Load.svg - :width: 300px - :align: center - - .. tab:: American Standards - - .. image:: /_static/American_Delta_Load.svg - :width: 300px - :align: center + See Also: + :doc:`Load documentation ` """ _power_load_class: type["PowerLoad"] @@ -218,21 +196,10 @@ def _results_to_dict(self, warning: bool) -> JsonDict: class PowerLoad(AbstractLoad): - r"""A constant power load. - - The equations are the following (star loads): - - .. math:: - I_{\mathrm{abc}} &= \left(\frac{S_{\mathrm{abc}}}{V_{\mathrm{abc}}-V_{\mathrm{n}}}\right)^{\star} \\ - I_{\mathrm{n}} &= -\sum_{p\in\{\mathrm{a},\mathrm{b},\mathrm{c}\}}I_{p} - - and the following (delta loads): - - .. math:: - I_{\mathrm{ab}} &= \left(\frac{S_{\mathrm{ab}}}{V_{\mathrm{a}}-V_{\mathrm{b}}}\right)^{\star} \\ - I_{\mathrm{bc}} &= \left(\frac{S_{\mathrm{bc}}}{V_{\mathrm{b}}-V_{\mathrm{c}}}\right)^{\star} \\ - I_{\mathrm{ca}} &= \left(\frac{S_{\mathrm{ca}}}{V_{\mathrm{c}}-V_{\mathrm{a}}}\right)^{\star} + """A constant power load. + See Also: + :doc:`Power Load documentation ` """ _type = "power" @@ -372,20 +339,10 @@ def _results_to_dict(self, warning: bool) -> JsonDict: class CurrentLoad(AbstractLoad): - r"""A constant current load. - - The equations are the following (star loads): - - .. math:: - I_{\mathrm{abc}} &= \mathrm{constant} \\ - I_{\mathrm{n}} &= -\sum_{p\in\{\mathrm{a},\mathrm{b},\mathrm{c}\}}I_{p} - - and the following (delta loads): + """A constant current load. - .. math:: - I_{\mathrm{ab}} &= \mathrm{constant} \\ - I_{\mathrm{bc}} &= \mathrm{constant} \\ - I_{\mathrm{ca}} &= \mathrm{constant} + See Also: + :doc:`Current Load documentation ` """ _type = "current" @@ -440,21 +397,10 @@ def to_dict(self) -> JsonDict: class ImpedanceLoad(AbstractLoad): - r"""A constant impedance load. - - The equations are the following (star loads): - - .. math:: - I_{\mathrm{abc}} &= \frac{\left(V_{\mathrm{abc}}-V_{\mathrm{n}}\right)}{Z_{\mathrm{abc}}} \\ - I_{\mathrm{n}} &= -\sum_{p\in\{\mathrm{a},\mathrm{b},\mathrm{c}\}}I_{p} - - and the following (delta loads): - - .. math:: - I_{\mathrm{ab}} &= \frac{\left(V_{\mathrm{a}}-V_{\mathrm{b}}\right)}{Z_{\mathrm{ab}}} \\ - I_{\mathrm{bc}} &= \frac{\left(V_{\mathrm{b}}-V_{\mathrm{c}}\right)}{Z_{\mathrm{bc}}} \\ - I_{\mathrm{ca}} &= \frac{\left(V_{\mathrm{c}}-V_{\mathrm{a}}\right)}{Z_{\mathrm{ca}}} + """A constant impedance load. + See Also: + :doc:`Impedance Load documentation ` """ _type = "impedance" diff --git a/roseau/load_flow/models/potential_refs.py b/roseau/load_flow/models/potential_refs.py index c77be2b0..ce28bd6b 100644 --- a/roseau/load_flow/models/potential_refs.py +++ b/roseau/load_flow/models/potential_refs.py @@ -21,6 +21,9 @@ class PotentialRef(Element): can be set on any bus or ground elements. If set on a bus with no neutral and without specifying the phase, the reference will be set as ``Va + Vb + Vc = 0``. For other buses, the default is ``Vn = 0``. + + See Also: + :doc:`Potential reference model documentation ` """ allowed_phases = frozenset({"a", "b", "c", "n"}) diff --git a/roseau/load_flow/models/sources.py b/roseau/load_flow/models/sources.py index a7bd6161..b3ef3e90 100644 --- a/roseau/load_flow/models/sources.py +++ b/roseau/load_flow/models/sources.py @@ -16,25 +16,10 @@ class VoltageSource(Element): - r"""A voltage source. + """A voltage source. - The voltage equations are the following: - - For a Star (wye) connected source: - - .. math:: - \left(V_{\mathrm{a}}-V_{\mathrm{n}}\right) &= U_{\mathrm{an}} \\ - \left(V_{\mathrm{b}}-V_{\mathrm{n}}\right) &= U_{\mathrm{bn}} \\ - \left(V_{\mathrm{c}}-V_{\mathrm{n}}\right) &= U_{\mathrm{cn}} - - For a Delta connected source: - - .. math:: - \left(V_{\mathrm{a}}-V_{\mathrm{b}}\right) &= U_{\mathrm{ab}} \\ - \left(V_{\mathrm{b}}-V_{\mathrm{c}}\right) &= U_{\mathrm{bc}} \\ - \left(V_{\mathrm{c}}-V_{\mathrm{a}}\right) &= U_{\mathrm{ca}} - - Where $U$ is the voltage and $V$ is the node potential. + See Also: + :doc:`Voltage source model documentation ` """ allowed_phases = Bus.allowed_phases diff --git a/roseau/load_flow/models/tests/test_phases.py b/roseau/load_flow/models/tests/test_phases.py index 68b8c52d..612a9392 100644 --- a/roseau/load_flow/models/tests/test_phases.py +++ b/roseau/load_flow/models/tests/test_phases.py @@ -335,12 +335,12 @@ def test_transformer_single_phases(): assert e.value.msg == "Phases (1) of transformer 'tr1' cannot be deduced from the buses, they need to be specified." -def test_transformer_split_phases(): +def test_transformer_center_phases(): bus1 = Bus("bus-1", phases="ab") bus2 = Bus("bus-2", phases="abn") # Not allowed - tp = TransformerParameters.from_name("160kVA", "split") + tp = TransformerParameters.from_name("160kVA", "center") for ph in ("ba", "nc", "anb", "nabc", "acb"): with pytest.raises(RoseauLoadFlowException) as e: Transformer("tr1", bus1, bus2, phases1=ph, phases2=ph, parameters=tp) diff --git a/roseau/load_flow/models/tests/test_transformer_parameters.py b/roseau/load_flow/models/tests/test_transformer_parameters.py index d4d11d00..0de9bd4d 100644 --- a/roseau/load_flow/models/tests/test_transformer_parameters.py +++ b/roseau/load_flow/models/tests/test_transformer_parameters.py @@ -123,7 +123,7 @@ def test_transformer_parameters(): "psc": 2350.0, # W "p0": 460.0, # W "i0": 5.6 / 100, # % - "ulv": 400, # V + "ulv": 401, # V "uhv": 400, # V "sn": 160 * 1e3, # VA "vsc": 4 / 100, # % diff --git a/roseau/load_flow/models/transformers/parameters.py b/roseau/load_flow/models/transformers/parameters.py index 6ffb5bc8..94c64c1c 100644 --- a/roseau/load_flow/models/transformers/parameters.py +++ b/roseau/load_flow/models/transformers/parameters.py @@ -14,7 +14,11 @@ class TransformerParameters(Identifiable, JsonMixin): - """A class to store the parameters of the transformers.""" + """A class to store the parameters of the transformers. + + See Also: + :ref:`Transformer parameters documentation ` + """ _EXTRACT_WINDINGS_RE = regex.compile( "(?(DEFINE)(?Pyn?)(?Pd)(?Pzn?)(?P[06])" @@ -50,8 +54,8 @@ def __init__( A unique ID of the transformer parameters, typically its canonical name. type: - The type of transformer parameters. It can be "single" for single-phase transformers, "split" for - split-phase transformers, or the name of the windings such as "Dyn11" for three-phase transformers. + The type of transformer parameters. It can be "single" for single-phase transformers, "center" for + center-tapped transformers, or the name of the windings such as "Dyn11" for three-phase transformers. Allowed windings are "D" for delta, "Y" for wye (star), and "Z" for zigzag. uhv: @@ -84,7 +88,7 @@ def __init__( self._psc = psc self._vsc = vsc self.type = type - if type in ("single", "split"): + if type in ("single", "center"): self.winding1 = None self.winding2 = None self.phase_displacement = None @@ -92,7 +96,7 @@ def __init__( self.winding1, self.winding2, self.phase_displacement = self.extract_windings(string=type) # Check - if uhv <= ulv: + if uhv < ulv: msg = ( f"Transformer type {id!r} has the low voltages higher than the high voltages: " f"uhv={uhv:.2f} V and ulv={ulv:.2f} V." @@ -193,7 +197,7 @@ def from_name(cls, name: str, type: str) -> Self: The name of the transformer parameters, such as `"160kVA"` or `"H61_50kVA"`. type: - The type of transformer parameters such as "Dyn11", "single", "split". + The type of transformer parameters such as "Dyn11", "single", "center". Returns: The constructed transformer parameters. @@ -208,7 +212,17 @@ def from_name(cls, name: str, type: str) -> Self: logger.error(msg) raise RoseauLoadFlowException(msg=msg, code=RoseauLoadFlowExceptionCode.BAD_TYPE_NAME_SYNTAX) from None else: - return cls(name, type, 20000, 400, sn * 1e3, 460, 2.3 / 100, 2350, 4 / 100) + return cls( + id=name, + type=type, + uhv=20000, + ulv=400, + sn=sn * 1e3, + p0=460, + i0=2.3 / 100, + psc=2350, + vsc=4 / 100, + ) else: msg = f"The transformer type name does not follow the syntax rule. {name!r} was provided." logger.error(msg) @@ -246,7 +260,7 @@ def to_zyk(self) -> tuple[Q_[complex], Q_[complex], Q_[float], float]: # Change the voltages if the reference voltages is phase to neutral uhv = self._uhv ulv = self._ulv - if self.type == "single" or self.type == "split": + if self.type == "single" or self.type == "center": orientation = 1.0 else: # Extract the windings of the primary and the secondary of the transformer diff --git a/roseau/load_flow/models/transformers/transformers.py b/roseau/load_flow/models/transformers/transformers.py index 56467aa9..34bd5b6c 100644 --- a/roseau/load_flow/models/transformers/transformers.py +++ b/roseau/load_flow/models/transformers/transformers.py @@ -17,6 +17,9 @@ class Transformer(AbstractBranch): """A generic transformer model. The model parameters are defined in the ``parameters``. + + See Also: + :doc:`Transformer models documentation ` """ branch_type = BranchType.TRANSFORMER @@ -26,12 +29,12 @@ class Transformer(AbstractBranch): - P-P-P or P-P-P-N: ``"abc"``, ``"abcn"`` (three-phase transformer) - P-P or P-N: ``"ab"``, ``"bc"``, ``"ca"``, ``"an"``, ``"bn"``, ``"cn"`` (single-phase - transformer or primary of split-phase transformer) - - P-P-N: ``"abn"``, ``"bcn"``, ``"can"`` (secondary of split-phase transformer) + transformer or primary of center-tapped transformer) + - P-P-N: ``"abn"``, ``"bcn"``, ``"can"`` (secondary of center-tapped transformer) """ _allowed_phases_three = frozenset({"abc", "abcn"}) _allowed_phases_single = frozenset({"ab", "bc", "ca", "an", "bn", "cn"}) - _allowed_phases_split_secondary = frozenset({"abn", "bcn", "can"}) + _allowed_phases_center_secondary = frozenset({"abn", "bcn", "can"}) def __init__( self, @@ -85,8 +88,10 @@ def __init__( phases1, phases2 = self._compute_phases_single( id=id, bus1=bus1, bus2=bus2, phases1=phases1, phases2=phases2 ) - elif parameters.type == "split": - phases1, phases2 = self._compute_phases_split(id=id, bus1=bus1, bus2=bus2, phases1=phases1, phases2=phases2) + elif parameters.type == "center": + phases1, phases2 = self._compute_phases_center( + id=id, bus1=bus1, bus2=bus2, phases1=phases1, phases2=phases2 + ) else: phases1, phases2 = self._compute_phases_three( id=id, bus1=bus1, bus2=bus2, parameters=parameters, phases1=phases1, phases2=phases2 @@ -203,7 +208,7 @@ def _compute_phases_single( return phases1, phases2 - def _compute_phases_split( + def _compute_phases_center( self, id: Id, bus1: Bus, bus2: Bus, phases1: Optional[str], phases2: Optional[str] ) -> tuple[str, str]: if phases1 is None: @@ -219,12 +224,12 @@ def _compute_phases_split( if phases2 is None: phases2 = "".join(p for p in bus2.phases if p in bus1.phases or p == "n") - if phases2 not in self._allowed_phases_split_secondary: + if phases2 not in self._allowed_phases_center_secondary: msg = f"Phases (2) of transformer {id!r} cannot be deduced from the buses, they need to be specified." logger.error(msg) raise RoseauLoadFlowException(msg=msg, code=RoseauLoadFlowExceptionCode.BAD_PHASE) else: - self._check_phases(id, allowed_phases=self._allowed_phases_split_secondary, phases2=phases2) + self._check_phases(id, allowed_phases=self._allowed_phases_center_secondary, phases2=phases2) self._check_bus_phases(id, bus2, phases2=phases2) return phases1, phases2 diff --git a/roseau/load_flow/network.py b/roseau/load_flow/network.py index d7306e56..171f330d 100644 --- a/roseau/load_flow/network.py +++ b/roseau/load_flow/network.py @@ -103,27 +103,27 @@ class ElectricalNetwork(JsonMixin): DEFAULT_SOLVER (str): The default solver to compute the load flow. - buses (dict[Id, Bus]): + buses (dict[Id, roseau.load_flow.Bus]): Dictionary of buses of the network indexed by their IDs. Also available as a :attr:`GeoDataFrame`. - branches (dict[Id, AbstractBranch]): + branches (dict[Id, roseau.load_flow.AbstractBranch]): Dictionary of branches of the network indexed by their IDs. Also available as a :attr:`GeoDataFrame`. - loads (dict[Id, AbstractLoad]): + loads (dict[Id, roseau.load_flow.AbstractLoad]): Dictionary of loads of the network indexed by their IDs. Also available as a :attr:`DataFrame`. - sources (dict[Id, VoltageSource]): + sources (dict[Id, roseau.load_flow.VoltageSource]): Dictionary of voltage sources of the network indexed by their IDs. Also available as a :attr:`DataFrame`. - grounds (dict[Id, Ground]): + grounds (dict[Id, roseau.load_flow.Ground]): Dictionary of grounds of the network indexed by their IDs. Also available as a :attr:`DataFrame`. - potential_refs (dict[Id, PotentialRef]): + potential_refs (dict[Id, roseau.load_flow.PotentialRef]): Dictionary of potential references of the network indexed by their IDs. Also available as a :attr:`DataFrame`.