From cf329b90d3f3c9a418876e37f6fa0357563c3bff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Vinot?= Date: Tue, 8 Aug 2023 19:32:55 +0200 Subject: [PATCH 1/9] Short-circuit with dash --- doc/Changelog.md | 2 +- doc/models/Bus.md | 4 ++-- doc/models/Transformer/index.md | 4 ++-- doc/notebooks/Getting_Started.ipynb | 2 +- doc/notebooks/Short_Circuit.ipynb | 14 +++++++------- roseau/load_flow/io/dgs.py | 4 ++-- roseau/load_flow/models/buses.py | 4 ++-- .../models/tests/test_transformer_parameters.py | 2 +- roseau/load_flow/models/transformers/parameters.py | 14 +++++++------- roseau/load_flow/network.py | 6 +++--- 10 files changed, 28 insertions(+), 28 deletions(-) diff --git a/doc/Changelog.md b/doc/Changelog.md index e3fccfe4..bc39a87d 100644 --- a/doc/Changelog.md +++ b/doc/Changelog.md @@ -20,7 +20,7 @@ * 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 +* [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 diff --git a/doc/models/Bus.md b/doc/models/Bus.md index 9a41f73f..37ef7d1c 100644 --- a/doc/models/Bus.md +++ b/doc/models/Bus.md @@ -50,7 +50,7 @@ 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). +[short-circuit analysis](../notebooks/Short_Circuit.ipynb). Here is an example of a simple short-circuit between two phases: @@ -83,7 +83,7 @@ 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" +# Create a short-circuit on bus2 between phases "a" and "b" bus2.add_short_circuit("a", "b") # Create a network and solve a load flow diff --git a/doc/models/Transformer/index.md b/doc/models/Transformer/index.md index 366e9b70..d652f5e2 100644 --- a/doc/models/Transformer/index.md +++ b/doc/models/Transformer/index.md @@ -16,9 +16,9 @@ Transformers are modeled with the following parameters: 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` +* $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 +* $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 diff --git a/doc/notebooks/Getting_Started.ipynb b/doc/notebooks/Getting_Started.ipynb index dfd96dde..4862ebb5 100644 --- a/doc/notebooks/Getting_Started.ipynb +++ b/doc/notebooks/Getting_Started.ipynb @@ -427,7 +427,7 @@ "metadata": {}, "source": [ "As the results are *pint quantities*, they can be converted to different units. Here, the magnitudes\n", - "of the voltages of the same bus are are displayed in kilovolts." + "of the voltages of the same bus are displayed in kilovolts." ] }, { diff --git a/doc/notebooks/Short_Circuit.ipynb b/doc/notebooks/Short_Circuit.ipynb index 4a1959d1..92eb5d00 100644 --- a/doc/notebooks/Short_Circuit.ipynb +++ b/doc/notebooks/Short_Circuit.ipynb @@ -6,9 +6,9 @@ "collapsed": false }, "source": [ - "# Short Circuit\n", + "# Short-Circuit\n", "\n", - "Let's see how we can make a short circuit calculation." + "Let's see how we can make a short-circuit calculation." ] }, { @@ -92,7 +92,7 @@ "source": [ "## Phase-to-phase\n", "\n", - "We can now add a short circuit. Let's first create a phase-to-phase short circuit:" + "We can now add a short-circuit. Let's first create a phase-to-phase short-circuit:" ] }, { @@ -156,13 +156,13 @@ "metadata": {}, "source": [ "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", + "added the short-circuit, one can notice that:\n", "\n", "* 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." + "which is expected from a short-circuit." ] }, { @@ -173,7 +173,7 @@ "source": [ "## Multi-phase\n", "\n", - "It is possible to create short circuits between several phases, not only two. Let's first\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\"." ] }, @@ -200,7 +200,7 @@ "metadata": {}, "source": [ "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." + "zero at the bus where the short-circuit is applied." ] }, { diff --git a/roseau/load_flow/io/dgs.py b/roseau/load_flow/io/dgs.py index df9eeb87..9b85060f 100644 --- a/roseau/load_flow/io/dgs.py +++ b/roseau/load_flow/io/dgs.py @@ -166,8 +166,8 @@ def network_from_dgs( # noqa: C901 ulv = Q_(typ_tr.at[idx, "utrn_l"], "kV") # Phase-to-phase nominal voltages of the low voltages side (kV) i0 = Q_(typ_tr.at[idx, "curmg"] / 3, "percent") # Current during off-load test (%) p0 = Q_(typ_tr.at[idx, "pfe"] / 3, "kW") # Losses during off-load test (kW) - psc = Q_(typ_tr.at[idx, "pcutr"], "kW") # Losses during short circuit test (kW) - vsc = Q_(typ_tr.at[idx, "uktr"], "percent") # Voltages on LV side during short circuit test (%) + psc = Q_(typ_tr.at[idx, "pcutr"], "kW") # Losses during short-circuit test (kW) + vsc = Q_(typ_tr.at[idx, "uktr"], "percent") # Voltages on LV side during short-circuit test (%) # Windings of the transformer windings = f"{typ_tr.at[idx, 'tr2cn_h']}{typ_tr.at[idx, 'tr2cn_l']}{typ_tr.at[idx, 'nt2ag']}" diff --git a/roseau/load_flow/models/buses.py b/roseau/load_flow/models/buses.py index 5547584d..604ce662 100644 --- a/roseau/load_flow/models/buses.py +++ b/roseau/load_flow/models/buses.py @@ -201,9 +201,9 @@ def add_short_circuit(self, *phases: str, ground: Optional["Ground"] = None) -> @property def short_circuits(self) -> list[dict[str, Any]]: - """Return the list of short circuits of this bus.""" + """Return the list of short-circuits of this bus.""" return self._short_circuits[:] # return a copy as users should not modify the list directly def clear_short_circuits(self): - """Remove the short circuits.""" + """Remove the short-circuits.""" self._short_circuits = [] diff --git a/roseau/load_flow/models/tests/test_transformer_parameters.py b/roseau/load_flow/models/tests/test_transformer_parameters.py index 0de9bd4d..3cedcef4 100644 --- a/roseau/load_flow/models/tests/test_transformer_parameters.py +++ b/roseau/load_flow/models/tests/test_transformer_parameters.py @@ -182,7 +182,7 @@ def test_transformer_parameters(): } with pytest.raises(RoseauLoadFlowException) as e: TransformerParameters.from_dict(data) - assert "has the 'voltages on LV side during short circuit test' vsc" in e.value.msg + assert "has the 'voltages on LV side during short-circuit test' vsc" in e.value.msg assert e.value.code == RoseauLoadFlowExceptionCode.BAD_TRANSFORMER_PARAMETERS # Bad l2_omega diff --git a/roseau/load_flow/models/transformers/parameters.py b/roseau/load_flow/models/transformers/parameters.py index fdc04d11..52de2864 100644 --- a/roseau/load_flow/models/transformers/parameters.py +++ b/roseau/load_flow/models/transformers/parameters.py @@ -74,10 +74,10 @@ def __init__( Current during off-load test (%) psc: - Losses during short circuit test (W) + Losses during short-circuit test (W) vsc: - Voltages on LV side during short circuit test (%) + Voltages on LV side during short-circuit test (%) """ super().__init__(id) self._sn = sn @@ -112,7 +112,7 @@ def __init__( raise RoseauLoadFlowException(msg=msg, code=RoseauLoadFlowExceptionCode.BAD_TRANSFORMER_PARAMETERS) if vsc > 1.0 or vsc < 0.0: msg = ( - f"Transformer type {id!r} has the 'voltages on LV side during short circuit test' " + f"Transformer type {id!r} has the 'voltages on LV side during short-circuit test' " f"vsc={vsc}. It is a percentage that should be between 0 and 1." ) logger.error(msg) @@ -179,13 +179,13 @@ def i0(self) -> Q_[float]: @property @ureg_wraps("W", (None,), strict=False) def psc(self) -> Q_[float]: - """Losses during short circuit test (W)""" + """Losses during short-circuit test (W)""" return self._psc @property @ureg_wraps("", (None,), strict=False) def vsc(self) -> Q_[float]: - """Voltages on LV side during short circuit test (%)""" + """Voltages on LV side during short-circuit test (%)""" return self._vsc @classmethod @@ -252,7 +252,7 @@ def to_zyk(self) -> tuple[Q_[complex], Q_[complex], Q_[float], float]: else: ym = 1 / r_iron - # Short circuit test + # Short-circuit test r2 = self._psc * (self._ulv / self._sn) ** 2 l2_omega = np.sqrt((self._vsc * self._ulv**2 / self._sn) ** 2 - r2**2) z2 = r2 + 1j * l2_omega @@ -293,7 +293,7 @@ def from_dict(cls, data: JsonDict) -> Self: sn=data["sn"], p0=data["p0"], # Losses during off-load test (W) i0=data["i0"], - psc=data["psc"], # Losses during short circuit test (W) + psc=data["psc"], # Losses during short-circuit test (W) vsc=data["vsc"], ) diff --git a/roseau/load_flow/network.py b/roseau/load_flow/network.py index a5c03424..7c95eccc 100644 --- a/roseau/load_flow/network.py +++ b/roseau/load_flow/network.py @@ -40,7 +40,7 @@ # Phases dtype for all data frames _PHASE_DTYPE = pd.CategoricalDtype(categories=["a", "b", "c", "n"], ordered=True) # Phases dtype for voltage data frames -_VOLTAGE_PHASES_DTYPE = pd.CategoricalDtype(["an", "bn", "cn", "ab", "bc", "ca"], ordered=True) +_VOLTAGE_PHASES_DTYPE = pd.CategoricalDtype(categories=["an", "bn", "cn", "ab", "bc", "ca"], ordered=True) _T = TypeVar("_T", bound=Element) @@ -353,7 +353,7 @@ def potential_refs_frame(self) -> pd.DataFrame: @property def short_circuits_frame(self) -> pd.DataFrame: - """The short circuits of the network as a dataframe.""" + """The short-circuits of the network as a dataframe.""" return pd.DataFrame.from_records( data=[ (bus.id, bus.phases, "".join(sorted(sc["phases"])), sc["ground"]) @@ -921,7 +921,7 @@ def res_potential_refs(self) -> pd.DataFrame: return res_df def clear_short_circuits(self): - """Remove the short circuits of all the buses.""" + """Remove the short-circuits of all the buses.""" for bus in self.buses.values(): bus.clear_short_circuits() From 16fbc4c90b3f511b17dce9999796f4ba52452ea3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Vinot?= Date: Tue, 8 Aug 2023 19:44:43 +0200 Subject: [PATCH 2/9] Reformat tutorials in md files --- doc/conf.py | 2 + doc/index.md | 2 +- doc/usage/Connecting_Elements.md | 162 +++++++++++ doc/usage/Flexible_Loads.md | 242 ++++++++++++++++ doc/usage/Getting_Started.md | 475 +++++++++++++++++++++++++++++++ doc/usage/Short_Circuit.md | 170 +++++++++++ doc/usage/index.md | 14 + 7 files changed, 1066 insertions(+), 1 deletion(-) create mode 100644 doc/usage/Connecting_Elements.md create mode 100644 doc/usage/Flexible_Loads.md create mode 100644 doc/usage/Getting_Started.md create mode 100644 doc/usage/Short_Circuit.md create mode 100644 doc/usage/index.md diff --git a/doc/conf.py b/doc/conf.py index 610e6c64..ded601c9 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -49,6 +49,8 @@ add_module_names = False napoleon_numpy_docstring = False python_use_unqualified_type_names = True +copybutton_exclude = ".linenos, .gp, .go" +copybutton_copy_empty_lines = False # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] diff --git a/doc/index.md b/doc/index.md index ee4216d0..b920b385 100644 --- a/doc/index.md +++ b/doc/index.md @@ -29,7 +29,7 @@ The following tutorials are available to help you get started: maxdepth: 2 caption: Usage --- -notebooks/index +usage/index ``` ## Models diff --git a/doc/usage/Connecting_Elements.md b/doc/usage/Connecting_Elements.md new file mode 100644 index 00000000..ca91e568 --- /dev/null +++ b/doc/usage/Connecting_Elements.md @@ -0,0 +1,162 @@ +# (Dis)Connecting elements + +## Creating a network + +Let's take the electrical network of the [Getting started](usage-getting-started). + +```pycon +>>> import numpy as np +... from roseau.load_flow import * + +>>> source_bus = Bus(id="sb", phases="abcn") +... load_bus = Bus(id="lb", phases="abcn") + +>>> ground = Ground(id="gnd") +... pref = PotentialRef(id="pref", element=ground) +... ground.connect(source_bus, phase="n") + +>>> un = 400 / np.sqrt(3) +... source_voltages = [un, un * np.exp(-2j * np.pi / 3), un * np.exp(2j * np.pi / 3)] +... vs = VoltageSource(id="vs", bus=source_bus, phases="abcn", voltages=source_voltages) + +>>> load = PowerLoad( +... id="load", bus=load_bus, phases="abcn", powers=[10e3 + 0j, 10e3, 10e3] +... ) # VA + +>>> lp = LineParameters("lp", z_line=(0.1 + 0.0j) * np.eye(4, dtype=complex)) +... line = Line( +... id="line", bus1=source_bus, bus2=load_bus, phases="abcn", parameters=lp, length=2.0 +... ) +``` + +At this point, all the elements are connected but don't belong to a network: + +```pycon +>>> load.network +None +``` + +Then, creating an electrical network populates all the `network` fields of elements belonging to this network: + +```pycon +>>> en = ElectricalNetwork.from_element(source_bus) +>>> load.network + +``` + +Obviously, an element can only belong to a single network: + +```pycon +>>> ElectricalNetwork.from_element(load) +roseau.load_flow.exceptions.RoseauLoadFlowException: The Bus 'lb' is already assigned to another network. [several_networks] +``` + +The load flow can be solved: + +```pycon +>>> auth = ("username", "password") +>>> en.solve_load_flow(auth=auth) +2 +``` + +## Disconnecting an element + +In order to disconnect an element from the network, the `disconnect` method is available. + +```{warning} +The `disconnect` method is only available for loads and for voltage sources. +``` + +```pycon +>>> load.disconnect() +``` + +Now, the load does not belong any more to the network `en`. Symmetrically, the network doesn't have this load any more: + +```pycon +>>> load.network +None +>>> en + +``` + +When accessing to a result, a warning is emitted because the results are now outdated: + +```pycon +>>> line.res_powers +UserWarning: The results of this element may be outdated. Please re-run a load flow to ensure the validity of results. +(array([10406.073858+0.00000000e+00j, 10406.073858+3.79778686e-12j, + 10406.073858-3.79778686e-12j, 0. -0.00000000e+00j]) , + array([-9.99999996e+03+0.00000000e+00j, -9.99999996e+03-4.11872388e-12j, + -9.99999996e+03+4.11872388e-12j, 3.48949926e-29+0.00000000e+00j]) ) +``` + +```{danger} +The load element `load` doesn't belong to a network and a part of its results is not accessible any more. `res_` +methods may raise errors. +``` + +## Connecting an element + +The connection of an element to an existing network is automatically done when the elements are built. Let's create +a new line and a new load at the end of this line. + +The new bus and the new load are created first. + +```pycon +>>> new_bus = Bus(id="new_bus", phases="abcn") +>>> new_load = PowerLoad(id="new_load", bus=new_bus, phases="an", powers=[6e3]) #W +``` + +At this point, they don't belong to any network: + +```pycon +>>> new_bus.network +None +>>> new_load.network +None +``` + +Creating a line connecting the `load_bus` (belonging to the network `en`) and our new bus `new_bus` (which doesn't +belong to a network) will propagate the network to the new elements. + +```pycon +>>> lp_s_al_240 = LineParameters.from_name_lv("S_AL_240") +>>> new_line = Line( +... id="new_line", +... bus1=load_bus, +... bus2=new_bus, +... phases="abcn", +... ground=ground, +... parameters=lp_s_al_240, +... length=0.5, +... ) +>>> new_line.network + +>>> new_bus.network + +>>> new_load.network + +>>> en + +``` + +If you look at the network elements, you can see the new bus, line and load are added. + +```pycon +>>> en.buses["new_bus"] +Bus(id='new_bus', phases='abcn') +>>> en.loads["new_load"] +PowerLoad(id='new_load', phases='an', bus='new_bus') +>>> en.branches["new_line"] +Line(id='new_line', phases1='abcn', phases2='abcn', bus1='lb', bus2='new_bus') +``` + +And now if you run the load flow, you can see that the new elements are taken into account. + +```pycon +>>> en.solve_load_flow(auth=auth) +3 +>>> abs(new_load.res_voltages) +array([216.54956226]) +``` diff --git a/doc/usage/Flexible_Loads.md b/doc/usage/Flexible_Loads.md new file mode 100644 index 00000000..d4eb765b --- /dev/null +++ b/doc/usage/Flexible_Loads.md @@ -0,0 +1,242 @@ +(usage-flexible-loads)= + +# Flexible loads + +Make sure you have followed the [getting started guide](Getting_Started.md) first. + +Let's create a network with MV and LV elements connected via a transformer. + +## Creating a network + +This network contains a voltage source with a constant balanced voltage of 20 kV (phase-to-phase), +a Delta-Wye transformer and a small LV network. + +![Advanced Network](../_static/Advanced_Tutorial.svg) + +```pycon +>>> import numpy as np +... from roseau.load_flow import * + +>>> # Create a MV bus with a voltage source +... bus0_mv = Bus(id="bus0_mv", phases="abc") +... un = 20e3 # V +... source_voltages = [un, un * np.exp(-2j * np.pi / 3), un * np.exp(2j * np.pi / 3)] +... vs = VoltageSource(id="vs", bus=bus0_mv, phases="abc", voltages=source_voltages) +... # Set the MV potential reference +... pref_mv = PotentialRef(id="pref_mv", element=bus0_mv) + +>>> # Create a LV bus and connect its neutral to the ground +... bus0_lv = Bus(id="bus0_lv", phases="abcn") +... ground = Ground(id="gnd") +... # Set the ground potential to 0V +... pref_lv = PotentialRef(id="pref_lv", element=ground) +... # Connect the ground to the neutral of the LV bus +... ground.connect(bus0_lv) + +>>> # Add a MV/LV transformer +... tp = TransformerParameters( +... "160_kVA", +... "Dyn11", +... sn=160.0 * 1e3, +... uhv=20e3, +... ulv=400.0, +... i0=2.3 / 100, +... p0=460.0, +... psc=2350.0, +... vsc=4.0 / 100, +... ) +... transformer = Transformer( +... id="transfo", +... bus1=bus0_mv, +... bus2=bus0_lv, +... phases1="abc", +... phases2="abcn", +... parameters=tp, +... tap=1.025, +... ) + +>>> # Add the LV network elements +... lp = LineParameters.from_name_lv("S_AL_150") +... bus1 = Bus(id="bus1", phases="abcn") +... bus2 = Bus(id="bus2", phases="abcn") +... load_bus1 = Bus(id="load_bus1", phases="abcn") +... load_bus2 = Bus(id="load_bus2", phases="abcn") +... load_bus3 = Bus(id="load_bus3", phases="abcn") +... line1 = Line( +... id="line1", +... bus1=bus0_lv, +... bus2=bus1, +... phases="abcn", +... ground=ground, +... parameters=lp, +... length=0.5, +... ) # km +... line2 = Line( +... id="line2", +... bus1=bus1, +... bus2=bus2, +... phases="abcn", +... ground=ground, +... parameters=lp, +... length=0.4, +... ) +... line3 = Line( +... id="line3", +... bus1=bus1, +... bus2=load_bus1, +... phases="abcn", +... ground=ground, +... parameters=lp, +... length=0.3, +... ) +... line4 = Line( +... id="line4", +... bus1=bus2, +... bus2=load_bus2, +... phases="abcn", +... ground=ground, +... parameters=lp, +... length=0.3, +... ) +... line5 = Line( +... id="line5", +... bus1=load_bus2, +... bus2=load_bus3, +... phases="abcn", +... ground=ground, +... parameters=lp, +... length=0.4, +... ) +... si = -3e3 # VA, negative as it is production +... load1 = PowerLoad(id="load1", bus=load_bus1, phases="abcn", powers=[si, si, si]) +... load2 = PowerLoad(id="load2", bus=load_bus2, phases="abcn", powers=[si, si, si]) +... load3 = PowerLoad(id="load3", bus=load_bus3, phases="abcn", powers=[si, 0, 0]) + +>>> # Create the network +... en = ElectricalNetwork.from_element(bus0_mv) +``` + +Then, the load flow can be solved and the results can be retrieved. + +```pycon +>>> auth = ("username", "password") +>>> en.solve_load_flow(auth=auth) +2 +>>> abs(load_bus3.res_voltages) +array([243.66463933, 232.20612714, 233.55093129]) +``` + +The flexible loads are loads that implement some basic controls such as $P(U)$, $Q(U)$ or $PQ(U)$. + +## $P(U)$ control + +Let's remove `load3` from the network and add a flexible load as a replacement. A flexible load +is a normal `PowerLoad` with a `flexible_params` argument that takes a list of`FlexibleParameter`. + +We first create a `FlexibleParameter` using its class method `p_max_u_production`. It returns a +flexible parameter instance that reduces the active production when the voltage is higher than +`u_up` volts and stops the production when the voltage reaches `u_max`. The `s_max` argument +defines the maximum allowed apparent power of the production plant. In the example below, +`u_up=240 V`, `u_max=250 V` and `s_max=4 kVA`. + +After that, a flexible load representing a PV plant is created. Its apparent power is fixed at +`[si, 0, 0]` VA with `si` a negative value (negative because it is production). Theses apparent +powers define the maximum power this load can produce. The `flexible_params` argument takes a +list of `FlexibleParameter` instances, one per phase. For the first phase, the $P(U)$ control is +used. For the two other phases, there is no control at all thus the `constant` class method is +used. + +As a consequence, the provided apparent power for phase `'a'` is the maximum that can be produced +(potentially modified by the $P(U)$ control) and the provided apparent power for phases `'b'` and +`'c'` is the desired production as the flexible parameter is defined as `constant`. + +```pycon +>>> # Let's make the load 3 flexible with a p(u) control to reduce the voltages constraints +... en.loads["load3"].disconnect() +... fp = FlexibleParameter.p_max_u_production(u_up=240, u_max=250, s_max=4000) # V and VA +... flexible_load = PowerLoad( +... id="load3", +... bus=load_bus3, +... phases="abcn", +... powers=[si, 0, 0], # W +... flexible_params=[fp, FlexibleParameter.constant(), FlexibleParameter.constant()], +... ) +``` + +The load flow can now be run again. You can see that the voltage magnitude has changed. Note that +the voltage magnitude for phase `'a'` was 240 V above without the $P(U)$ control, thus the control +has been activated in this run. + +```pycon +>>> en.solve_load_flow(auth=auth) +4 +>>> abs(load_bus3.res_voltages) +array([243.08225748, 232.46046866, 233.62854073]) +``` + +The actually produced power of the flexible load is a result of the computation and can be +accessed using the `res_flexible_powers` property of the load. Here, one can note that: + +* The active power for the phase `'a'` is negative meaning production; +* The actual value of this active power is lower that the one requested as the control was activated; +* The power for phases `'b'` and `'c'` is 0 VA as expected. + +```pycon +>>> flexible_load.res_flexible_powers +array([-2757.8035271+0.j, 0.+0.j, 0.+0.j]) +``` + +## $PQ(U)$ control + +Now, let's remove the flexible load that we have added in the previous section and add a new +flexible load implementing a $PQ(U)$ control instead. + +As before, we first create a `FlexibleParameter` but this time, we will use the +`pq_u_production` class method. It requires several arguments: + +* `up_up` and `up_max`: the voltages defining the interval of the `P(U)` control activation. + Below `up_up`, no control is applied and above `u_max`, the production is totally shut down. +* `uq_min`, `uq_down`, `uq_up` and `uq_max` which are the voltages defining the `Q(U)` control + activation. + * Below `uq_min`, the power plant produces the maximum possible reactive power. + * Between `uq_down` and `uq_up`, there is no `Q(U)` control. + * Above `uq_max`, the power plant consumes the maximum possible reactive power. + +In the example below, as the new load is a production load, only the `up_up`, `up_max`, `uq_up` +and `uq_max` are of interests. The $Q(U)$ control starts its action at 235 V and is fully +exhausted at 240 V. After that, the $P(U)$ is activated and is exhausted at 250 V where the +production is totally shut down. + +```pycon +>>> # Let's try with pq(u) control, by injecting reactive power before reducing active power +... en.loads["load3"].disconnect() +... fp = FlexibleParameter.pq_u_production( +... up_up=240, up_max=250, uq_min=200, uq_down=210, uq_up=235, uq_max=240, s_max=4000 # V and VA +... ) +... flexible_load = PowerLoad( +... id="load3", +... bus=load_bus3, +... phases="abcn", +... powers=[si, 0, 0], +... flexible_params=[fp, FlexibleParameter.constant(), FlexibleParameter.constant()], +... ) +``` + +The load flow can be solved again. + +```pycon +>>> en.solve_load_flow(auth=auth) +6 +>>> abs(load_bus3.res_voltages) +array([239.5133208 , 230.2108052 , 237.59184615]) +``` + +One can note that this time, the phase `'a'` consumes reactive power to limit the voltage rise in +the network. Moreover, the magnitude of the power on phase `'a'` is approximately $4 kVA$ which is +the maximum allowed apparent power for `load3`. In order to maintain this maximum, a +[Euclidean projection](models-flexible_load-projection) has been used. + +```pycon +>>> flexible_load.res_flexible_powers +array([-2566.23768012+3068.29336425j, 0.+0.j, 0.+0.j]) +``` diff --git a/doc/usage/Getting_Started.md b/doc/usage/Getting_Started.md new file mode 100644 index 00000000..e07475f8 --- /dev/null +++ b/doc/usage/Getting_Started.md @@ -0,0 +1,475 @@ +(usage-getting-started)= + +# Getting started + +*Make sure you have followed the* [installation instructions](../Installation.md). + +In this tutorial you will learn how to: + +1. [Create a simple electrical network with one source and one load](gs-creating-network); +2. [Solve a load flow](gs-solving-load-flow); +3. [Get the results of the load flow](gs-getting-results); +4. [Update the elements of the network](gs-updating-elements); +5. [Save the network and the results to the disk for later analysis](gs-saving-network); +6. [Load the saved network and the results from the disk](gs-loading-network). + +(gs-creating-network)= + +## Creating a network + +An electrical network can be built by assembling basic elements provided in [roseau.load_flow.models][api-models]. +The following is a summary of the available elements: + +* Buses: + * `Bus`: An electrical bus. + +* Branches: + * `Line`: A line connects two buses. The parameters of the line are defined by a `LineParameters` object. + * `LineParameters`: This object defines the parameters of a line (model, impedance, etc.) + * `Switch`: A basic switch element. + * `Transformer`: A generic transformer. The parameters of the transformer are defined by a `TransformerParameters` + object. + * `TransformerParameters`: This object defines the parameters of a transformer (model, windings, etc.) + +* Loads: + The ZIP load model is available via the following classes: + * `ImpedanceLoad`: A constant impedance (Z) load: $S = |V|^2 \times \overline{Z}$, $|S|$ is proportional to $|V|^2$. + * `CurrentLoad` A constant impedance (I) load: $S = V \times \overline{I}$, $|S|$ is proportional to $|V|^1$. + * `PowerLoad`: A constant power (P) load: $S = \mathrm{constant}$, $|S|$ is proportional to $|V|^0$. + + A power load can be made flexible (controllable) by using the following class: + * `FlexibleParameter`: This object defines the parameters of the flexible load's control (Maximum power, projection, + type, etc.) + + Note that flexible loads are an [advanced](usage-flexible-loads) feature that most users don't need. + +* Sources: + * `VoltageSource`: A voltage source has a constant voltage and an infinite power source. + +* Others: + * `Ground`: A ground acts as a perfect conductor. If two elements are connected to the ground, the potentials at the + connection points are always equal. + * `PotentialRef`: A potential reference sets the reference of potentials in the network. It can be connected to + buses or grounds. + +For a more detailed description of the elements, please refer to the [API reference][api-models]. + +Let's use some of these elements to build the following network with a voltage source, a simple +line and a constant power load. This network is a low voltage network (three-phase + neutral wire). + +![Network](../_static/Getting_Started_Tutorial.svg) + +It leads to the following code + +```pycon +>>> import numpy as np +... from roseau.load_flow import * + +>>> # Create two buses +... source_bus = Bus(id="sb", phases="abcn") +... load_bus = Bus(id="lb", phases="abcn") + +>>> # Define the reference of potentials to be the neutral of the source bus +... ground = Ground(id="gnd") +... # Fix the potential of the ground at 0 V +... pref = PotentialRef(id="pref", element=ground) +... ground.connect(source_bus, phase="n") + +>>> # Create a LV source at the first bus +... # Volts (phase-to-neutral because the source is connected to the neutral) +... un = 400 / np.sqrt(3) +... source_voltages = [un, un * np.exp(-2j * np.pi / 3), un * np.exp(2j * np.pi / 3)] +... vs = VoltageSource(id="vs", bus=source_bus, phases="abcn", voltages=source_voltages) + +>>> # Add a load at the second bus +... load = PowerLoad( +... id="load", bus=load_bus, phases="abcn", powers=[10e3 + 0j, 10e3, 10e3] +... ) # VA + +>>> # Add a LV line between the source bus and the load bus +... # R = 0.1 Ohm/km, X = 0 +... lp = LineParameters("lp", z_line=(0.1 + 0.0j) * np.eye(4, dtype=complex)) +... line = Line( +... id="line", bus1=source_bus, bus2=load_bus, phases="abcn", parameters=lp, length=2.0 +... ) +``` + +At this point, all the basic elements of the network have been defined and connected. Now, +everything can be encapsulated in an `ElectricalNetwork` object, but first, some important +notes on the `Ground` and `PotentialRef` elements: + +```{important} +The `Ground` element does not have a fixed potential as one would expect from a real ground +connection. The potential reference (0 Volts) is defined by the `PotentialRef` element that +itself can be connected to any bus or ground in the network. This is to give more flexibility +for the user to define the potential reference of their network. + +A `PotentialRef` defines the potential reference for the network. It is a mandatory reference +for the load flow resolution to be well-defined. A network MUST have one and only one potential +reference per a galvanically isolated section. +``` + +```{note} +The `Ground` element is not required in this simple network as it is connected to a single +element. No current will flow through the ground and no two points in the network will be forced +to have the same potential. In this scenario you are allowed to define the potential reference +directly on the bus element: `pref = PotentialRef(id="pref", element=source_bus, phase="n")` and +not bother with creating the ground element at all. +``` + +An `ElectricalNetwork` object can now be created using the `from_element` constructor. The source +bus `source_bus` is given to this constructor. All the elements connected to this bus are +automatically included into the network. + +```pycon +>>> en = ElectricalNetwork.from_element(source_bus) +``` + +(gs-solving-load-flow)= + +## Solving a load flow + +An authentication is required. Please contact us at contact@roseautechnologies.com to get the necessary credentials. +Then, the load flow can be solved by requesting our server (requires Internet access). + +```{note} +The server takes some time to warm up the first time it is requested. Subsequent requests will execute faster. +``` + +```pycon +>>> auth = ("username", "password") +>>> en.solve_load_flow(auth=auth) +2 +``` + +It returns the number of iterations performed by the *Newton-Raphson* solver. Here, 2. To have some additional results +regarding the convergence, the field `res_info` is available in the network. + +```pycon +>>> en.res_info +{'solver': 'newton_goldstein', + 'solver_params': {'m1': 0.1, 'm2': 0.9}, + 'tolerance': 1e-06, + 'max_iterations': 20, + 'warm_start': True, + 'status': 'success', + 'iterations': 2, + 'residual': 1.8595619621919468e-07} +``` + +The available values are: + +* `solver`: it can be `"newton"` for the *Newton* solver or `"newton_goldstein"` for the *Newton* solver using the + *Goldstein and Price* linear search; +* `solver_params`: the parameters used by the solver; +* `tolerance`: the requested tolerance for the solver. $10^{-6}$ is the default; +* `max_iterations`: the requested maximum number of iterations for the solver. 20 is the default; +* `warm_start`: if `True`, the results (potentials of each bus) from the last valid run are used + as a starting point for the solver. For large networks, using a warm start can lead to performance gains as the + solver will converge faster. `True` is the default; +* `status`: the convergence of the load flow. Two possibilities: *success* or *failure*; +* `iterations`: the number of iterations made by the solver. +* `residual`: the precision which was reached by the solver (lower than the tolerance if successful solve). + +(gs-getting-results)= + +## Getting the results + +The results are now available for every element of the network. Results can be accessed through +special properties prefixed with `res_` on each element object. For instance, the potentials +of the `load_bus` can be accessed using the property `load_bus.res_potentials`. It contains 4 +values which are the potentials of its phases `a`, `b`, `c` and `n` (neutral). The potentials +are returned as complex numbers. Calling `abs(load_bus.res_potentials)` gives you the magnitude +of the load's potentials (in Volts) and `np.angle(load_bus.res_potentials)` gives their angle +(phase shift) in radians. + +````{note} +Roseau Load Flow uses the [Pint](https://pint.readthedocs.io/en/stable/) `Quantity` objects to +present the data in unit-agnostic way for the user. All input data (load powers, source voltages, +etc.) are expected to be either given in SI units or using the pint Quantity interface for non-SI +units (example below). The `length` parameter of the `Line` class is an exception where the +default unit is Kilometers. +Example, create a load with powers expressed in kVA: + +```python +from roseau.load_flow import Q_ + +load = PowerLoad(id="load", bus=load_bus, phases="abcn", powers=Q_([10, 10, 10], "kVA")) +``` +```` + +The results returned by the `res_` properties are also `Quantity` objects. + +### Available results + +The available results depend on the type of element. The following table summarizes the available +results for each element type: + +| Element type | Available results | +|---------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------| +| `Bus` | `res_potentials`, `res_voltages` | +| `Line` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages`, `res_series_power_losses`, `res_shunt_power_losses`, `res_power_losses` | +| `Transformer`, `Switch` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages` | +| `ImpedanceLoad`, `CurrentLoad`, `PowerLoad` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages`, `res_flexible_powers`[^**] | +| `VoltageSource` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages` | +| `Ground` | `res_potential` | +| `PotentialRef` | `res_current` *(Always zero for a successful load flow)* | + +[^**]: `res_flexible_powers` is only available for flexible loads (`PowerLoad`s with `flexible_params`). You'll see +an example on the usage of flexible loads in the *Flexible Loads* section. + +### Getting results per object + +In order to get the potentials or voltages of a bus, use the `res_potentials` or `res_voltages` +properties of buses as follows: + +```pycon +>>> load_bus.res_potentials +array([ 2.21928183e+02-2.60536682e-18j, -1.10964092e+02-1.92195445e+02j, + -1.10964092e+02+1.92195445e+02j, 2.68637675e-15-6.67652444e-17j]) +``` + +As the results are *pint quantities*, they can be converted to different units. Here, the magnitudes +of the voltages of the same bus are displayed in kilovolts. + +```pycon +>>> abs(load_bus.res_voltages).to("kV") +array([0.22192818, 0.22192818, 0.22192818]) +``` + +```{important} +Everywhere in `roseau-load-flow`, the `voltages` of an element depend on the element's `phases`. +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 +**phase-to-neutral** voltages. Voltages of elements connected in a *Delta* configuration (elements +that do not have a neutral connection indicated by the absence of the `'n'` char from their +`phases` attribute) are the **phase-to-phase** voltages. This is true for *input* voltages, such +as the `voltages` parameter to a `VoltageSource`, as well as for the results such as the `res_voltages` property of a `Bus`. +``` + +The currents of the line are available using the `res_currents` property of the `line` object. +It contains two arrays: + +* the first is the current flowing from the first bus of the line to the second bus of the line. + It contains 4 values: one per phase and the neutral current. +* the second is the current flowing from the second bus of the line to the first bus of the line. + +Here, the sum of these currents is 0 as we have chosen a simple line model, i.e, a line with only +series impedance elements without shunt components. If shunt components were modelled, the sum +would have been non-zero. + +```pycon +>>> line.res_currents +(array([ 4.50596216e+01+1.30268341e-17j, -2.25298108e+01-3.90227770e+01j, + -2.25298108e+01+3.90227770e+01j, -1.34318838e-14+3.33826222e-16j]) , + array([-4.50596216e+01-1.30268341e-17j, 2.25298108e+01+3.90227770e+01j, + 2.25298108e+01-3.90227770e+01j, 1.34318838e-14-3.33826222e-16j]) ) +``` + +### Dataframe network results + +The results can also be retrieved for the entire network using `res_` properties of the +`ElectricalNetwork` instance as [pandas DataFrames](https://pandas.pydata.org/docs/). + +Available results for the network are: + +* `res_buses`: Buses potentials indexed by *(bus id, phase)* +* `res_buses_voltages`: Buses voltages indexed by *(bus id, voltage phase)* +* `res_branches`: Branches currents, powers, and potentials indexed by *(branch id, phase)* +* `res_lines`: Lines currents, powers, potentials, series losses, series currents indexed by *(line id, phase)* +* `res_loads`: Loads currents, powers, and potentials indexed by *(load id, phase)* +* `res_loads_voltages`: Loads voltages indexed by *(load id, voltage phase)* +* `res_loads_flexible_powers`: Loads flexible powers (only for flexible loads) indexed by + *(load id, phase)* +* `res_sources`: Sources currents, powers, and potentials indexed by *(source id, phase)* +* `res_grounds`: Grounds potentials indexed by *ground id* +* `res_potential_refs`: Potential references currents indexed by *potential ref id* (always zero + for a successful load flow) + +All the results are complex numbers. You can always access the magnitude of the results using +the `abs` function and the angle in radians using the `np.angle` function. For instance, +`abs(network.res_loads)` gives you the magnitude of the loads' results in SI units. + +Below are the results of the load flow for `en`: + +```{note} +All the following tables are rounded to 2 decimals to be properly displayed. +``` + +```pycon +>>> en.res_buses +``` + +| bus_id | phase | potential | +|:-------|:------|---------------:| +| sb | a | 230.94+0j | +| sb | b | -115.47-200j | +| sb | c | -115.47+200j | +| sb | n | 0j | +| lb | a | 221.93-0j | +| lb | b | -110.96-192.2j | +| lb | c | -110.96+192.2j | +| lb | n | -0j | + +```pycon +>>> en.res_buses_voltages +``` + +| bus_id | phase | voltage | +|:-------|:------|---------------:| +| sb | an | 230.94+0j | +| sb | bn | -115.47-200j | +| sb | cn | -115.47+200j | +| lb | an | 221.93+0j | +| lb | bn | -110.96-192.2j | +| lb | cn | -110.96+192.2j | + +```pycon +>>> en.res_branches +``` + +| branch_id | phase | current1 | current2 | power1 | power2 | potential1 | potential2 | +|:----------|:------|--------------:|-------------:|------------:|----------:|-------------:|---------------:| +| line | a | 45.06+0j | -45.06-0j | 10406.07-0j | -10000+0j | 230.94+0j | 221.93-0j | +| line | b | -22.53-39.02j | 22.53+39.02j | 10406.07+0j | -10000-0j | -115.47-200j | -110.96-192.2j | +| line | c | -22.53+39.02j | 22.53-39.02j | 10406.07-0j | -10000+0j | -115.47+200j | -110.96+192.2j | +| line | n | 0j | -0j | 0j | -0j | 0j | -0j | + +```pycon +>>> en.res_lines +``` + +| branch_id | phase | current1 | current2 | power1 | power2 | potential1 | potential2 | series_losses | series_current | +|:----------|:------|--------------:|-------------:|------------:|----------:|-------------:|---------------:|--------------:|---------------:| +| line | a | 45.06+0j | -45.06-0j | 10406.07-0j | -10000+0j | 230.94+0j | 221.93-0j | 406.07-0j | 45.06+0j | +| line | b | -22.53-39.02j | 22.53+39.02j | 10406.07+0j | -10000-0j | -115.47-200j | -110.96-192.2j | 406.07-0j | -22.53-39.02j | +| line | c | -22.53+39.02j | 22.53-39.02j | 10406.07-0j | -10000+0j | -115.47+200j | -110.96+192.2j | 406.07+0j | -22.53+39.02j | +| line | n | 0j | -0j | -0j | -0j | 0j | -0j | -0j | -0+0j | + +```pycon +>>> en.res_loads +``` + +| load_id | phase | current | power | potential | +|:--------|:------|--------------:|---------:|---------------:| +| load | a | 45.06+0j | 10000-0j | 221.93-0j | +| load | b | -22.53-39.02j | 10000-0j | -110.96-192.2j | +| load | c | -22.53+39.02j | 10000+0j | -110.96+192.2j | +| load | n | 0j | 0j | -0j | + +```pycon +>>> en.res_loads_voltages +``` + +| load_id | phase | voltage | +|:--------|:------|---------------:| +| load | an | 221.93+0j | +| load | bn | -110.96-192.2j | +| load | cn | -110.96+192.2j | + +```pycon +>>> en.res_sources +``` + +| source_id | phase | current | power | potential | +|:----------|:------|-------------:|--------------:|-------------:| +| vs | a | -45.06-0j | -10406.07+0j) | 230.94+0j | +| vs | b | 22.53+39.02j | -10406.07-0j) | -115.47-200j | +| vs | c | 22.53-39.02j | -10406.07+0j) | -115.47+200j | +| vs | n | 0j | 0j | 0j | + +```pycon +>>> en.res_grounds +``` + +| ground_id | potential | +|:----------|----------:| +| gnd | 0j | + +```pycon +>>> en.res_potential_refs +``` + +| potential_ref_id | current | +|:-----------------|--------:| +| pref | 0j | + +Using the `transform` method of data frames, the results can easily be converted from complex values +to magnitude and angle values. + +```pycon +>>> en.res_buses_voltages.transform([np.abs, np.angle]) +``` + +| bus_id | phase | ('voltage', 'absolute') | ('voltage', 'angle') | +|:-------|:------|------------------------:|---------------------:| +| sb | an | 230.94 | 0 | +| sb | bn | 230.94 | -2.0944 | +| sb | cn | 230.94 | 2.0944 | +| lb | an | 221.928 | 2.89102e-19 | +| lb | bn | 221.928 | -2.0944 | +| lb | cn | 221.928 | 2.0944 | + +Or, if you prefer degrees: + +```pycon +>>> import functools as ft +... en.res_buses_voltages.transform([np.abs, ft.partial(np.angle, deg=True)]) +``` + +| bus_id | phase | ('voltage', 'absolute') | ('voltage', 'angle') | +|:-------|:------|------------------------:|---------------------:| +| sb | an | 230.94 | 0 | +| sb | bn | 230.94 | -120 | +| sb | cn | 230.94 | 120 | +| lb | an | 221.928 | 1.65643e-17 | +| lb | bn | 221.928 | -120 | +| lb | cn | 221.928 | 120 | + +(gs-updating-elements)= + +## Updating elements of the network + +Network elements can be updated. Here, the load's power values are changed to create an +unbalanced situation. + +```pycon +>>> load.powers = Q_([15, 0, 0], "kVA") +>>> en.solve_load_flow(auth=auth) +3 +>>> load_bus.res_potentials +array([ 216.02252269 +0.j, -115.47005384-200.j, -115.47005384+200.j, 14.91758499 +0.j]) +``` + +One can notice that the neutral's potential of the bus is no longer close to 0 V. + +(gs-saving-network)= + +## Saving the network to a file + +The network can be saved to a JSON file using the `en.to_json` method. Note that this method +does not save the results of the load flow. It only saves the network elements. + +To save the results of the load flow, use the `en.results_to_json` method. + +```pycon +>>> en.to_json("my_network.json") +>>> en.results_to_json("my_network_results.json") +``` + +```{warning} +The `to_json` and `results_to_json` methods will overwrite the file if it already exists. +``` + +(gs-loading-network)= + +## Loading a network from a file + +A saved network can be loaded using the `ElectricalNetwork.from_json` method. The results of +the load flow can then be loaded using the `ElectricalNetwork.results_from_json` method. + +```pycon +>>> en = ElectricalNetwork.from_json("my_network.json") +>>> en.results_from_json("my_network_results.json") +``` + +[api-models]: ../autoapi/roseau/load_flow/models/index diff --git a/doc/usage/Short_Circuit.md b/doc/usage/Short_Circuit.md new file mode 100644 index 00000000..4773a5ce --- /dev/null +++ b/doc/usage/Short_Circuit.md @@ -0,0 +1,170 @@ +# Short-Circuit + +Let's see how we can make a short-circuit calculation. + +We will start by creating a simple network composed of two LV lines. As usual with short-circuit calculations, we +won't add any loads. + +```{note} +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. +``` + +```pycon +>>> import numpy as np +... from roseau.load_flow import * + +>>> # Create three buses +... source_bus = Bus(id="sb", phases="abcn") +... bus1 = Bus(id="b1", phases="abcn") +... bus2 = Bus(id="b2", phases="abcn") + +>>> # Define the reference of potentials +... ground = Ground(id="gnd") +... pref = PotentialRef(id="pref", element=ground) +... ground.connect(bus=source_bus) + +>>> # Create a LV source at the first bus +... un = 400 / np.sqrt(3) +... source_voltages = [un, un * np.exp(-2j * np.pi / 3), un * np.exp(2j * np.pi / 3)] +... vs = VoltageSource(id="vs", bus=source_bus, phases="abcn", voltages=source_voltages) + +>>> # Add LV lines +... lp1 = LineParameters.from_name_lv("S_AL_240") +... line1 = Line( +... id="line1", bus1=source_bus, bus2=bus1, parameters=lp1, length=1.0, ground=ground +... ) +... lp2 = LineParameters.from_name_lv("S_AL_150") +... line2 = Line(id="line2", bus1=bus1, bus2=bus2, parameters=lp2, length=2.0, ground=ground) + +>>> # Create network +... en = ElectricalNetwork.from_element(source_bus) +``` + +## Phase-to-phase + +We can now add a short-circuit. Let's first create a phase-to-phase short-circuit: + +```pycon +>>> bus2.add_short_circuit("a", "b") +``` + +Let's run the load flow, and get the current results. + +```{note} +All the following tables are rounded to 2 decimals to be properly displayed. +``` + +```pycon +>>> auth=("username", "password") +>>> en.solve_load_flow(auth=auth) +1 +>>> en.res_branches +``` + +| branch_id | phase | current1 | current2 | power1 | power2 | potential1 | potential2 | +|:----------|:------|---------------:|-------------------:|-------------------:|------------------------:|----------------:|------------------:| +| line1 | a | 376.73+75.27j | -376.51-75.17j | 87001.18-17383.7j | -69627.17+24139.23j | 230.94+0j | 190.15-26.15j | +| line1 | b | -376.14-74.96j | 376.12+74.96j | 58424.25+66571.96j | -41140.25-59810.05j | -115.47-200j | -74.72-173.91j | +| line1 | c | -0.49-0.42j | 0.49+0.21j | -26.73-147j | -14.9+126.71j | -115.47+200j | -117.06+208.26j | +| line1 | n | -0.1+0.1j | -0.1-0j | 0j | -0.15+0.85j | 0j | 1.63-8.2j | +| line2 | a | 376.51+75.17j | **-376.45-74.93j** | 69627.17-24139.23j | **-14217.89+41992.79j** | 190.15-26.15j | **57.69-100.07j** | +| line2 | b | -376.12-74.96j | **376.45+74.93j** | 41140.25+59810.05j | **14217.89-41992.79j** | -74.72-173.91j | **57.69-100.07j** | +| line2 | c | -0.49-0.21j | 0j | 14.9-126.71j | 0j | -117.06+208.26j | -120.25+224.73j | +| line2 | n | 0.1+0j | 0j | 0.15-0.85j | 0j | 1.63-8.2j | 4.88-24.6j | + +Looking at the line results of the second bus of the line "line2", which is "bus2" where we added the short-circuit, +one can notice that: + +* the potentials of phases "a" and "b" are equal; +* the currents and powers in phases "a" and "b" are equal with opposite signs, i.e. the sum of the currents is zero; +* the currents and powers in these two phases are very high; + +which is expected from a short-circuit. + +## Multi-phase + +It is possible to create short-circuits between several phases, not only two. Let's first remove the existing +short-circuit then create a new one between phases "a", "b", and "c". + +```pycon +>>> bus2.clear_short_circuits() +>>> bus2.add_short_circuit("a", "b", "c") +>>> en.solve_load_flow(auth=auth) +1 +>>> en.res_branches +``` + +| branch_id | phase | current1 | current2 | power1 | power2 | potential1 | potential2 | +|:----------|:------|----------------:|----------------:|-------------------:|--------------------:|---------------:|----------------:| +| line1 | a | 371.74-146.3j | -371.55+146.39j | 85849.16+33785.8j | -63525.86-24647.08j | 230.94-0j | 170.63-0.89j | +| line1 | b | -325.13-309.42j | 325.11+309.42j | 99425.41+29296.84j | -75755.17-20038.48j | -115.47-200j | -91.49-148.71j | +| line1 | c | -46.49+455.6j | 46.51-455.8j | 96487.77+43308.67j | -75409.92-31858.5j | -115.47+200j | -85.88+156.68j | +| line1 | n | -0.12+0.12j | -0.07-0.01j | 0j | -0.4+0.53j | 0j | 6.74-7.09j | +| line2 | a | 371.55-146.39j | -371.59+146.56j | 63525.86+24647.08j | 3541.55-1646.58j | 170.63-0.89j | **-6.74+7.09j** | +| line2 | b | -325.11-309.42j | 325.28+309.3j | 75755.17+20038.48j | 1.41+4388.76j | -91.49-148.71j | **-6.74+7.09j** | +| line2 | c | -46.51+455.8j | 46.31-455.86j | 75409.92+31858.5j | -3542.97-2742.18j | -85.88+156.68j | **-6.74+7.09j** | +| line2 | n | 0.07+0.01j | 0j | 0.4-0.53j | 0j | 6.74-7.09j | 20.21-21.26j | + +Now the potentials of the three phases are equal and the currents and powers add up to zero at the bus where the +short-circuit is applied. + +## Phase-to-ground + +Phase-to-ground short-circuits are also possible. Let's remove the existing short-circuit and create a new one +between phase "a" and ground. + +```pycon +>>> bus2.clear_short_circuits() +>>> # ground MUST be passed as a keyword argument +... bus2.add_short_circuit("a", ground=ground) +>>> en.solve_load_flow(auth=auth) +1 +>>> en.res_branches +``` + +| branch_id | phase | current1 | current2 | power1 | power2 | potential1 | potential2 | +|:----------|:------|--------------:|--------------:|-------------------:|--------------------:|----------------:|----------------:| +| line1 | a | 96.01-188.55j | -95.8+188.65j | 22173.17+43543.72j | -16858.71-29476.66j | 230.94+0j | 160.3-7.97j | +| line1 | b | 0.53-0.42j | -0.54+0.42j | 22.57-153.79j | -3.39+192.16j | -115.47-200j | -166.27-225.68j | +| line1 | c | -0.41-0.51j | 0.43+0.28j | -54.42-141.47j | -21.19+121.75j | -115.47+200j | -162.05+176.44j | +| line1 | n | -0.04-0.07j | -0.17+0.18j | 0j | 4.19+13.62j | 0j | -50.72-25.69j | +| line2 | a | 95.8-188.65j | -95.91+188.9j | 16858.71+29476.66j | 0j | 160.3-7.97j | **0j** | +| line2 | b | 0.54-0.42j | 0j | 3.39-192.16j | 0j | -166.27-225.68j | -267.74-277.02j | +| line2 | c | -0.43-0.28j | 0j | 21.19-121.75j | 0j | -162.05+176.44j | -255.11+129.31j | +| line2 | n | 0.17-0.18j | 0j | -4.19-13.62j | 0j | -50.72-25.69j | -152.11-77.04j | + +```pycon +>>> en.res_grounds +``` + +| ground_id | potential | +|:----------|----------:| +| gnd | 0j | + +Here the potential at phase "a" of bus "bus2" is zero, equal to the ground potential. The sum of the currents in the +other phases is also zero indicating that the current of phase "a" went through the ground. + +## Additional notes + +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. + +```pycon +>>> try: +... load = PowerLoad("load", bus=bus2, powers=[10, 10, 10]) +... except RoseauLoadFlowException as e: +... print(e) +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] +``` + +```pycon +>>> try: +... bus2.add_short_circuit("a") +... except RoseauLoadFlowException as e: +... print(e) +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] +``` diff --git a/doc/usage/index.md b/doc/usage/index.md new file mode 100644 index 00000000..0bba8e6b --- /dev/null +++ b/doc/usage/index.md @@ -0,0 +1,14 @@ +# Usage + +This section provides some tutorials to start using *Roseau_Load_Flow*: + +```{toctree} +--- +maxdepth: 2 +caption: Usage +--- +Getting_Started +Connecting_Elements +Flexible_Loads +Short_Circuit +``` From 9d06197e010c1e048600e153f6c04f599d77922e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Vinot?= Date: Wed, 9 Aug 2023 08:53:03 +0200 Subject: [PATCH 3/9] Delete the docker installation --- .dockerignore | 10 - .github/workflows/ci.yml | 2 +- Dockerfile | 62 - doc/Changelog.md | 4 + doc/Installation.md | 87 +- doc/_static/css/notebooks.css | 47 - doc/conf.py | 12 - doc/notebooks/Advanced.ipynb | 648 --------- doc/notebooks/Getting_Started.ipynb | 1638 ----------------------- doc/notebooks/Short_Circuit.ipynb | 323 ----- doc/notebooks/data | 1 - doc/notebooks/index.md | 13 - doc/usage/Short_Circuit.md | 2 +- poetry.lock | 1891 +++------------------------ pyproject.toml | 8 - 15 files changed, 160 insertions(+), 4588 deletions(-) delete mode 100644 .dockerignore delete mode 100644 Dockerfile delete mode 100644 doc/_static/css/notebooks.css delete mode 100644 doc/notebooks/Advanced.ipynb delete mode 100644 doc/notebooks/Getting_Started.ipynb delete mode 100644 doc/notebooks/Short_Circuit.ipynb delete mode 120000 doc/notebooks/data delete mode 100644 doc/notebooks/index.md diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index d380cb1a..00000000 --- a/.dockerignore +++ /dev/null @@ -1,10 +0,0 @@ -build/ -!build/html/ -.git/ -.pytest_cache/ -#dist/ -.github/ -.idea/ -Dockerfile -doc/notebooks/data -doc/images/ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4dd34b8e..3e9eb428 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,7 +56,7 @@ jobs: - name: Install dependencies run: | poetry env use "${{ matrix.python-version }}" - poetry install --without dev,docker + poetry install --without dev - name: Test with pytest run: | diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 617cb9f9..00000000 --- a/Dockerfile +++ /dev/null @@ -1,62 +0,0 @@ -FROM python:3.11-slim-bullseye as build - -# Set the working directory to /app -WORKDIR /app - -# Set some environment variables -ENV POETRY_HOME=/poetry PATH=/poetry/bin:${PATH} PYTHONUNBUFFERED=1 - -# Install some packages -RUN apt update && apt install --no-install-recommends -yq curl make pandoc - -# Install poetry -RUN curl -sSL https://install.python-poetry.org | python3 - - -# Copy the code into the container -COPY . /app/ - -# Install any needed packages specified in poetry.lock -# Configure poetry -RUN poetry config virtualenvs.create true && \ - poetry config virtualenvs.in-project true && \ - poetry install --without dev,test --with doc - -# Build a wheel the documentation -RUN poetry build && \ - cd doc/ && \ - SPHINXBUILD="poetry run sphinx-build" make html && \ - cd .. && \ - poetry install --without dev,test,doc --with docker --sync - -FROM python:3.11-slim-bullseye as run - -# Set the working directory to /app -WORKDIR /app - -# Environment variable + expose the port -ENV PYTHONUNBUFFERED=1 PATH="/app/.venv/bin:${PATH}" PORT=8080 -EXPOSE ${PORT} - -# Install node js to allow extension installation -RUN apt update && \ - apt install --no-install-recommends -yq curl && \ - curl -sL https://deb.nodesource.com/setup_20.x | bash - && \ - apt install --no-install-recommends -yq nodejs && \ - apt upgrade -yq && \ - apt clean && \ - rm -rf /var/lib/apt/lists/* - -# Copy the virtualenv -COPY --from=build /app/.venv/ .venv/ -COPY --from=build /app/dist/*.whl ./ - -# Install Jupyter lab -RUN pip3 install -U $(ls roseau_load_flow-*.whl | sort -Vr | head -n 1) pip && rm roseau_load_flow-*.whl - -# COPY the documentation, the noteboks and the data -COPY --from=build /app/build/html/ doc/ -COPY ./doc/notebooks/ ./ -COPY ./data/ data/ - -# Run the Jupyter Lab -ENTRYPOINT jupyter lab --allow-root --ServerApp.allow_origin='*' --ip=0.0.0.0 --port ${PORT} --no-browser --ServerApp.token='' diff --git a/doc/Changelog.md b/doc/Changelog.md index bc39a87d..66de4c44 100644 --- a/doc/Changelog.md +++ b/doc/Changelog.md @@ -4,6 +4,10 @@ **In development** +* [PR115](https://github.com/RoseauTechnologies/Roseau_Load_Flow/pull/115) + * Reformat the tutorials in the documentation + * Split the "Advanced" tutorial in several smaller files + * Remove the Docker installation option * [PR114](https://github.com/RoseauTechnologies/Roseau_Load_Flow/pull/114) Use Pint >=0.21 to have the percent unit. * [PR113](https://github.com/RoseauTechnologies/Roseau_Load_Flow/pull/113) Raise an error when accessing the results of disconnected elements. diff --git a/doc/Installation.md b/doc/Installation.md index 5b266810..e8b7fec4 100644 --- a/doc/Installation.md +++ b/doc/Installation.md @@ -4,6 +4,7 @@ `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 ``` @@ -44,6 +45,7 @@ $ . venv/bin/activate ````` To upgrade to the latest version (recommended), use: + ```console $ python -m pip install --upgrade roseau-load-flow ``` @@ -52,6 +54,7 @@ $ python -m pip install --upgrade 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 ``` @@ -61,90 +64,6 @@ If you use *conda* to manage your project, it is recommended to use the `conda` instead of `pip`. ``` -## Using `docker` - -`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. - -````{tab} Windows - -1. Download and install Docker Desktop for Windows, available [here]( - https://www.docker.com/products/docker-desktop/). - - ```{hint} - During the installation, select "WSL **2**" (WSL = Windows Subsystem for Linux). - ``` - -2. Open *Docker Desktop* to start the *Docker Engine* - - ![Docker Desktop](_static/2022_10_20_Installation_2.png) - - ```{note} - During the first start of the software, it may require to install some extra files to update - WSL1 to WSL2. - ``` - -3. Go to the [Package page]( - https://github.com/RoseauTechnologies/Roseau_Load_Flow/pkgs/container/roseau-load-flow) of - Roseau Load Flow on GitHub and copy the Docker command to pull the image. - - ![Package](_static/2022_10_20_Installation_1.png) - -4. Open a Terminal - - ```{image} _static/2022_10_20_Installation_3.png - :alt: Terminal - :width: 15cm - ``` - -5. Paste the command line in your terminal to start downloading the Docker image - - ![Package](_static/2022_10_20_Installation_4.png) - -6. In the "Images" tab of *Docker Desktop*, the image should be visible. You can click on `Run` to - start it. - -7. Fill the advanced options if you want. It allows you to give a name to the created container, - and to link folders of your system to the container. You can for instance link the folder - `Documents` to the directory `/app/Documents/` in the container (as shown below). When done - click on `Run` to start the container. - - ![Advanced options](_static/2022_10_20_Installation_6.png) - -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. - -```` - -````{tab} Linux - -1. Install Docker via the [detailed tutorial](https://docs.docker.com/engine/install/#server) - written by the Docker team. Follow instructions specific to your platform like [Ubuntu]( - https://docs.docker.com/engine/install/ubuntu/) or [Debian]( - https://docs.docker.com/engine/install/debian/). - -2. Go to the [Package page]( - https://github.com/RoseauTechnologies/Roseau_Load_Flow/pkgs/container/roseau-load-flow) of - Roseau Load Flow on GitHub and copy the Docker command to pull the image. - - ![Package](_static/2022_10_20_Installation_1.png) - -3. Paste it in your terminal to start downloading the Docker image - -4. Use `docker run` to start a container; for example with version *0.4.0*: - ```console - $ docker run -p 8080:8080 --name rlf-test ghcr.io/roseautechnologies/roseau-load-flow:0.4.0 - ``` - -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. - -```` - diff --git a/doc/_static/css/notebooks.css b/doc/_static/css/notebooks.css deleted file mode 100644 index 22e48d64..00000000 --- a/doc/_static/css/notebooks.css +++ /dev/null @@ -1,47 +0,0 @@ -/* This stylesheet is applied to nbsphinx notebooks only */ - -/* Hide execution count */ -/* https://nbsphinx.readthedocs.io/en/latest/custom-css.html#For-a-Single-Notebook */ -.nbinput .prompt, -.nboutput .prompt { - display: none; -} - -/* Fix hidden rows in output of dataframes and pint quantities in dark mode */ -/* Make colors hardcoded in nbsphinx/_static/nbsphinx-code-cells.css_t aware of the theme */ -:root { - --nbsphinx-table-and-thead-border-color: black; - --nbsphinx-tbody-tr-nth-child-odd-color: #f5f5f5; -} - -body[data-theme='dark'] { - --nbsphinx-table-and-thead-border-color: white; - --nbsphinx-tbody-tr-nth-child-odd-color: #5f5f5f; -} - -@media (prefers-color-scheme: dark) { - body:not([data-theme="light"]) { - --nbsphinx-table-and-thead-border-color: white; - --nbsphinx-tbody-tr-nth-child-odd-color: #5f5f5f; - } -} - -.jp-RenderedHTMLCommon table, -div.rendered_html table { - color: var(--nbsphinx-table-and-thead-border-color); -} - -.jp-RenderedHTMLCommon thead, -div.rendered_html thead { - border-bottom: 1px solid var(--nbsphinx-table-and-thead-border-color); -} - -.jp-RenderedHTMLCommon tbody tr:nth-child(odd), -div.rendered_html tbody tr:nth-child(odd) { - background: var(--nbsphinx-tbody-tr-nth-child-odd-color); -} - -/* Disable copy button in output */ -div.output_area > div > button.copybtn { - display: none; -} diff --git a/doc/conf.py b/doc/conf.py index ded601c9..af06405b 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -13,7 +13,6 @@ # # import os # import sys -from pathlib import Path # sys.path.insert(0, os.path.abspath("../roseau/")) @@ -38,7 +37,6 @@ "sphinx.ext.autodoc", "sphinx.ext.napoleon", "sphinx.ext.intersphinx", - "nbsphinx", "autoapi.extension", "sphinx_copybutton", "sphinx_inline_tabs", @@ -134,16 +132,6 @@ "typing_extensions": ("https://typing-extensions.readthedocs.io/en/stable/", None), } -# -- Options for intersphinx ------------------------------------------------- -nbsphinx_execute = "never" -nbsphinx_prolog = f""" -.. raw:: html - - -""" - # Google Analytics googleanalytics_id = "G-Y9QSN78RFV" diff --git a/doc/notebooks/Advanced.ipynb b/doc/notebooks/Advanced.ipynb deleted file mode 100644 index 9b8e064d..00000000 --- a/doc/notebooks/Advanced.ipynb +++ /dev/null @@ -1,648 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Advanced usages\n", - "\n", - "Make sure you have followed the [getting started guide](Getting_Started.ipynb) first.\n", - "\n", - "Let's create a network with MV and LV elements connected via a transformer." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:25:41.033848322Z", - "start_time": "2023-06-04T15:25:39.300450976Z" - } - }, - "outputs": [], - "source": [ - "import getpass\n", - "\n", - "import numpy as np\n", - "\n", - "from roseau.load_flow import *" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Creation of the network\n", - "\n", - "This network contains a voltage source with a constant balanced voltage of 20 kV (phase-to-phase),\n", - "a Delta-Wye transformer and a small LV network.\n", - "\n", - "![Advanced Network](../_static/Advanced_Tutorial.svg)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:25:47.157546957Z", - "start_time": "2023-06-04T15:25:47.074574935Z" - } - }, - "outputs": [], - "source": [ - "# Create a MV bus with a voltage source\n", - "bus0_mv = Bus(id=\"bus0_mv\", phases=\"abc\")\n", - "un = 20e3 # V\n", - "source_voltages = [un, un * np.exp(-2j * np.pi / 3), un * np.exp(2j * np.pi / 3)]\n", - "vs = VoltageSource(id=\"vs\", bus=bus0_mv, phases=\"abc\", voltages=source_voltages)\n", - "pref_mv = PotentialRef(id=\"pref_mv\", element=bus0_mv) # Set the MV potential reference\n", - "\n", - "# Create a LV bus and connect its neutral to the ground\n", - "bus0_lv = Bus(id=\"bus0_lv\", phases=\"abcn\")\n", - "ground = Ground(id=\"gnd\")\n", - "pref_lv = PotentialRef(id=\"pref_lv\", element=ground) # Set the ground potential to 0V\n", - "ground.connect(bus0_lv) # Connect the ground to the neutral of the LV bus\n", - "\n", - "# Add a MV/LV transformer\n", - "tp = TransformerParameters(\n", - " \"160_kVA\", \"Dyn11\", sn=160.0 * 1e3, uhv=20e3, ulv=400.0, i0=2.3 / 100, p0=460.0, psc=2350.0, vsc=4.0 / 100\n", - ")\n", - "transformer = Transformer(\n", - " id=\"transfo\", bus1=bus0_mv, bus2=bus0_lv, phases1=\"abc\", phases2=\"abcn\", parameters=tp, tap=1.025\n", - ")\n", - "\n", - "# Add the LV network elements\n", - "lp = LineParameters.from_name_lv(\"S_AL_150\")\n", - "bus1 = Bus(id=\"bus1\", phases=\"abcn\")\n", - "bus2 = Bus(id=\"bus2\", phases=\"abcn\")\n", - "load_bus1 = Bus(id=\"load_bus1\", phases=\"abcn\")\n", - "load_bus2 = Bus(id=\"load_bus2\", phases=\"abcn\")\n", - "load_bus3 = Bus(id=\"load_bus3\", phases=\"abcn\")\n", - "line1 = Line(id=\"line1\", bus1=bus0_lv, bus2=bus1, phases=\"abcn\", ground=ground, parameters=lp, length=0.5) # km\n", - "line2 = Line(id=\"line2\", bus1=bus1, bus2=bus2, phases=\"abcn\", ground=ground, parameters=lp, length=0.4)\n", - "line3 = Line(id=\"line3\", bus1=bus1, bus2=load_bus1, phases=\"abcn\", ground=ground, parameters=lp, length=0.3)\n", - "line4 = Line(id=\"line4\", bus1=bus2, bus2=load_bus2, phases=\"abcn\", ground=ground, parameters=lp, length=0.3)\n", - "line5 = Line(id=\"line5\", bus1=load_bus2, bus2=load_bus3, phases=\"abcn\", ground=ground, parameters=lp, length=0.4)\n", - "si = -3e3 # VA, negative as it is production\n", - "load1 = PowerLoad(id=\"load1\", bus=load_bus1, phases=\"abcn\", powers=[si, si, si])\n", - "load2 = PowerLoad(id=\"load2\", bus=load_bus2, phases=\"abcn\", powers=[si, si, si])\n", - "load3 = PowerLoad(id=\"load3\", bus=load_bus3, phases=\"abcn\", powers=[si, 0, 0])\n", - "\n", - "# Create the network\n", - "en = ElectricalNetwork.from_element(bus0_mv)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:25:57.993969161Z", - "start_time": "2023-06-04T15:25:50.238551806Z" - } - }, - "outputs": [], - "source": [ - "# Authentication\n", - "auth = (input(\"Please enter your username:\"), getpass.getpass(\"Please enter your password:\"))" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then, the load flow can be solved and the results can be retrieved." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:26:00.226504464Z", - "start_time": "2023-06-04T15:25:59.677393450Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
Magnitude
[243.66463933130166 232.2061271436693 233.5509312888294]
Unitsvolt
" - ], - "text/latex": [ - "$\\begin{pmatrix} & & \\end{pmatrix}\\ \\mathrm{volt}$" - ], - "text/plain": [ - "array([243.66463933, 232.20612714, 233.55093129]) " - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.solve_load_flow(auth=auth)\n", - "abs(load_bus3.res_voltages)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Usage of the flexible loads\n", - "\n", - "The flexible loads are loads that implement some basic controls such as $P(U)$, $Q(U)$ or $PQ(U)$.\n", - "\n", - "### $P(U)$ control\n", - "\n", - "Let's remove `load3` from the network and add a flexible load as a replacement. A flexible load\n", - "is a normal `PowerLoad` with a `flexible_params` argument that takes a list of`FlexibleParameter`.\n", - "\n", - "We first create a `FlexibleParameter` using its class method `p_max_u_production`. It returns a\n", - "flexible parameter instance that reduces the active production when the voltage is higher than\n", - "`u_up` volts and stops the production when the voltage reaches `u_max`. The `s_max` argument\n", - "defines the maximum allowed apparent power of the production plant. In the example below,\n", - "`u_up=240 V`, `u_max=250 V` and `s_max=4 kVA`.\n", - "\n", - "After that, a flexible load representing a PV plant is created. Its apparent power is fixed at\n", - "`[si, 0, 0]` VA with `si` a negative value (negative because it is production). Theses apparent\n", - "powers define the maximum power this load can produce. The `flexible_params` argument takes a\n", - "list of `FlexibleParameter` instances, one per phase. For the first phase, the $P(U)$ control is\n", - "used. For the two other phases, there is no control at all thus the `constant` class method is\n", - "used.\n", - "\n", - "As a consequence, the provided apparent power for phase `'a'` is the maximum that can be produced\n", - "(potentially modified by the $P(U)$ control) and the provided apparent power for phases `'b'` and\n", - "`'c'` is the desired production as the flexible parameter is defined as `constant`." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:26:04.664969773Z", - "start_time": "2023-06-04T15:26:04.640614689Z" - } - }, - "outputs": [], - "source": [ - "# Let's make the load 3 flexible with a p(u) control to reduce the voltages constraints\n", - "en.loads[\"load3\"].disconnect()\n", - "fp = FlexibleParameter.p_max_u_production(u_up=240, u_max=250, s_max=4000) # V and VA\n", - "flexible_load = PowerLoad(\n", - " id=\"load3\",\n", - " bus=load_bus3,\n", - " phases=\"abcn\",\n", - " powers=[si, 0, 0], # W\n", - " flexible_params=[fp, FlexibleParameter.constant(), FlexibleParameter.constant()],\n", - ")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The load flow can now be run again. You can see that the voltage magnitude has changed. Note that\n", - "the voltage magnitude for phase `'a'` was 240 V above without the $P(U)$ control, thus the control\n", - "has been activated in this run." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:26:07.189134843Z", - "start_time": "2023-06-04T15:26:06.667246422Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
Magnitude
[243.08225748385007 232.46046865587596 233.62854072949668]
Unitsvolt
" - ], - "text/latex": [ - "$\\begin{pmatrix} & & \\end{pmatrix}\\ \\mathrm{volt}$" - ], - "text/plain": [ - "array([243.08225748, 232.46046866, 233.62854073]) " - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.solve_load_flow(auth=auth)\n", - "abs(load_bus3.res_voltages)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The actually produced power of the flexible load is a result of the computation and can be\n", - "accessed using the `res_flexible_powers` property of the load. Here, one can note that:\n", - "\n", - "* The active power for the phase `'a'` is negative meaning production;\n", - "* The actual value of this active power is lower that the one requested as the control was activated;\n", - "* The power for phases `'b'` and `'c'` is 0 VA as expected." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:26:08.852165562Z", - "start_time": "2023-06-04T15:26:08.842546486Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
Magnitude
[-2757.8035271+0.j     0.       +0.j     0.       +0.j]
Unitsvolt_ampere
" - ], - "text/latex": [ - "$\\begin{pmatrix} & & \\end{pmatrix}\\ \\mathrm{volt\\_ampere}$" - ], - "text/plain": [ - "array([-2757.8035271+0.j, 0. +0.j, 0. +0.j]) " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "flexible_load.res_flexible_powers" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### $PQ(U)$ control\n", - "\n", - "Now, let's remove the flexible load that we have added in the previous section and add a new\n", - "flexible load implementing a $PQ(U)$ control instead.\n", - "\n", - "As before, we first create a `FlexibleParameter` but this time, we will use the\n", - "`pq_u_production` class method. It requires several arguments:\n", - "\n", - "* `up_up` and `up_max`: the voltages defining the interval of the `P(U)` control activation.\n", - " Below `up_up`, no control is applied and above `u_max`, the production is totally shut down.\n", - "* `uq_min`, `uq_down`, `uq_up` and `uq_max` which are the voltages defining the `Q(U)` control\n", - " activation.\n", - " * Below `uq_min`, the power plant produces the maximum possible reactive power.\n", - " * Between `uq_down` and `uq_up`, there is no `Q(U)` control.\n", - " * Above `uq_max`, the power plant consumes the maximum possible reactive power.\n", - "\n", - "In the example below, as the new load is a production load, only the `up_up`, `up_max`, `uq_up`\n", - "and `uq_max` are of interests. The $Q(U)$ control starts its action at 235 V and is fully\n", - "exhausted at 240 V. After that, the $P(U)$ is activated and is exhausted at 250 V where the\n", - "production is totally shut down." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:26:11.748616750Z", - "start_time": "2023-06-04T15:26:11.701985284Z" - } - }, - "outputs": [], - "source": [ - "# Let's try with pq(u) control, by injecting reactive power before reducing active power\n", - "en.loads[\"load3\"].disconnect()\n", - "fp = FlexibleParameter.pq_u_production(\n", - " up_up=240, up_max=250, uq_min=200, uq_down=210, uq_up=235, uq_max=240, s_max=4000 # V and VA\n", - ")\n", - "flexible_load = PowerLoad(\n", - " id=\"load3\",\n", - " bus=load_bus3,\n", - " phases=\"abcn\",\n", - " powers=[si, 0, 0],\n", - " flexible_params=[fp, FlexibleParameter.constant(), FlexibleParameter.constant()],\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The load flow can be solved again." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:26:14.445934387Z", - "start_time": "2023-06-04T15:26:13.789043220Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
Magnitude
[239.51332079629023 230.21080520340482 237.59184615484196]
Unitsvolt
" - ], - "text/latex": [ - "$\\begin{pmatrix} & & \\end{pmatrix}\\ \\mathrm{volt}$" - ], - "text/plain": [ - "array([239.5133208 , 230.2108052 , 237.59184615]) " - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.solve_load_flow(auth=auth)\n", - "abs(load_bus3.res_voltages)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "One can note that this time, the phase `'a'` consumes reactive power to limit the voltage rise in\n", - "the network. Moreover, the magnitude of the power on phase `'a'` is approximately $4 kVA$ which is\n", - "the maximum allowed apparent power for `load3`. In order to maintain this maximum, a\n", - "[Euclidean projection][api-projection] has been used.\n", - "\n", - "[api-projection]: https://roseautechnologies.github.io/Roseau_Load_Flow/autoapi/roseau/load_flow/index.html#roseau.load_flow.Projection" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:26:16.350896465Z", - "start_time": "2023-06-04T15:26:16.326483018Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
Magnitude
[-2566.23768012+3068.29336425j     0.           +0.j
0. +0.j ]
Unitsvolt_ampere
" - ], - "text/latex": [ - "$\\begin{pmatrix} & & \\end{pmatrix}\\ \\mathrm{volt\\_ampere}$" - ], - "text/plain": [ - "array([-2566.23768012+3068.29336425j, 0. +0.j ,\n", - " 0. +0.j ]) " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "flexible_load.res_flexible_powers" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:26:17.955855403Z", - "start_time": "2023-06-04T15:26:17.936828707Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
Magnitude
[4000.0 0.0 0.0]
Unitsvolt_ampere
" - ], - "text/latex": [ - "$\\begin{pmatrix} & & \\end{pmatrix}\\ \\mathrm{volt\\_ampere}$" - ], - "text/plain": [ - "array([4000., 0., 0.]) " - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abs(flexible_load.res_flexible_powers)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Adding elements to the network\n", - "\n", - "In the previous section we saw how to replace a simple element in the network such as a load.\n", - "This is done by simply calling the load's `disconnect` method then creating a new load on the\n", - "same bus and with the same ID.\n", - "\n", - "It is possible also to add new elements like buses, lines, etc to an existing network by simply\n", - "creating the elements and linking them to an element already in the network. For example, the\n", - "code below adds a new line and a single-phase constant power load connected to a new bus." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:26:20.196349137Z", - "start_time": "2023-06-04T15:26:20.106259569Z" - } - }, - "outputs": [], - "source": [ - "# Connect a new bus to the network\n", - "new_bus = Bus(id=\"new_bus\", phases=\"abcn\")\n", - "new_load = PowerLoad(id=\"new_load\", bus=new_bus, phases=\"an\", powers=[6e3])\n", - "lp_s_al_240 = LineParameters.from_name_lv(\"S_AL_240\")\n", - "new_line = Line(\n", - " id=\"new_line\",\n", - " bus1=bus2,\n", - " bus2=new_bus,\n", - " phases=\"abcn\",\n", - " ground=ground,\n", - " parameters=lp_s_al_240,\n", - " length=0.5,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you look at the network elements, you can see the new bus, line and load are added." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:26:21.934877733Z", - "start_time": "2023-06-04T15:26:21.895852299Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Bus(id='new_bus', phases='abcn')" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.buses[\"new_bus\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:26:23.228212959Z", - "start_time": "2023-06-04T15:26:23.210196445Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "PowerLoad(id='new_load', phases='an', bus='new_bus')" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.loads[\"new_load\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:26:24.282002290Z", - "start_time": "2023-06-04T15:26:24.230930205Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Line(id='new_line', phases1='abcn', phases2='abcn', bus1='bus2', bus2='new_bus')" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.branches[\"new_line\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And now if you run the load flow, you can see that the new elements are taken into account." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:26:26.441462980Z", - "start_time": "2023-06-04T15:26:25.887843676Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
Magnitude
[227.43645429483067]
Unitsvolt
" - ], - "text/latex": [ - "$\\begin{pmatrix}\\end{pmatrix}\\ \\mathrm{volt}$" - ], - "text/plain": [ - "array([227.43645429]) " - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.solve_load_flow(auth=auth)\n", - "abs(new_load.res_voltages)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.9" - }, - "vscode": { - "interpreter": { - "hash": "99cbd331128cf218793744ba240286bb402c67078e32af81afdf76a86262575b" - } - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} diff --git a/doc/notebooks/Getting_Started.ipynb b/doc/notebooks/Getting_Started.ipynb deleted file mode 100644 index 4862ebb5..00000000 --- a/doc/notebooks/Getting_Started.ipynb +++ /dev/null @@ -1,1638 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Getting started\n", - "\n", - "*Make sure you have followed the* [installation instructions](../Installation.md).\n", - "\n", - "In this tutorial you will learn how to:\n", - "\n", - "1. Create a simple electrical network with one source and one load;\n", - "2. Run a load flow simulation;\n", - "3. Get the results of the load flow;\n", - "4. Update the elements of the network;\n", - "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." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:20:06.257971401Z", - "start_time": "2023-06-04T15:20:04.269823916Z" - } - }, - "outputs": [], - "source": [ - "import getpass\n", - "\n", - "import numpy as np\n", - "\n", - "from roseau.load_flow import *" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Creating a network\n", - "\n", - "An electrical network can be built by assembling basic elements provided in\n", - "[roseau.load_flow.models][api-models]. The following is a summary of the available elements:\n", - "\n", - "* Buses:\n", - " * `Bus`: An electrical bus.\n", - "\n", - "* Branches:\n", - " * `Line`: A line connects two buses. The parameters of the line are defined by a `LineParameters` object.\n", - " * `LineParameters`: This object defines the parameters of a line (model, impedance, etc.)\n", - " * `Switch`: A basic switch element.\n", - " * `Transformer`: A generic transformer. The parameters of the transformer are defined by a `TransformerParameters` object.\n", - " * `TransformerParameters`: This object defines the parameters of a transformer (model, windings, etc.)\n", - "* Loads:\n", - " The ZIP load model is available via the following classes:\n", - " * `ImpedanceLoad`: A constant impedance (Z) load: $S = |V|^2 \\times \\overline{Z}$, $|S|$ is proportional to $|V|^2$.\n", - " * `CurrentLoad` A constant impedance (I) load: $S = V \\times \\overline{I}$, $|S|$ is proportional to $|V|^1$.\n", - " * `PowerLoad`: A constant power (P) load: $S = \\mathrm{constant}$, $|S|$ is proportional to $|V|^0$.\n", - "\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", - " * `Ground`: A ground acts as a perfect conductor. If two elements are connected to the ground, the potentials at the connection points are always equal.\n", - " * `PotentialRef`: A potential reference sets the reference of potentials in the network. It can be connected to buses or grounds.\n", - "\n", - "For a more detailed description of the elements, please refer to the [API reference][api-models].\n", - "\n", - "Let's use some of these elements to build the following network with a voltage source, a simple\n", - "line and a constant power load. This network is a low voltage network (three-phase + neutral wire).\n", - "\n", - "![Network](../_static/Getting_Started_Tutorial.svg)\n", - "\n", - "[api-models]: ../autoapi/roseau/load_flow/models/index.html\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:20:26.270991387Z", - "start_time": "2023-06-04T15:20:26.258903978Z" - } - }, - "outputs": [], - "source": [ - "# Create two buses\n", - "source_bus = Bus(id=\"sb\", phases=\"abcn\")\n", - "load_bus = Bus(id=\"lb\", phases=\"abcn\")\n", - "\n", - "# Define the reference of potentials to be the neutral of the source bus\n", - "ground = Ground(id=\"gnd\")\n", - "pref = PotentialRef(id=\"pref\", element=ground) # Fix the potential of the ground at 0 V\n", - "ground.connect(source_bus, phase=\"n\")\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", - "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", - "# Add a load at the second bus\n", - "load = PowerLoad(id=\"load\", bus=load_bus, phases=\"abcn\", powers=[10e3 + 0j, 10e3, 10e3]) # VA\n", - "\n", - "# Add a LV line between the source bus and the load bus\n", - "lp = LineParameters(\"lp\", z_line=(0.1 + 0.0j) * np.eye(4, dtype=complex)) # R = 0.1 Ohm/km, X = 0\n", - "line = Line(id=\"line\", bus1=source_bus, bus2=load_bus, phases=\"abcn\", parameters=lp, length=2.0)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "At this point, all the basic elements of the network have been defined and connected. Now,\n", - "everything can be encapsulated in an `ElectricalNetwork` object, but first, some important\n", - "notes on the `Ground` and `PotentialRef` elements:\n", - "\n", - "
\n", - "\n", - "**Important:**\n", - "\n", - "The `Ground` element does not have a fixed potential as one would expect from a real ground\n", - "connection. The potential reference (0 Volts) is defined by the `PotentialRef` element that\n", - "itself can be connected to any bus or ground in the network. This is to give more flexibility\n", - "for the user to define the potential reference of their network.\n", - "\n", - "A `PotentialRef` defines the potential reference for the network. It is a mandatory reference\n", - "for the load flow resolution to be well defined. A network MUST have one and only one potential\n", - "reference per a galvanically isolated section.\n", - "
\n", - "\n", - "
\n", - "\n", - "**Note:**\n", - "\n", - "The `Ground` element is not required in this simple network as it is connected to a single\n", - "element. No current will flow through the ground and no two points in the network will be forced\n", - "to have the same potential. In this scenario you are allowed to define the potential reference\n", - "directly on the bus element: `pref = PotentialRef(id=\"pref\", element=source_bus, phase=\"n\")` and\n", - "not bother with creating the ground element at all.\n", - "
\n", - "\n", - "An `ElectricalNetwork` object can now be created using the `from_element` constructor. The source\n", - "bus `source_bus` is given to this constructor. All the elements connected to this bus are\n", - "automatically included into the network." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:20:54.005100948Z", - "start_time": "2023-06-04T15:20:53.949886888Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Create the electrical network\n", - "en = ElectricalNetwork.from_element(source_bus)\n", - "en" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Solving a load flow\n", - "\n", - "An authentication is required. Please contact us at contact@roseautechnologies.com to get the necessary credentials.\n", - "\n", - "
\n", - "\n", - "**Warning:**\n", - "\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" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:21:06.223037298Z", - "start_time": "2023-06-04T15:20:58.566756395Z" - } - }, - "outputs": [], - "source": [ - "# Authentication\n", - "auth = (input(\"Please enter your username:\"), getpass.getpass(\"Please enter your password:\"))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then, the load flow can be solved by requesting our server (requires Internet access).\n", - "\n", - "
\n", - "\n", - "**Note:**\n", - "\n", - "The server takes some time to warm up the first time it is requested. Subsequent requests will\n", - "execute faster.\n", - "
\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:21:12.833165541Z", - "start_time": "2023-06-04T15:21:10.556895359Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Solve the load flow\n", - "en.solve_load_flow(auth=auth)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It returns the number of iterations performed by the *Newton-Raphson* solver. Here, 2. To have some additional results\n", - "regarding the convergence, the field `res_info` is available in the network." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:21:29.344376674Z", - "start_time": "2023-06-04T15:21:29.315606636Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'solver': 'newton_goldstein',\n", - " 'solver_params': {'m1': 0.1, 'm2': 0.9},\n", - " 'tolerance': 1e-06,\n", - " 'max_iterations': 20,\n", - " 'warm_start': True,\n", - " 'status': 'success',\n", - " 'iterations': 2,\n", - " 'residual': 1.8595619621919468e-07}" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.res_info" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The available values are:\n", - "\n", - "* `solver`: it can be `\"newton\"` for the *Newton* solver or `\"newton_goldstein\"` for the *Newton* solver using the\n", - "*Goldstein and Price* linear search;\n", - "* `solver_params`: the parameters used by the solver;\n", - "* `tolerance`: the requested tolerance for the solver. $10^{-6}$ is the default;\n", - "* `max_iterations`: the requested maximum number of iterations for the solver. 20 is the default;\n", - "* `warm_start`: if `True`, the results (potentials of each bus) from the last valid run are used\n", - " as a starting point for the solver. For large networks, using a warm start can lead to performance gains as the\n", - " solver will converge faster. `True` is the default;\n", - "* `status`: the convergence of the load flow. Two possibilities: *success* or *failure*;\n", - "* `iterations`: the number of iterations made by the solver.\n", - "* `residual`: the precision which was reached by the solver (lower than the tolerance if successful solve)." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Getting the results\n", - "\n", - "The results are now available for every element of the network. Results can be accessed through\n", - "special properties prefixed with `res_` on each element object. For instance, the potentials\n", - "of the `load_bus` can be accessed using the property `load_bus.res_potentials`. It contains 4\n", - "values which are the potentials of its phases `a`, `b`, `c` and `n` (neutral). The potentials\n", - "are returned as complex numbers. Calling `abs(load_bus.res_potentials)` gives you the magnitude\n", - "of the load's potentials (in Volts) and `np.angle(load_bus.res_potentials)` gives their angle\n", - "(phase shift) in radians.\n", - "\n", - "
\n", - "\n", - "**Note:**\n", - "\n", - "Roseau Load Flow uses the [Pint](https://pint.readthedocs.io/en/stable/) `Quantity` objects to\n", - "present the data in unit-agnostic way for the user. All input data (load powers, source voltages,\n", - "etc.) are expected to be either given in SI units or using the pint Quantity interface for non-SI\n", - "units (example below). The `length` parameter of the `Line` class is an exception where the\n", - "default unit is Kilometers.\n", - "\n", - "Example, create a load with powers expressed in kVA:\n", - "```python\n", - "from roseau.load_flow import Q_\n", - "\n", - "load = PowerLoad(id=\"load\", bus=load_bus, phases=\"abcn\", powers=Q_([10, 10, 10], \"kVA\"))\n", - "```\n", - "
\n", - "\n", - "The results returned by the `res_` properties are also `Quantity` objects.\n", - "\n", - "### Available results\n", - "\n", - "The available results depend on the type of element. The following table summarizes the available\n", - "results for each element type:\n", - "\n", - "| Element type | Available results |\n", - "|--------------|-------------------|\n", - "| `Bus` | `res_potentials`, `res_voltages` |\n", - "| `Line` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages`, `res_series_power_losses`, `res_shunt_power_losses`, `res_power_losses` |\n", - "| `Transformer`, `Switch` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages` |\n", - "| `ImpedanceLoad`, `CurrentLoad`, `PowerLoad` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages`, `res_flexible_powers`[^**] |\n", - "| `VoltageSource` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages` |\n", - "| `Ground` | `res_potential` |\n", - "| `PotentialRef` | `res_current` *(Always zero for a successful load flow)* |\n", - "\n", - "[^**]: `res_flexible_powers` is only available for flexible loads (`PowerLoad`s with\n", - "`flexible_params`). You'll see an example on the usage of flexible loads in the *Advanced Usages*\n", - "section.\n", - "\n", - "\n", - "### Getting results per object\n", - "\n", - "In order to get the potentials or voltages of a bus, use the `res_potentials` or `res_voltages`\n", - "properties of buses as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:22:20.683888618Z", - "start_time": "2023-06-04T15:22:20.626071159Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
Magnitude
[ 2.21928183e+02-2.59992221e-18j -1.10964092e+02-1.92195445e+02j
-1.10964092e+02+1.92195445e+02j 2.65787708e-15-6.66257154e-17j]
Unitsvolt
" - ], - "text/latex": [ - "$\\begin{pmatrix} & & & \\end{pmatrix}\\ \\mathrm{volt}$" - ], - "text/plain": [ - "array([ 2.21928183e+02-2.59992221e-18j, -1.10964092e+02-1.92195445e+02j,\n", - " -1.10964092e+02+1.92195445e+02j, 2.65787708e-15-6.66257154e-17j]) " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "load_bus.res_potentials" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As the results are *pint quantities*, they can be converted to different units. Here, the magnitudes\n", - "of the voltages of the same bus are displayed in kilovolts." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:22:28.802015913Z", - "start_time": "2023-06-04T15:22:28.757212974Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
Magnitude
[0.221928183361166 0.22192818336116596 0.22192818336116596]
Unitskilovolt
" - ], - "text/latex": [ - "$\\begin{pmatrix} & & \\end{pmatrix}\\ \\mathrm{kilovolt}$" - ], - "text/plain": [ - "array([0.22192818, 0.22192818, 0.22192818]) " - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "abs(load_bus.res_voltages).to(\"kV\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "\n", - "**Important:**\n", - "\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", - "`phases` attribute) are the **phase-to-phase** voltages. This is true for *input* voltages, such\n", - "as the `voltages` parameter to a `VoltageSource`, as well as for the results such as the `res_voltages` property of a `Bus`.\n", - "\n", - "
\n", - "\n", - "The currents of the line are available using the `res_currents` property of the `line` object.\n", - "It contains two arrays:\n", - "\n", - "* the first is the current flowing from the first bus of the line to the second bus of the line.\n", - " It contains 4 values: one per phase and the neutral current.\n", - "* the second is the current flowing from the second bus of the line to the first bus of the line.\n", - "\n", - "Here, the sum of these currents is 0 as we have chosen a simple line model, i.e, a line with only\n", - "series impedance elements without shunt components. If shunt components were modelled, the sum\n", - "would have been non-zero." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:22:33.594442628Z", - "start_time": "2023-06-04T15:22:33.556836534Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([ 4.50596216e+01+1.29996111e-17j, -2.25298108e+01-3.90227770e+01j,\n", - " -2.25298108e+01+3.90227770e+01j, -1.32893854e-14+3.33128577e-16j]) ,\n", - " array([-4.50596216e+01-1.29996111e-17j, 2.25298108e+01+3.90227770e+01j,\n", - " 2.25298108e+01-3.90227770e+01j, 1.32893854e-14-3.33128577e-16j]) )" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "line.res_currents" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Dataframe network results\n", - "\n", - "The results can also be retrieved for the entire network using `res_` properties of the\n", - "`ElectricalNetwork` instance as [pandas DataFrames](https://pandas.pydata.org/docs/).\n", - "\n", - "Available results for the network are:\n", - "\n", - "* `res_buses`: Buses potentials indexed by *(bus id, phase)*\n", - "* `res_buses_voltages`: Buses voltages indexed by *(bus id, voltage phase)*\n", - "* `res_branches`: Branches currents, powers, and potentials indexed by *(branch id, phase)*\n", - "* `res_lines`: Lines currents, powers, potentials, series losses, series currents indexed by *(line id, phase)*\n", - "* `res_loads`: Loads currents, powers, and potentials indexed by *(load id, phase)*\n", - "* `res_loads_voltages`: Loads voltages indexed by *(load id, voltage phase)*\n", - "* `res_loads_flexible_powers`: Loads flexible powers (only for flexible loads) indexed by\n", - " *(load id, phase)*\n", - "* `res_sources`: Sources currents, powers, and potentials indexed by *(source id, phase)*\n", - "* `res_grounds`: Grounds potentials indexed by *ground id*\n", - "* `res_potential_refs`: Potential references currents indexed by *potential ref id* (always zero\n", - " for a successful load flow)\n", - "\n", - "All the results are complex numbers. You can always access the magnitude of the results using\n", - "the `abs` function and the angle in radians using the `np.angle` function. For instance,\n", - "`abs(network.res_loads)` gives you the magnitude of the loads' results in SI units.\n", - "\n", - "Below are the results of the load flow for `en`:" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:22:37.590905667Z", - "start_time": "2023-06-04T15:22:37.532431012Z" - } - }, - "outputs": [ - { - "data": { - "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", - "
potential
bus_idphase
sba2.309401e+02+0.000000e+00j
b-1.154701e+02-2.000000e+02j
c-1.154701e+02+2.000000e+02j
n0.000000e+00+0.000000e+00j
lba2.219282e+02-2.599922e-18j
b-1.109641e+02-1.921954e+02j
c-1.109641e+02+1.921954e+02j
n2.657877e-15-6.662572e-17j
\n", - "
" - ], - "text/plain": [ - " potential\n", - "bus_id phase \n", - "sb a 2.309401e+02+0.000000e+00j\n", - " b -1.154701e+02-2.000000e+02j\n", - " c -1.154701e+02+2.000000e+02j\n", - " n 0.000000e+00+0.000000e+00j\n", - "lb a 2.219282e+02-2.599922e-18j\n", - " b -1.109641e+02-1.921954e+02j\n", - " c -1.109641e+02+1.921954e+02j\n", - " n 2.657877e-15-6.662572e-17j" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.res_buses" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:22:40.355808214Z", - "start_time": "2023-06-04T15:22:40.344651075Z" - } - }, - "outputs": [ - { - "data": { - "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", - "
voltage
bus_idphase
sban230.9401008+0.0000000j
bn-115.470054-200.000000j
cn-115.470054+200.000000j
lban221.9281803+0.0000000j
bn-110.964092-192.195445j
cn-110.964092+192.195445j
\n", - "
" - ], - "text/plain": [ - " voltage\n", - "bus_id phase \n", - "sb an 230.9401008+0.0000000j\n", - " bn -115.470054-200.000000j\n", - " cn -115.470054+200.000000j\n", - "lb an 221.9281803+0.0000000j\n", - " bn -110.964092-192.195445j\n", - " cn -110.964092+192.195445j" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.res_buses_voltages" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:22:42.485553108Z", - "start_time": "2023-06-04T15:22:42.479966858Z" - } - }, - "outputs": [ - { - "data": { - "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", - "
current1current2power1power2potential1potential2
branch_idphase
linea4.505962e+01+1.299961e-17j-4.505962e+01-1.299961e-17j10406.073858-0.000000j-1.000000e+04+3.002132e-15j230.9401008+0.0000000j2.219282e+02-2.599922e-18j
b-2.252981e+01-3.902278e+01j2.252981e+01+3.902278e+01j10406.073858+0.000000j-1.000000e+04-4.118724e-12j-115.470054-200.000000j-1.109641e+02-1.921954e+02j
c-2.252981e+01+3.902278e+01j2.252981e+01-3.902278e+01j10406.073858-0.000000j-1.000000e+04+4.118724e-12j-115.470054+200.000000j-1.109641e+02+1.921954e+02j
n-1.328939e-14+3.331286e-16j1.328939e-14-3.331286e-16j0.00000000+0.00000000j3.534375e-29+8.199138e-47j0.00000000+0.00000000j2.657877e-15-6.662572e-17j
\n", - "
" - ], - "text/plain": [ - " current1 current2 \\\n", - "branch_id phase \n", - "line a 4.505962e+01+1.299961e-17j -4.505962e+01-1.299961e-17j \n", - " b -2.252981e+01-3.902278e+01j 2.252981e+01+3.902278e+01j \n", - " c -2.252981e+01+3.902278e+01j 2.252981e+01-3.902278e+01j \n", - " n -1.328939e-14+3.331286e-16j 1.328939e-14-3.331286e-16j \n", - "\n", - " power1 power2 \\\n", - "branch_id phase \n", - "line a 10406.073858-0.000000j -1.000000e+04+3.002132e-15j \n", - " b 10406.073858+0.000000j -1.000000e+04-4.118724e-12j \n", - " c 10406.073858-0.000000j -1.000000e+04+4.118724e-12j \n", - " n 0.00000000+0.00000000j 3.534375e-29+8.199138e-47j \n", - "\n", - " potential1 potential2 \n", - "branch_id phase \n", - "line a 230.9401008+0.0000000j 2.219282e+02-2.599922e-18j \n", - " b -115.470054-200.000000j -1.109641e+02-1.921954e+02j \n", - " c -115.470054+200.000000j -1.109641e+02+1.921954e+02j \n", - " n 0.00000000+0.00000000j 2.657877e-15-6.662572e-17j " - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.res_branches" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:22:44.238680831Z", - "start_time": "2023-06-04T15:22:44.216829208Z" - } - }, - "outputs": [ - { - "data": { - "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", - "
current1current2power1power2potential1potential2series_lossesseries_current
line_idphase
linea4.505962e+01+1.299961e-17j-4.505962e+01-1.299961e-17j10406.073858-0.000000j-1.000000e+04+3.002132e-15j230.9401008+0.0000000j2.219282e+02-2.599922e-18j4.060739e+02-3.046946e-33j4.505962e+01+1.299961e-17j
b-2.252981e+01-3.902278e+01j2.252981e+01+3.902278e+01j10406.073858+0.000000j-1.000000e+04-4.118724e-12j-115.470054-200.000000j-1.109641e+02-1.921954e+02j4.060739e+02-8.298221e-15j-2.252981e+01-3.902278e+01j
c-2.252981e+01+3.902278e+01j2.252981e+01-3.902278e+01j10406.073858-0.000000j-1.000000e+04+4.118724e-12j-115.470054+200.000000j-1.109641e+02+1.921954e+02j4.060739e+02+8.298221e-15j-2.252981e+01+3.902278e+01j
n-1.328939e-14+3.331286e-16j1.328939e-14-3.331286e-16j0.00000000-0.00000000j3.534375e-29+8.199138e-47j0.00000000+0.00000000j2.657877e-15-6.662572e-17j3.534375e-29+8.199138e-47j-1.328939e-14+3.331286e-16j
\n", - "
" - ], - "text/plain": [ - " current1 current2 \\\n", - "line_id phase \n", - "line a 4.505962e+01+1.299961e-17j -4.505962e+01-1.299961e-17j \n", - " b -2.252981e+01-3.902278e+01j 2.252981e+01+3.902278e+01j \n", - " c -2.252981e+01+3.902278e+01j 2.252981e+01-3.902278e+01j \n", - " n -1.328939e-14+3.331286e-16j 1.328939e-14-3.331286e-16j \n", - "\n", - " power1 power2 \\\n", - "line_id phase \n", - "line a 10406.073858-0.000000j -1.000000e+04+3.002132e-15j \n", - " b 10406.073858+0.000000j -1.000000e+04-4.118724e-12j \n", - " c 10406.073858-0.000000j -1.000000e+04+4.118724e-12j \n", - " n 0.00000000-0.00000000j 3.534375e-29+8.199138e-47j \n", - "\n", - " potential1 potential2 \\\n", - "line_id phase \n", - "line a 230.9401008+0.0000000j 2.219282e+02-2.599922e-18j \n", - " b -115.470054-200.000000j -1.109641e+02-1.921954e+02j \n", - " c -115.470054+200.000000j -1.109641e+02+1.921954e+02j \n", - " n 0.00000000+0.00000000j 2.657877e-15-6.662572e-17j \n", - "\n", - " series_losses series_current \n", - "line_id phase \n", - "line a 4.060739e+02-3.046946e-33j 4.505962e+01+1.299961e-17j \n", - " b 4.060739e+02-8.298221e-15j -2.252981e+01-3.902278e+01j \n", - " c 4.060739e+02+8.298221e-15j -2.252981e+01+3.902278e+01j \n", - " n 3.534375e-29+8.199138e-47j -1.328939e-14+3.331286e-16j " - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.res_lines" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:22:45.955996362Z", - "start_time": "2023-06-04T15:22:45.918937164Z" - } - }, - "outputs": [ - { - "data": { - "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", - "
currentpowerpotential
load_idphase
loada4.505962e+01+1.299960e-17j1.000000e+04-3.002130e-15j2.219282e+02-2.599922e-18j
b-2.252981e+01-3.902278e+01j1.000000e+04-4.890505e-13j-1.109641e+02-1.921954e+02j
c-2.252981e+01+3.902278e+01j1.000000e+04+4.890505e-13j-1.109641e+02+1.921954e+02j
n-2.131628e-14+0.000000e+00j-5.665606e-29+1.420213e-30j2.657877e-15-6.662572e-17j
\n", - "
" - ], - "text/plain": [ - " current power \\\n", - "load_id phase \n", - "load a 4.505962e+01+1.299960e-17j 1.000000e+04-3.002130e-15j \n", - " b -2.252981e+01-3.902278e+01j 1.000000e+04-4.890505e-13j \n", - " c -2.252981e+01+3.902278e+01j 1.000000e+04+4.890505e-13j \n", - " n -2.131628e-14+0.000000e+00j -5.665606e-29+1.420213e-30j \n", - "\n", - " potential \n", - "load_id phase \n", - "load a 2.219282e+02-2.599922e-18j \n", - " b -1.109641e+02-1.921954e+02j \n", - " c -1.109641e+02+1.921954e+02j \n", - " n 2.657877e-15-6.662572e-17j " - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.res_loads" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:22:47.649900821Z", - "start_time": "2023-06-04T15:22:47.636316468Z" - } - }, - "outputs": [ - { - "data": { - "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", - "
voltage
load_idphase
loadan221.9281803+0.0000000j
bn-110.964092-192.195445j
cn-110.964092+192.195445j
\n", - "
" - ], - "text/plain": [ - " voltage\n", - "load_id phase \n", - "load an 221.9281803+0.0000000j\n", - " bn -110.964092-192.195445j\n", - " cn -110.964092+192.195445j" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.res_loads_voltages" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:22:49.287285855Z", - "start_time": "2023-06-04T15:22:49.259569111Z" - } - }, - "outputs": [ - { - "data": { - "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", - "
currentpowerpotential
source_idphase
vsa-4.505962e+01-1.387779e-17j-10406.073858+0.000000j230.9401008+0.0000000j
b2.252981e+01+3.902278e+01j-10406.073858-0.000000j-115.470054-200.000000j
c2.252981e+01-3.902278e+01j-10406.073858+0.000000j-115.470054+200.000000j
n1.179612e-14+1.993850e-17j0.00000000+0.00000000j0.00000000+0.00000000j
\n", - "
" - ], - "text/plain": [ - " current power \\\n", - "source_id phase \n", - "vs a -4.505962e+01-1.387779e-17j -10406.073858+0.000000j \n", - " b 2.252981e+01+3.902278e+01j -10406.073858-0.000000j \n", - " c 2.252981e+01-3.902278e+01j -10406.073858+0.000000j \n", - " n 1.179612e-14+1.993850e-17j 0.00000000+0.00000000j \n", - "\n", - " potential \n", - "source_id phase \n", - "vs a 230.9401008+0.0000000j \n", - " b -115.470054-200.000000j \n", - " c -115.470054+200.000000j \n", - " n 0.00000000+0.00000000j " - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.res_sources" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:22:51.143839304Z", - "start_time": "2023-06-04T15:22:51.124189697Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
potential
ground_id
gnd0.0+0.0j
\n", - "
" - ], - "text/plain": [ - " potential\n", - "ground_id \n", - "gnd 0.0+0.0j" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.res_grounds" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:22:52.847139819Z", - "start_time": "2023-06-04T15:22:52.830495361Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
current
potential_ref_id
pref-1.493266e-15+3.530671e-16j
\n", - "
" - ], - "text/plain": [ - " current\n", - "potential_ref_id \n", - "pref -1.493266e-15+3.530671e-16j" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.res_potential_refs" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Using the `transform` method of data frames, the results can easily be converted from complex values\n", - "to magnitude and angle values." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:22:54.977788264Z", - "start_time": "2023-06-04T15:22:54.952159431Z" - } - }, - "outputs": [ - { - "data": { - "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", - "
voltage
absoluteangle
bus_idphase
sban230.9401080.000000e+00
bn230.940108-2.094395e+00
cn230.9401082.094395e+00
lban221.9281832.884978e-19
bn221.928183-2.094395e+00
cn221.9281832.094395e+00
\n", - "
" - ], - "text/plain": [ - " voltage \n", - " absolute angle\n", - "bus_id phase \n", - "sb an 230.940108 0.000000e+00\n", - " bn 230.940108 -2.094395e+00\n", - " cn 230.940108 2.094395e+00\n", - "lb an 221.928183 2.884978e-19\n", - " bn 221.928183 -2.094395e+00\n", - " cn 221.928183 2.094395e+00" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "en.res_buses_voltages.transform([np.abs, np.angle])" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Updating elements of the network\n", - "\n", - "Network elements can be updated. Here, the load's power values are changed to create an\n", - "unbalanced situation." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-04T15:22:59.724819640Z", - "start_time": "2023-06-04T15:22:57.874498137Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
Magnitude
[ 216.02252269-2.44097855e-29j -115.47005384-2.00000000e+02j
-115.47005384+2.00000000e+02j 14.91758499+2.44097855e-29j]
Unitsvolt
" - ], - "text/latex": [ - "$\\begin{pmatrix} & & & \\end{pmatrix}\\ \\mathrm{volt}$" - ], - "text/plain": [ - "array([ 216.02252269-2.44097855e-29j, -115.47005384-2.00000000e+02j,\n", - " -115.47005384+2.00000000e+02j, 14.91758499+2.44097855e-29j]) " - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Change the load to an unbalanced one then rerun the load flow\n", - "load.powers = Q_([15, 0, 0], \"kVA\")\n", - "en.solve_load_flow(auth=auth)\n", - "load_bus.res_potentials" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "One can notice that the neutral's potential of the bus is no longer close to 0 V.\n", - "\n", - "## Saving the network to a file\n", - "\n", - "The network can be saved to a JSON file using the `en.to_json` method. Note that this method\n", - "does not save the results of the load flow. It only saves the network elements.\n", - "\n", - "To save the results of the load flow, use the `en.results_to_json` method.\n", - "\n", - "```python\n", - "en.to_json(\"my_network.json\")\n", - "en.results_to_json(\"my_network_results.json\")\n", - "```\n", - "\n", - "
\n", - "\n", - "**Warning:**\n", - "\n", - "The `to_json` and `results_to_json` methods will overwrite the file if it already exists.\n", - "
\n", - "\n", - "## Loading a network from a file\n", - "\n", - "A saved network can be loaded using the `ElectricalNetwork.from_json` method. The results of\n", - "the load flow can then be loaded using the `ElectricalNetwork.results_from_json` method.\n", - "\n", - "```python\n", - "en = ElectricalNetwork.from_json(\"my_network.json\")\n", - "en.results_from_json(\"my_network_results.json\")\n", - "```" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.4" - }, - "vscode": { - "interpreter": { - "hash": "99cbd331128cf218793744ba240286bb402c67078e32af81afdf76a86262575b" - } - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} diff --git a/doc/notebooks/Short_Circuit.ipynb b/doc/notebooks/Short_Circuit.ipynb deleted file mode 100644 index 92eb5d00..00000000 --- a/doc/notebooks/Short_Circuit.ipynb +++ /dev/null @@ -1,323 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "# Short-Circuit\n", - "\n", - "Let's see how we can make a short-circuit calculation." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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", - "\n", - "import numpy as np\n", - "\n", - "from roseau.load_flow import *" - ] - }, - { - "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", - "\n", - "
\n", - "\n", - "**Note:**\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", - "
" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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", - "source_bus = Bus(id=\"sb\", phases=\"abcn\")\n", - "bus1 = Bus(id=\"b1\", phases=\"abcn\")\n", - "bus2 = Bus(id=\"b2\", phases=\"abcn\")\n", - "\n", - "# Define the reference of potentials\n", - "ground = Ground(id=\"gnd\")\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)\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", - "# Add LV lines\n", - "lp1 = LineParameters.from_name_lv(\"S_AL_240\")\n", - "line1 = Line(id=\"line1\", bus1=source_bus, bus2=bus1, parameters=lp1, length=1.0, ground=ground)\n", - "lp2 = LineParameters.from_name_lv(\"S_AL_150\")\n", - "line2 = Line(id=\"line2\", bus1=bus1, bus2=bus2, parameters=lp2, length=2.0, ground=ground)\n", - "\n", - "# Create network\n", - "en = ElectricalNetwork.from_element(source_bus)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "## Phase-to-phase\n", - "\n", - "We can now add a short-circuit. Let's first create a phase-to-phase short-circuit:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-09T09:38:08.084249736Z", - "start_time": "2023-06-09T09:38:08.065034794Z" - }, - "collapsed": false - }, - "outputs": [], - "source": [ - "bus2.add_short_circuit(\"a\", \"b\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Let's run the load flow, and get the current results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "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": null, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-09T09:38:25.046565516Z", - "start_time": "2023-06-09T09:38:25.001491534Z" - }, - "collapsed": false - }, - "outputs": [], - "source": [ - "en.solve_load_flow(auth=auth)\n", - "en.res_branches" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "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", - "* 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": null, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-09T09:38:47.669356250Z", - "start_time": "2023-06-09T09:38:47.628914940Z" - }, - "collapsed": false - }, - "outputs": [], - "source": [ - "bus2.clear_short_circuits()\n", - "bus2.add_short_circuit(\"a\", \"b\", \"c\")\n", - "en.solve_load_flow(auth=auth)\n", - "en.res_branches" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "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": null, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-09T13:15:05.411101257Z", - "start_time": "2023-06-09T13:15:05.383349808Z" - }, - "collapsed": false - }, - "outputs": [], - "source": [ - "bus2.clear_short_circuits()\n", - "bus2.add_short_circuit(\"a\", ground=ground) # ground MUST be passed as a keyword argument\n", - "en.solve_load_flow(auth=auth)\n", - "en.res_branches" - ] - }, - { - "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." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-09T13:15:14.199462325Z", - "start_time": "2023-06-09T13:15:14.101886478Z" - }, - "collapsed": false - }, - "outputs": [], - "source": [ - "try:\n", - " load = PowerLoad(\"load\", bus=bus2, powers=[10, 10, 10])\n", - "except RoseauLoadFlowException as e:\n", - " print(e)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "ExecuteTime": { - "end_time": "2023-06-09T13:15:16.667926670Z", - "start_time": "2023-06-09T13:15:16.600860501Z" - }, - "collapsed": false - }, - "outputs": [], - "source": [ - "try:\n", - " bus2.add_short_circuit(\"a\")\n", - "except RoseauLoadFlowException as e:\n", - " print(e)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.4" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/doc/notebooks/data b/doc/notebooks/data deleted file mode 120000 index b8fb52e7..00000000 --- a/doc/notebooks/data +++ /dev/null @@ -1 +0,0 @@ -../../data/ \ No newline at end of file diff --git a/doc/notebooks/index.md b/doc/notebooks/index.md deleted file mode 100644 index 4803d8a4..00000000 --- a/doc/notebooks/index.md +++ /dev/null @@ -1,13 +0,0 @@ -# Tutorials - -The following tutorials are available to help you get started: - -```{toctree} ---- -maxdepth: 2 -caption: Tutorials ---- -Getting_Started -Advanced -Short_Circuit -``` diff --git a/doc/usage/Short_Circuit.md b/doc/usage/Short_Circuit.md index 4773a5ce..2320d66a 100644 --- a/doc/usage/Short_Circuit.md +++ b/doc/usage/Short_Circuit.md @@ -57,7 +57,7 @@ All the following tables are rounded to 2 decimals to be properly displayed. ``` ```pycon ->>> auth=("username", "password") +>>> auth = ("username", "password") >>> en.solve_load_flow(auth=auth) 1 >>> en.res_branches diff --git a/poetry.lock b/poetry.lock index 8b881059..6741d5fa 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,31 +1,5 @@ # This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. -[[package]] -name = "aiofiles" -version = "22.1.0" -description = "File support for asyncio." -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "aiofiles-22.1.0-py3-none-any.whl", hash = "sha256:1142fa8e80dbae46bb6339573ad4c8c0841358f79c6eb50a493dceca14621bad"}, - {file = "aiofiles-22.1.0.tar.gz", hash = "sha256:9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6"}, -] - -[[package]] -name = "aiosqlite" -version = "0.19.0" -description = "asyncio bridge to the standard sqlite3 module" -optional = false -python-versions = ">=3.7" -files = [ - {file = "aiosqlite-0.19.0-py3-none-any.whl", hash = "sha256:edba222e03453e094a3ce605db1b970c4b3376264e56f32e2a4959f948d66a96"}, - {file = "aiosqlite-0.19.0.tar.gz", hash = "sha256:95ee77b91c8d2808bd08a59fbebf66270e9090c3d92ffbf260dc0db0b979577d"}, -] - -[package.extras] -dev = ["aiounittest (==1.4.1)", "attribution (==1.6.2)", "black (==23.3.0)", "coverage[toml] (==7.2.3)", "flake8 (==5.0.4)", "flake8-bugbear (==23.3.12)", "flit (==3.7.1)", "mypy (==1.2.0)", "ufmt (==2.1.0)", "usort (==1.0.6)"] -docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] - [[package]] name = "alabaster" version = "0.7.13" @@ -48,27 +22,6 @@ files = [ {file = "anyascii-0.3.2.tar.gz", hash = "sha256:9d5d32ef844fe225b8bc7cba7f950534fae4da27a9bf3a6bea2cb0ea46ce4730"}, ] -[[package]] -name = "anyio" -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.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, - {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, -] - -[package.dependencies] -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" - -[package.extras] -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)"] - [[package]] name = "appnope" version = "0.1.3" @@ -80,76 +33,6 @@ files = [ {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, ] -[[package]] -name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." -optional = false -python-versions = ">=3.6" -files = [ - {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, - {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, -] - -[package.dependencies] -argon2-cffi-bindings = "*" - -[package.extras] -dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] -docs = ["furo", "sphinx", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] - -[[package]] -name = "argon2-cffi-bindings" -version = "21.2.0" -description = "Low-level CFFI bindings for Argon2" -optional = false -python-versions = ">=3.6" -files = [ - {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, - {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, -] - -[package.dependencies] -cffi = ">=1.0.1" - -[package.extras] -dev = ["cogapp", "pre-commit", "pytest", "wheel"] -tests = ["pytest"] - -[[package]] -name = "arrow" -version = "1.2.3" -description = "Better dates & times for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, - {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, -] - -[package.dependencies] -python-dateutil = ">=2.7.0" - [[package]] name = "astroid" version = "2.15.6" @@ -292,24 +175,6 @@ d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] -[[package]] -name = "bleach" -version = "6.0.0" -description = "An easy safelist-based HTML-sanitizing tool." -optional = false -python-versions = ">=3.7" -files = [ - {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, - {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, -] - -[package.dependencies] -six = ">=1.9.0" -webencodings = "*" - -[package.extras] -css = ["tinycss2 (>=1.1.0,<1.2)"] - [[package]] name = "certifi" version = "2023.7.22" @@ -321,82 +186,6 @@ files = [ {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] -[[package]] -name = "cffi" -version = "1.15.1" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = "*" -files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] - -[package.dependencies] -pycparser = "*" - [[package]] name = "cfgv" version = "3.3.1" @@ -551,25 +340,6 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "comm" -version = "0.1.4" -description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -optional = false -python-versions = ">=3.6" -files = [ - {file = "comm-0.1.4-py3-none-any.whl", hash = "sha256:6d52794cba11b36ed9860999cd10fd02d6b2eac177068fdd585e1e2f8a96e67a"}, - {file = "comm-0.1.4.tar.gz", hash = "sha256:354e40a59c9dd6db50c5cc6b4acc887d82e9603787f83b68c01a80a923984d15"}, -] - -[package.dependencies] -traitlets = ">=4" - -[package.extras] -lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"] -test = ["pytest"] -typing = ["mypy (>=0.990)"] - [[package]] name = "coverage" version = "7.2.7" @@ -645,33 +415,6 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] -[[package]] -name = "debugpy" -version = "1.6.7" -description = "An implementation of the Debug Adapter Protocol for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, - {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, - {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, - {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, - {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, - {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, - {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, - {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, - {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, - {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, - {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, - {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, - {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, - {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, - {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, - {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, - {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, - {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, -] - [[package]] name = "decorator" version = "5.1.1" @@ -683,17 +426,6 @@ files = [ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] -[[package]] -name = "defusedxml" -version = "0.7.1" -description = "XML bomb protection for Python stdlib modules" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, - {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, -] - [[package]] name = "distlib" version = "0.3.7" @@ -758,20 +490,6 @@ files = [ [package.extras] tests = ["asttokens", "littleutils", "pytest", "rich"] -[[package]] -name = "fastjsonschema" -version = "2.18.0" -description = "Fastest Python implementation of JSON schema" -optional = false -python-versions = "*" -files = [ - {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, - {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, -] - -[package.extras] -devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] - [[package]] name = "filelock" version = "3.12.2" @@ -831,17 +549,6 @@ calc = ["shapely"] s3 = ["boto3 (>=1.3.1)"] test = ["Fiona[s3]", "pytest (>=7)", "pytest-cov", "pytz"] -[[package]] -name = "fqdn" -version = "1.5.1" -description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -optional = false -python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" -files = [ - {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, - {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, -] - [[package]] name = "furo" version = "2023.7.26" @@ -943,39 +650,6 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] -[[package]] -name = "ipykernel" -version = "6.25.1" -description = "IPython Kernel for Jupyter" -optional = false -python-versions = ">=3.8" -files = [ - {file = "ipykernel-6.25.1-py3-none-any.whl", hash = "sha256:c8a2430b357073b37c76c21c52184db42f6b4b0e438e1eb7df3c4440d120497c"}, - {file = "ipykernel-6.25.1.tar.gz", hash = "sha256:050391364c0977e768e354bdb60cbbfbee7cbb943b1af1618382021136ffd42f"}, -] - -[package.dependencies] -appnope = {version = "*", markers = "platform_system == \"Darwin\""} -comm = ">=0.1.1" -debugpy = ">=1.6.5" -ipython = ">=7.23.1" -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -matplotlib-inline = ">=0.1" -nest-asyncio = "*" -packaging = "*" -psutil = "*" -pyzmq = ">=20" -tornado = ">=6.1" -traitlets = ">=5.4.0" - -[package.extras] -cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] -pyqt5 = ["pyqt5"] -pyside6 = ["pyside6"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"] - [[package]] name = "ipython" version = "8.14.0" @@ -1015,52 +689,6 @@ qtconsole = ["qtconsole"] test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] -[[package]] -name = "ipython-genutils" -version = "0.2.0" -description = "Vestigial utilities from IPython" -optional = false -python-versions = "*" -files = [ - {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, - {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, -] - -[[package]] -name = "ipywidgets" -version = "8.1.0" -description = "Jupyter interactive widgets" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ipywidgets-8.1.0-py3-none-any.whl", hash = "sha256:6c8396cc7b8c95dfb4e9ab0054f48c002f045e7e5d7ae523f559d64e525a98ab"}, - {file = "ipywidgets-8.1.0.tar.gz", hash = "sha256:ce97dd90525b3066fd00094690964e7eac14cf9b7745d35565b5eeac20cce687"}, -] - -[package.dependencies] -comm = ">=0.1.3" -ipython = ">=6.1.0" -jupyterlab-widgets = ">=3.0.7,<3.1.0" -traitlets = ">=4.3.1" -widgetsnbextension = ">=4.0.7,<4.1.0" - -[package.extras] -test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] - -[[package]] -name = "isoduration" -version = "20.11.0" -description = "Operations with ISO 8601 durations" -optional = false -python-versions = ">=3.7" -files = [ - {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, - {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, -] - -[package.dependencies] -arrow = ">=0.15.0" - [[package]] name = "jedi" version = "0.19.0" @@ -1097,385 +725,6 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] -[[package]] -name = "json5" -version = "0.9.14" -description = "A Python implementation of the JSON5 data format." -optional = false -python-versions = "*" -files = [ - {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, - {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, -] - -[package.extras] -dev = ["hypothesis"] - -[[package]] -name = "jsonpointer" -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.*, !=3.4.*, !=3.5.*, !=3.6.*" -files = [ - {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.19.0" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema-4.19.0-py3-none-any.whl", hash = "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb"}, - {file = "jsonschema-4.19.0.tar.gz", hash = "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f"}, -] - -[package.dependencies] -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\""} -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\""} - -[package.extras] -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" -description = "Jupyter metapackage. Install all the Jupyter components in one go." -optional = false -python-versions = "*" -files = [ - {file = "jupyter-1.0.0-py2.py3-none-any.whl", hash = "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78"}, - {file = "jupyter-1.0.0.tar.gz", hash = "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f"}, - {file = "jupyter-1.0.0.zip", hash = "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7"}, -] - -[package.dependencies] -ipykernel = "*" -ipywidgets = "*" -jupyter-console = "*" -nbconvert = "*" -notebook = "*" -qtconsole = "*" - -[[package]] -name = "jupyter-client" -version = "8.3.0" -description = "Jupyter protocol implementation and client libraries" -optional = false -python-versions = ">=3.8" -files = [ - {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] -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -python-dateutil = ">=2.8.2" -pyzmq = ">=23.0" -tornado = ">=6.2" -traitlets = ">=5.3" - -[package.extras] -docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] - -[[package]] -name = "jupyter-console" -version = "6.6.3" -description = "Jupyter terminal console" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, - {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, -] - -[package.dependencies] -ipykernel = ">=6.14" -ipython = "*" -jupyter-client = ">=7.0.0" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -prompt-toolkit = ">=3.0.30" -pygments = "*" -pyzmq = ">=17" -traitlets = ">=5.4" - -[package.extras] -test = ["flaky", "pexpect", "pytest"] - -[[package]] -name = "jupyter-core" -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.1-py3-none-any.whl", hash = "sha256:ae9036db959a71ec1cac33081eeb040a79e681f08ab68b0883e9a676c7a90dce"}, - {file = "jupyter_core-5.3.1.tar.gz", hash = "sha256:5ba5c7938a7f97a6b0481463f7ff0dbac7c15ba48cf46fa4035ca6e838aa1aba"}, -] - -[package.dependencies] -platformdirs = ">=2.5" -pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} -traitlets = ">=5.3" - -[package.extras] -docs = ["myst-parser", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] -test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "jupyter-events" -version = "0.7.0" -description = "Jupyter Event System library" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyter_events-0.7.0-py3-none-any.whl", hash = "sha256:4753da434c13a37c3f3c89b500afa0c0a6241633441421f6adafe2fb2e2b924e"}, - {file = "jupyter_events-0.7.0.tar.gz", hash = "sha256:7be27f54b8388c03eefea123a4f79247c5b9381c49fb1cd48615ee191eb12615"}, -] - -[package.dependencies] -jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} -python-json-logger = ">=2.0.4" -pyyaml = ">=5.3" -referencing = "*" -rfc3339-validator = "*" -rfc3986-validator = ">=0.1.1" -traitlets = ">=5.3" - -[package.extras] -cli = ["click", "rich"] -docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] -test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] - -[[package]] -name = "jupyter-server" -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.7.0-py3-none-any.whl", hash = "sha256:6a77912aff643e53fa14bdb2634884b52b784a4be77ce8e93f7283faed0f0849"}, - {file = "jupyter_server-2.7.0.tar.gz", hash = "sha256:36da0a266d31a41ac335a366c88933c17dfa5bb817a48f5c02c16d303bc9477f"}, -] - -[package.dependencies] -anyio = ">=3.1.0" -argon2-cffi = "*" -jinja2 = "*" -jupyter-client = ">=7.4.4" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -jupyter-events = ">=0.6.0" -jupyter-server-terminals = "*" -nbconvert = ">=6.4.4" -nbformat = ">=5.3.0" -overrides = "*" -packaging = "*" -prometheus-client = "*" -pywinpty = {version = "*", markers = "os_name == \"nt\""} -pyzmq = ">=24" -send2trash = "*" -terminado = ">=0.8.3" -tornado = ">=6.2.0" -traitlets = ">=5.6.0" -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 = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] - -[[package]] -name = "jupyter-server-fileid" -version = "0.9.0" -description = "" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_server_fileid-0.9.0-py3-none-any.whl", hash = "sha256:5b489c6fe6783c41174a728c7b81099608518387e53c3d53451a67f46a0cb7b0"}, - {file = "jupyter_server_fileid-0.9.0.tar.gz", hash = "sha256:171538b7c7d08d11dbc57d4e6da196e0c258e4c2cd29249ef1e032bb423677f8"}, -] - -[package.dependencies] -jupyter-events = ">=0.5.0" -jupyter-server = ">=1.15,<3" - -[package.extras] -cli = ["click"] -test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] - -[[package]] -name = "jupyter-server-terminals" -version = "0.4.4" -description = "A Jupyter Server Extension Providing Terminals." -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyter_server_terminals-0.4.4-py3-none-any.whl", hash = "sha256:75779164661cec02a8758a5311e18bb8eb70c4e86c6b699403100f1585a12a36"}, - {file = "jupyter_server_terminals-0.4.4.tar.gz", hash = "sha256:57ab779797c25a7ba68e97bcfb5d7740f2b5e8a83b5e8102b10438041a7eac5d"}, -] - -[package.dependencies] -pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} -terminado = ">=0.8.3" - -[package.extras] -docs = ["jinja2", "jupyter-server", "mistune (<3.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] -test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] - -[[package]] -name = "jupyter-server-ydoc" -version = "0.8.0" -description = "A Jupyter Server Extension Providing Y Documents." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_server_ydoc-0.8.0-py3-none-any.whl", hash = "sha256:969a3a1a77ed4e99487d60a74048dc9fa7d3b0dcd32e60885d835bbf7ba7be11"}, - {file = "jupyter_server_ydoc-0.8.0.tar.gz", hash = "sha256:a6fe125091792d16c962cc3720c950c2b87fcc8c3ecf0c54c84e9a20b814526c"}, -] - -[package.dependencies] -jupyter-server-fileid = ">=0.6.0,<1" -jupyter-ydoc = ">=0.2.0,<0.4.0" -ypy-websocket = ">=0.8.2,<0.9.0" - -[package.extras] -test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytest-cov", "pytest-timeout", "pytest-tornasync"] - -[[package]] -name = "jupyter-ydoc" -version = "0.2.5" -description = "Document structures for collaborative editing using Ypy" -optional = false -python-versions = ">=3.7" -files = [ - {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.6.0,<0.7.0" - -[package.extras] -dev = ["click", "jupyter-releaser"] -test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.8.4,<0.9.0)"] - -[[package]] -name = "jupyterlab" -version = "3.6.5" -description = "JupyterLab computational environment" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab-3.6.5-py3-none-any.whl", hash = "sha256:4d13665c2c2f42c753140d88b52ff8722cd5b38629b934f5612bfa5490bcdc65"}, - {file = "jupyterlab-3.6.5.tar.gz", hash = "sha256:ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923"}, -] - -[package.dependencies] -ipython = "*" -jinja2 = ">=2.1" -jupyter-core = "*" -jupyter-server = ">=1.16.0,<3" -jupyter-server-ydoc = ">=0.8.0,<0.9.0" -jupyter-ydoc = ">=0.2.4,<0.3.0" -jupyterlab-server = ">=2.19,<3.0" -nbclassic = "*" -notebook = "<7" -packaging = "*" -tomli = {version = "*", markers = "python_version < \"3.11\""} -tornado = ">=6.1.0" - -[package.extras] -test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", "pytest (>=6.0)", "pytest-check-links (>=0.5)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "requests", "requests-cache", "virtualenv"] - -[[package]] -name = "jupyterlab-language-pack-fr-fr" -version = "3.6.post3" -description = "JupyterLab French (France) Language Pack" -optional = false -python-versions = "*" -files = [ - {file = "jupyterlab_language_pack_fr_fr-3.6.post3-py2.py3-none-any.whl", hash = "sha256:a31bb4abe59723297d1e4045cc4bafdce4f667f466ed052ba459d5d0a10a3999"}, - {file = "jupyterlab_language_pack_fr_fr-3.6.post3.tar.gz", hash = "sha256:f00a804a7004942ddc262ae10163c78c06bddbfcfb4c186cf2ead5894e6a8e55"}, -] - -[[package]] -name = "jupyterlab-pygments" -version = "0.2.2" -description = "Pygments theme using JupyterLab CSS variables" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, - {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, -] - -[[package]] -name = "jupyterlab-server" -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.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, - {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, -] - -[package.dependencies] -babel = ">=2.10" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jinja2 = ">=3.0.3" -json5 = ">=0.9.0" -jsonschema = ">=4.17.3" -jupyter-server = ">=1.21,<3" -packaging = ">=21.3" -requests = ">=2.28" - -[package.extras] -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.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.8" -description = "Jupyter interactive widgets for JupyterLab" -optional = false -python-versions = ">=3.7" -files = [ - {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" @@ -1662,17 +911,6 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] -[[package]] -name = "mistune" -version = "3.0.1" -description = "A sane and fast Markdown parser with useful plugins and renderers" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, - {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, -] - [[package]] name = "mypy-extensions" version = "1.0.0" @@ -1685,241 +923,44 @@ files = [ ] [[package]] -name = "myst-parser" -version = "2.0.0" -description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," -optional = false -python-versions = ">=3.8" -files = [ - {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.16,<0.21" -jinja2 = "*" -markdown-it-py = ">=3.0,<4.0" -mdit-py-plugins = ">=0.4,<1.0" -pyyaml = "*" -sphinx = ">=6,<8" - -[package.extras] -code-style = ["pre-commit (>=3.0,<4.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)"] - -[[package]] -name = "nbclassic" -version = "1.0.0" -description = "Jupyter Notebook as a Jupyter Server extension." -optional = false -python-versions = ">=3.7" -files = [ - {file = "nbclassic-1.0.0-py3-none-any.whl", hash = "sha256:f99e4769b4750076cd4235c044b61232110733322384a94a63791d2e7beacc66"}, - {file = "nbclassic-1.0.0.tar.gz", hash = "sha256:0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3"}, -] - -[package.dependencies] -argon2-cffi = "*" -ipykernel = "*" -ipython-genutils = "*" -jinja2 = "*" -jupyter-client = ">=6.1.1" -jupyter-core = ">=4.6.1" -jupyter-server = ">=1.8" -nbconvert = ">=5" -nbformat = "*" -nest-asyncio = ">=1.5" -notebook-shim = ">=0.2.3" -prometheus-client = "*" -pyzmq = ">=17" -Send2Trash = ">=1.8.0" -terminado = ">=0.8.3" -tornado = ">=6.1" -traitlets = ">=4.2.1" - -[package.extras] -docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] - -[[package]] -name = "nbclient" -version = "0.8.0" -description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "nbclient-0.8.0-py3-none-any.whl", hash = "sha256:25e861299e5303a0477568557c4045eccc7a34c17fc08e7959558707b9ebe548"}, - {file = "nbclient-0.8.0.tar.gz", hash = "sha256:f9b179cd4b2d7bca965f900a2ebf0db4a12ebff2f36a711cb66861e4ae158e55"}, -] - -[package.dependencies] -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -nbformat = ">=5.1" -traitlets = ">=5.4" - -[package.extras] -dev = ["pre-commit"] -docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] -test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] - -[[package]] -name = "nbconvert" -version = "7.7.3" -description = "Converting Jupyter Notebooks" -optional = false -python-versions = ">=3.8" -files = [ - {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 = "!=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,<4" -nbclient = ">=0.5.0" -nbformat = ">=5.7" -packaging = "*" -pandocfilters = ">=1.4.1" -pygments = ">=2.4.1" -tinycss2 = "*" -traitlets = ">=5.1" - -[package.extras] -all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] -docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] -qtpdf = ["nbconvert[qtpng]"] -qtpng = ["pyqtwebengine (>=5.15)"] -serve = ["tornado (>=6.1)"] -test = ["flaky", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] -webpdf = ["playwright"] - -[[package]] -name = "nbformat" -version = "5.9.2" -description = "The Jupyter Notebook format" -optional = false -python-versions = ">=3.8" -files = [ - {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, - {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, -] - -[package.dependencies] -fastjsonschema = "*" -jsonschema = ">=2.6" -jupyter-core = "*" -traitlets = ">=5.1" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["pep440", "pre-commit", "pytest", "testpath"] - -[[package]] -name = "nbsphinx" -version = "0.9.2" -description = "Jupyter Notebook Tools for Sphinx" -optional = false -python-versions = ">=3.6" -files = [ - {file = "nbsphinx-0.9.2-py3-none-any.whl", hash = "sha256:2746680ece5ad3b0e980639d717a5041a1c1aafb416846b72dfaeecc306bc351"}, - {file = "nbsphinx-0.9.2.tar.gz", hash = "sha256:540db7f4066347f23d0650c4ae8e7d85334c69adf749e030af64c12e996ff88e"}, -] - -[package.dependencies] -docutils = "*" -jinja2 = "*" -nbconvert = "!=5.4" -nbformat = "*" -sphinx = ">=1.8" -traitlets = ">=5" - -[[package]] -name = "nest-asyncio" -version = "1.5.7" -description = "Patch asyncio to allow nested event loops" -optional = false -python-versions = ">=3.5" -files = [ - {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, - {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, -] - -[[package]] -name = "nodeenv" -version = "1.8.0" -description = "Node.js virtual environment builder" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" -files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, -] - -[package.dependencies] -setuptools = "*" - -[[package]] -name = "notebook" -version = "6.5.4" -description = "A web-based notebook environment for interactive computing" +name = "myst-parser" +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 = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, - {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, + {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] -argon2-cffi = "*" -ipykernel = "*" -ipython-genutils = "*" +docutils = ">=0.16,<0.21" jinja2 = "*" -jupyter-client = ">=5.3.4" -jupyter-core = ">=4.6.1" -nbclassic = ">=0.4.7" -nbconvert = ">=5" -nbformat = "*" -nest-asyncio = ">=1.5" -prometheus-client = "*" -pyzmq = ">=17" -Send2Trash = ">=1.8.0" -terminado = ">=0.8.3" -tornado = ">=6.1" -traitlets = ">=4.2.1" +markdown-it-py = ">=3.0,<4.0" +mdit-py-plugins = ">=0.4,<1.0" +pyyaml = "*" +sphinx = ">=6,<8" [package.extras] -docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"] +code-style = ["pre-commit (>=3.0,<4.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)"] [[package]] -name = "notebook-shim" -version = "0.2.3" -description = "A shim layer for notebook traits and config" +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" optional = false -python-versions = ">=3.7" +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ - {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, - {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, ] [package.dependencies] -jupyter-server = ">=1.8,<3" - -[package.extras] -test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] +setuptools = "*" [[package]] name = "numpy" @@ -1955,17 +996,6 @@ files = [ {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, ] -[[package]] -name = "overrides" -version = "7.4.0" -description = "A decorator to automatically detect mismatch when overriding a method." -optional = false -python-versions = ">=3.6" -files = [ - {file = "overrides-7.4.0-py3-none-any.whl", hash = "sha256:3ad24583f86d6d7a49049695efe9933e67ba62f0c7625d53c59fa832ce4b8b7d"}, - {file = "overrides-7.4.0.tar.gz", hash = "sha256:9502a3cca51f4fac40b5feca985b6703a5c1f6ad815588a7ca9e285b9dca6757"}, -] - [[package]] name = "packaging" version = "23.1" @@ -2044,17 +1074,6 @@ sql-other = ["SQLAlchemy (>=1.4.16)"] 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]] -name = "pandocfilters" -version = "1.5.0" -description = "Utilities for writing pandoc filters in python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, - {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, -] - [[package]] name = "parso" version = "0.8.3" @@ -2178,20 +1197,6 @@ nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" -[[package]] -name = "prometheus-client" -version = "0.17.1" -description = "Python client for the Prometheus monitoring system." -optional = false -python-versions = ">=3.6" -files = [ - {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] -twisted = ["twisted"] - [[package]] name = "prompt-toolkit" version = "3.0.39" @@ -2206,32 +1211,6 @@ files = [ [package.dependencies] wcwidth = "*" -[[package]] -name = "psutil" -version = "5.9.5" -description = "Cross-platform lib for process and system monitoring in Python." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, - {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, - {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, - {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, - {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, - {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, - {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, - {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, -] - -[package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] - [[package]] name = "ptyprocess" version = "0.7.0" @@ -2291,17 +1270,6 @@ files = [ docutils = ">=0.8" pybtex = ">=0.16" -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] - [[package]] name = "pygments" version = "2.16.1" @@ -2427,17 +1395,6 @@ files = [ [package.dependencies] six = ">=1.5" -[[package]] -name = "python-json-logger" -version = "2.0.7" -description = "A python library adding a json log formatter" -optional = false -python-versions = ">=3.6" -files = [ - {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, - {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, -] - [[package]] name = "pytz" version = "2023.3" @@ -2449,43 +1406,6 @@ files = [ {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, ] -[[package]] -name = "pywin32" -version = "306" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -files = [ - {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, - {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, - {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, - {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, - {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, - {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, - {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, - {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, - {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, - {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, - {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, - {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, - {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, - {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, -] - -[[package]] -name = "pywinpty" -version = "2.0.11" -description = "Pseudo terminal support for Windows from Python." -optional = false -python-versions = ">=3.8" -files = [ - {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.1" @@ -2535,248 +1455,101 @@ files = [ {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] -[[package]] -name = "pyzmq" -version = "25.1.0" -description = "Python bindings for 0MQ" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, - {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, - {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, - {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, - {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, - {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, - {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, - {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, - {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, - {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, - {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, - {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, -] - -[package.dependencies] -cffi = {version = "*", markers = "implementation_name == \"pypy\""} - -[[package]] -name = "qtconsole" -version = "5.4.3" -description = "Jupyter Qt console" -optional = false -python-versions = ">= 3.7" -files = [ - {file = "qtconsole-5.4.3-py3-none-any.whl", hash = "sha256:35fd6e87b1f6d1fd41801b07e69339f8982e76afd4fa8ef35595bc6036717189"}, - {file = "qtconsole-5.4.3.tar.gz", hash = "sha256:5e4082a86a201796b2a5cfd4298352d22b158b51b57736531824715fc2a979dd"}, -] - -[package.dependencies] -ipykernel = ">=4.1" -ipython-genutils = "*" -jupyter-client = ">=4.1" -jupyter-core = "*" -packaging = "*" -pygments = "*" -pyzmq = ">=17.1" -qtpy = ">=2.0.1" -traitlets = "<5.2.1 || >5.2.1,<5.2.2 || >5.2.2" - -[package.extras] -doc = ["Sphinx (>=1.3)"] -test = ["flaky", "pytest", "pytest-qt"] - -[[package]] -name = "qtpy" -version = "2.3.1" -description = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)." -optional = false -python-versions = ">=3.7" -files = [ - {file = "QtPy-2.3.1-py3-none-any.whl", hash = "sha256:5193d20e0b16e4d9d3bc2c642d04d9f4e2c892590bd1b9c92bfe38a95d5a2e12"}, - {file = "QtPy-2.3.1.tar.gz", hash = "sha256:a8c74982d6d172ce124d80cafd39653df78989683f760f2281ba91a6e7b9de8b"}, -] - -[package.dependencies] -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.2" -description = "JSON Referencing + Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, - {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -rpds-py = ">=0.7.0" - [[package]] name = "regex" -version = "2023.6.3" +version = "2023.8.8" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.6" files = [ - {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, - {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, - {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, - {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, - {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, - {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, - {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, - {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, - {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, - {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, - {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, - {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, - {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, - {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, - {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, - {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, - {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, + {file = "regex-2023.8.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb"}, + {file = "regex-2023.8.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7"}, + {file = "regex-2023.8.8-cp310-cp310-win32.whl", hash = "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb"}, + {file = "regex-2023.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b"}, + {file = "regex-2023.8.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71"}, + {file = "regex-2023.8.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd"}, + {file = "regex-2023.8.8-cp311-cp311-win32.whl", hash = "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8"}, + {file = "regex-2023.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb"}, + {file = "regex-2023.8.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b"}, + {file = "regex-2023.8.8-cp36-cp36m-win32.whl", hash = "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7"}, + {file = "regex-2023.8.8-cp36-cp36m-win_amd64.whl", hash = "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236"}, + {file = "regex-2023.8.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7"}, + {file = "regex-2023.8.8-cp37-cp37m-win32.whl", hash = "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3"}, + {file = "regex-2023.8.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921"}, + {file = "regex-2023.8.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675"}, + {file = "regex-2023.8.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882"}, + {file = "regex-2023.8.8-cp38-cp38-win32.whl", hash = "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7"}, + {file = "regex-2023.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be"}, + {file = "regex-2023.8.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3"}, + {file = "regex-2023.8.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6"}, + {file = "regex-2023.8.8-cp39-cp39-win32.whl", hash = "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e"}, + {file = "regex-2023.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb"}, + {file = "regex-2023.8.8.tar.gz", hash = "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e"}, ] [[package]] @@ -2819,137 +1592,6 @@ six = "*" fixture = ["fixtures"] test = ["fixtures", "mock", "purl", "pytest", "requests-futures", "sphinx", "testtools"] -[[package]] -name = "rfc3339-validator" -version = "0.1.4" -description = "A pure python RFC3339 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, - {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, -] - -[package.dependencies] -six = "*" - -[[package]] -name = "rfc3986-validator" -version = "0.1.1" -description = "Pure python rfc3986 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, - {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 = "ruff" version = "0.0.280" @@ -2976,22 +1618,6 @@ files = [ {file = "ruff-0.0.280.tar.gz", hash = "sha256:581c43e4ac5e5a7117ad7da2120d960a4a99e68ec4021ec3cd47fe1cf78f8380"}, ] -[[package]] -name = "send2trash" -version = "1.8.2" -description = "Send file to trash natively under Mac OS X, Windows and Linux" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, - {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, -] - -[package.extras] -nativelib = ["pyobjc-framework-Cocoa", "pywin32"] -objc = ["pyobjc-framework-Cocoa"] -win32 = ["pywin32"] - [[package]] name = "setuptools" version = "68.0.0" @@ -3073,17 +1699,6 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] -[[package]] -name = "sniffio" -version = "1.3.0" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, -] - [[package]] name = "snowballstemmer" version = "2.2.0" @@ -3233,15 +1848,18 @@ sphinx = "*" [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.4" +version = "1.0.5" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, - {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, + {file = "sphinxcontrib_applehelp-1.0.5-py3-none-any.whl", hash = "sha256:2bf6dc21596142496e3a7623adc6918014e6a9bbfeeeb37d27543727bebabd0f"}, + {file = "sphinxcontrib_applehelp-1.0.5.tar.gz", hash = "sha256:e58ca6b828d1c9ef3f8b51ff5bfe989507399977da1bb389b393199d45066357"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] @@ -3266,15 +1884,18 @@ Sphinx = ">=2.1" [[package]] name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +version = "1.0.3" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, + {file = "sphinxcontrib_devhelp-1.0.3-py3-none-any.whl", hash = "sha256:09009e3b1dde7447c9c6973723c786253b9a9342ff0a856bc6957092ee106cd9"}, + {file = "sphinxcontrib_devhelp-1.0.3.tar.gz", hash = "sha256:ced21e99bceed8694117b8361b67df624d8788309399f24bd948a254e64cc017"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] @@ -3295,15 +1916,18 @@ Sphinx = ">=0.6" [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.1" +version = "2.0.2" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, - {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, + {file = "sphinxcontrib_htmlhelp-2.0.2-py3-none-any.whl", hash = "sha256:3fc535431dced1d3f50d30e3d9135873a724f6c38eeb4ac967ebb5c06d7bff9c"}, + {file = "sphinxcontrib_htmlhelp-2.0.2.tar.gz", hash = "sha256:f9515c1e2deac30498a8fa54b23a477943fc7432d6e7fcf23f7d90e12d3fdcd4"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["html5lib", "pytest"] @@ -3324,30 +1948,36 @@ test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +version = "1.0.4" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, + {file = "sphinxcontrib_qthelp-1.0.4-py3-none-any.whl", hash = "sha256:82f0871fb042efa309ee8c7929d228ed5c4be478d9914492b4bad5bfa469c160"}, + {file = "sphinxcontrib_qthelp-1.0.4.tar.gz", hash = "sha256:f0a1c141420499af2f1a1ff438f9fc910a3548f7a82a1169d9efcc674fcf79c6"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +version = "1.1.6" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, + {file = "sphinxcontrib_serializinghtml-1.1.6-py3-none-any.whl", hash = "sha256:f7e8e508f5c973601fa29a9114aa60bc11164db3d6c55aa7fd51710185477237"}, + {file = "sphinxcontrib_serializinghtml-1.1.6.tar.gz", hash = "sha256:e04d06ac23c527378d62459ec968204afce0ef266733209d628b9a1a4051a78d"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] @@ -3371,44 +2001,6 @@ pure-eval = "*" [package.extras] tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] -[[package]] -name = "terminado" -version = "0.17.1" -description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -optional = false -python-versions = ">=3.7" -files = [ - {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, - {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, -] - -[package.dependencies] -ptyprocess = {version = "*", markers = "os_name != \"nt\""} -pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} -tornado = ">=6.1.0" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] - -[[package]] -name = "tinycss2" -version = "1.2.1" -description = "A tiny CSS parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, - {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, -] - -[package.dependencies] -webencodings = ">=0.4" - -[package.extras] -doc = ["sphinx", "sphinx_rtd_theme"] -test = ["flake8", "isort", "pytest"] - [[package]] name = "tokenize-rt" version = "5.2.0" @@ -3431,26 +2023,6 @@ files = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] -[[package]] -name = "tornado" -version = "6.3.2" -description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -optional = false -python-versions = ">= 3.8" -files = [ - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c367ab6c0393d71171123ca5515c61ff62fe09024fa6bf299cd1339dc9456829"}, - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b46a6ab20f5c7c1cb949c72c1994a4585d2eaa0be4853f50a03b5031e964fc7c"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2de14066c4a38b4ecbbcd55c5cc4b5340eb04f1c5e81da7451ef555859c833f"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05615096845cf50a895026f749195bf0b10b8909f9be672f50b0fe69cba368e4"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b17b1cf5f8354efa3d37c6e28fdfd9c1c1e5122f2cb56dac121ac61baa47cbe"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:29e71c847a35f6e10ca3b5c2990a52ce38b233019d8e858b755ea6ce4dcdd19d"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:834ae7540ad3a83199a8da8f9f2d383e3c3d5130a328889e4cc991acc81e87a0"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6a0848f1aea0d196a7c4f6772197cbe2abc4266f836b0aac76947872cd29b411"}, - {file = "tornado-6.3.2-cp38-abi3-win32.whl", hash = "sha256:7efcbcc30b7c654eb6a8c9c9da787a851c18f8ccd4a5a3a95b05c7accfa068d2"}, - {file = "tornado-6.3.2-cp38-abi3-win_amd64.whl", hash = "sha256:0c325e66c8123c606eea33084976c832aa4e766b7dff8aedd7587ea44a604cdf"}, - {file = "tornado-6.3.2.tar.gz", hash = "sha256:4b927c4f19b71e627b13f3db2324e4ae660527143f9e1f2e2fb404f3a187e2ba"}, -] - [[package]] name = "traitlets" version = "5.9.0" @@ -3488,20 +2060,6 @@ files = [ {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, ] -[[package]] -name = "uri-template" -version = "1.3.0" -description = "RFC 6570 URI Template Processor" -optional = false -python-versions = ">=3.7" -files = [ - {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", "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.4" @@ -3550,59 +2108,6 @@ files = [ {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, ] -[[package]] -name = "webcolors" -version = "1.13" -description = "A library for working with the color formats defined by HTML and CSS." -optional = false -python-versions = ">=3.7" -files = [ - {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, - {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, -] - -[package.extras] -docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] -tests = ["pytest", "pytest-cov"] - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - -[[package]] -name = "websocket-client" -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.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, - {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, -] - -[package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] -optional = ["python-socks", "wsaccel"] -test = ["websockets"] - -[[package]] -name = "widgetsnbextension" -version = "4.0.8" -description = "Jupyter interactive widgets for Jupyter Notebook" -optional = false -python-versions = ">=3.7" -files = [ - {file = "widgetsnbextension-4.0.8-py3-none-any.whl", hash = "sha256:2e37f0ce9da11651056280c7efe96f2db052fe8fc269508e3724f5cbd6c93018"}, - {file = "widgetsnbextension-4.0.8.tar.gz", hash = "sha256:9ec291ba87c2dfad42c3d5b6f68713fa18be1acd7476569516b2431682315c17"}, -] - [[package]] name = "wrapt" version = "1.15.0" @@ -3687,100 +2192,6 @@ files = [ {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, ] -[[package]] -name = "y-py" -version = "0.6.0" -description = "Python bindings for the Y-CRDT built from yrs (Rust)" -optional = false -python-versions = "*" -files = [ - {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.4" -description = "WebSocket connector for Ypy" -optional = false -python-versions = ">=3.7" -files = [ - {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.6.0,<0.7.0" - -[package.extras] -test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] - [[package]] name = "zipp" version = "3.16.2" @@ -3799,4 +2210,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "1936dd38343a450c2d0ffd93e25c87d8f5c1e00c52852b520cfff6dd452d4ba5" +content-hash = "d51c41bfafe163a2fa6b60ea41d0f524d9724a3ac78d47c9f73ec3dabeee2d6f" diff --git a/pyproject.toml b/pyproject.toml index 678e087b..c7359851 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,18 +62,10 @@ sphinx-math-dollar = "^1.2.1" sphinx-autoapi = "^2.0.0" sphinx-copybutton = ">=0.5.1" 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 -[tool.poetry.group.docker.dependencies] -jupyterlab = "^3.4.8" -jupyterlab-language-pack-fr-FR = "^3.4" - [tool.black] line-length = 120 target-version = ["py39", "py310", "py311"] From f870a096b7a6c7eac17c6c492c6e7b25948d53ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Vinot?= Date: Wed, 9 Aug 2023 09:27:38 +0200 Subject: [PATCH 4/9] Improve the documentation GHA --- .github/workflows/doc.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 617053b4..0fa08878 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -4,6 +4,12 @@ on: push: branches: [ "main", "develop" ] workflow_dispatch: + inputs: + forceDeploy: + description: 'Deploy?' + required: true + default: false + type: boolean permissions: contents: read @@ -70,20 +76,20 @@ jobs: SPHINXBUILD: poetry run sphinx-build - name: Upload pages artifact - if: ${{ github.ref == 'refs/heads/main' }} + if: ${{ github.ref == 'refs/heads/main' || inputs.forceDeploy == true }} uses: actions/upload-pages-artifact@v2 with: path: "build/html/" - name: Upload artifact uses: actions/upload-artifact@v3 - if: ${{ github.ref != 'refs/heads/main' }} + if: ${{ !(github.ref == 'refs/heads/main' || inputs.forceDeploy == true) }} with: path: "build/html/" # Deployment job deploy: - if: ${{ github.ref == 'refs/heads/main' }} + if: ${{ github.ref == 'refs/heads/main' || inputs.forceDeploy == true }} environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} From 162e85e444b8c65680eed0905e96ca02dc8e8697 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Vinot?= Date: Wed, 9 Aug 2023 09:29:38 +0200 Subject: [PATCH 5/9] Corrections in the documentation --- README.md | 2 +- doc/Changelog.md | 2 +- doc/_static/Load/American_Star_Load.svg | 4 +- doc/_static/Transformer/Windings.svg | 10 ++-- doc/_static/Transformer/Windings_Dz0.svg | 63 +++++++++++---------- doc/_static/Transformer/Windings_Yd5.svg | 15 +++-- doc/conf.py | 11 ++-- doc/images/Transformer/Windings_Common.tikz | 4 +- doc/models/Bus.md | 2 +- 9 files changed, 60 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index b56c598e..9cb550c0 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ above. 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) +* [Usage](https://roseautechnologies.github.io/Roseau_Load_Flow/usage/index.html) # Accessing the solver # diff --git a/doc/Changelog.md b/doc/Changelog.md index 66de4c44..6f477303 100644 --- a/doc/Changelog.md +++ b/doc/Changelog.md @@ -23,7 +23,7 @@ * [PR96](https://github.com/RoseauTechnologies/Roseau_Load_Flow/pull/96) * Add single-phase transformer * Add center-tapped transformer - * Remove the `TransformerType` enumeration + * Remove the `roseau.load_flow.utils.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 diff --git a/doc/_static/Load/American_Star_Load.svg b/doc/_static/Load/American_Star_Load.svg index c02bdc2f..3ab4b25e 100644 --- a/doc/_static/Load/American_Star_Load.svg +++ b/doc/_static/Load/American_Star_Load.svg @@ -85,7 +85,7 @@ - + @@ -112,7 +112,7 @@ - + diff --git a/doc/_static/Transformer/Windings.svg b/doc/_static/Transformer/Windings.svg index 0a725bdc..c53433bb 100644 --- a/doc/_static/Transformer/Windings.svg +++ b/doc/_static/Transformer/Windings.svg @@ -189,7 +189,7 @@ - + @@ -201,13 +201,13 @@ - + - + - + @@ -566,7 +566,7 @@ - + diff --git a/doc/_static/Transformer/Windings_Dz0.svg b/doc/_static/Transformer/Windings_Dz0.svg index ebdfc07f..f2691566 100644 --- a/doc/_static/Transformer/Windings_Dz0.svg +++ b/doc/_static/Transformer/Windings_Dz0.svg @@ -1,5 +1,5 @@ - + @@ -21,17 +21,20 @@ - + - + + + + - + @@ -39,59 +42,59 @@ - + - + - + - + - + - + - + - + - + - + - - - + + + - + - - - + + + - + - - - + + + - - + + - + - + - + diff --git a/doc/_static/Transformer/Windings_Yd5.svg b/doc/_static/Transformer/Windings_Yd5.svg index 5e27f641..5fbbf25f 100644 --- a/doc/_static/Transformer/Windings_Yd5.svg +++ b/doc/_static/Transformer/Windings_Yd5.svg @@ -21,12 +21,15 @@ - + - + + + + @@ -71,20 +74,20 @@ - + - + - + - + diff --git a/doc/conf.py b/doc/conf.py index af06405b..e26e6dbe 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -17,7 +17,6 @@ # sys.path.insert(0, os.path.abspath("../roseau/")) # -- Project information ----------------------------------------------------- - project = "Roseau Load Flow" copyright = "2022--2023, Roseau Technologies SAS" # author = "BenoĆ®t Vinot" @@ -47,8 +46,6 @@ add_module_names = False napoleon_numpy_docstring = False python_use_unqualified_type_names = True -copybutton_exclude = ".linenos, .gp, .go" -copybutton_copy_empty_lines = False # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] @@ -132,8 +129,12 @@ "typing_extensions": ("https://typing-extensions.readthedocs.io/en/stable/", None), } -# Google Analytics +# -- Options for sphinx_copybutton ------------------------------------------- +copybutton_exclude = ".linenos, .gp, .go" +copybutton_copy_empty_lines = False + +# -- Options for sphinxcontrib.googleanalytics ------------------------------- googleanalytics_id = "G-Y9QSN78RFV" -# Bibtex +# -- Options for sphinxcontrib.bibtex ---------------------------------------- bibtex_bibfiles = ["Bibliography.bib"] diff --git a/doc/images/Transformer/Windings_Common.tikz b/doc/images/Transformer/Windings_Common.tikz index 451d9564..229ac631 100644 --- a/doc/images/Transformer/Windings_Common.tikz +++ b/doc/images/Transformer/Windings_Common.tikz @@ -115,7 +115,7 @@ to[short, -] (\xfive, \yfour)% to[L, mirror, name=y] (\xstep, \yfour)% to[short, -] (\xfive, \ytwo);% - \draw[red, text=black] (\xzero, \yseven) node [left] {b}% + \draw[red, text=black] (\xzero, \yseven) node [left] {c}% to[short, -] (\xzero, \yeight)% to[short, -] (\xfive, \yeight)% to[short, -] (\xfive, \yseven)% @@ -188,7 +188,7 @@ 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} % + \draw[RoseauGreen, text=black] (\xzero, \yseven) node[left] {c} % to[L, name=z1] (\xtwo, \yseven)% to[short, -] (\xfive, \yfour)% to[L, mirror, name=y2] (\xfour, \yfour);% diff --git a/doc/models/Bus.md b/doc/models/Bus.md index 37ef7d1c..fb5509f0 100644 --- a/doc/models/Bus.md +++ b/doc/models/Bus.md @@ -50,7 +50,7 @@ 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). +[short-circuit analysis](../usage/Short_Circuit.md). Here is an example of a simple short-circuit between two phases: From 1ed0a23e8f3848cb5b29374294b78c6ac69a0b07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Vinot?= Date: Wed, 9 Aug 2023 09:38:01 +0200 Subject: [PATCH 6/9] Update the upgrade script --- scripts/network_files_upgrade.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/network_files_upgrade.py b/scripts/network_files_upgrade.py index 550d17de..46bd35d3 100644 --- a/scripts/network_files_upgrade.py +++ b/scripts/network_files_upgrade.py @@ -5,17 +5,17 @@ from roseau.load_flow import ElectricalNetwork, RoseauLoadFlowException PROJECT_ROOT = Path(__file__).parent.parent -DATA_DIR = PROJECT_ROOT / "roseau" / "load_flow" / "tests" / "data" -DOC_DATA_DIR = PROJECT_ROOT / "doc" / "notebooks" / "data" +TEST_DATA_DIR = PROJECT_ROOT / "roseau" / "load_flow" / "tests" / "data" +DATA_DIR = PROJECT_ROOT / "data" def all_network_paths() -> Generator[Path, None, None]: # Test networks - yield from (DATA_DIR / "networks").glob("**/network*.json") + yield from (TEST_DATA_DIR / "networks").glob("**/network*.json") # Benchmark networks - yield from (DATA_DIR / "benchmark").glob("**/network*.json") - # Documentation networks - yield from DOC_DATA_DIR.glob("*.json") + yield from (TEST_DATA_DIR / "benchmark").glob("**/network*.json") + # Package data + yield from DATA_DIR.glob("*.json") def upgrade_network(path: Path) -> None: From 738a8da03bcfea416088ce7f77b87aeb35e371c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Vinot?= Date: Wed, 9 Aug 2023 15:54:45 +0200 Subject: [PATCH 7/9] Corrections --- doc/usage/Connecting_Elements.md | 13 ++++++------- doc/usage/Flexible_Loads.md | 19 +++++++++---------- doc/usage/Getting_Started.md | 32 ++++++++++++++++---------------- doc/usage/Short_Circuit.md | 4 ++-- 4 files changed, 33 insertions(+), 35 deletions(-) diff --git a/doc/usage/Connecting_Elements.md b/doc/usage/Connecting_Elements.md index ca91e568..1d16eb17 100644 --- a/doc/usage/Connecting_Elements.md +++ b/doc/usage/Connecting_Elements.md @@ -2,7 +2,7 @@ ## Creating a network -Let's take the electrical network of the [Getting started](usage-getting-started). +Let's take the electrical network of the [Getting started page](usage-getting-started). ```pycon >>> import numpy as np @@ -29,7 +29,7 @@ Let's take the electrical network of the [Getting started](usage-getting-started ... ) ``` -At this point, all the elements are connected but don't belong to a network: +At this point, all the elements are connected, but they do not belong to a network: ```pycon >>> load.network @@ -63,7 +63,7 @@ The load flow can be solved: In order to disconnect an element from the network, the `disconnect` method is available. -```{warning} +```{note} The `disconnect` method is only available for loads and for voltage sources. ``` @@ -71,7 +71,7 @@ The `disconnect` method is only available for loads and for voltage sources. >>> load.disconnect() ``` -Now, the load does not belong any more to the network `en`. Symmetrically, the network doesn't have this load any more: +Now, the load does not belong anymore to the network `en`. Symmetrically, the network doesn't have this load anymore: ```pycon >>> load.network @@ -98,14 +98,13 @@ methods may raise errors. ## Connecting an element -The connection of an element to an existing network is automatically done when the elements are built. Let's create -a new line and a new load at the end of this line. +Let's create a new line and a new load at the end of this line. The new bus and the new load are created first. ```pycon >>> new_bus = Bus(id="new_bus", phases="abcn") ->>> new_load = PowerLoad(id="new_load", bus=new_bus, phases="an", powers=[6e3]) #W +>>> new_load = PowerLoad(id="new_load", bus=new_bus, phases="an", powers=[6e3]) # W ``` At this point, they don't belong to any network: diff --git a/doc/usage/Flexible_Loads.md b/doc/usage/Flexible_Loads.md index d4eb765b..ea1339e3 100644 --- a/doc/usage/Flexible_Loads.md +++ b/doc/usage/Flexible_Loads.md @@ -175,17 +175,19 @@ array([243.08225748, 232.46046866, 233.62854073]) ``` The actually produced power of the flexible load is a result of the computation and can be -accessed using the `res_flexible_powers` property of the load. Here, one can note that: - -* The active power for the phase `'a'` is negative meaning production; -* The actual value of this active power is lower that the one requested as the control was activated; -* The power for phases `'b'` and `'c'` is 0 VA as expected. +accessed using the `res_flexible_powers` property of the load. ```pycon >>> flexible_load.res_flexible_powers array([-2757.8035271+0.j, 0.+0.j, 0.+0.j]) ``` +Here, one can note that: + +* The active power for the phase `'a'` is negative meaning production; +* The actual value of this active power is lower that the one requested as the control was activated; +* The power for phases `'b'` and `'c'` is 0 VA as expected. + ## $PQ(U)$ control Now, let's remove the flexible load that we have added in the previous section and add a new @@ -229,14 +231,11 @@ The load flow can be solved again. 6 >>> abs(load_bus3.res_voltages) array([239.5133208 , 230.2108052 , 237.59184615]) +>>> flexible_load.res_flexible_powers +array([-2566.23768012+3068.29336425j, 0.+0.j, 0.+0.j]) ``` One can note that this time, the phase `'a'` consumes reactive power to limit the voltage rise in the network. Moreover, the magnitude of the power on phase `'a'` is approximately $4 kVA$ which is the maximum allowed apparent power for `load3`. In order to maintain this maximum, a [Euclidean projection](models-flexible_load-projection) has been used. - -```pycon ->>> flexible_load.res_flexible_powers -array([-2566.23768012+3068.29336425j, 0.+0.j, 0.+0.j]) -``` diff --git a/doc/usage/Getting_Started.md b/doc/usage/Getting_Started.md index e07475f8..4d79495d 100644 --- a/doc/usage/Getting_Started.md +++ b/doc/usage/Getting_Started.md @@ -34,17 +34,17 @@ The following is a summary of the available elements: * Loads: The ZIP load model is available via the following classes: * `ImpedanceLoad`: A constant impedance (Z) load: $S = |V|^2 \times \overline{Z}$, $|S|$ is proportional to $|V|^2$. - * `CurrentLoad` A constant impedance (I) load: $S = V \times \overline{I}$, $|S|$ is proportional to $|V|^1$. + * `CurrentLoad` A constant current (I) load: $S = V \times \overline{I}$, $|S|$ is proportional to $|V|^1$. * `PowerLoad`: A constant power (P) load: $S = \mathrm{constant}$, $|S|$ is proportional to $|V|^0$. A power load can be made flexible (controllable) by using the following class: * `FlexibleParameter`: This object defines the parameters of the flexible load's control (Maximum power, projection, type, etc.) - Note that flexible loads are an [advanced](usage-flexible-loads) feature that most users don't need. + Note that flexible loads are an advanced feature that most users don't need. They are explained in details [here](usage-flexible-loads). * Sources: - * `VoltageSource`: A voltage source has a constant voltage and an infinite power source. + * `VoltageSource`: Represents an infinite power source with a constant voltage. * Others: * `Ground`: A ground acts as a perfect conductor. If two elements are connected to the ground, the potentials at the @@ -109,7 +109,7 @@ for the load flow resolution to be well-defined. A network MUST have one and onl reference per a galvanically isolated section. ``` -```{note} +```{tip} The `Ground` element is not required in this simple network as it is connected to a single element. No current will flow through the ground and no two points in the network will be forced to have the same potential. In this scenario you are allowed to define the potential reference @@ -130,7 +130,7 @@ automatically included into the network. ## Solving a load flow An authentication is required. Please contact us at contact@roseautechnologies.com to get the necessary credentials. -Then, the load flow can be solved by requesting our server (requires Internet access). +Then, the load flow can be solved by requesting our server **(requires Internet access)**. ```{note} The server takes some time to warm up the first time it is requested. Subsequent requests will execute faster. @@ -142,8 +142,8 @@ The server takes some time to warm up the first time it is requested. Subsequent 2 ``` -It returns the number of iterations performed by the *Newton-Raphson* solver. Here, 2. To have some additional results -regarding the convergence, the field `res_info` is available in the network. +It returns the number of iterations performed by the *Newton-Raphson* solver, here *2*. More information about the +load flow resolution is available via the `res_info` attribute. ```pycon >>> en.res_info @@ -205,17 +205,17 @@ The results returned by the `res_` properties are also `Quantity` objects. The available results depend on the type of element. The following table summarizes the available results for each element type: -| Element type | Available results | -|---------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `Bus` | `res_potentials`, `res_voltages` | +| Element type | Available results | +|---------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------| +| `Bus` | `res_potentials`, `res_voltages` | | `Line` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages`, `res_series_power_losses`, `res_shunt_power_losses`, `res_power_losses` | -| `Transformer`, `Switch` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages` | -| `ImpedanceLoad`, `CurrentLoad`, `PowerLoad` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages`, `res_flexible_powers`[^**] | -| `VoltageSource` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages` | -| `Ground` | `res_potential` | -| `PotentialRef` | `res_current` *(Always zero for a successful load flow)* | +| `Transformer`, `Switch` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages` | +| `ImpedanceLoad`, `CurrentLoad`, `PowerLoad` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages`, `res_flexible_powers`⁎ | +| `VoltageSource` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages` | +| `Ground` | `res_potential` | +| `PotentialRef` | `res_current` *(Always zero for a successful load flow)* | -[^**]: `res_flexible_powers` is only available for flexible loads (`PowerLoad`s with `flexible_params`). You'll see +⁎: `res_flexible_powers` is only available for flexible loads (`PowerLoad`s with `flexible_params`). You'll see an example on the usage of flexible loads in the *Flexible Loads* section. ### Getting results per object diff --git a/doc/usage/Short_Circuit.md b/doc/usage/Short_Circuit.md index 2320d66a..2be710f2 100644 --- a/doc/usage/Short_Circuit.md +++ b/doc/usage/Short_Circuit.md @@ -74,7 +74,7 @@ All the following tables are rounded to 2 decimals to be properly displayed. | line2 | c | -0.49-0.21j | 0j | 14.9-126.71j | 0j | -117.06+208.26j | -120.25+224.73j | | line2 | n | 0.1+0j | 0j | 0.15-0.85j | 0j | 1.63-8.2j | 4.88-24.6j | -Looking at the line results of the second bus of the line "line2", which is "bus2" where we added the short-circuit, +Looking at the line results of the second bus of the line `line2`, which is `bus2` where we added the short-circuit, one can notice that: * the potentials of phases "a" and "b" are equal; @@ -143,7 +143,7 @@ between phase "a" and ground. |:----------|----------:| | gnd | 0j | -Here the potential at phase "a" of bus "bus2" is zero, equal to the ground potential. The sum of the currents in the +Here the potential at phase "a" of bus `bus2` is zero, equal to the ground potential. The sum of the currents in the other phases is also zero indicating that the current of phase "a" went through the ground. ## Additional notes From fa551a55e36f20b0024ed634896317feb6744ea9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Vinot?= Date: Wed, 9 Aug 2023 17:04:21 +0200 Subject: [PATCH 8/9] Remove docker installation screenshots --- doc/_static/2022_10_20_Installation_1.png | 3 --- doc/_static/2022_10_20_Installation_2.png | 3 --- doc/_static/2022_10_20_Installation_3.png | 3 --- doc/_static/2022_10_20_Installation_4.png | 3 --- doc/_static/2022_10_20_Installation_5.png | 3 --- doc/_static/2022_10_20_Installation_6.png | 3 --- 6 files changed, 18 deletions(-) delete mode 100644 doc/_static/2022_10_20_Installation_1.png delete mode 100644 doc/_static/2022_10_20_Installation_2.png delete mode 100644 doc/_static/2022_10_20_Installation_3.png delete mode 100644 doc/_static/2022_10_20_Installation_4.png delete mode 100644 doc/_static/2022_10_20_Installation_5.png delete mode 100644 doc/_static/2022_10_20_Installation_6.png diff --git a/doc/_static/2022_10_20_Installation_1.png b/doc/_static/2022_10_20_Installation_1.png deleted file mode 100644 index ebe1f655..00000000 --- a/doc/_static/2022_10_20_Installation_1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8ff504361df1ea0fec0e7e066f19ea959bbe185151b32aff1253599f458977c4 -size 25428 diff --git a/doc/_static/2022_10_20_Installation_2.png b/doc/_static/2022_10_20_Installation_2.png deleted file mode 100644 index 64a935f6..00000000 --- a/doc/_static/2022_10_20_Installation_2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dd03d616fc2fbe0c3c54871c656a1369902e6c834e0194d93865f693a15e1e42 -size 74823 diff --git a/doc/_static/2022_10_20_Installation_3.png b/doc/_static/2022_10_20_Installation_3.png deleted file mode 100644 index 1c8875a1..00000000 --- a/doc/_static/2022_10_20_Installation_3.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:acf6c0044258c452c25cee615f84874d79bfa61c50f07978d26aea06456b2477 -size 531643 diff --git a/doc/_static/2022_10_20_Installation_4.png b/doc/_static/2022_10_20_Installation_4.png deleted file mode 100644 index ae5ff69f..00000000 --- a/doc/_static/2022_10_20_Installation_4.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60573d4153849eb35889b5de1371b30f911a2a958ac288a55254b1e1f401add7 -size 34717 diff --git a/doc/_static/2022_10_20_Installation_5.png b/doc/_static/2022_10_20_Installation_5.png deleted file mode 100644 index db071923..00000000 --- a/doc/_static/2022_10_20_Installation_5.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d931882dd612c73bee642c0c7377dd30936a62ca8bfb18b683f09ce8f07118d2 -size 69229 diff --git a/doc/_static/2022_10_20_Installation_6.png b/doc/_static/2022_10_20_Installation_6.png deleted file mode 100644 index db071923..00000000 --- a/doc/_static/2022_10_20_Installation_6.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d931882dd612c73bee642c0c7377dd30936a62ca8bfb18b683f09ce8f07118d2 -size 69229 From 349cae914110eaa8ccf55accfc5535d88429717d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Vinot?= Date: Thu, 10 Aug 2023 10:38:12 +0200 Subject: [PATCH 9/9] Corrections --- doc/usage/Connecting_Elements.md | 6 ++---- doc/usage/Getting_Started.md | 34 ++++++++++++++------------------ 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/doc/usage/Connecting_Elements.md b/doc/usage/Connecting_Elements.md index 1d16eb17..eea37199 100644 --- a/doc/usage/Connecting_Elements.md +++ b/doc/usage/Connecting_Elements.md @@ -17,11 +17,9 @@ Let's take the electrical network of the [Getting started page](usage-getting-st >>> un = 400 / np.sqrt(3) ... source_voltages = [un, un * np.exp(-2j * np.pi / 3), un * np.exp(2j * np.pi / 3)] -... vs = VoltageSource(id="vs", bus=source_bus, phases="abcn", voltages=source_voltages) +... vs = VoltageSource(id="vs", bus=source_bus, voltages=source_voltages) ->>> load = PowerLoad( -... id="load", bus=load_bus, phases="abcn", powers=[10e3 + 0j, 10e3, 10e3] -... ) # VA +>>> load = PowerLoad(id="load", bus=load_bus, powers=[10e3 + 0j, 10e3, 10e3]) # VA >>> lp = LineParameters("lp", z_line=(0.1 + 0.0j) * np.eye(4, dtype=complex)) ... line = Line( diff --git a/doc/usage/Getting_Started.md b/doc/usage/Getting_Started.md index 4d79495d..2a31d714 100644 --- a/doc/usage/Getting_Started.md +++ b/doc/usage/Getting_Started.md @@ -17,7 +17,7 @@ In this tutorial you will learn how to: ## Creating a network -An electrical network can be built by assembling basic elements provided in [roseau.load_flow.models][api-models]. +An electrical network can be built by assembling basic elements described in the [Models section](../models/index.md). The following is a summary of the available elements: * Buses: @@ -52,7 +52,7 @@ The following is a summary of the available elements: * `PotentialRef`: A potential reference sets the reference of potentials in the network. It can be connected to buses or grounds. -For a more detailed description of the elements, please refer to the [API reference][api-models]. +For a more detailed description of the elements, please refer to the [API reference](../autoapi/roseau/load_flow/models/index). Let's use some of these elements to build the following network with a voltage source, a simple line and a constant power load. This network is a low voltage network (three-phase + neutral wire). @@ -79,19 +79,15 @@ It leads to the following code ... # Volts (phase-to-neutral because the source is connected to the neutral) ... un = 400 / np.sqrt(3) ... source_voltages = [un, un * np.exp(-2j * np.pi / 3), un * np.exp(2j * np.pi / 3)] -... vs = VoltageSource(id="vs", bus=source_bus, phases="abcn", voltages=source_voltages) +... vs = VoltageSource(id="vs", bus=source_bus, voltages=source_voltages) >>> # Add a load at the second bus -... load = PowerLoad( -... id="load", bus=load_bus, phases="abcn", powers=[10e3 + 0j, 10e3, 10e3] -... ) # VA +... load = PowerLoad(id="load", bus=load_bus, powers=[10e3 + 0j, 10e3, 10e3]) # VA >>> # Add a LV line between the source bus and the load bus ... # R = 0.1 Ohm/km, X = 0 ... lp = LineParameters("lp", z_line=(0.1 + 0.0j) * np.eye(4, dtype=complex)) -... line = Line( -... id="line", bus1=source_bus, bus2=load_bus, phases="abcn", parameters=lp, length=2.0 -... ) +... line = Line(id="line", bus1=source_bus, bus2=load_bus, parameters=lp, length=2.0) ``` At this point, all the basic elements of the network have been defined and connected. Now, @@ -171,6 +167,8 @@ The available values are: * `iterations`: the number of iterations made by the solver. * `residual`: the precision which was reached by the solver (lower than the tolerance if successful solve). +More details on solvers are given in the [Solvers page](../Solvers.md). + (gs-getting-results)= ## Getting the results @@ -205,15 +203,15 @@ The results returned by the `res_` properties are also `Quantity` objects. The available results depend on the type of element. The following table summarizes the available results for each element type: -| Element type | Available results | -|---------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------| -| `Bus` | `res_potentials`, `res_voltages` | +| Element type | Available results | +|---------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------| +| `Bus` | `res_potentials`, `res_voltages` | | `Line` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages`, `res_series_power_losses`, `res_shunt_power_losses`, `res_power_losses` | -| `Transformer`, `Switch` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages` | -| `ImpedanceLoad`, `CurrentLoad`, `PowerLoad` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages`, `res_flexible_powers`⁎ | -| `VoltageSource` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages` | -| `Ground` | `res_potential` | -| `PotentialRef` | `res_current` *(Always zero for a successful load flow)* | +| `Transformer`, `Switch` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages` | +| `ImpedanceLoad`, `CurrentLoad`, `PowerLoad` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages`, `res_flexible_powers`⁎ | +| `VoltageSource` | `res_currents`, `res_powers`, `res_potentials`, `res_voltages` | +| `Ground` | `res_potential` | +| `PotentialRef` | `res_current` *(Always zero for a successful load flow)* | ⁎: `res_flexible_powers` is only available for flexible loads (`PowerLoad`s with `flexible_params`). You'll see an example on the usage of flexible loads in the *Flexible Loads* section. @@ -471,5 +469,3 @@ the load flow can then be loaded using the `ElectricalNetwork.results_from_json` >>> en = ElectricalNetwork.from_json("my_network.json") >>> en.results_from_json("my_network_results.json") ``` - -[api-models]: ../autoapi/roseau/load_flow/models/index