From ff7255441e58f104c80d4a8e89c90fd8de9ddddf Mon Sep 17 00:00:00 2001 From: louispt1 Date: Wed, 13 Aug 2025 11:43:19 +0200 Subject: [PATCH 1/5] Export output curves to a separate file by default on to_excel --- README.md | 8 +- examples/scenario_to_excel.ipynb | 85 +++++++++++++-- .../models/packables/output_curves_pack.py | 101 +++++++++++++++++- src/pyetm/models/scenario.py | 38 ++++++- src/pyetm/models/scenario_packer.py | 46 +++++++- src/pyetm/models/scenarios.py | 19 +++- 6 files changed, 267 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 385b7ff..6fc9dbd 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,13 @@ This package provides a set of tools for interaction with the Energy Transition Model's API. Learn more about the Energy Transition Model [here](https://energytransitionmodel.com/). The -package is designed to be a modular tool that advanced users can incorporate into their workflows. The +package is designed to be a modular tool that advanced users can incorporate into their scenario workflows. The complete documentation is available [via the ETM documentation page](https://docs.energytransitionmodel.com/main/pyetm/introduction). ## Installation -You can clone the pyetm from [our Github](https://github.com/quintel/pyetm). The package is also -available via pip like any other python package - install it and use it in your project! +You can clone pyetm from [our Github](https://github.com/quintel/pyetm). The package is also +available via pip - install it and use it in your project! ``` pip install pyetm ``` @@ -20,7 +20,7 @@ in VS Code, follow the beginner friendly guide at [Running notebooks](running_no ## Getting started Make sure you have [Python 3](https://www.python.org/downloads/) installed. Then, install all required libraries by opening a terminal/command-prompt window in the `pyetm` folder (or navigate to this folder -in the terminal using `cd "path/to/scenario-tools-folder"`). All following examples of running the tool +in the terminal using `cd "path/to/pytem-folder"`). All following examples of running the tool expect you to be in this folder. #### Using pipenv diff --git a/examples/scenario_to_excel.ipynb b/examples/scenario_to_excel.ipynb index 6071b68..fa0c70e 100644 --- a/examples/scenario_to_excel.ipynb +++ b/examples/scenario_to_excel.ipynb @@ -10,10 +10,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "4e9a9e7c", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Environment setup complete\n", + " Using ETM API at http://localhost:3000/api/v3\n", + " Token loaded? True\n", + "API connection ready\n" + ] + } + ], "source": [ "from example_helpers import setup_notebook\n", "from pyetm.models import Scenario\n", @@ -39,7 +50,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "c4f42def", "metadata": {}, "outputs": [], @@ -96,10 +107,52 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "fa8ac6ab", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " II3050v2_EUR_2050 \\\n", + "input \n", + "agriculture_bio_kerosene_in_crude_oil_share 0.0 \n", + "agriculture_biodiesel_in_crude_oil_share 0.0 \n", + "agriculture_burner_crude_oil_share 0.0 \n", + "agriculture_burner_hydrogen_share 0.0 \n", + "agriculture_burner_network_gas_share 0.0 \n", + "... ... \n", + "wtp_of_industry_chemicals_other_flexibility_p2h... 25.0 \n", + "wtp_of_industry_chemicals_refineries_flexibilit... 25.0 \n", + "wtp_of_industry_other_food_flexibility_p2h_elec... 25.0 \n", + "wtp_of_industry_other_paper_flexibility_p2h_ele... 25.0 \n", + "wtp_of_transport_car_flexibility_p2p_electricity 5.0 \n", + "\n", + " II3050v2_NAT_2050 \n", + "input \n", + "agriculture_bio_kerosene_in_crude_oil_share 0.0 \n", + "agriculture_biodiesel_in_crude_oil_share 0.0 \n", + "agriculture_burner_crude_oil_share 0.0 \n", + "agriculture_burner_hydrogen_share 0.0 \n", + "agriculture_burner_network_gas_share 0.0 \n", + "... ... \n", + "wtp_of_industry_chemicals_other_flexibility_p2h... 25.0 \n", + "wtp_of_industry_chemicals_refineries_flexibilit... 25.0 \n", + "wtp_of_industry_other_food_flexibility_p2h_elec... 25.0 \n", + "wtp_of_industry_other_paper_flexibility_p2h_ele... 25.0 \n", + "wtp_of_transport_car_flexibility_p2p_electricity 5.0 \n", + "\n", + "[1318 rows x 2 columns]\n", + " 2690456 2690455\n", + "scenario \n", + "end_year 2050 2050\n", + "private False False\n", + "area_code nl2019 nl2019\n", + "template None None\n" + ] + } + ], "source": [ "from pyetm.models import ScenarioPacker\n", "\n", @@ -126,10 +179,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "739e2a12", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " II3050v2_EUR_2050\n", + " future\n", + "gquery unit \n", + "dashboard_total_costs bln_euro 69.189065\n", + "dashboard_co2_emissions_versus_start_year factor -1.026581\n" + ] + } + ], "source": [ "scenario.add_queries(\n", " [\"dashboard_total_costs\", \"dashboard_co2_emissions_versus_start_year\"]\n", @@ -161,7 +226,7 @@ " [\"dashboard_emissions\"]\n", ")\n", "\n", - "packer.to_excel('my_excel.xlsx')" + "# packer.to_excel('my_excel.xlsx')" ] }, { @@ -174,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "bffd54b8", "metadata": {}, "outputs": [], @@ -187,7 +252,7 @@ "packer.add_sortables(scenario2)\n", "\n", "\n", - "# packer.to_excel('testing_output_curves.xlsx')" + "packer.to_excel('full_scenario.xlsx')" ] } ], diff --git a/src/pyetm/models/packables/output_curves_pack.py b/src/pyetm/models/packables/output_curves_pack.py index ff90d49..58b0a60 100644 --- a/src/pyetm/models/packables/output_curves_pack.py +++ b/src/pyetm/models/packables/output_curves_pack.py @@ -1,9 +1,10 @@ import logging -from typing import ClassVar, Any - +from typing import ClassVar, Any, Optional, Sequence, Tuple +from xlsxwriter import Workbook +from pyetm.models.output_curves import OutputCurves import pandas as pd - from pyetm.models.packables.packable import Packable +from pyetm.utils.excel import add_frame logger = logging.getLogger(__name__) @@ -26,3 +27,97 @@ def _build_dataframe_for_scenario(self, scenario: Any, columns: str = "", **kwar def _to_dataframe(self, columns="", **kwargs) -> pd.DataFrame: return self.build_pack_dataframe(columns=columns, **kwargs) + + def to_excel_per_carrier( + self, path: str, carriers: Optional[Sequence[str]] = None + ) -> None: + + # Determine carrier selection + carrier_map = OutputCurves._load_carrier_mappings() + valid_carriers = list(carrier_map.keys()) + selected = list(valid_carriers if carriers is None else carriers) + selected = [c for c in selected if c in valid_carriers] + if not selected: + selected = valid_carriers + + # Nothing to do without scenarios + if not self.scenarios: + return + + wrote_any = False + workbook = None + try: + # Sort scenarios for deterministic sheet layout + scenarios_sorted = sorted(self.scenarios, key=lambda s: s.id) + + for carrier in selected: + series_entries: list[Tuple[Tuple[str, str], pd.Series]] = [] + + for scenario in scenarios_sorted: + # Scenario label + try: + scenario_name = str(scenario.identifier()) + except Exception: + scenario_name = str(getattr(scenario, "id", "scenario")) + + # Fetch curves mapping safely + curves = None + if hasattr(scenario, "get_output_curves") and callable( + getattr(scenario, "get_output_curves") + ): + try: + curves = scenario.get_output_curves(carrier) + except Exception: + curves = None + if not isinstance(curves, dict) or not curves: + continue + + for curve_name, df in curves.items(): + if df is None: + continue + try: + if isinstance(df, pd.Series): + s = df.copy() + series_entries.append(((scenario_name, curve_name), s)) + elif isinstance(df, pd.DataFrame): + if df.empty: + continue + if df.shape[1] == 1: + s = df.iloc[:, 0].copy() + series_entries.append( + ((scenario_name, curve_name), s) + ) + else: + for col in df.columns: + s = df[col].copy() + sub_curve = f"{curve_name}:{col}" + series_entries.append( + ((scenario_name, sub_curve), s) + ) + except Exception: + continue + + if not series_entries: + continue + + cols: list[Tuple[str, str]] = [key for key, _ in series_entries] + frames = [s for _, s in series_entries] + combined = pd.concat(frames, axis=1) + combined.columns = pd.MultiIndex.from_tuples( + cols, names=["Scenario", "Curve"] + ) + + # Lazily create the workbook on first real data + if workbook is None: + workbook = Workbook(str(path)) + add_frame( + name=carrier.upper(), + frame=combined, + workbook=workbook, + column_width=18, + scenario_styling=True, + ) + wrote_any = True + finally: + if workbook is not None and wrote_any: + workbook.close() diff --git a/src/pyetm/models/scenario.py b/src/pyetm/models/scenario.py index 36ab2ee..c87e6e4 100644 --- a/src/pyetm/models/scenario.py +++ b/src/pyetm/models/scenario.py @@ -111,15 +111,43 @@ def from_excel(cls, xlsx_path: PathLike | str) -> List["Scenario"]: scenarios.sort(key=lambda s: s.id) return scenarios - def to_excel(self, path: PathLike | str, *others: "Scenario") -> None: + def to_excel( + self, + path: PathLike | str, + *others: "Scenario", + export_output_curves: bool = True, + output_curves_path: str | None = None, + carriers: list[str] | None = None, + ) -> None: """ Export this scenario – and optionally additional scenarios – to an Excel file. + Output curves are exported to a separate workbook by default, with one sheet + per carrier. Use carriers to filter which carriers to include. """ - from pyetm.models.scenario_packer import ScenarioPacker + from pyetm.models.scenarios import Scenarios + + Scenarios(items=[self, *others]).to_excel( + path, + export_output_curves=export_output_curves, + output_curves_path=output_curves_path, + carriers=carriers, + ) - packer = ScenarioPacker() - packer.add(self, *others) - packer.to_excel(str(path)) + # Deprecated helper retained for backwards compatibility: route to main to_excel + def to_output_curves_excel( + self, + path: PathLike | str, + *others: "Scenario", + carriers: list[str] | None = None, + ) -> None: + from pyetm.models.scenarios import Scenarios + + Scenarios(items=[self, *others]).to_excel( + path, + export_output_curves=True, + output_curves_path=str(path), + carriers=carriers, + ) def update_metadata(self, **kwargs) -> Dict[str, Any]: """ diff --git a/src/pyetm/models/scenario_packer.py b/src/pyetm/models/scenario_packer.py index c024c5b..cf5cafb 100644 --- a/src/pyetm/models/scenario_packer.py +++ b/src/pyetm/models/scenario_packer.py @@ -1,8 +1,9 @@ import pandas as pd import logging +from pathlib import Path from os import PathLike from pydantic import BaseModel -from typing import Optional, Dict, Any +from typing import Optional, Dict, Any, Sequence from xlsxwriter import Workbook from pyetm.models.packables.custom_curves_pack import CustomCurvesPack @@ -78,7 +79,14 @@ def custom_curves(self) -> pd.DataFrame: def output_curves(self) -> pd.DataFrame: return self._output_curves.to_dataframe() - def to_excel(self, path: str): + def to_excel( + self, + path: str, + *, + export_output_curves: bool = True, + output_curves_path: Optional[str] = None, + carriers: Optional[Sequence[str]] = None, + ): if len(self._scenarios()) == 0: raise ValueError("Packer was empty, nothing to export") @@ -97,6 +105,9 @@ def to_excel(self, path: str): ) for pack in self.all_pack_data(): + # Skip output curves in the main workbook; exported separately + if getattr(pack, "key", None) == OutputCurvesPack.key: + continue df = pack.to_dataframe() if not df.empty: df_filled = df.fillna("").infer_objects(copy=False) @@ -110,12 +121,37 @@ def to_excel(self, path: str): workbook.close() + # Export output curves to a separate workbook with one sheet per carrier + if export_output_curves: + oc_path = output_curves_path + if oc_path is None: + base = Path(path) + oc_path = str(base.with_name(f"{base.stem}_output_curves{base.suffix}")) + try: + self._output_curves.to_excel_per_carrier(oc_path, carriers) + except Exception as e: + logger.warning("Failed exporting output curves workbook: %s", e) + def _scenarios(self) -> set["Scenario"]: """ - All scenarios we are packing info for: for these we need to insert - their metadata + All scenarios we are packing info for across all packs. """ - return set.union(*map(set, (pack.scenarios for pack in self.all_pack_data()))) + all_scenarios: set["Scenario"] = set() + for pack in self.all_pack_data(): + try: + items = getattr(pack, "scenarios", None) + if not items: + continue + if isinstance(items, set): + all_scenarios.update(items) + else: + try: + all_scenarios.update(list(items)) + except TypeError: + continue + except Exception: + continue + return all_scenarios def all_pack_data(self): """Yields each subpack""" diff --git a/src/pyetm/models/scenarios.py b/src/pyetm/models/scenarios.py index 94abc60..5842a23 100644 --- a/src/pyetm/models/scenarios.py +++ b/src/pyetm/models/scenarios.py @@ -1,6 +1,6 @@ from __future__ import annotations from os import PathLike -from typing import Iterable, Iterator, List +from typing import Iterable, Iterator, List, Optional, Sequence from pydantic import BaseModel, Field from .scenario import Scenario @@ -28,16 +28,29 @@ def add(self, *scenarios: Scenario) -> None: def extend(self, scenarios: Iterable[Scenario]) -> None: self.items.extend(list(scenarios)) - def to_excel(self, path: PathLike | str) -> None: + def to_excel( + self, + path: PathLike | str, + *, + export_output_curves: bool = True, + output_curves_path: Optional[str] = None, + carriers: Optional[Sequence[str]] = None, + ) -> None: """ Export all scenarios in this collection to an Excel workbook. + Output curves are written to a separate workbook by default (one sheet per carrier). """ from .scenario_packer import ScenarioPacker packer = ScenarioPacker() if self.items: packer.add(*self.items) - packer.to_excel(str(path)) + packer.to_excel( + str(path), + export_output_curves=export_output_curves, + output_curves_path=output_curves_path, + carriers=carriers, + ) @classmethod def from_excel(cls, xlsx_path: PathLike | str) -> "Scenarios": From 142a94d7bc86e118e88e3bcde6339ca6cdd88c59 Mon Sep 17 00:00:00 2001 From: louispt1 Date: Wed, 13 Aug 2025 12:35:04 +0200 Subject: [PATCH 2/5] Fixed metadata output to_excel --- .gitignore | 2 + examples/example_input_excel.xlsx | Bin 0 -> 1370069 bytes examples/excel_to_scenarios.ipynb | 620 +++++++++--------- examples/full_multi_scenario_flow.ipynb | 2 +- examples/scenario_to_excel.ipynb | 8 +- src/pyetm/models/scenario_packer.py | 124 +++- .../scenario_runners/update_metadata.py | 3 +- src/pyetm/utils/excel.py | 12 +- .../scenario_runners/test_update_metadata.py | 7 +- 9 files changed, 444 insertions(+), 334 deletions(-) create mode 100644 examples/example_input_excel.xlsx diff --git a/.gitignore b/.gitignore index 8ec5ae8..20a694b 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,5 @@ import_graph.svg tmp/ *.xlsx +# Keep the example input +!examples/example_input_excel.xlsx diff --git a/examples/example_input_excel.xlsx b/examples/example_input_excel.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..72484746cb6a0c61a35334e07f63352aef97e9f8 GIT binary patch literal 1370069 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

_tdm_uz|Ihl8wf&zsvff32+V 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

)}e&1Dc<<#ke~{xlhr*`0s& z3Q7PFcuN$`;Xt^Clwmc7q(AL^;$ zc2$`E(#$F5g)L#J&Zh~h*EQpUI44}fXw4qHtyWD1k4x68slF0Dj#r~T_t93!rT(?} z@A{(bGvA|PSdCc>A-3h>1jXx@yDCpVdH|*JOM~SR-{_r{!txg>BHEvpqctU|6E0Ud zjfhgH9m>ccP{CS3J)ig&It-g=Gn2}*?TI6p{uZiF*?opA2unXe#jljftQ^Ige0HvP ze=V!X&CzueF+Qj4WfU&+A{RNeIBh>Waw8}ys>t*28kM&@#;W<<#{0UP2si7N;5p(% zxgS4V{b%_qo|24l5srU;&ZMD?@#Fb<@?@RQ1`XO@+^>k3Pj-@0q^&r-dlc3%G&R4! zdj$sB`8yZ4dhkrq2|LuazjKKQ!zK9FYzwN4@+4U-evl&_T1=dO`I=ERY&9A`T@gfN z1^?ksxT<05Ka;8lK9WgyDjfc%w?@F$tg4=p*F^vPAo&)ezD zZpNC@9?*=h$o%n*Xe21`nK-{z@_n`MG2|-i#PdWnGTiG9dLZ@3h>pY=ZQeVgVlgcm zG185T`zqdm=dB>J9$PJ_KRa>0Y#?pqaYbFIuh7`@TJ8PvR}(J~&LCAB+P4WIjB>+v zIrt`X5U{U?E9J3kwMz8vL9ptHsN1#bCIMis4P3q7UjI8=p@w-^b>oOm*+ZGJoGWx( zL0ol6ky^NO{S6$pNcOmT&QCB<1_udK@!<4v&`>iidUmCra(ZE@#R<#S2nrY(v%aT1 z)+L%o#cvlOQdR_5HU$m)qwB}#A?j2up9G_S9go|@z6gya&q74~0^#_Ay``S;94}XR z$LliXqF;46+ImL;%9PWd?_;L)K)j*4KAy=64?7?eC!96>SPz8bjmq5kFz?;6ZZ|V~ z&#aqVgVgo1<$ny>NwSeK1lax0{TkAvC7Ly(GV0)>!2IB0)WURegnFL+4z{FoC0(tZ z?%IEx-LhDPF4KQZ@`d5{t$3~}MQi2F21?;!BF>$WQVYL_O#rhHhBgk;T>CU~w88NQ zahB%X&#lmKbtfzRPbS*+lfuw0%qDR@dEm8?Arpk`v0>&m3TGwgk7X`G z{@hM0_cPYqvza{ z=NuhU6u>Uz@bUyJ387V;gUF?SYXUT6J7@I~M&&MVPN+qe=S2y7!OV;J+TN27TPMow zzk3L`4-~x`ygkf0a(ae8*nrH)jphHHZpW)rZY;p+U0VqigMUsY@8AmX zs%+!6dr6t;;J2;yy1vPZzg&t-=%<;5CocY90LH%0Ap5i<3y2k}AW}jVOYinG2f}HB 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\n", "\n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", "
scen_ascen_b
useruserscen_a
inputunit
climate_relevant_co2_biomass_gas_future%30.035.0agriculture_bio_kerosene_in_crude_oil_share0.0NaN
climate_relevant_co2_biomass_gas_present%20.0Noneagriculture_biodiesel_in_crude_oil_share0.0NaN
climate_relevant_co2_biomass_liquid_future%30.0Noneagriculture_burner_crude_oil_share0.0NaN
climate_relevant_co2_biomass_liquid_present%20.0Noneagriculture_burner_hydrogen_share0.0NaN
climate_relevant_co2_biomass_solid_future%30.0Noneagriculture_burner_network_gas_share0.0NaN
............
capacity_of_energy_battery_wind_turbine_inlandMWwtp_of_industry_chemicals_other_flexibility_p2h_electricity25.0NaN0.0
capacity_of_energy_power_hybrid_wind_turbine_offshoreMWwtp_of_industry_chemicals_refineries_flexibility_p2h_electricity25.0NaNNone
capacity_of_energy_power_wind_turbine_coastalMWwtp_of_industry_other_food_flexibility_p2h_electricity25.0NaN0.0
capacity_of_energy_power_wind_turbine_inlandMWwtp_of_industry_other_paper_flexibility_p2h_electricity25.0NaN20000.0
capacity_of_energy_power_wind_turbine_offshoreMWwtp_of_transport_car_flexibility_p2p_electricity5.0NaN52000.0
\n", @@ -180,25 +149,24 @@ "" ], "text/plain": [ - " scen_a scen_b\n", - " user user\n", - "input unit \n", - "climate_relevant_co2_biomass_gas_future % 30.0 35.0\n", - "climate_relevant_co2_biomass_gas_present % 20.0 None\n", - "climate_relevant_co2_biomass_liquid_future % 30.0 None\n", - "climate_relevant_co2_biomass_liquid_present % 20.0 None\n", - "climate_relevant_co2_biomass_solid_future % 30.0 None\n", - "... ... ...\n", - "capacity_of_energy_battery_wind_turbine_inland MW NaN 0.0\n", - "capacity_of_energy_power_hybrid_wind_turbine_of... MW NaN None\n", - "capacity_of_energy_power_wind_turbine_coastal MW NaN 0.0\n", - "capacity_of_energy_power_wind_turbine_inland MW NaN 20000.0\n", - "capacity_of_energy_power_wind_turbine_offshore MW NaN 52000.0\n", + " scen_b scen_a\n", + "input \n", + "agriculture_bio_kerosene_in_crude_oil_share 0.0 NaN\n", + "agriculture_biodiesel_in_crude_oil_share 0.0 NaN\n", + "agriculture_burner_crude_oil_share 0.0 NaN\n", + "agriculture_burner_hydrogen_share 0.0 NaN\n", + "agriculture_burner_network_gas_share 0.0 NaN\n", + "... ... ...\n", + "wtp_of_industry_chemicals_other_flexibility_p2h... 25.0 NaN\n", + "wtp_of_industry_chemicals_refineries_flexibilit... 25.0 NaN\n", + "wtp_of_industry_other_food_flexibility_p2h_elec... 25.0 NaN\n", + "wtp_of_industry_other_paper_flexibility_p2h_ele... 25.0 NaN\n", + "wtp_of_transport_car_flexibility_p2p_electricity 5.0 NaN\n", "\n", "[1318 rows x 2 columns]" ] }, - "execution_count": 6, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -209,7 +177,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 3, "id": "cd08ff26", "metadata": {}, "outputs": [ @@ -238,8 +206,8 @@ " \n", " \n", " \n", - " A: Create from excel\n", " B: Load a scenario by id\n", + " 2690658\n", " \n", " \n", " \n", @@ -279,14 +247,14 @@ " \n", " \n", " 0\n", - " households_flexibility_p2p_electricity\n", + " energy_flexibility_pumped_storage_electricity\n", " energy_hydrogen_storage_depleted_gas_field\n", " energy_hydrogen_storage_depleted_gas_field\n", " households_space_heater_district_heating_lt_st...\n", " energy_heat_network_storage_lt_steam_hot_water\n", " energy_heat_network_storage_mt_steam_hot_water\n", " energy_heat_network_storage_ht_steam_hot_water\n", - " energy_flexibility_pumped_storage_electricity\n", + " households_flexibility_p2p_electricity\n", " energy_hydrogen_storage_depleted_gas_field\n", " energy_hydrogen_storage_depleted_gas_field\n", " households_space_heater_district_heating_lt_st...\n", @@ -296,14 +264,14 @@ " \n", " \n", " 1\n", - " energy_flexibility_mv_batteries_electricity\n", + " transport_van_flexibility_p2p_electricity\n", " energy_hydrogen_storage_salt_cavern\n", " energy_hydrogen_storage_salt_cavern\n", " households_space_heater_heatpump_surface_water...\n", " energy_heat_boiler_lt_electricity\n", " energy_heat_boiler_mt_electricity\n", " energy_heat_boiler_ht_electricity\n", - " transport_van_flexibility_p2p_electricity\n", + " energy_flexibility_mv_batteries_electricity\n", " energy_hydrogen_storage_salt_cavern\n", " energy_hydrogen_storage_salt_cavern\n", " households_space_heater_heatpump_surface_water...\n", @@ -313,14 +281,14 @@ " \n", " \n", " 2\n", - " transport_car_flexibility_p2p_electricity\n", + " transport_truck_flexibility_p2p_electricity\n", " energy_hydrogen_autothermal_reformer_dispatchable\n", " None\n", " households_space_heater_heatpump_air_water_ele...\n", " energy_heat_burner_lt_hydrogen\n", " energy_heat_burner_mt_coal\n", " energy_heat_burner_ht_coal\n", - " transport_truck_flexibility_p2p_electricity\n", + " transport_car_flexibility_p2p_electricity\n", " energy_hydrogen_autothermal_reformer_dispatchable\n", " None\n", " households_space_heater_heatpump_air_water_ele...\n", @@ -330,14 +298,14 @@ " \n", " \n", " 3\n", - " energy_flexibility_flow_batteries_electricity\n", + " transport_bus_flexibility_p2p_electricity\n", " energy_hydrogen_steam_methane_reformer_dispatc...\n", " None\n", " households_space_heater_heatpump_ground_water_...\n", " energy_heat_heatpump_water_water_lt_electricity\n", " energy_heat_burner_mt_crude_oil\n", " energy_heat_burner_ht_crude_oil\n", - " transport_bus_flexibility_p2p_electricity\n", + " energy_flexibility_flow_batteries_electricity\n", " energy_hydrogen_steam_methane_reformer_dispatc...\n", " None\n", " households_space_heater_heatpump_ground_water_...\n", @@ -364,14 +332,14 @@ " \n", " \n", " 5\n", - " transport_bus_flexibility_p2p_electricity\n", + " energy_flexibility_flow_batteries_electricity\n", " None\n", " None\n", " households_space_heater_district_heating_mt_st...\n", " energy_heat_heatpump_waste_water_water_ts_lt_e...\n", " energy_heat_burner_mt_network_gas\n", " energy_heat_burner_ht_network_gas\n", - " energy_flexibility_flow_batteries_electricity\n", + " transport_bus_flexibility_p2p_electricity\n", " None\n", " None\n", " households_space_heater_district_heating_mt_st...\n", @@ -381,14 +349,14 @@ " \n", " \n", " 6\n", - " transport_truck_flexibility_p2p_electricity\n", + " transport_car_flexibility_p2p_electricity\n", " None\n", " None\n", " households_space_heater_hybrid_heatpump_air_wa...\n", " energy_heat_heatpump_drink_water_water_ts_lt_e...\n", " energy_heat_burner_mt_waste_mix\n", " energy_heat_burner_ht_waste_mix\n", - " transport_car_flexibility_p2p_electricity\n", + " transport_truck_flexibility_p2p_electricity\n", " None\n", " None\n", " households_space_heater_hybrid_heatpump_air_wa...\n", @@ -398,14 +366,14 @@ " \n", " \n", " 7\n", - " transport_van_flexibility_p2p_electricity\n", + " energy_flexibility_mv_batteries_electricity\n", " None\n", " None\n", " households_space_heater_hybrid_hydrogen_heatpu...\n", " None\n", " energy_heat_burner_mt_wood_pellets\n", " energy_heat_burner_ht_wood_pellets\n", - " energy_flexibility_mv_batteries_electricity\n", + " transport_van_flexibility_p2p_electricity\n", " None\n", " None\n", " households_space_heater_hybrid_hydrogen_heatpu...\n", @@ -415,14 +383,14 @@ " \n", " \n", " 8\n", - " energy_flexibility_pumped_storage_electricity\n", + " households_flexibility_p2p_electricity\n", " None\n", " None\n", " households_space_heater_hybrid_crude_oil_heatp...\n", " None\n", " energy_heat_heatpump_water_water_mt_electricity\n", " energy_heat_heatpump_water_water_ht_electricity\n", - " households_flexibility_p2p_electricity\n", + " energy_flexibility_pumped_storage_electricity\n", " None\n", " None\n", " households_space_heater_hybrid_crude_oil_heatp...\n", @@ -571,18 +539,18 @@ "" ], "text/plain": [ - " A: Create from excel \\\n", + " B: Load a scenario by id \\\n", " forecast_storage \n", "sortables \n", - "0 households_flexibility_p2p_electricity \n", - "1 energy_flexibility_mv_batteries_electricity \n", - "2 transport_car_flexibility_p2p_electricity \n", - "3 energy_flexibility_flow_batteries_electricity \n", + "0 energy_flexibility_pumped_storage_electricity \n", + "1 transport_van_flexibility_p2p_electricity \n", + "2 transport_truck_flexibility_p2p_electricity \n", + "3 transport_bus_flexibility_p2p_electricity \n", "4 energy_flexibility_hv_opac_electricity \n", - "5 transport_bus_flexibility_p2p_electricity \n", - "6 transport_truck_flexibility_p2p_electricity \n", - "7 transport_van_flexibility_p2p_electricity \n", - "8 energy_flexibility_pumped_storage_electricity \n", + "5 energy_flexibility_flow_batteries_electricity \n", + "6 transport_car_flexibility_p2p_electricity \n", + "7 energy_flexibility_mv_batteries_electricity \n", + "8 households_flexibility_p2p_electricity \n", "9 None \n", "10 None \n", "11 None \n", @@ -718,18 +686,18 @@ "15 None \n", "16 None \n", "\n", - " B: Load a scenario by id \\\n", + " 2690658 \\\n", " forecast_storage \n", "sortables \n", - "0 energy_flexibility_pumped_storage_electricity \n", - "1 transport_van_flexibility_p2p_electricity \n", - "2 transport_truck_flexibility_p2p_electricity \n", - "3 transport_bus_flexibility_p2p_electricity \n", + "0 households_flexibility_p2p_electricity \n", + "1 energy_flexibility_mv_batteries_electricity \n", + "2 transport_car_flexibility_p2p_electricity \n", + "3 energy_flexibility_flow_batteries_electricity \n", "4 energy_flexibility_hv_opac_electricity \n", - "5 energy_flexibility_flow_batteries_electricity \n", - "6 transport_car_flexibility_p2p_electricity \n", - "7 energy_flexibility_mv_batteries_electricity \n", - "8 households_flexibility_p2p_electricity \n", + "5 transport_bus_flexibility_p2p_electricity \n", + "6 transport_truck_flexibility_p2p_electricity \n", + "7 transport_van_flexibility_p2p_electricity \n", + "8 energy_flexibility_pumped_storage_electricity \n", "9 None \n", "10 None \n", "11 None \n", @@ -866,7 +834,7 @@ "16 None " ] }, - "execution_count": 7, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -877,7 +845,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 4, "id": "0d3e771e", "metadata": {}, "outputs": [ @@ -902,8 +870,8 @@ " \n", " \n", " \n", - " A: Create from excel\n", " B: Load a scenario by id\n", + " 2690658\n", " \n", " \n", " \n", @@ -914,36 +882,28 @@ " interconnector_2_import_availability\n", " interconnector_2_export_availability\n", " interconnector_3_price\n", - " interconnector_1_price\n", - " interconnector_1_import_availability\n", - " interconnector_1_export_availability\n", + " interconnector_3_import_availability\n", + " interconnector_3_export_availability\n", + " interconnector_4_price\n", " ...\n", - " households_hot_water\n", - " industry_ict\n", - " industry_other_electricity\n", - " weather/solar_pv_profile_1\n", - " weather/solar_thermal\n", - " weather/air_temperature\n", - " weather/agriculture_heating\n", " weather/wind_offshore_baseline\n", " weather/wind_coastal_baseline\n", " weather/wind_inland_baseline\n", + " interconnector_1_price\n", + " interconnector_1_import_availability\n", + " interconnector_1_export_availability\n", + " interconnector_2_price\n", + " interconnector_2_import_availability\n", + " interconnector_2_export_availability\n", + " interconnector_3_price\n", " \n", " \n", " \n", " \n", " 0\n", - " 0.01\n", - " 1.0\n", - " 0.0\n", - " 26.00\n", - " 1.0\n", - " 1.0\n", - " 0.01\n", " 9.0\n", " 9.0\n", " 9.0\n", - " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", @@ -951,23 +911,23 @@ " 9.0\n", " 9.0\n", " 9.0\n", + " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", - " \n", - " \n", - " 1\n", " 0.01\n", " 1.0\n", " 0.0\n", " 26.00\n", " 1.0\n", " 1.0\n", - " 0.00\n", + " 0.01\n", + " \n", + " \n", + " 1\n", " 9.0\n", " 9.0\n", " 9.0\n", - " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", @@ -975,23 +935,23 @@ " 9.0\n", " 9.0\n", " 9.0\n", + " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", - " \n", - " \n", - " 2\n", " 0.01\n", " 1.0\n", " 0.0\n", - " 14.48\n", + " 26.00\n", " 1.0\n", " 1.0\n", " 0.00\n", + " \n", + " \n", + " 2\n", " 9.0\n", " 9.0\n", " 9.0\n", - " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", @@ -999,23 +959,23 @@ " 9.0\n", " 9.0\n", " 9.0\n", + " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", - " \n", - " \n", - " 3\n", " 0.01\n", " 1.0\n", " 0.0\n", - " 0.01\n", + " 14.48\n", + " 1.0\n", " 1.0\n", - " 0.0\n", " 0.00\n", + " \n", + " \n", + " 3\n", " 9.0\n", " 9.0\n", " 9.0\n", - " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", @@ -1023,23 +983,23 @@ " 9.0\n", " 9.0\n", " 9.0\n", + " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", - " \n", - " \n", - " 4\n", " 0.01\n", " 1.0\n", " 0.0\n", - " 0.02\n", + " 0.01\n", " 1.0\n", " 0.0\n", " 0.00\n", + " \n", + " \n", + " 4\n", " 9.0\n", " 9.0\n", " 9.0\n", - " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", @@ -1047,9 +1007,17 @@ " 9.0\n", " 9.0\n", " 9.0\n", + " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", + " 0.01\n", + " 1.0\n", + " 0.0\n", + " 0.02\n", + " 1.0\n", + " 0.0\n", + " 0.00\n", " \n", " \n", " ...\n", @@ -1077,17 +1045,9 @@ " \n", " \n", " 8755\n", - " 0.01\n", - " 1.0\n", - " 0.0\n", - " 0.01\n", - " 1.0\n", - " 0.0\n", - " 0.00\n", " 9.0\n", " 9.0\n", " 9.0\n", - " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", @@ -1095,12 +1055,10 @@ " 9.0\n", " 9.0\n", " 9.0\n", + " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", - " \n", - " \n", - " 8756\n", " 0.01\n", " 1.0\n", " 0.0\n", @@ -1108,10 +1066,12 @@ " 1.0\n", " 0.0\n", " 0.00\n", + " \n", + " \n", + " 8756\n", " 9.0\n", " 9.0\n", " 9.0\n", - " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", @@ -1119,12 +1079,10 @@ " 9.0\n", " 9.0\n", " 9.0\n", + " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", - " \n", - " \n", - " 8757\n", " 0.01\n", " 1.0\n", " 0.0\n", @@ -1132,10 +1090,12 @@ " 1.0\n", " 0.0\n", " 0.00\n", + " \n", + " \n", + " 8757\n", " 9.0\n", " 9.0\n", " 9.0\n", - " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", @@ -1143,23 +1103,23 @@ " 9.0\n", " 9.0\n", " 9.0\n", + " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", - " \n", - " \n", - " 8758\n", " 0.01\n", " 1.0\n", " 0.0\n", - " 0.02\n", + " 0.01\n", " 1.0\n", " 0.0\n", " 0.00\n", + " \n", + " \n", + " 8758\n", " 9.0\n", " 9.0\n", " 9.0\n", - " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", @@ -1167,23 +1127,23 @@ " 9.0\n", " 9.0\n", " 9.0\n", + " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", - " \n", - " \n", - " 8759\n", " 0.01\n", " 1.0\n", " 0.0\n", - " 0.00\n", + " 0.02\n", " 1.0\n", " 0.0\n", " 0.00\n", + " \n", + " \n", + " 8759\n", " 9.0\n", " 9.0\n", " 9.0\n", - " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", @@ -1191,9 +1151,17 @@ " 9.0\n", " 9.0\n", " 9.0\n", + " ...\n", " 9.0\n", " 9.0\n", " 9.0\n", + " 0.01\n", + " 1.0\n", + " 0.0\n", + " 0.00\n", + " 1.0\n", + " 0.0\n", + " 0.00\n", " \n", " \n", "\n", @@ -1201,19 +1169,131 @@ "" ], "text/plain": [ - " A: Create from excel \\\n", - " interconnector_1_price interconnector_1_import_availability \n", - "0 0.01 1.0 \n", - "1 0.01 1.0 \n", - "2 0.01 1.0 \n", - "3 0.01 1.0 \n", - "4 0.01 1.0 \n", - "... ... ... \n", - "8755 0.01 1.0 \n", - "8756 0.01 1.0 \n", - "8757 0.01 1.0 \n", - "8758 0.01 1.0 \n", - "8759 0.01 1.0 \n", + " B: Load a scenario by id \\\n", + " interconnector_1_price interconnector_1_import_availability \n", + "0 9.0 9.0 \n", + "1 9.0 9.0 \n", + "2 9.0 9.0 \n", + "3 9.0 9.0 \n", + "4 9.0 9.0 \n", + "... ... ... \n", + "8755 9.0 9.0 \n", + "8756 9.0 9.0 \n", + "8757 9.0 9.0 \n", + "8758 9.0 9.0 \n", + "8759 9.0 9.0 \n", + "\n", + " \\\n", + " interconnector_1_export_availability interconnector_2_price \n", + "0 9.0 9.0 \n", + "1 9.0 9.0 \n", + "2 9.0 9.0 \n", + "3 9.0 9.0 \n", + "4 9.0 9.0 \n", + "... ... ... \n", + "8755 9.0 9.0 \n", + "8756 9.0 9.0 \n", + "8757 9.0 9.0 \n", + "8758 9.0 9.0 \n", + "8759 9.0 9.0 \n", + "\n", + " \\\n", + " interconnector_2_import_availability \n", + "0 9.0 \n", + "1 9.0 \n", + "2 9.0 \n", + "3 9.0 \n", + "4 9.0 \n", + "... ... \n", + "8755 9.0 \n", + "8756 9.0 \n", + "8757 9.0 \n", + "8758 9.0 \n", + "8759 9.0 \n", + "\n", + " \\\n", + " interconnector_2_export_availability interconnector_3_price \n", + "0 9.0 9.0 \n", + "1 9.0 9.0 \n", + "2 9.0 9.0 \n", + "3 9.0 9.0 \n", + "4 9.0 9.0 \n", + "... ... ... \n", + "8755 9.0 9.0 \n", + "8756 9.0 9.0 \n", + "8757 9.0 9.0 \n", + "8758 9.0 9.0 \n", + "8759 9.0 9.0 \n", + "\n", + " \\\n", + " interconnector_3_import_availability \n", + "0 9.0 \n", + "1 9.0 \n", + "2 9.0 \n", + "3 9.0 \n", + "4 9.0 \n", + "... ... \n", + "8755 9.0 \n", + "8756 9.0 \n", + "8757 9.0 \n", + "8758 9.0 \n", + "8759 9.0 \n", + "\n", + " ... \\\n", + " interconnector_3_export_availability interconnector_4_price ... \n", + "0 9.0 9.0 ... \n", + "1 9.0 9.0 ... \n", + "2 9.0 9.0 ... \n", + "3 9.0 9.0 ... \n", + "4 9.0 9.0 ... \n", + "... ... ... ... \n", + "8755 9.0 9.0 ... \n", + "8756 9.0 9.0 ... \n", + "8757 9.0 9.0 ... \n", + "8758 9.0 9.0 ... \n", + "8759 9.0 9.0 ... \n", + "\n", + " \\\n", + " weather/wind_offshore_baseline weather/wind_coastal_baseline \n", + "0 9.0 9.0 \n", + "1 9.0 9.0 \n", + "2 9.0 9.0 \n", + "3 9.0 9.0 \n", + "4 9.0 9.0 \n", + "... ... ... \n", + "8755 9.0 9.0 \n", + "8756 9.0 9.0 \n", + "8757 9.0 9.0 \n", + "8758 9.0 9.0 \n", + "8759 9.0 9.0 \n", + "\n", + " 2690658 \\\n", + " weather/wind_inland_baseline interconnector_1_price \n", + "0 9.0 0.01 \n", + "1 9.0 0.01 \n", + "2 9.0 0.01 \n", + "3 9.0 0.01 \n", + "4 9.0 0.01 \n", + "... ... ... \n", + "8755 9.0 0.01 \n", + "8756 9.0 0.01 \n", + "8757 9.0 0.01 \n", + "8758 9.0 0.01 \n", + "8759 9.0 0.01 \n", + "\n", + " \\\n", + " interconnector_1_import_availability \n", + "0 1.0 \n", + "1 1.0 \n", + "2 1.0 \n", + "3 1.0 \n", + "4 1.0 \n", + "... ... \n", + "8755 1.0 \n", + "8756 1.0 \n", + "8757 1.0 \n", + "8758 1.0 \n", + "8759 1.0 \n", "\n", " \\\n", " interconnector_1_export_availability interconnector_2_price \n", @@ -1243,108 +1323,24 @@ "8758 1.0 \n", "8759 1.0 \n", "\n", - " \\\n", - " interconnector_2_export_availability interconnector_3_price \n", - "0 1.0 0.01 \n", - "1 1.0 0.00 \n", - "2 1.0 0.00 \n", - "3 0.0 0.00 \n", - "4 0.0 0.00 \n", - "... ... ... \n", - "8755 0.0 0.00 \n", - "8756 0.0 0.00 \n", - "8757 0.0 0.00 \n", - "8758 0.0 0.00 \n", - "8759 0.0 0.00 \n", - "\n", - " B: Load a scenario by id \\\n", - " interconnector_1_price interconnector_1_import_availability \n", - "0 9.0 9.0 \n", - "1 9.0 9.0 \n", - "2 9.0 9.0 \n", - "3 9.0 9.0 \n", - "4 9.0 9.0 \n", - "... ... ... \n", - "8755 9.0 9.0 \n", - "8756 9.0 9.0 \n", - "8757 9.0 9.0 \n", - "8758 9.0 9.0 \n", - "8759 9.0 9.0 \n", - "\n", - " ... \\\n", - " interconnector_1_export_availability ... households_hot_water \n", - "0 9.0 ... 9.0 \n", - "1 9.0 ... 9.0 \n", - "2 9.0 ... 9.0 \n", - "3 9.0 ... 9.0 \n", - "4 9.0 ... 9.0 \n", - "... ... ... ... \n", - "8755 9.0 ... 9.0 \n", - "8756 9.0 ... 9.0 \n", - "8757 9.0 ... 9.0 \n", - "8758 9.0 ... 9.0 \n", - "8759 9.0 ... 9.0 \n", - "\n", - " \\\n", - " industry_ict industry_other_electricity weather/solar_pv_profile_1 \n", - "0 9.0 9.0 9.0 \n", - "1 9.0 9.0 9.0 \n", - "2 9.0 9.0 9.0 \n", - "3 9.0 9.0 9.0 \n", - "4 9.0 9.0 9.0 \n", - "... ... ... ... \n", - "8755 9.0 9.0 9.0 \n", - "8756 9.0 9.0 9.0 \n", - "8757 9.0 9.0 9.0 \n", - "8758 9.0 9.0 9.0 \n", - "8759 9.0 9.0 9.0 \n", - "\n", - " \\\n", - " weather/solar_thermal weather/air_temperature \n", - "0 9.0 9.0 \n", - "1 9.0 9.0 \n", - "2 9.0 9.0 \n", - "3 9.0 9.0 \n", - "4 9.0 9.0 \n", - "... ... ... \n", - "8755 9.0 9.0 \n", - "8756 9.0 9.0 \n", - "8757 9.0 9.0 \n", - "8758 9.0 9.0 \n", - "8759 9.0 9.0 \n", - "\n", - " \\\n", - " weather/agriculture_heating weather/wind_offshore_baseline \n", - "0 9.0 9.0 \n", - "1 9.0 9.0 \n", - "2 9.0 9.0 \n", - "3 9.0 9.0 \n", - "4 9.0 9.0 \n", - "... ... ... \n", - "8755 9.0 9.0 \n", - "8756 9.0 9.0 \n", - "8757 9.0 9.0 \n", - "8758 9.0 9.0 \n", - "8759 9.0 9.0 \n", - "\n", - " \n", - " weather/wind_coastal_baseline weather/wind_inland_baseline \n", - "0 9.0 9.0 \n", - "1 9.0 9.0 \n", - "2 9.0 9.0 \n", - "3 9.0 9.0 \n", - "4 9.0 9.0 \n", - "... ... ... \n", - "8755 9.0 9.0 \n", - "8756 9.0 9.0 \n", - "8757 9.0 9.0 \n", - "8758 9.0 9.0 \n", - "8759 9.0 9.0 \n", + " \n", + " interconnector_2_export_availability interconnector_3_price \n", + "0 1.0 0.01 \n", + "1 1.0 0.00 \n", + "2 1.0 0.00 \n", + "3 0.0 0.00 \n", + "4 0.0 0.00 \n", + "... ... ... \n", + "8755 0.0 0.00 \n", + "8756 0.0 0.00 \n", + "8757 0.0 0.00 \n", + "8758 0.0 0.00 \n", + "8759 0.0 0.00 \n", "\n", "[8760 rows x 52 columns]" ] }, - "execution_count": 8, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -1355,7 +1351,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 5, "id": "54cc3f61", "metadata": {}, "outputs": [ @@ -1385,8 +1381,8 @@ " \n", " \n", " \n", - " A: Create from excel\n", " B: Load a scenario by id\n", + " 2690658\n", " \n", " \n", " \n", @@ -1405,42 +1401,42 @@ " \n", " dashboard_emissions\n", " factor\n", - " 0.024027\n", " -0.947929\n", + " 0.024027\n", " \n", " \n", " dashboard_co2_emissions_versus_start_year\n", " factor\n", - " 0.028299\n", " -0.997037\n", + " 0.028299\n", " \n", " \n", " dashboard_total_costs\n", " bln_euro\n", - " 39.300293\n", " 56.46303\n", + " 39.300293\n", " \n", " \n", "\n", "" ], "text/plain": [ - " A: Create from excel \\\n", - " future \n", - "gquery unit \n", - "dashboard_emissions factor 0.024027 \n", - "dashboard_co2_emissions_versus_start_year factor 0.028299 \n", - "dashboard_total_costs bln_euro 39.300293 \n", + " B: Load a scenario by id \\\n", + " future \n", + "gquery unit \n", + "dashboard_emissions factor -0.947929 \n", + "dashboard_co2_emissions_versus_start_year factor -0.997037 \n", + "dashboard_total_costs bln_euro 56.46303 \n", "\n", - " B: Load a scenario by id \n", - " future \n", - "gquery unit \n", - "dashboard_emissions factor -0.947929 \n", - "dashboard_co2_emissions_versus_start_year factor -0.997037 \n", - "dashboard_total_costs bln_euro 56.46303 " + " 2690658 \n", + " future \n", + "gquery unit \n", + "dashboard_emissions factor 0.024027 \n", + "dashboard_co2_emissions_versus_start_year factor 0.028299 \n", + "dashboard_total_costs bln_euro 39.300293 " ] }, - "execution_count": 9, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } diff --git a/examples/full_multi_scenario_flow.ipynb b/examples/full_multi_scenario_flow.ipynb index 4dd758a..a71353a 100644 --- a/examples/full_multi_scenario_flow.ipynb +++ b/examples/full_multi_scenario_flow.ipynb @@ -45,7 +45,7 @@ "source": [ "from pyetm.models.scenarios import Scenarios\n", "\n", - "scenarios = Scenarios.from_excel(\"my_input_excel.xlsx\")" + "scenarios = Scenarios.from_excel(\"example_input_excel.xlsx\")" ] }, { diff --git a/examples/scenario_to_excel.ipynb b/examples/scenario_to_excel.ipynb index fa0c70e..174d273 100644 --- a/examples/scenario_to_excel.ipynb +++ b/examples/scenario_to_excel.ipynb @@ -115,7 +115,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " II3050v2_EUR_2050 \\\n", + " II3050v2_NAT_2050 \\\n", "input \n", "agriculture_bio_kerosene_in_crude_oil_share 0.0 \n", "agriculture_biodiesel_in_crude_oil_share 0.0 \n", @@ -129,7 +129,7 @@ "wtp_of_industry_other_paper_flexibility_p2h_ele... 25.0 \n", "wtp_of_transport_car_flexibility_p2p_electricity 5.0 \n", "\n", - " II3050v2_NAT_2050 \n", + " II3050v2_EUR_2050 \n", "input \n", "agriculture_bio_kerosene_in_crude_oil_share 0.0 \n", "agriculture_biodiesel_in_crude_oil_share 0.0 \n", @@ -144,7 +144,7 @@ "wtp_of_transport_car_flexibility_p2p_electricity 5.0 \n", "\n", "[1318 rows x 2 columns]\n", - " 2690456 2690455\n", + " 2690455 2690456\n", "scenario \n", "end_year 2050 2050\n", "private False False\n", @@ -213,7 +213,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "ce5e2bdb", "metadata": {}, "outputs": [], diff --git a/src/pyetm/models/scenario_packer.py b/src/pyetm/models/scenario_packer.py index cf5cafb..eef48c1 100644 --- a/src/pyetm/models/scenario_packer.py +++ b/src/pyetm/models/scenario_packer.py @@ -56,7 +56,7 @@ def add_output_curves(self, *scenarios): # DataFrame outputs def main_info(self) -> pd.DataFrame: - """Create main info DataFrame""" + """Create main info DataFrame by concatenating scenario dataframes.""" if len(self._scenarios()) == 0: return pd.DataFrame() @@ -92,13 +92,13 @@ def to_excel( workbook = Workbook(path) - # Main info sheet (handled separately as it doesn't use a pack) - df = self.main_info() - if not df.empty: - df_filled = df.fillna("").infer_objects(copy=False) + # Main info sheet: enrich with metadata and friendly headers for Excel only + df_main = self._build_excel_main_dataframe() + if not df_main.empty: + df_main = self._sanitize_dataframe_for_excel(df_main) add_frame( name="MAIN", - frame=df_filled, + frame=df_main, workbook=workbook, column_width=18, scenario_styling=True, @@ -539,3 +539,115 @@ def _setup_scenario_from_main_column( self._apply_metadata(scenario, meta_updates) return scenario + + def _build_excel_main_dataframe(self) -> pd.DataFrame: + """Build a MAIN sheet DataFrame with rich metadata for Excel export only.""" + scenarios = list(self._scenarios()) + if not scenarios: + return pd.DataFrame() + + def id_or_title(s): + try: + return s.identifier() + except Exception: + return getattr(s, "id", None) + + columns: dict[Any, dict[str, Any]] = {} + all_keys: list[str] = [] + + def add_key(k: str): + if k not in all_keys: + all_keys.append(k) + + for s in scenarios: + info: dict[str, Any] = {} + + # Core identifiers and common fields + info["scenario_id"] = getattr(s, "id", None) + info["area_code"] = getattr(s, "area_code", None) + info["end_year"] = getattr(s, "end_year", None) + info["start_year"] = getattr(s, "start_year", None) + info["keep_compatible"] = getattr(s, "keep_compatible", None) + info["private"] = getattr(s, "private", None) + info["template"] = getattr(s, "template", None) + info["source"] = getattr(s, "source", None) + try: + info["title"] = s.title + except Exception: + info["title"] = None + meta = getattr(s, "metadata", None) + if isinstance(meta, dict): + desc = meta.get("description") + if desc is not None: + info["description"] = desc + info["url"] = getattr(s, "url", None) + try: + info["version"] = s.version + except Exception: + info["version"] = None + info["created_at"] = getattr(s, "created_at", None) + info["updated_at"] = getattr(s, "updated_at", None) + + # Flatten all other metadata keys + if isinstance(meta, dict): + for k, v in meta.items(): + if k in ("title", "description"): + continue + info[f"metadata.{k}"] = v + + label = id_or_title(s) + columns[label] = info + for k in info.keys(): + add_key(k) + + # Preferred key order at top + preferred = [ + "title", + "description", + "scenario_id", + "template", + "area_code", + "start_year", + "end_year", + "keep_compatible", + "private", + "source", + "url", + "version", + "created_at", + "updated_at", + ] + remaining = [k for k in all_keys if k not in preferred] + index_order = preferred + remaining + + df = pd.DataFrame( + {col: {k: columns[col].get(k) for k in index_order} for col in columns} + ) + df.index.name = "scenario" + return df + + def _sanitize_dataframe_for_excel(self, df: pd.DataFrame) -> pd.DataFrame: + """Convert DataFrame values into Excel-safe primitives (str/number/bool/None).""" + import datetime as _dt + + def _safe(v: Any): + if v is None: + return "" + if isinstance(v, (str, int, float, bool)): + return v + # Pandas Timestamp / datetime + if isinstance(v, (pd.Timestamp, _dt.datetime, _dt.date)): + try: + return str(v) + except Exception: + return "" + # Convert everything else to string + try: + return str(v) + except Exception: + return "" + + out = df.copy() + out.index = out.index.map(lambda x: str(x) if x is not None else "") + out.columns = [str(c) if c is not None else "" for c in out.columns] + return out.map(_safe) diff --git a/src/pyetm/services/scenario_runners/update_metadata.py b/src/pyetm/services/scenario_runners/update_metadata.py index bb1b2b8..0794a26 100644 --- a/src/pyetm/services/scenario_runners/update_metadata.py +++ b/src/pyetm/services/scenario_runners/update_metadata.py @@ -17,20 +17,19 @@ class UpdateMetadataRunner(BaseRunner[Dict[str, Any]]): **kwargs: Additional arguments passed to the request """ - # TODO: Investigate why end_year is not setting correctly META_KEYS = [ "keep_compatible", "private", "source", "metadata", "end_year", + "title", ] UNSETTABLE_META_KEYS = [ "id", "created_at", "updated_at", "area_code", - "title", "start_year", "scaling", "template", diff --git a/src/pyetm/utils/excel.py b/src/pyetm/utils/excel.py index a0d6be5..5e1f86b 100644 --- a/src/pyetm/utils/excel.py +++ b/src/pyetm/utils/excel.py @@ -78,8 +78,12 @@ def create_scenario_formats(workbook: Workbook) -> dict: "grey_header": workbook.add_format( {"bold": True, "bg_color": "#D9D9D9", "border": 1, "align": "center"} ), - "white_data": workbook.add_format({"bg_color": "#FFFFFF", "border": 1}), - "grey_data": workbook.add_format({"bg_color": "#D9D9D9", "border": 1}), + "white_data": workbook.add_format( + {"bg_color": "#FFFFFF", "border": 1, "align": "left"} + ), + "grey_data": workbook.add_format( + {"bg_color": "#D9D9D9", "border": 1, "align": "left"} + ), "bold": workbook.add_format({"bold": True}), "default": None, } @@ -150,10 +154,6 @@ def add_frame( col_offset = frame.index.nlevels if index else 0 row_offset = frame.columns.nlevels - # Adjust row offset if index has names - if index and frame.index.names != [None] * frame.index.nlevels: - row_offset += 1 - # Handle multi-index columns with scenario styling if isinstance(frame.columns, pd.MultiIndex) and scenario_styling: # Get scenario blocks for alternating colors diff --git a/tests/services/scenario_runners/test_update_metadata.py b/tests/services/scenario_runners/test_update_metadata.py index da6a652..10bb5b0 100644 --- a/tests/services/scenario_runners/test_update_metadata.py +++ b/tests/services/scenario_runners/test_update_metadata.py @@ -108,7 +108,7 @@ def test_update_metadata_runner_unsettable_keys_generate_warnings(): metadata = { "id": 456, # Unsettable - "title": "New Title", # Unsettable + "title": "New Title", # Settable "end_year": 2050, # Settable } @@ -121,7 +121,8 @@ def test_update_metadata_runner_unsettable_keys_generate_warnings(): expected_payload = { "scenario": { "end_year": 2050, - "metadata": {"existing": "value", "id": 456, "title": "New Title"}, + "title": "New Title", + "metadata": {"existing": "value", "id": 456}, } } mock_request.assert_called_once_with( @@ -293,6 +294,7 @@ def test_update_metadata_runner_meta_keys_constants(): "source", "metadata", "end_year", + "title", ] expected_unsettable_keys = [ @@ -300,7 +302,6 @@ def test_update_metadata_runner_meta_keys_constants(): "created_at", "updated_at", "area_code", - "title", "start_year", "scaling", "template", From b4203db5940e4e03d1c1f4a626804c83bdbdb070 Mon Sep 17 00:00:00 2001 From: louispt1 Date: Wed, 13 Aug 2025 13:48:51 +0200 Subject: [PATCH 3/5] Swap from pipenv to poetry --- Pipfile | 33 - Pipfile.lock | 1993 --------------------------- README.md | 176 ++- poetry.lock | 3036 ++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 88 +- running_notebooks.md | 71 +- 6 files changed, 3232 insertions(+), 2165 deletions(-) delete mode 100644 Pipfile delete mode 100644 Pipfile.lock create mode 100644 poetry.lock diff --git a/Pipfile b/Pipfile deleted file mode 100644 index fd1d27a..0000000 --- a/Pipfile +++ /dev/null @@ -1,33 +0,0 @@ -[[source]] -url = "https://pypi.org/simple" -verify_ssl = true -name = "pypi" - -[packages] -pydantic = "*" -pandas = "*" -requests = "*" -dotenv = "*" -pyyaml = "*" -pydantic-settings = "*" -pyetm = {file = ".", editable = true} -xlsxwriter = "*" -openpyxl = "*" - -[dev-packages] -pytest = "*" -pylint = "*" -requests-mock = "*" -ipykernel = "*" -notebook = "*" -pytest-cov = "*" -pydeps = "*" - -[requires] -python_version = "3.12" - -[scripts] -test = "python -m pytest" -test_with_coverage = "python -m pytest --cov=pyetm tests/ --cov-report=term-missing" -linter = "python -m pylint pyetm" -deptree = "pydeps src/pyetm --show-cycles --max-bacon=2 -o import_graph.svg -T svg" diff --git a/Pipfile.lock b/Pipfile.lock deleted file mode 100644 index c2ab727..0000000 --- a/Pipfile.lock +++ /dev/null @@ -1,1993 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "9c4a4dd242a69bb0fa72de6d543863742a6ac38a51db7cf772696af377dfa7bf" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.12" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "annotated-types": { - "hashes": [ - "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", - "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89" - ], - "markers": "python_version >= '3.8'", - "version": "==0.7.0" - }, - "certifi": { - "hashes": [ - "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057", - "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b" - ], - "markers": "python_version >= '3.7'", - "version": "==2025.6.15" - }, - "charset-normalizer": { - "hashes": [ - "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4", - "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45", - "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", - "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", - "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", - "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d", - "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d", - "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", - "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184", - "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db", - "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b", - "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64", - "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", - "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", - "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", - "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344", - "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58", - "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", - "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471", - "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", - "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", - "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836", - "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", - "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", - "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c", - "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1", - "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01", - "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366", - "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58", - "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", - "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", - "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2", - "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a", - "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597", - "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", - "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5", - "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb", - "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f", - "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0", - "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941", - "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", - "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86", - "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7", - "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7", - "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455", - "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6", - "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4", - "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", - "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3", - "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", - "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6", - "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", - "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", - "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", - "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", - "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", - "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12", - "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa", - "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd", - "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef", - "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f", - "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", - "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", - "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5", - "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02", - "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", - "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", - "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e", - "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", - "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", - "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", - "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", - "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681", - "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba", - "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", - "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a", - "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", - "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", - "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", - "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a", - "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027", - "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7", - "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518", - "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", - "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", - "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", - "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", - "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da", - "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509", - "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f", - "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", - "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f" - ], - "markers": "python_version >= '3.7'", - "version": "==3.4.2" - }, - "dotenv": { - "hashes": [ - "sha256:29cf74a087b31dafdb5a446b6d7e11cbce8ed2741540e2339c69fbef92c94ce9" - ], - "index": "pypi", - "version": "==0.9.9" - }, - "et-xmlfile": { - "hashes": [ - "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", - "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54" - ], - "markers": "python_version >= '3.8'", - "version": "==2.0.0" - }, - "idna": { - "hashes": [ - "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", - "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" - ], - "markers": "python_version >= '3.6'", - "version": "==3.10" - }, - "numpy": { - "hashes": [ - "sha256:0025048b3c1557a20bc80d06fdeb8cc7fc193721484cca82b2cfa072fec71a93", - "sha256:010ce9b4f00d5c036053ca684c77441f2f2c934fd23bee058b4d6f196efd8280", - "sha256:0bb3a4a61e1d327e035275d2a993c96fa786e4913aa089843e6a2d9dd205c66a", - "sha256:0c4d9e0a8368db90f93bd192bfa771ace63137c3488d198ee21dfb8e7771916e", - "sha256:15aa4c392ac396e2ad3d0a2680c0f0dee420f9fed14eef09bdb9450ee6dcb7b7", - "sha256:18703df6c4a4fee55fd3d6e5a253d01c5d33a295409b03fda0c86b3ca2ff41a1", - "sha256:1ec9ae20a4226da374362cca3c62cd753faf2f951440b0e3b98e93c235441d2b", - "sha256:23ab05b2d241f76cb883ce8b9a93a680752fbfcbd51c50eff0b88b979e471d8c", - "sha256:25a1992b0a3fdcdaec9f552ef10d8103186f5397ab45e2d25f8ac51b1a6b97e8", - "sha256:2959d8f268f3d8ee402b04a9ec4bb7604555aeacf78b360dc4ec27f1d508177d", - "sha256:2a809637460e88a113e186e87f228d74ae2852a2e0c44de275263376f17b5bdc", - "sha256:2fb86b7e58f9ac50e1e9dd1290154107e47d1eef23a0ae9145ded06ea606f992", - "sha256:36890eb9e9d2081137bd78d29050ba63b8dab95dff7912eadf1185e80074b2a0", - "sha256:39bff12c076812595c3a306f22bfe49919c5513aa1e0e70fac756a0be7c2a2b8", - "sha256:467db865b392168ceb1ef1ffa6f5a86e62468c43e0cfb4ab6da667ede10e58db", - "sha256:4e602e1b8682c2b833af89ba641ad4176053aaa50f5cacda1a27004352dde943", - "sha256:5902660491bd7a48b2ec16c23ccb9124b8abfd9583c5fdfa123fe6b421e03de1", - "sha256:5ccb7336eaf0e77c1635b232c141846493a588ec9ea777a7c24d7166bb8533ae", - "sha256:5f1b8f26d1086835f442286c1d9b64bb3974b0b1e41bb105358fd07d20872952", - "sha256:6269b9edfe32912584ec496d91b00b6d34282ca1d07eb10e82dfc780907d6c2e", - "sha256:6ea9e48336a402551f52cd8f593343699003d2353daa4b72ce8d34f66b722070", - "sha256:762e0c0c6b56bdedfef9a8e1d4538556438288c4276901ea008ae44091954e29", - "sha256:7be91b2239af2658653c5bb6f1b8bccafaf08226a258caf78ce44710a0160d30", - "sha256:7dea630156d39b02a63c18f508f85010230409db5b2927ba59c8ba4ab3e8272e", - "sha256:867ef172a0976aaa1f1d1b63cf2090de8b636a7674607d514505fb7276ab08fc", - "sha256:8d5ee6eec45f08ce507a6570e06f2f879b374a552087a4179ea7838edbcbfa42", - "sha256:8e333040d069eba1652fb08962ec5b76af7f2c7bce1df7e1418c8055cf776f25", - "sha256:a5ee121b60aa509679b682819c602579e1df14a5b07fe95671c8849aad8f2115", - "sha256:a780033466159c2270531e2b8ac063704592a0bc62ec4a1b991c7c40705eb0e8", - "sha256:a894f3816eb17b29e4783e5873f92faf55b710c2519e5c351767c51f79d8526d", - "sha256:a8b740f5579ae4585831b3cf0e3b0425c667274f82a484866d2adf9570539369", - "sha256:ad506d4b09e684394c42c966ec1527f6ebc25da7f4da4b1b056606ffe446b8a3", - "sha256:afed2ce4a84f6b0fc6c1ce734ff368cbf5a5e24e8954a338f3bdffa0718adffb", - "sha256:b0b5397374f32ec0649dd98c652a1798192042e715df918c20672c62fb52d4b8", - "sha256:bada6058dd886061f10ea15f230ccf7dfff40572e99fef440a4a857c8728c9c0", - "sha256:c4913079974eeb5c16ccfd2b1f09354b8fed7e0d6f2cab933104a09a6419b1ee", - "sha256:c5bdf2015ccfcee8253fb8be695516ac4457c743473a43290fd36eba6a1777eb", - "sha256:c6e0bf9d1a2f50d2b65a7cf56db37c095af17b59f6c132396f7c6d5dd76484df", - "sha256:ce2ce9e5de4703a673e705183f64fd5da5bf36e7beddcb63a25ee2286e71ca48", - "sha256:cfecc7822543abdea6de08758091da655ea2210b8ffa1faf116b940693d3df76", - "sha256:d4580adadc53311b163444f877e0789f1c8861e2698f6b2a4ca852fda154f3ff", - "sha256:d70f20df7f08b90a2062c1f07737dd340adccf2068d0f1b9b3d56e2038979fee", - "sha256:e344eb79dab01f1e838ebb67aab09965fb271d6da6b00adda26328ac27d4a66e", - "sha256:e610832418a2bc09d974cc9fecebfa51e9532d6190223bc5ef6a7402ebf3b5cb", - "sha256:e772dda20a6002ef7061713dc1e2585bc1b534e7909b2030b5a46dae8ff077ab", - "sha256:e7cbf5a5eafd8d230a3ce356d892512185230e4781a361229bd902ff403bc660", - "sha256:eabd7e8740d494ce2b4ea0ff05afa1b7b291e978c0ae075487c51e8bd93c0c68", - "sha256:ebb8603d45bc86bbd5edb0d63e52c5fd9e7945d3a503b77e486bd88dde67a19b", - "sha256:ec0bdafa906f95adc9a0c6f26a4871fa753f25caaa0e032578a30457bff0af6a", - "sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244", - "sha256:ee8340cb48c9b7a5899d1149eece41ca535513a9698098edbade2a8e7a84da77" - ], - "markers": "python_version >= '3.11'", - "version": "==2.3.1" - }, - "openpyxl": { - "hashes": [ - "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", - "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==3.1.5" - }, - "pandas": { - "hashes": [ - "sha256:034abd6f3db8b9880aaee98f4f5d4dbec7c4829938463ec046517220b2f8574e", - "sha256:094e271a15b579650ebf4c5155c05dcd2a14fd4fdd72cf4854b2f7ad31ea30be", - "sha256:14a0cc77b0f089d2d2ffe3007db58f170dae9b9f54e569b299db871a3ab5bf46", - "sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67", - "sha256:1d2b33e68d0ce64e26a4acc2e72d747292084f4e8db4c847c6f5f6cbe56ed6d8", - "sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3", - "sha256:23c2b2dc5213810208ca0b80b8666670eb4660bbfd9d45f58592cc4ddcfd62e1", - "sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983", - "sha256:2eb4728a18dcd2908c7fccf74a982e241b467d178724545a48d0caf534b38ebf", - "sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133", - "sha256:39ff73ec07be5e90330cc6ff5705c651ace83374189dcdcb46e6ff54b4a72cd6", - "sha256:404d681c698e3c8a40a61d0cd9412cc7364ab9a9cc6e144ae2992e11a2e77a20", - "sha256:40cecc4ea5abd2921682b57532baea5588cc5f80f0231c624056b146887274d2", - "sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9", - "sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390", - "sha256:6021910b086b3ca756755e86ddc64e0ddafd5e58e076c72cb1585162e5ad259b", - "sha256:625466edd01d43b75b1883a64d859168e4556261a5035b32f9d743b67ef44634", - "sha256:75651c14fde635e680496148a8526b328e09fe0572d9ae9b638648c46a544ba3", - "sha256:84141f722d45d0c2a89544dd29d35b3abfc13d2250ed7e68394eda7564bd6324", - "sha256:8adff9f138fc614347ff33812046787f7d43b3cef7c0f0171b3340cae333f6ca", - "sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c", - "sha256:9efc0acbbffb5236fbdf0409c04edce96bec4bdaa649d49985427bd1ec73e085", - "sha256:9ff730713d4c4f2f1c860e36c005c7cefc1c7c80c21c0688fd605aa43c9fcf09", - "sha256:a6872d695c896f00df46b71648eea332279ef4077a409e2fe94220208b6bb675", - "sha256:b198687ca9c8529662213538a9bb1e60fa0bf0f6af89292eb68fea28743fcd5a", - "sha256:b9d8c3187be7479ea5c3d30c32a5d73d62a621166675063b2edd21bc47614027", - "sha256:ba24af48643b12ffe49b27065d3babd52702d95ab70f50e1b34f71ca703e2c0d", - "sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f", - "sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249", - "sha256:bf5be867a0541a9fb47a4be0c5790a4bccd5b77b92f0a59eeec9375fafc2aa14", - "sha256:c06f6f144ad0a1bf84699aeea7eff6068ca5c63ceb404798198af7eb86082e33", - "sha256:c6da97aeb6a6d233fb6b17986234cc723b396b50a3c6804776351994f2a658fd", - "sha256:e0f51973ba93a9f97185049326d75b942b9aeb472bec616a129806facb129ebb", - "sha256:e1991bbb96f4050b09b5f811253c4f3cf05ee89a589379aa36cd623f21a31d6f", - "sha256:e5f08eb9a445d07720776df6e641975665c9ea12c9d8a331e0f6890f2dcd76ef", - "sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042", - "sha256:ed16339bc354a73e0a609df36d256672c7d296f3f767ac07257801aa064ff73c", - "sha256:f4dd97c19bd06bc557ad787a15b6489d2614ddaab5d104a0310eb314c724b2d2", - "sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575", - "sha256:f95a2aef32614ed86216d3c450ab12a4e82084e8102e355707a1d96e33d51c34", - "sha256:fa07e138b3f6c04addfeaf56cc7fdb96c3b68a3fe5e5401251f231fce40a0d7a", - "sha256:fa35c266c8cd1a67d75971a1912b185b492d257092bdd2709bbdebe574ed228d" - ], - "index": "pypi", - "markers": "python_version >= '3.9'", - "version": "==2.3.0" - }, - "pydantic": { - "hashes": [ - "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", - "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b" - ], - "index": "pypi", - "markers": "python_version >= '3.9'", - "version": "==2.11.7" - }, - "pydantic-core": { - "hashes": [ - "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d", - "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac", - "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02", - "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", - "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4", - "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22", - "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", - "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec", - "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d", - "sha256:0e6116757f7959a712db11f3e9c0a99ade00a5bbedae83cb801985aa154f071b", - "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", - "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", - "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052", - "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", - "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", - "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c", - "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", - "sha256:2807668ba86cb38c6817ad9bc66215ab8584d1d304030ce4f0887336f28a5e27", - "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", - "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8", - "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", - "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", - "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", - "sha256:3a1c81334778f9e3af2f8aeb7a960736e5cab1dfebfb26aabca09afd2906c039", - "sha256:3abcd9392a36025e3bd55f9bd38d908bd17962cc49bc6da8e7e96285336e2bca", - "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", - "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", - "sha256:3eb3fe62804e8f859c49ed20a8451342de53ed764150cb14ca71357c765dc2a6", - "sha256:44857c3227d3fb5e753d5fe4a3420d6376fa594b07b621e220cd93703fe21782", - "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b", - "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", - "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", - "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", - "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7", - "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", - "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa", - "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", - "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", - "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", - "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", - "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", - "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", - "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", - "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2", - "sha256:6fa6dfc3e4d1f734a34710f391ae822e0a8eb8559a85c6979e14e65ee6ba2954", - "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b", - "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", - "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", - "sha256:7f92c15cd1e97d4b12acd1cc9004fa092578acfa57b67ad5e43a197175d01a64", - "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", - "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9", - "sha256:87acbfcf8e90ca885206e98359d7dca4bcbb35abdc0ff66672a293e1d7a19101", - "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d", - "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", - "sha256:8d55ab81c57b8ff8548c3e4947f119551253f4e3787a7bbc0b6b3ca47498a9d3", - "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", - "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", - "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", - "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d", - "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", - "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e", - "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", - "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808", - "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", - "sha256:a2b911a5b90e0374d03813674bf0a5fbbb7741570dcd4b4e85a2e48d17def29d", - "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", - "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e", - "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640", - "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", - "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", - "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", - "sha256:c20c462aa4434b33a2661701b861604913f912254e441ab8d78d30485736115a", - "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", - "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", - "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb", - "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", - "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", - "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d", - "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572", - "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", - "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29", - "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535", - "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", - "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", - "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", - "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", - "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", - "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", - "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", - "sha256:eb9b459ca4df0e5c87deb59d37377461a538852765293f9e6ee834f0435a93b9", - "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a", - "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3", - "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", - "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", - "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a", - "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", - "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c", - "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", - "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d" - ], - "markers": "python_version >= '3.9'", - "version": "==2.33.2" - }, - "pydantic-settings": { - "hashes": [ - "sha256:06f0062169818d0f5524420a360d632d5857b83cffd4d42fe29597807a1614ee", - "sha256:a60952460b99cf661dc25c29c0ef171721f98bfcb52ef8d9ea4c943d7c8cc796" - ], - "index": "pypi", - "markers": "python_version >= '3.9'", - "version": "==2.10.1" - }, - "pyetm": { - "editable": true, - "file": "." - }, - "python-dateutil": { - "hashes": [ - "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", - "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==2.9.0.post0" - }, - "python-dotenv": { - "hashes": [ - "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc", - "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab" - ], - "markers": "python_version >= '3.9'", - "version": "==1.1.1" - }, - "pytz": { - "hashes": [ - "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", - "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00" - ], - "version": "==2025.2" - }, - "pyyaml": { - "hashes": [ - "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff", - "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", - "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", - "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", - "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", - "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", - "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", - "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", - "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", - "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", - "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a", - "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", - "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", - "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", - "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", - "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", - "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", - "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a", - "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", - "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", - "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", - "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", - "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", - "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", - "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", - "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", - "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", - "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", - "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", - "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706", - "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", - "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", - "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", - "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083", - "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", - "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", - "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", - "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", - "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", - "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", - "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", - "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", - "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", - "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", - "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5", - "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d", - "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", - "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", - "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", - "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", - "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", - "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", - "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==6.0.2" - }, - "requests": { - "hashes": [ - "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", - "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==2.32.4" - }, - "six": { - "hashes": [ - "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", - "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==1.17.0" - }, - "typing-extensions": { - "hashes": [ - "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", - "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af" - ], - "markers": "python_version >= '3.9'", - "version": "==4.14.0" - }, - "typing-inspection": { - "hashes": [ - "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", - "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28" - ], - "markers": "python_version >= '3.9'", - "version": "==0.4.1" - }, - "tzdata": { - "hashes": [ - "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", - "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9" - ], - "markers": "python_version >= '2'", - "version": "==2025.2" - }, - "urllib3": { - "hashes": [ - "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", - "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc" - ], - "markers": "python_version >= '3.9'", - "version": "==2.5.0" - }, - "xlsxwriter": { - "hashes": [ - "sha256:4f4824234e1eaf9d95df9a8fe974585ff91d0f5e3d3f12ace5b71e443c1c6abd", - "sha256:7e88469d607cdc920151c0ab3ce9cf1a83992d4b7bc730c5ffdd1a12115a7dbe" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==3.2.5" - } - }, - "develop": { - "anyio": { - "hashes": [ - "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", - "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c" - ], - "markers": "python_version >= '3.9'", - "version": "==4.9.0" - }, - "appnope": { - "hashes": [ - "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", - "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c" - ], - "markers": "python_version >= '3.6'", - "version": "==0.1.4" - }, - "argon2-cffi": { - "hashes": [ - "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1", - "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741" - ], - "markers": "python_version >= '3.8'", - "version": "==25.1.0" - }, - "argon2-cffi-bindings": { - "hashes": [ - "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670", - "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f", - "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583", - "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194", - "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c", - "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a", - "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082", - "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5", - "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f", - "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7", - "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d", - "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f", - "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae", - "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3", - "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86", - "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367", - "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d", - "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93", - "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb", - "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e", - "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351" - ], - "markers": "python_version >= '3.6'", - "version": "==21.2.0" - }, - "arrow": { - "hashes": [ - "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", - "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85" - ], - "markers": "python_version >= '3.8'", - "version": "==1.3.0" - }, - "astroid": { - "hashes": [ - "sha256:104fb9cb9b27ea95e847a94c003be03a9e039334a8ebca5ee27dafaf5c5711eb", - "sha256:c332157953060c6deb9caa57303ae0d20b0fbdb2e59b4a4f2a6ba49d0a7961ce" - ], - "markers": "python_full_version >= '3.9.0'", - "version": "==3.3.10" - }, - "asttokens": { - "hashes": [ - "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", - "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2" - ], - "markers": "python_version >= '3.8'", - "version": "==3.0.0" - }, - "async-lru": { - "hashes": [ - "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb", - "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943" - ], - "markers": "python_version >= '3.9'", - "version": "==2.0.5" - }, - "attrs": { - "hashes": [ - "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", - "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b" - ], - "markers": "python_version >= '3.8'", - "version": "==25.3.0" - }, - "babel": { - "hashes": [ - "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", - "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2" - ], - "markers": "python_version >= '3.8'", - "version": "==2.17.0" - }, - "beautifulsoup4": { - "hashes": [ - "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", - "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==4.13.4" - }, - "bleach": { - "extras": [ - "css" - ], - "hashes": [ - "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", - "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f" - ], - "markers": "python_version >= '3.9'", - "version": "==6.2.0" - }, - "certifi": { - "hashes": [ - "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057", - "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b" - ], - "markers": "python_version >= '3.7'", - "version": "==2025.6.15" - }, - "cffi": { - "hashes": [ - "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", - "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", - "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1", - "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", - "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", - "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", - "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", - "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", - "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", - "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", - "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc", - "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", - "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", - "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", - "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", - "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", - "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", - "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", - "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", - "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b", - "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", - "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", - "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c", - "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", - "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", - "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", - "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8", - "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1", - "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", - "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", - "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", - "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595", - "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0", - "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", - "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", - "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", - "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", - "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", - "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", - "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", - "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", - "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e", - "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", - "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964", - "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", - "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576", - "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", - "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3", - "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662", - "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", - "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", - "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", - "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", - "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", - "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", - "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", - "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", - "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9", - "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7", - "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", - "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a", - "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", - "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", - "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", - "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", - "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", - "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" - ], - "markers": "python_version >= '3.8'", - "version": "==1.17.1" - }, - "charset-normalizer": { - "hashes": [ - "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4", - "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45", - "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", - "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", - "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", - "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d", - "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d", - "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", - "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184", - "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db", - "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b", - "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64", - "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", - "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", - "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", - "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344", - "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58", - "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", - "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471", - "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", - "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", - "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836", - "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", - "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", - "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c", - "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1", - "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01", - "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366", - "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58", - "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", - "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", - "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2", - "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a", - "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597", - "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", - "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5", - "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb", - "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f", - "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0", - "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941", - "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", - "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86", - "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7", - "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7", - "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455", - "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6", - "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4", - "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", - "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3", - "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", - "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6", - "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", - "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", - "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", - "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", - "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", - "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12", - "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa", - "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd", - "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef", - "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f", - "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", - "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", - "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5", - "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02", - "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", - "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", - "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e", - "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", - "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", - "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", - "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", - "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681", - "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba", - "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", - "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a", - "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", - "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", - "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", - "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a", - "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027", - "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7", - "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518", - "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", - "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", - "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", - "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", - "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da", - "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509", - "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f", - "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", - "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f" - ], - "markers": "python_version >= '3.7'", - "version": "==3.4.2" - }, - "comm": { - "hashes": [ - "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", - "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3" - ], - "markers": "python_version >= '3.8'", - "version": "==0.2.2" - }, - "coverage": { - "extras": [ - "toml" - ], - "hashes": [ - "sha256:02532fd3290bb8fa6bec876520842428e2a6ed6c27014eca81b031c2d30e3f71", - "sha256:0a4be2a28656afe279b34d4f91c3e26eccf2f85500d4a4ff0b1f8b54bf807338", - "sha256:0b3496922cb5f4215bf5caaef4cf12364a26b0be82e9ed6d050f3352cf2d7ef0", - "sha256:0c804506d624e8a20fb3108764c52e0eef664e29d21692afa375e0dd98dc384f", - "sha256:0f16649a7330ec307942ed27d06ee7e7a38417144620bb3d6e9a18ded8a2d3e5", - "sha256:16aa0830d0c08a2c40c264cef801db8bc4fc0e1892782e45bcacbd5889270509", - "sha256:18a0912944d70aaf5f399e350445738a1a20b50fbea788f640751c2ed9208b6c", - "sha256:1c503289ffef1d5105d91bbb4d62cbe4b14bec4d13ca225f9c73cde9bb46207d", - "sha256:2241ad5dbf79ae1d9c08fe52b36d03ca122fb9ac6bca0f34439e99f8327ac89f", - "sha256:25308bd3d00d5eedd5ae7d4357161f4df743e3c0240fa773ee1b0f75e6c7c0f1", - "sha256:2a876e4c3e5a2a1715a6608906aa5a2e0475b9c0f68343c2ada98110512ab1d8", - "sha256:2d04b16a6062516df97969f1ae7efd0de9c31eb6ebdceaa0d213b21c0ca1a683", - "sha256:30f445f85c353090b83e552dcbbdad3ec84c7967e108c3ae54556ca69955563e", - "sha256:31324f18d5969feef7344a932c32428a2d1a3e50b15a6404e97cba1cc9b2c631", - "sha256:34ed2186fe52fcc24d4561041979a0dec69adae7bce2ae8d1c49eace13e55c43", - "sha256:37ab6be0859141b53aa89412a82454b482c81cf750de4f29223d52268a86de67", - "sha256:37ae0383f13cbdcf1e5e7014489b0d71cc0106458878ccde52e8a12ced4298ed", - "sha256:382e7ddd5289f140259b610e5f5c58f713d025cb2f66d0eb17e68d0a94278875", - "sha256:3bb5838701ca68b10ebc0937dbd0eb81974bac54447c55cd58dea5bca8451029", - "sha256:437c576979e4db840539674e68c84b3cda82bc824dd138d56bead1435f1cb5d7", - "sha256:49f1d0788ba5b7ba65933f3a18864117c6506619f5ca80326b478f72acf3f385", - "sha256:52e92b01041151bf607ee858e5a56c62d4b70f4dac85b8c8cb7fb8a351ab2c10", - "sha256:535fde4001b2783ac80865d90e7cc7798b6b126f4cd8a8c54acfe76804e54e58", - "sha256:56f5eb308b17bca3bbff810f55ee26d51926d9f89ba92707ee41d3c061257e55", - "sha256:5add197315a054e92cee1b5f686a2bcba60c4c3e66ee3de77ace6c867bdee7cb", - "sha256:5f646a99a8c2b3ff4c6a6e081f78fad0dde275cd59f8f49dc4eab2e394332e74", - "sha256:600a1d4106fe66f41e5d0136dfbc68fe7200a5cbe85610ddf094f8f22e1b0300", - "sha256:60c458224331ee3f1a5b472773e4a085cc27a86a0b48205409d364272d67140d", - "sha256:64bdd969456e2d02a8b08aa047a92d269c7ac1f47e0c977675d550c9a0863643", - "sha256:66b974b145aa189516b6bf2d8423e888b742517d37872f6ee4c5be0073bd9a3c", - "sha256:684e2110ed84fd1ca5f40e89aa44adf1729dc85444004111aa01866507adf363", - "sha256:68cd53aec6f45b8e4724c0950ce86eacb775c6be01ce6e3669fe4f3a21e768ed", - "sha256:69aa417a030bf11ec46149636314c24c8d60fadb12fc0ee8f10fda0d918c879d", - "sha256:6ad935f0016be24c0e97fc8c40c465f9c4b85cbbe6eac48934c0dc4d2568321e", - "sha256:6b55ad10a35a21b8015eabddc9ba31eb590f54adc9cd39bcf09ff5349fd52125", - "sha256:6cf43c78c4282708a28e466316935ec7489a9c487518a77fa68f716c67909cec", - "sha256:6f424507f57878e424d9a95dc4ead3fbdd72fd201e404e861e465f28ea469951", - "sha256:70760b4c5560be6ca70d11f8988ee6542b003f982b32f83d5ac0b72476607b70", - "sha256:73e9439310f65d55a5a1e0564b48e34f5369bee943d72c88378f2d576f5a5751", - "sha256:7931b9e249edefb07cd6ae10c702788546341d5fe44db5b6108a25da4dca513f", - "sha256:81f34346dd63010453922c8e628a52ea2d2ccd73cb2487f7700ac531b247c8a5", - "sha256:888f8eee13f2377ce86d44f338968eedec3291876b0b8a7289247ba52cb984cd", - "sha256:95335095b6c7b1cc14c3f3f17d5452ce677e8490d101698562b2ffcacc304c8d", - "sha256:9565c3ab1c93310569ec0d86b017f128f027cab0b622b7af288696d7ed43a16d", - "sha256:95c765060e65c692da2d2f51a9499c5e9f5cf5453aeaf1420e3fc847cc060582", - "sha256:9969ef1e69b8c8e1e70d591f91bbc37fc9a3621e447525d1602801a24ceda898", - "sha256:9ca8e220006966b4a7b68e8984a6aee645a0384b0769e829ba60281fe61ec4f7", - "sha256:a39d18b3f50cc121d0ce3838d32d58bd1d15dab89c910358ebefc3665712256c", - "sha256:a66e8f628b71f78c0e0342003d53b53101ba4e00ea8dabb799d9dba0abbbcebe", - "sha256:a8de12b4b87c20de895f10567639c0797b621b22897b0af3ce4b4e204a743626", - "sha256:af41da5dca398d3474129c58cb2b106a5d93bbb196be0d307ac82311ca234342", - "sha256:b30a25f814591a8c0c5372c11ac8967f669b97444c47fd794926e175c4047ece", - "sha256:ba383dc6afd5ec5b7a0d0c23d38895db0e15bcba7fb0fa8901f245267ac30d86", - "sha256:bb4fbcab8764dc072cb651a4bcda4d11fb5658a1d8d68842a862a6610bd8cfa3", - "sha256:be9e3f68ca9edb897c2184ad0eee815c635565dbe7a0e7e814dc1f7cbab92c0a", - "sha256:bfa447506c1a52271f1b0de3f42ea0fa14676052549095e378d5bff1c505ff7b", - "sha256:cc94d7c5e8423920787c33d811c0be67b7be83c705f001f7180c7b186dcf10ca", - "sha256:cea0a27a89e6432705fffc178064503508e3c0184b4f061700e771a09de58187", - "sha256:cf95981b126f23db63e9dbe4cf65bd71f9a6305696fa5e2262693bc4e2183f5b", - "sha256:d4fe2348cc6ec372e25adec0219ee2334a68d2f5222e0cba9c0d613394e12d86", - "sha256:db0f04118d1db74db6c9e1cb1898532c7dcc220f1d2718f058601f7c3f499514", - "sha256:dd24bd8d77c98557880def750782df77ab2b6885a18483dc8588792247174b32", - "sha256:e1b5191d1648acc439b24721caab2fd0c86679d8549ed2c84d5a7ec1bedcc244", - "sha256:e5532482344186c543c37bfad0ee6069e8ae4fc38d073b8bc836fc8f03c9e250", - "sha256:e980b53a959fa53b6f05343afbd1e6f44a23ed6c23c4b4c56c6662bbb40c82ce", - "sha256:ef64c27bc40189f36fcc50c3fb8f16ccda73b6a0b80d9bd6e6ce4cffcd810bbd", - "sha256:f05031cf21699785cd47cb7485f67df619e7bcdae38e0fde40d23d3d0210d3c3" - ], - "markers": "python_version >= '3.9'", - "version": "==7.9.1" - }, - "debugpy": { - "hashes": [ - "sha256:0f920c7f9af409d90f5fd26e313e119d908b0dd2952c2393cd3247a462331f15", - "sha256:1b2ac8c13b2645e0b1eaf30e816404990fbdb168e193322be8f545e8c01644a9", - "sha256:281d44d248a0e1791ad0eafdbbd2912ff0de9eec48022a5bfbc332957487ed3f", - "sha256:329a15d0660ee09fec6786acdb6e0443d595f64f5d096fc3e3ccf09a4259033f", - "sha256:3784ec6e8600c66cbdd4ca2726c72d8ca781e94bce2f396cc606d458146f8f4e", - "sha256:3d937d93ae4fa51cdc94d3e865f535f185d5f9748efb41d0d49e33bf3365bd79", - "sha256:413512d35ff52c2fb0fd2d65e69f373ffd24f0ecb1fac514c04a668599c5ce7f", - "sha256:4c9156f7524a0d70b7a7e22b2e311d8ba76a15496fb00730e46dcdeedb9e1eea", - "sha256:5349b7c3735b766a281873fbe32ca9cca343d4cc11ba4a743f84cb854339ff35", - "sha256:5aa56ef8538893e4502a7d79047fe39b1dae08d9ae257074c6464a7b290b806f", - "sha256:5cd9a579d553b6cb9759a7908a41988ee6280b961f24f63336835d9418216a20", - "sha256:684eaf43c95a3ec39a96f1f5195a7ff3d4144e4a18d69bb66beeb1a6de605d6e", - "sha256:7118d462fe9724c887d355eef395fae68bc764fd862cdca94e70dcb9ade8a23d", - "sha256:7816acea4a46d7e4e50ad8d09d963a680ecc814ae31cdef3622eb05ccacf7b01", - "sha256:7cd287184318416850aa8b60ac90105837bb1e59531898c07569d197d2ed5322", - "sha256:8899c17920d089cfa23e6005ad9f22582fd86f144b23acb9feeda59e84405b84", - "sha256:93fee753097e85623cab1c0e6a68c76308cd9f13ffdf44127e6fab4fbf024339", - "sha256:b1528cfee6c1b1c698eb10b6b096c598738a8238822d218173d21c3086de8123", - "sha256:b44985f97cc3dd9d52c42eb59ee9d7ee0c4e7ecd62bca704891f997de4cef23d", - "sha256:c442f20577b38cc7a9aafecffe1094f78f07fb8423c3dddb384e6b8f49fd2987", - "sha256:c99295c76161ad8d507b413cd33422d7c542889fbb73035889420ac1fad354f2", - "sha256:cf431c343a99384ac7eab2f763980724834f933a271e90496944195318c619e2", - "sha256:d235e4fa78af2de4e5609073972700523e372cf5601742449970110d565ca28c", - "sha256:d5582bcbe42917bc6bbe5c12db1bffdf21f6bfc28d4554b738bf08d50dc0c8c3", - "sha256:f117dedda6d969c5c9483e23f573b38f4e39412845c7bc487b6f2648df30fe84", - "sha256:f6bb5c0dcf80ad5dbc7b7d6eac484e2af34bdacdf81df09b6a3e62792b722826" - ], - "markers": "python_version >= '3.8'", - "version": "==1.8.14" - }, - "decorator": { - "hashes": [ - "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", - "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a" - ], - "markers": "python_version >= '3.8'", - "version": "==5.2.1" - }, - "defusedxml": { - "hashes": [ - "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", - "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==0.7.1" - }, - "dill": { - "hashes": [ - "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0", - "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049" - ], - "markers": "python_version >= '3.8'", - "version": "==0.4.0" - }, - "executing": { - "hashes": [ - "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", - "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755" - ], - "markers": "python_version >= '3.8'", - "version": "==2.2.0" - }, - "fastjsonschema": { - "hashes": [ - "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4", - "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667" - ], - "version": "==2.21.1" - }, - "fqdn": { - "hashes": [ - "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", - "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.5.1" - }, - "h11": { - "hashes": [ - "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", - "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" - ], - "markers": "python_version >= '3.8'", - "version": "==0.16.0" - }, - "httpcore": { - "hashes": [ - "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", - "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8" - ], - "markers": "python_version >= '3.8'", - "version": "==1.0.9" - }, - "httpx": { - "hashes": [ - "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", - "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad" - ], - "markers": "python_version >= '3.8'", - "version": "==0.28.1" - }, - "idna": { - "hashes": [ - "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", - "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" - ], - "markers": "python_version >= '3.6'", - "version": "==3.10" - }, - "iniconfig": { - "hashes": [ - "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", - "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760" - ], - "markers": "python_version >= '3.8'", - "version": "==2.1.0" - }, - "ipykernel": { - "hashes": [ - "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", - "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==6.29.5" - }, - "ipython": { - "hashes": [ - "sha256:1a0b6dd9221a1f5dddf725b57ac0cb6fddc7b5f470576231ae9162b9b3455a04", - "sha256:79eb896f9f23f50ad16c3bc205f686f6e030ad246cc309c6279a242b14afe9d8" - ], - "markers": "python_version >= '3.11'", - "version": "==9.3.0" - }, - "ipython-pygments-lexers": { - "hashes": [ - "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", - "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c" - ], - "markers": "python_version >= '3.8'", - "version": "==1.1.1" - }, - "isoduration": { - "hashes": [ - "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", - "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" - ], - "markers": "python_version >= '3.7'", - "version": "==20.11.0" - }, - "isort": { - "hashes": [ - "sha256:1cb5df28dfbc742e490c5e41bad6da41b805b0a8be7bc93cd0fb2a8a890ac450", - "sha256:2dc5d7f65c9678d94c88dfc29161a320eec67328bc97aad576874cb4be1e9615" - ], - "markers": "python_full_version >= '3.9.0'", - "version": "==6.0.1" - }, - "jedi": { - "hashes": [ - "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", - "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9" - ], - "markers": "python_version >= '3.6'", - "version": "==0.19.2" - }, - "jinja2": { - "hashes": [ - "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", - "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" - ], - "markers": "python_version >= '3.7'", - "version": "==3.1.6" - }, - "json5": { - "hashes": [ - "sha256:0b4b6ff56801a1c7dc817b0241bca4ce474a0e6a163bfef3fc594d3fd263ff3a", - "sha256:6d37aa6c08b0609f16e1ec5ff94697e2cbbfbad5ac112afa05794da9ab7810db" - ], - "markers": "python_full_version >= '3.8.0'", - "version": "==0.12.0" - }, - "jsonpointer": { - "hashes": [ - "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", - "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef" - ], - "markers": "python_version >= '3.7'", - "version": "==3.0.0" - }, - "jsonschema": { - "extras": [ - "format-nongpl" - ], - "hashes": [ - "sha256:0b4e8069eb12aedfa881333004bccaec24ecef5a8a6a4b6df142b2cc9599d196", - "sha256:a462455f19f5faf404a7902952b6f0e3ce868f3ee09a359b05eca6673bd8412d" - ], - "markers": "python_version >= '3.9'", - "version": "==4.24.0" - }, - "jsonschema-specifications": { - "hashes": [ - "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", - "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608" - ], - "markers": "python_version >= '3.9'", - "version": "==2025.4.1" - }, - "jupyter-client": { - "hashes": [ - "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", - "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f" - ], - "markers": "python_version >= '3.8'", - "version": "==8.6.3" - }, - "jupyter-core": { - "hashes": [ - "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", - "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0" - ], - "markers": "python_version >= '3.8'", - "version": "==5.8.1" - }, - "jupyter-events": { - "hashes": [ - "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb", - "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b" - ], - "markers": "python_version >= '3.9'", - "version": "==0.12.0" - }, - "jupyter-lsp": { - "hashes": [ - "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da", - "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001" - ], - "markers": "python_version >= '3.8'", - "version": "==2.2.5" - }, - "jupyter-server": { - "hashes": [ - "sha256:3d8db5be3bc64403b1c65b400a1d7f4647a5ce743f3b20dbdefe8ddb7b55af9e", - "sha256:65d4b44fdf2dcbbdfe0aa1ace4a842d4aaf746a2b7b168134d5aaed35621b7f6" - ], - "markers": "python_version >= '3.9'", - "version": "==2.16.0" - }, - "jupyter-server-terminals": { - "hashes": [ - "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa", - "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269" - ], - "markers": "python_version >= '3.8'", - "version": "==0.5.3" - }, - "jupyterlab": { - "hashes": [ - "sha256:164302f6d4b6c44773dfc38d585665a4db401a16e5296c37df5cba63904fbdea", - "sha256:a94c32fd7f8b93e82a49dc70a6ec45a5c18281ca2a7228d12765e4e210e5bca2" - ], - "markers": "python_version >= '3.9'", - "version": "==4.4.3" - }, - "jupyterlab-pygments": { - "hashes": [ - "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", - "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780" - ], - "markers": "python_version >= '3.8'", - "version": "==0.3.0" - }, - "jupyterlab-server": { - "hashes": [ - "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4", - "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4" - ], - "markers": "python_version >= '3.8'", - "version": "==2.27.3" - }, - "markupsafe": { - "hashes": [ - "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", - "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", - "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", - "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", - "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", - "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", - "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", - "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", - "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", - "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", - "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", - "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", - "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", - "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", - "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", - "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", - "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", - "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", - "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", - "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", - "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", - "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", - "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", - "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", - "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", - "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", - "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", - "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", - "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", - "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", - "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", - "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", - "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", - "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", - "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", - "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", - "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", - "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", - "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", - "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", - "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", - "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", - "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", - "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", - "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", - "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", - "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", - "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", - "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", - "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", - "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", - "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", - "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", - "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", - "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", - "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", - "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", - "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", - "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", - "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", - "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50" - ], - "markers": "python_version >= '3.9'", - "version": "==3.0.2" - }, - "matplotlib-inline": { - "hashes": [ - "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", - "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca" - ], - "markers": "python_version >= '3.8'", - "version": "==0.1.7" - }, - "mccabe": { - "hashes": [ - "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", - "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e" - ], - "markers": "python_version >= '3.6'", - "version": "==0.7.0" - }, - "mistune": { - "hashes": [ - "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", - "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0" - ], - "markers": "python_version >= '3.8'", - "version": "==3.1.3" - }, - "nbclient": { - "hashes": [ - "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", - "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193" - ], - "markers": "python_full_version >= '3.9.0'", - "version": "==0.10.2" - }, - "nbconvert": { - "hashes": [ - "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", - "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582" - ], - "markers": "python_version >= '3.8'", - "version": "==7.16.6" - }, - "nbformat": { - "hashes": [ - "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", - "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b" - ], - "markers": "python_version >= '3.8'", - "version": "==5.10.4" - }, - "nest-asyncio": { - "hashes": [ - "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", - "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c" - ], - "markers": "python_version >= '3.5'", - "version": "==1.6.0" - }, - "notebook": { - "hashes": [ - "sha256:9cdeee954e04101cadb195d90e2ab62b7c9286c1d4f858bf3bb54e40df16c0c3", - "sha256:a1567481cd3853f2610ee0ecf5dfa12bb508e878ee8f92152c134ef7f0568a76" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==7.4.3" - }, - "notebook-shim": { - "hashes": [ - "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", - "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb" - ], - "markers": "python_version >= '3.7'", - "version": "==0.2.4" - }, - "overrides": { - "hashes": [ - "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", - "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49" - ], - "markers": "python_version >= '3.6'", - "version": "==7.7.0" - }, - "packaging": { - "hashes": [ - "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", - "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f" - ], - "markers": "python_version >= '3.8'", - "version": "==25.0" - }, - "pandocfilters": { - "hashes": [ - "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", - "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.5.1" - }, - "parso": { - "hashes": [ - "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", - "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d" - ], - "markers": "python_version >= '3.6'", - "version": "==0.8.4" - }, - "pexpect": { - "hashes": [ - "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", - "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f" - ], - "markers": "sys_platform != 'win32' and sys_platform != 'emscripten'", - "version": "==4.9.0" - }, - "platformdirs": { - "hashes": [ - "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", - "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4" - ], - "markers": "python_version >= '3.9'", - "version": "==4.3.8" - }, - "pluggy": { - "hashes": [ - "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", - "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746" - ], - "markers": "python_version >= '3.9'", - "version": "==1.6.0" - }, - "prometheus-client": { - "hashes": [ - "sha256:190f1331e783cf21eb60bca559354e0a4d4378facecf78f5428c39b675d20d28", - "sha256:cca895342e308174341b2cbf99a56bef291fbc0ef7b9e5412a0f26d653ba7094" - ], - "markers": "python_version >= '3.9'", - "version": "==0.22.1" - }, - "prompt-toolkit": { - "hashes": [ - "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", - "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed" - ], - "markers": "python_version >= '3.8'", - "version": "==3.0.51" - }, - "psutil": { - "hashes": [ - "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", - "sha256:1e744154a6580bc968a0195fd25e80432d3afec619daf145b9e5ba16cc1d688e", - "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", - "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", - "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", - "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", - "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", - "sha256:84df4eb63e16849689f76b1ffcb36db7b8de703d1bc1fe41773db487621b6c17", - "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", - "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99" - ], - "markers": "python_version >= '3.6'", - "version": "==7.0.0" - }, - "ptyprocess": { - "hashes": [ - "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", - "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220" - ], - "version": "==0.7.0" - }, - "pure-eval": { - "hashes": [ - "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", - "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42" - ], - "version": "==0.2.3" - }, - "pycparser": { - "hashes": [ - "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", - "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" - ], - "markers": "python_version >= '3.8'", - "version": "==2.22" - }, - "pydeps": { - "hashes": [ - "sha256:7c86ee63c9ee6ddd088c840364981c5aa214a994d323bb7fa4724fca30829bee", - "sha256:a57415a8fae2ff6840a199b7dfcfecb90c37e4b9b54b58a111808a3440bc03bc" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==3.0.1" - }, - "pygments": { - "hashes": [ - "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", - "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b" - ], - "markers": "python_version >= '3.8'", - "version": "==2.19.2" - }, - "pylint": { - "hashes": [ - "sha256:2b11de8bde49f9c5059452e0c310c079c746a0a8eeaa789e5aa966ecc23e4559", - "sha256:43860aafefce92fca4cf6b61fe199cdc5ae54ea28f9bf4cd49de267b5195803d" - ], - "index": "pypi", - "markers": "python_full_version >= '3.9.0'", - "version": "==3.3.7" - }, - "pytest": { - "hashes": [ - "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", - "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c" - ], - "index": "pypi", - "markers": "python_version >= '3.9'", - "version": "==8.4.1" - }, - "pytest-cov": { - "hashes": [ - "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", - "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5" - ], - "index": "pypi", - "markers": "python_version >= '3.9'", - "version": "==6.2.1" - }, - "python-dateutil": { - "hashes": [ - "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", - "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==2.9.0.post0" - }, - "python-json-logger": { - "hashes": [ - "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84", - "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7" - ], - "markers": "python_version >= '3.8'", - "version": "==3.3.0" - }, - "pyyaml": { - "hashes": [ - "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff", - "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", - "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", - "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", - "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", - "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", - "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", - "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", - "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", - "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", - "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a", - "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", - "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", - "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", - "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", - "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", - "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", - "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a", - "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", - "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", - "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", - "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", - "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", - "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", - "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", - "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", - "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", - "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", - "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", - "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706", - "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", - "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", - "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", - "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083", - "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", - "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", - "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", - "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", - "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", - "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", - "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", - "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", - "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", - "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", - "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5", - "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d", - "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", - "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", - "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", - "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", - "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", - "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", - "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==6.0.2" - }, - "pyzmq": { - "hashes": [ - "sha256:00387d12a8af4b24883895f7e6b9495dc20a66027b696536edac35cb988c38f3", - "sha256:04cd50ef3b28e35ced65740fb9956a5b3f77a6ff32fcd887e3210433f437dd0f", - "sha256:0546a720c1f407b2172cb04b6b094a78773491497e3644863cf5c96c42df8cff", - "sha256:096af9e133fec3a72108ddefba1e42985cb3639e9de52cfd336b6fc23aa083e9", - "sha256:100f6e5052ba42b2533011d34a018a5ace34f8cac67cb03cfa37c8bdae0ca617", - "sha256:10f70c1d9a446a85013a36871a296007f6fe4232b530aa254baf9da3f8328bc0", - "sha256:111db5f395e09f7e775f759d598f43cb815fc58e0147623c4816486e1a39dc22", - "sha256:14fe7aaac86e4e93ea779a821967360c781d7ac5115b3f1a171ced77065a0174", - "sha256:15f39d50bd6c9091c67315ceb878a4f531957b121d2a05ebd077eb35ddc5efed", - "sha256:1958947983fef513e6e98eff9cb487b60bf14f588dc0e6bf35fa13751d2c8251", - "sha256:20d5cb29e8c5f76a127c75b6e7a77e846bc4b655c373baa098c26a61b7ecd0ef", - "sha256:21457825249b2a53834fa969c69713f8b5a79583689387a5e7aed880963ac564", - "sha256:2524c40891be6a3106885a3935d58452dd83eb7a5742a33cc780a1ad4c49dec0", - "sha256:26b72c5ae20bf59061c3570db835edb81d1e0706ff141747055591c4b41193f8", - "sha256:26d542258c7a1f35a9cff3d887687d3235006134b0ac1c62a6fe1ad3ac10440e", - "sha256:29f44e3c26b9783816ba9ce274110435d8f5b19bbd82f7a6c7612bb1452a3597", - "sha256:2c386339d7e3f064213aede5d03d054b237937fbca6dd2197ac8cf3b25a6b14e", - "sha256:39ddd3ba0a641f01d8f13a3cfd4c4924eb58e660d8afe87e9061d6e8ca6f7ac3", - "sha256:42c7555123679637c99205b1aa9e8f7d90fe29d4c243c719e347d4852545216c", - "sha256:4c19d39c04c29a6619adfeb19e3735c421b3bfee082f320662f52e59c47202ba", - "sha256:4e7d0a8d460fba526cc047333bdcbf172a159b8bd6be8c3eb63a416ff9ba1477", - "sha256:50360fb2a056ffd16e5f4177eee67f1dd1017332ea53fb095fe7b5bf29c70246", - "sha256:51f5726de3532b8222e569990c8aa34664faa97038304644679a51d906e60c6e", - "sha256:53a48f0228eab6cbf69fde3aa3c03cbe04e50e623ef92ae395fce47ef8a76152", - "sha256:55a0155b148fe0428285a30922f7213539aa84329a5ad828bca4bbbc665c70a4", - "sha256:56e46bbb85d52c1072b3f809cc1ce77251d560bc036d3a312b96db1afe76db2e", - "sha256:5b10bd6f008937705cf6e7bf8b6ece5ca055991e3eb130bca8023e20b86aa9a3", - "sha256:5cd11d46d7b7e5958121b3eaf4cd8638eff3a720ec527692132f05a57f14341d", - "sha256:5d5ef4718ecab24f785794e0e7536436698b459bfbc19a1650ef55280119d93b", - "sha256:60e8cc82d968174650c1860d7b716366caab9973787a1c060cf8043130f7d0f7", - "sha256:63af72b2955fc77caf0a77444baa2431fcabb4370219da38e1a9f8d12aaebe28", - "sha256:656c1866505a5735d0660b7da6d7147174bbf59d4975fc2b7f09f43c9bc25745", - "sha256:661942bc7cd0223d569d808f2e5696d9cc120acc73bf3e88a1f1be7ab648a7e4", - "sha256:67855c14173aec36395d7777aaba3cc527b393821f30143fd20b98e1ff31fd38", - "sha256:67bfbcbd0a04c575e8103a6061d03e393d9f80ffdb9beb3189261e9e9bc5d5e9", - "sha256:6a56e3e5bd2d62a01744fd2f1ce21d760c7c65f030e9522738d75932a14ab62a", - "sha256:6ad0562d4e6abb785be3e4dd68599c41be821b521da38c402bc9ab2a8e7ebc7e", - "sha256:6b0397b0be277b46762956f576e04dc06ced265759e8c2ff41a0ee1aa0064198", - "sha256:6e435540fa1da54667f0026cf1e8407fe6d8a11f1010b7f06b0b17214ebfcf5e", - "sha256:7011ade88c8e535cf140f8d1a59428676fbbce7c6e54fefce58bf117aefb6667", - "sha256:74175b9e12779382432dd1d1f5960ebe7465d36649b98a06c6b26be24d173fab", - "sha256:7cdf07fe0a557b131366f80727ec8ccc4b70d89f1e3f920d94a594d598d754f0", - "sha256:8617c7d43cd8ccdb62aebe984bfed77ca8f036e6c3e46dd3dddda64b10f0ab7a", - "sha256:88b4e43cab04c3c0f0d55df3b1eef62df2b629a1a369b5289a58f6fa8b07c4f4", - "sha256:8c86ea8fe85e2eb0ffa00b53192c401477d5252f6dd1db2e2ed21c1c30d17e5e", - "sha256:8ca7e6a0388dd9e1180b14728051068f4efe83e0d2de058b5ff92c63f399a73f", - "sha256:90252fa2ff3a104219db1f5ced7032a7b5fc82d7c8d2fec2b9a3e6fd4e25576b", - "sha256:9df43a2459cd3a3563404c1456b2c4c69564daa7dbaf15724c09821a3329ce46", - "sha256:a20528da85c7ac7a19b7384e8c3f8fa707841fd85afc4ed56eda59d93e3d98ad", - "sha256:a979b7cf9e33d86c4949df527a3018767e5f53bc3b02adf14d4d8db1db63ccc0", - "sha256:ae2b34bcfaae20c064948a4113bf8709eee89fd08317eb293ae4ebd69b4d9740", - "sha256:b1f08eeb9ce1510e6939b6e5dcd46a17765e2333daae78ecf4606808442e52cf", - "sha256:b801c2e40c5aa6072c2f4876de8dccd100af6d9918d4d0d7aa54a1d982fd4f44", - "sha256:b973ee650e8f442ce482c1d99ca7ab537c69098d53a3d046676a484fd710c87a", - "sha256:bf6c6b061efd00404b9750e2cfbd9507492c8d4b3721ded76cb03786131be2ed", - "sha256:c0dc628b5493f9a8cd9844b8bee9732ef587ab00002157c9329e4fc0ef4d3afa", - "sha256:c0ed2c1f335ba55b5fdc964622254917d6b782311c50e138863eda409fbb3b6d", - "sha256:c2dace4a7041cca2fba5357a2d7c97c5effdf52f63a1ef252cfa496875a3762d", - "sha256:c36ad534c0c29b4afa088dc53543c525b23c0797e01b69fef59b1a9c0e38b688", - "sha256:c45fee3968834cd291a13da5fac128b696c9592a9493a0f7ce0b47fa03cc574d", - "sha256:c5817641eebb391a2268c27fecd4162448e03538387093cdbd8bf3510c316b38", - "sha256:c644aaacc01d0df5c7072826df45e67301f191c55f68d7b2916d83a9ddc1b551", - "sha256:c8878011653dcdc27cc2c57e04ff96f0471e797f5c19ac3d7813a245bcb24371", - "sha256:cae73bb6898c4e045fbed5024cb587e4110fddb66f6163bcab5f81f9d4b9c496", - "sha256:cb0ac5179cba4b2f94f1aa208fbb77b62c4c9bf24dd446278b8b602cf85fcda3", - "sha256:cbabc59dcfaac66655c040dfcb8118f133fb5dde185e5fc152628354c1598e52", - "sha256:cd1dc59763effd1576f8368047c9c31468fce0af89d76b5067641137506792ae", - "sha256:cf209a6dc4b420ed32a7093642843cbf8703ed0a7d86c16c0b98af46762ebefb", - "sha256:d8229f2efece6a660ee211d74d91dbc2a76b95544d46c74c615e491900dc107f", - "sha256:d8c6de908465697a8708e4d6843a1e884f567962fc61eb1706856545141d0cbb", - "sha256:dc1091f59143b471d19eb64f54bae4f54bcf2a466ffb66fe45d94d8d734eb495", - "sha256:dce4199bf5f648a902ce37e7b3afa286f305cd2ef7a8b6ec907470ccb6c8b371", - "sha256:e40609380480b3d12c30f841323f42451c755b8fece84235236f5fe5ffca8c1c", - "sha256:e8c4adce8e37e75c4215297d7745551b8dcfa5f728f23ce09bf4e678a9399413", - "sha256:e918d70862d4cfd4b1c187310015646a14e1f5917922ab45b29f28f345eeb6be", - "sha256:ea6d441c513bf18c578c73c323acf7b4184507fc244762193aa3a871333c9045", - "sha256:ee05728c0b0b2484a9fc20466fa776fffb65d95f7317a3419985b8c908563861", - "sha256:f4162dbbd9c5c84fb930a36f290b08c93e35fce020d768a16fc8891a2f72bab8", - "sha256:f7bbe9e1ed2c8d3da736a15694d87c12493e54cc9dc9790796f0321794bbc91f" - ], - "markers": "python_version >= '3.8'", - "version": "==27.0.0" - }, - "referencing": { - "hashes": [ - "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", - "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0" - ], - "markers": "python_version >= '3.9'", - "version": "==0.36.2" - }, - "requests": { - "hashes": [ - "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", - "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==2.32.4" - }, - "requests-mock": { - "hashes": [ - "sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563", - "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401" - ], - "index": "pypi", - "markers": "python_version >= '3.5'", - "version": "==1.12.1" - }, - "rfc3339-validator": { - "hashes": [ - "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", - "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==0.1.4" - }, - "rfc3986-validator": { - "hashes": [ - "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", - "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==0.1.1" - }, - "rpds-py": { - "hashes": [ - "sha256:0317177b1e8691ab5879f4f33f4b6dc55ad3b344399e23df2e499de7b10a548d", - "sha256:036ded36bedb727beeabc16dc1dad7cb154b3fa444e936a03b67a86dc6a5066e", - "sha256:048893e902132fd6548a2e661fb38bf4896a89eea95ac5816cf443524a85556f", - "sha256:0701942049095741a8aeb298a31b203e735d1c61f4423511d2b1a41dcd8a16da", - "sha256:083a9513a33e0b92cf6e7a6366036c6bb43ea595332c1ab5c8ae329e4bcc0a9c", - "sha256:09eab132f41bf792c7a0ea1578e55df3f3e7f61888e340779b06050a9a3f16e9", - "sha256:0e6a327af8ebf6baba1c10fadd04964c1965d375d318f4435d5f3f9651550f4a", - "sha256:0eb90e94f43e5085623932b68840b6f379f26db7b5c2e6bcef3179bd83c9330f", - "sha256:114a07e85f32b125404f28f2ed0ba431685151c037a26032b213c882f26eb908", - "sha256:115874ae5e2fdcfc16b2aedc95b5eef4aebe91b28e7e21951eda8a5dc0d3461b", - "sha256:140f61d9bed7839446bdd44852e30195c8e520f81329b4201ceead4d64eb3a9f", - "sha256:1521031351865e0181bc585147624d66b3b00a84109b57fcb7a779c3ec3772cd", - "sha256:1c0c434a53714358532d13539272db75a5ed9df75a4a090a753ac7173ec14e11", - "sha256:1d1fadd539298e70cac2f2cb36f5b8a65f742b9b9f1014dd4ea1f7785e2470bf", - "sha256:1de336a4b164c9188cb23f3703adb74a7623ab32d20090d0e9bf499a2203ad65", - "sha256:1ee3e26eb83d39b886d2cb6e06ea701bba82ef30a0de044d34626ede51ec98b0", - "sha256:245550f5a1ac98504147cba96ffec8fabc22b610742e9150138e5d60774686d7", - "sha256:2a40046a529cc15cef88ac5ab589f83f739e2d332cb4d7399072242400ed68c9", - "sha256:2c2cd1a4b0c2b8c5e31ffff50d09f39906fe351389ba143c195566056c13a7ea", - "sha256:2cb9e5b5e26fc02c8a4345048cd9998c2aca7c2712bd1b36da0c72ee969a3523", - "sha256:33358883a4490287e67a2c391dfaea4d9359860281db3292b6886bf0be3d8692", - "sha256:35634369325906bcd01577da4c19e3b9541a15e99f31e91a02d010816b49bfda", - "sha256:35a8d1a24b5936b35c5003313bc177403d8bdef0f8b24f28b1c4a255f94ea992", - "sha256:3af5b4cc10fa41e5bc64e5c198a1b2d2864337f8fcbb9a67e747e34002ce812b", - "sha256:3bcce0edc1488906c2d4c75c94c70a0417e83920dd4c88fec1078c94843a6ce9", - "sha256:3c5b317ecbd8226887994852e85de562f7177add602514d4ac40f87de3ae45a8", - "sha256:3c6564c0947a7f52e4792983f8e6cf9bac140438ebf81f527a21d944f2fd0a40", - "sha256:3ebd879ab996537fc510a2be58c59915b5dd63bccb06d1ef514fee787e05984a", - "sha256:3f0b1798cae2bbbc9b9db44ee068c556d4737911ad53a4e5093d09d04b3bbc24", - "sha256:401ca1c4a20cc0510d3435d89c069fe0a9ae2ee6495135ac46bdd49ec0495763", - "sha256:454601988aab2c6e8fd49e7634c65476b2b919647626208e376afcd22019eeb8", - "sha256:4593c4eae9b27d22df41cde518b4b9e4464d139e4322e2127daa9b5b981b76be", - "sha256:45e484db65e5380804afbec784522de84fa95e6bb92ef1bd3325d33d13efaebd", - "sha256:48d64155d02127c249695abb87d39f0faf410733428d499867606be138161d65", - "sha256:4fbb0dbba559959fcb5d0735a0f87cdbca9e95dac87982e9b95c0f8f7ad10255", - "sha256:4fd52d3455a0aa997734f3835cbc4c9f32571345143960e7d7ebfe7b5fbfa3b2", - "sha256:50f2c501a89c9a5f4e454b126193c5495b9fb441a75b298c60591d8a2eb92e1b", - "sha256:58f77c60956501a4a627749a6dcb78dac522f249dd96b5c9f1c6af29bfacfb66", - "sha256:5a3ddb74b0985c4387719fc536faced33cadf2172769540c62e2a94b7b9be1c4", - "sha256:5c4a128527fe415d73cf1f70a9a688d06130d5810be69f3b553bf7b45e8acf79", - "sha256:5d473be2b13600b93a5675d78f59e63b51b1ba2d0476893415dfbb5477e65b31", - "sha256:5d9e40f32745db28c1ef7aad23f6fc458dc1e29945bd6781060f0d15628b8ddf", - "sha256:5f048bbf18b1f9120685c6d6bb70cc1a52c8cc11bdd04e643d28d3be0baf666d", - "sha256:605ffe7769e24b1800b4d024d24034405d9404f0bc2f55b6db3362cd34145a6f", - "sha256:6099263f526efff9cf3883dfef505518730f7a7a93049b1d90d42e50a22b4793", - "sha256:659d87430a8c8c704d52d094f5ba6fa72ef13b4d385b7e542a08fc240cb4a559", - "sha256:666fa7b1bd0a3810a7f18f6d3a25ccd8866291fbbc3c9b912b917a6715874bb9", - "sha256:68f6f060f0bbdfb0245267da014d3a6da9be127fe3e8cc4a68c6f833f8a23bb1", - "sha256:6d273f136e912aa101a9274c3145dcbddbe4bac560e77e6d5b3c9f6e0ed06d34", - "sha256:6d50841c425d16faf3206ddbba44c21aa3310a0cebc3c1cdfc3e3f4f9f6f5728", - "sha256:771c16060ff4e79584dc48902a91ba79fd93eade3aa3a12d6d2a4aadaf7d542b", - "sha256:785ffacd0ee61c3e60bdfde93baa6d7c10d86f15655bd706c89da08068dc5038", - "sha256:796ad874c89127c91970652a4ee8b00d56368b7e00d3477f4415fe78164c8000", - "sha256:79dc317a5f1c51fd9c6a0c4f48209c6b8526d0524a6904fc1076476e79b00f98", - "sha256:7c9409b47ba0650544b0bb3c188243b83654dfe55dcc173a86832314e1a6a35d", - "sha256:7d779b325cc8238227c47fbc53964c8cc9a941d5dbae87aa007a1f08f2f77b23", - "sha256:816568614ecb22b18a010c7a12559c19f6fe993526af88e95a76d5a60b8b75fb", - "sha256:8378fa4a940f3fb509c081e06cb7f7f2adae8cf46ef258b0e0ed7519facd573e", - "sha256:85608eb70a659bf4c1142b2781083d4b7c0c4e2c90eff11856a9754e965b2540", - "sha256:85fc223d9c76cabe5d0bff82214459189720dc135db45f9f66aa7cffbf9ff6c1", - "sha256:88ec04afe0c59fa64e2f6ea0dd9657e04fc83e38de90f6de201954b4d4eb59bd", - "sha256:8960b6dac09b62dac26e75d7e2c4a22efb835d827a7278c34f72b2b84fa160e3", - "sha256:89706d0683c73a26f76a5315d893c051324d771196ae8b13e6ffa1ffaf5e574f", - "sha256:89c24300cd4a8e4a51e55c31a8ff3918e6651b241ee8876a42cc2b2a078533ba", - "sha256:8c742af695f7525e559c16f1562cf2323db0e3f0fbdcabdf6865b095256b2d40", - "sha256:8dbd586bfa270c1103ece2109314dd423df1fa3d9719928b5d09e4840cec0d72", - "sha256:8eb8c84ecea987a2523e057c0d950bcb3f789696c0499290b8d7b3107a719d78", - "sha256:921954d7fbf3fccc7de8f717799304b14b6d9a45bbeec5a8d7408ccbf531faf5", - "sha256:9a46c2fb2545e21181445515960006e85d22025bd2fe6db23e76daec6eb689fe", - "sha256:9c006f3aadeda131b438c3092124bd196b66312f0caa5823ef09585a669cf449", - "sha256:9ceca1cf097ed77e1a51f1dbc8d174d10cb5931c188a4505ff9f3e119dfe519b", - "sha256:9e5fc7484fa7dce57e25063b0ec9638ff02a908304f861d81ea49273e43838c1", - "sha256:9f2f48ab00181600ee266a095fe815134eb456163f7d6699f525dee471f312cf", - "sha256:9fca84a15333e925dd59ce01da0ffe2ffe0d6e5d29a9eeba2148916d1824948c", - "sha256:a49e1d7a4978ed554f095430b89ecc23f42014a50ac385eb0c4d163ce213c325", - "sha256:a58d1ed49a94d4183483a3ce0af22f20318d4a1434acee255d683ad90bf78129", - "sha256:a61d0b2c7c9a0ae45732a77844917b427ff16ad5464b4d4f5e4adb955f582890", - "sha256:a714bf6e5e81b0e570d01f56e0c89c6375101b8463999ead3a93a5d2a4af91fa", - "sha256:a7b74e92a3b212390bdce1d93da9f6488c3878c1d434c5e751cbc202c5e09500", - "sha256:a8bd2f19e312ce3e1d2c635618e8a8d8132892bb746a7cf74780a489f0f6cdcb", - "sha256:b0be9965f93c222fb9b4cc254235b3b2b215796c03ef5ee64f995b1b69af0762", - "sha256:b24bf3cd93d5b6ecfbedec73b15f143596c88ee249fa98cefa9a9dc9d92c6f28", - "sha256:b5ffe453cde61f73fea9430223c81d29e2fbf412a6073951102146c84e19e34c", - "sha256:bc120d1132cff853ff617754196d0ac0ae63befe7c8498bd67731ba368abe451", - "sha256:bd035756830c712b64725a76327ce80e82ed12ebab361d3a1cdc0f51ea21acb0", - "sha256:bffcf57826d77a4151962bf1701374e0fc87f536e56ec46f1abdd6a903354042", - "sha256:c2013ee878c76269c7b557a9a9c042335d732e89d482606990b70a839635feb7", - "sha256:c4feb9211d15d9160bc85fa72fed46432cdc143eb9cf6d5ca377335a921ac37b", - "sha256:c8980cde3bb8575e7c956a530f2c217c1d6aac453474bf3ea0f9c89868b531b6", - "sha256:c98f126c4fc697b84c423e387337d5b07e4a61e9feac494362a59fd7a2d9ed80", - "sha256:ccc6f3ddef93243538be76f8e47045b4aad7a66a212cd3a0f23e34469473d36b", - "sha256:ccfa689b9246c48947d31dd9d8b16d89a0ecc8e0e26ea5253068efb6c542b76e", - "sha256:cda776f1967cb304816173b30994faaf2fd5bcb37e73118a47964a02c348e1bc", - "sha256:ce4c8e485a3c59593f1a6f683cf0ea5ab1c1dc94d11eea5619e4fb5228b40fbd", - "sha256:d3c10228d6cf6fe2b63d2e7985e94f6916fa46940df46b70449e9ff9297bd3d1", - "sha256:d4ca54b9cf9d80b4016a67a0193ebe0bcf29f6b0a96f09db942087e294d3d4c2", - "sha256:d4cb2b3ddc16710548801c6fcc0cfcdeeff9dafbc983f77265877793f2660309", - "sha256:d50e4864498a9ab639d6d8854b25e80642bd362ff104312d9770b05d66e5fb13", - "sha256:d74ec9bc0e2feb81d3f16946b005748119c0f52a153f6db6a29e8cd68636f295", - "sha256:d8222acdb51a22929c3b2ddb236b69c59c72af4019d2cba961e2f9add9b6e634", - "sha256:db58483f71c5db67d643857404da360dce3573031586034b7d59f245144cc192", - "sha256:dc3c1ff0abc91444cd20ec643d0f805df9a3661fcacf9c95000329f3ddf268a4", - "sha256:dd326a81afe332ede08eb39ab75b301d5676802cdffd3a8f287a5f0b694dc3f5", - "sha256:dec21e02e6cc932538b5203d3a8bd6aa1480c98c4914cb88eea064ecdbc6396a", - "sha256:e1dafef8df605fdb46edcc0bf1573dea0d6d7b01ba87f85cd04dc855b2b4479e", - "sha256:e2f6a2347d3440ae789505693a02836383426249d5293541cd712e07e7aecf54", - "sha256:e37caa8cdb3b7cf24786451a0bdb853f6347b8b92005eeb64225ae1db54d1c2b", - "sha256:e43a005671a9ed5a650f3bc39e4dbccd6d4326b24fb5ea8be5f3a43a6f576c72", - "sha256:e5e2f7280d8d0d3ef06f3ec1b4fd598d386cc6f0721e54f09109a8132182fbfe", - "sha256:e87798852ae0b37c88babb7f7bbbb3e3fecc562a1c340195b44c7e24d403e380", - "sha256:ee86d81551ec68a5c25373c5643d343150cc54672b5e9a0cafc93c1870a53954", - "sha256:f251bf23deb8332823aef1da169d5d89fa84c89f67bdfb566c49dea1fccfd50d", - "sha256:f3d86373ff19ca0441ebeb696ef64cb58b8b5cbacffcda5a0ec2f3911732a194", - "sha256:f4ad628b5174d5315761b67f212774a32f5bad5e61396d38108bd801c0a8f5d9", - "sha256:f70316f760174ca04492b5ab01be631a8ae30cadab1d1081035136ba12738cfa", - "sha256:f73ce1512e04fbe2bc97836e89830d6b4314c171587a99688082d090f934d20a", - "sha256:ff7c23ba0a88cb7b104281a99476cccadf29de2a0ef5ce864959a52675b1ca83" - ], - "markers": "python_version >= '3.9'", - "version": "==0.25.1" - }, - "send2trash": { - "hashes": [ - "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9", - "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.8.3" - }, - "setuptools": { - "hashes": [ - "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", - "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c" - ], - "markers": "python_version >= '3.9'", - "version": "==80.9.0" - }, - "six": { - "hashes": [ - "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", - "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==1.17.0" - }, - "sniffio": { - "hashes": [ - "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", - "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc" - ], - "markers": "python_version >= '3.7'", - "version": "==1.3.1" - }, - "soupsieve": { - "hashes": [ - "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", - "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a" - ], - "markers": "python_version >= '3.8'", - "version": "==2.7" - }, - "stack-data": { - "hashes": [ - "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", - "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695" - ], - "version": "==0.6.3" - }, - "stdlib-list": { - "hashes": [ - "sha256:9029ea5e3dfde8cd4294cfd4d1797be56a67fc4693c606181730148c3fd1da29", - "sha256:95ebd1d73da9333bba03ccc097f5bac05e3aa03e6822a0c0290f87e1047f1857" - ], - "markers": "python_version >= '3.9'", - "version": "==0.11.1" - }, - "terminado": { - "hashes": [ - "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", - "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e" - ], - "markers": "python_version >= '3.8'", - "version": "==0.18.1" - }, - "tinycss2": { - "hashes": [ - "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", - "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289" - ], - "markers": "python_version >= '3.8'", - "version": "==1.4.0" - }, - "tomlkit": { - "hashes": [ - "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", - "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0" - ], - "markers": "python_version >= '3.8'", - "version": "==0.13.3" - }, - "tornado": { - "hashes": [ - "sha256:02420a0eb7bf617257b9935e2b754d1b63897525d8a289c9d65690d580b4dcf7", - "sha256:13ce6e3396c24e2808774741331638ee6c2f50b114b97a55c5b442df65fd9692", - "sha256:253b76040ee3bab8bcf7ba9feb136436a3787208717a1fb9f2c16b744fba7331", - "sha256:308473f4cc5a76227157cdf904de33ac268af770b2c5f05ca6c1161d82fdd95e", - "sha256:5cae6145f4cdf5ab24744526cc0f55a17d76f02c98f4cff9daa08ae9a217448a", - "sha256:84ceece391e8eb9b2b95578db65e920d2a61070260594819589609ba9bc6308c", - "sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b", - "sha256:9e9ca370f717997cb85606d074b0e5b247282cf5e2e1611568b8821afe0342d6", - "sha256:b77e9dfa7ed69754a54c89d82ef746398be82f749df69c4d3abe75c4d1ff4888", - "sha256:caec6314ce8a81cf69bd89909f4b633b9f523834dc1a352021775d45e51d9401", - "sha256:d50065ba7fd11d3bd41bcad0825227cc9a95154bad83239357094c36708001f7", - "sha256:e0a36e1bc684dca10b1aa75a31df8bdfed656831489bc1e6a6ebed05dc1ec365" - ], - "markers": "python_version >= '3.9'", - "version": "==6.5.1" - }, - "traitlets": { - "hashes": [ - "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", - "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f" - ], - "markers": "python_version >= '3.8'", - "version": "==5.14.3" - }, - "types-python-dateutil": { - "hashes": [ - "sha256:13e80d6c9c47df23ad773d54b2826bd52dbbb41be87c3f339381c1700ad21ee5", - "sha256:2b2b3f57f9c6a61fba26a9c0ffb9ea5681c9b83e69cd897c6b5f668d9c0cab93" - ], - "markers": "python_version >= '3.9'", - "version": "==2.9.0.20250516" - }, - "typing-extensions": { - "hashes": [ - "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", - "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af" - ], - "markers": "python_version >= '3.9'", - "version": "==4.14.0" - }, - "uri-template": { - "hashes": [ - "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", - "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363" - ], - "markers": "python_version >= '3.7'", - "version": "==1.3.0" - }, - "urllib3": { - "hashes": [ - "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", - "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc" - ], - "markers": "python_version >= '3.9'", - "version": "==2.5.0" - }, - "wcwidth": { - "hashes": [ - "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", - "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5" - ], - "version": "==0.2.13" - }, - "webcolors": { - "hashes": [ - "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", - "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6" - ], - "markers": "python_version >= '3.9'", - "version": "==24.11.1" - }, - "webencodings": { - "hashes": [ - "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", - "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" - ], - "version": "==0.5.1" - }, - "websocket-client": { - "hashes": [ - "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", - "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da" - ], - "markers": "python_version >= '3.8'", - "version": "==1.8.0" - } - } -} diff --git a/README.md b/README.md index 6fc9dbd..900b285 100644 --- a/README.md +++ b/README.md @@ -1,80 +1,142 @@ # pyetm -This package provides a set of tools for interaction with the Energy Transition Model's API. Learn more -about the Energy Transition Model [here](https://energytransitionmodel.com/). The -package is designed to be a modular tool that advanced users can incorporate into their scenario workflows. The -complete documentation is available [via the ETM documentation page](https://docs.energytransitionmodel.com/main/pyetm/introduction). +This package provides a set of tools for interaction with the Energy Transition Model's API. +Learn more about the Energy Transition Model [here](https://energytransitionmodel.com/). + +The package is designed to be a modular tool that advanced users can incorporate into their scenario workflows. +The complete documentation is available [via the ETM documentation page](https://docs.energytransitionmodel.com/main/pyetm/introduction). + +--- ## Installation -You can clone pyetm from [our Github](https://github.com/quintel/pyetm). The package is also -available via pip - install it and use it in your project! -``` +You can install **pyetm** directly from PyPI: +```bash pip install pyetm ``` -## Just running the Jupyter Notebooks - or a beginner friendly guide to PyETM -If you are not planning on developing the tool, but would like to open and run our Jupyter notebooks -in VS Code, follow the beginner friendly guide at [Running notebooks](running_notebooks.md). +Or clone from [our GitHub repository](https://github.com/quintel/pyetm) if you want the latest development version: +```bash +git clone https://github.com/quintel/pyetm.git +cd pyetm +``` -## Getting started -Make sure you have [Python 3](https://www.python.org/downloads/) installed. Then, install all required -libraries by opening a terminal/command-prompt window in the `pyetm` folder (or navigate to this folder -in the terminal using `cd "path/to/pytem-folder"`). All following examples of running the tool -expect you to be in this folder. +--- -#### Using pipenv -It is recommended (but not required) that you use [`pipenv`](https://pipenv.pypa.io/en/latest/) for -running these tools. When using `pipenv` it will create a virtual environment for you. A virtual -environment helps with keeping the libraries you install here separate of your global libraries (in -other words your `pyetm` will be in a stable and isolated environment and are thus less -likely to break when updating things elsewhere on your computer). +## Running Jupyter Notebooks (Beginner Friendly) -You can install `pipenv` with `pip` or `pip3` if you don't have it installed yet. -``` -pip3 install pipenv -``` +If you only want to open and run our Jupyter notebooks in VS Code without developing the package, +follow the beginner guide here: [Running notebooks](running_notebooks.md). -Then you can create a new environment and install all the libraries in one go by running: -``` -pipenv install -``` +--- -If you plan to develop with the tool, install the dev dependencies too: -``` -pipenv install --dev +## Development Setup (Using Poetry) + +We recommend using [Poetry](https://python-poetry.org/) to manage dependencies and virtual environments. +Poetry ensures all dependencies are installed in an isolated environment, keeping your system clean. + +### Python +Make sure you have **Python 3.12** or later installed: +- **Windows**: [Download from python.org](https://www.python.org/downloads/windows/) +- **macOS**: Install via [Homebrew](https://brew.sh/) + ```bash + brew install python@3.12 + ``` +- **Linux**: Use your package manager or install from source. + +Check your version: +```bash +python3 --version ``` -#### Configuring your settings +--- -You can set your API token and the base url for your requests (depending which -[environment](https://docs.energytransitionmodel.com/api/intro#environments) you want to interact with) -either directly in the ENV or via a config.yml file. +### Poetry +Follow the [official instructions](https://python-poetry.org/docs/#installation): -##### config.yml -pyetm uses a `config.yml` file in the project root to store your personal settings: +```bash +curl -sSL https://install.python-poetry.org | python3 - +``` -1. Duplicate the example file provided (`examples/config.example.yml`) and rename it to `config.yml`. -2. Open `config.yml` and fill in your values: - - **etm_api_token**: Your personal ETM API token (overridden by the `$ETM_API_TOKEN` environment variable if set). - - **base_url**: The API base URL for the target environment (overridden by the `$BASE_URL` environment - variable if set) e.g., default pro, a stable engine at `https://2025-01.engine.energytransitionmodel.com/api/v3`, - or beta at `https://beta.engine.energytransitionmodel.com/api/v3`. - - **local_engine_url** and **local_model_url**: URLs for a local ETM instance, if running locally. - - **proxy_servers**: (Optional) HTTP/HTTPS proxy URLs, if required by your network. - - **csv_separator** and **decimal_separator**: Defaults are `,` and `.`; adjust if your CSV exports - use different separators. +After installation, ensure Poetry is available: +```bash +poetry --version +``` -Your `config.yml` should reside in the root `pyetm/` folder. -##### ENV variables -If you use pyetm as a package, you may want to set your ENV variables using a custom flow. In that -case, the variables you need to set are: +#### Install Dependencies - $ETM_API_TOKEN - Your api token (specific to the environment you are interacting with) - $BASE_URL - The base url of the environment you are interacting with. - $LOCAL_ENGINE_URL - The local url of the engine if running locally. - $LOCAL_MODEL_URL - The local url of the model if running locally. +Navigate to the `pyetm` folder and install all dependencies: +```bash +cd pyetm +poetry install +``` +This will: +- Create a virtual environment +- Install runtime dependencies +If you want development dependencies (testing, linting, etc.) then append the +"--with dev" flag to the install command. + + +#### Activating the Environment +You can either: +- Run commands inside Poetry’s environment: + ```bash + poetry run pytest + poetry run pyetm + ``` +- Or activate the shell: + ```bash + eval $(poetry env activate) + ``` + Then run commands normally: + ```bash + pytest + pyetm + ``` + + +## Configuring Your Settings + +You can configure your API token and base URL either with a **config.yml** file or environment variables. + +### Option 1: `config.yml` +1. Duplicate the example file (`examples/config.example.yml`) and rename it to `config.yml`. +2. Edit `config.yml`: + - **etm_api_token**: Your ETM API token (overridden by `$ETM_API_TOKEN` if set). + - **base_url**: API base URL (overridden by `$BASE_URL` if set). + Examples: + - Production: `https://engine.energytransitionmodel.com/api/v3` + - Beta: `https://beta.engine.energytransitionmodel.com/api/v3` + - Stable engine snapshot: `https://2025-01.engine.energytransitionmodel.com/api/v3` + - **local_engine_url**, **local_model_url**: URLs for a local ETM instance. + - **proxy_servers**: (Optional) HTTP/HTTPS proxy URLs. + - **csv_separator** and **decimal_separator**: Defaults are `,` and `.`. + +Place `config.yml` in the project root (`pyetm/` folder). + +### Option 2: Environment Variables +If you prefer, set these environment variables: +```bash +ETM_API_TOKEN= +BASE_URL= +LOCAL_ENGINE_URL= +LOCAL_MODEL_URL= +``` -#TODO - check links +--- + +## Cross-Platform Notes +- **Windows**: + - Use `py` instead of `python3` if `python3` is not recognized. + - In PowerShell, set environment variables with: + ```powershell + $env:ETM_API_TOKEN="your-token" + ``` +- **macOS/Linux**: + - Use `python3` in commands. + - Set environment variables with: + ```bash + export ETM_API_TOKEN="your-token" + ``` diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..19a8b5d --- /dev/null +++ b/poetry.lock @@ -0,0 +1,3036 @@ +# This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[[package]] +name = "anyio" +version = "4.10.0" +description = "High-level concurrency and networking framework on top of asyncio or Trio" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "anyio-4.10.0-py3-none-any.whl", hash = "sha256:60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1"}, + {file = "anyio-4.10.0.tar.gz", hash = "sha256:3f3fae35c96039744587aa5b8371e7e8e603c0702999535961dd336026973ba6"}, +] + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} + +[package.extras] +trio = ["trio (>=0.26.1)"] + +[[package]] +name = "appnope" +version = "0.1.4" +description = "Disable App Nap on macOS >= 10.9" +optional = false +python-versions = ">=3.6" +groups = ["dev"] +markers = "platform_system == \"Darwin\"" +files = [ + {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, + {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, +] + +[[package]] +name = "argon2-cffi" +version = "25.1.0" +description = "Argon2 for Python" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741"}, + {file = "argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1"}, +] + +[package.dependencies] +argon2-cffi-bindings = "*" + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +optional = false +python-versions = ">=3.6" +groups = ["dev"] +markers = "python_version >= \"3.14\"" +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 = "argon2-cffi-bindings" +version = "25.1.0" +description = "Low-level CFFI bindings for Argon2" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_version < \"3.14\"" +files = [ + {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:3d3f05610594151994ca9ccb3c771115bdb4daef161976a266f0dd8aa9996b8f"}, + {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8b8efee945193e667a396cbc7b4fb7d357297d6234d30a489905d96caabde56b"}, + {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3c6702abc36bf3ccba3f802b799505def420a1b7039862014a65db3205967f5a"}, + {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1c70058c6ab1e352304ac7e3b52554daadacd8d453c1752e547c76e9c99ac44"}, + {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2fd3bfbff3c5d74fef31a722f729bf93500910db650c925c2d6ef879a7e51cb"}, + {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4f9665de60b1b0e99bcd6be4f17d90339698ce954cfd8d9cf4f91c995165a92"}, + {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ba92837e4a9aa6a508c8d2d7883ed5a8f6c308c89a4790e1e447a220deb79a85"}, + {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-win32.whl", hash = "sha256:84a461d4d84ae1295871329b346a97f68eade8c53b6ed9a7ca2d7467f3c8ff6f"}, + {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b55aec3565b65f56455eebc9b9f34130440404f27fe21c3b375bf1ea4d8fbae6"}, + {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:87c33a52407e4c41f3b70a9c2d3f6056d88b10dad7695be708c5021673f55623"}, + {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aecba1723ae35330a008418a91ea6cfcedf6d31e5fbaa056a166462ff066d500"}, + {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2630b6240b495dfab90aebe159ff784d08ea999aa4b0d17efa734055a07d2f44"}, + {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7aef0c91e2c0fbca6fc68e7555aa60ef7008a739cbe045541e438373bc54d2b0"}, + {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e021e87faa76ae0d413b619fe2b65ab9a037f24c60a1e6cc43457ae20de6dc6"}, + {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e924cfc503018a714f94a49a149fdc0b644eaead5d1f089330399134fa028a"}, + {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87b72589133f0346a1cb8d5ecca4b933e3c9b64656c9d175270a000e73b288d"}, + {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1db89609c06afa1a214a69a462ea741cf735b29a57530478c06eb81dd403de99"}, + {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-win32.whl", hash = "sha256:473bcb5f82924b1becbb637b63303ec8d10e84c8d241119419897a26116515d2"}, + {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl", hash = "sha256:a98cd7d17e9f7ce244c0803cad3c23a7d379c301ba618a5fa76a67d116618b98"}, + {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-win_arm64.whl", hash = "sha256:b0fdbcf513833809c882823f98dc2f931cf659d9a1429616ac3adebb49f5db94"}, + {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6dca33a9859abf613e22733131fc9194091c1fa7cb3e131c143056b4856aa47e"}, + {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:21378b40e1b8d1655dd5310c84a40fc19a9aa5e6366e835ceb8576bf0fea716d"}, + {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d588dec224e2a83edbdc785a5e6f3c6cd736f46bfd4b441bbb5aa1f5085e584"}, + {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5acb4e41090d53f17ca1110c3427f0a130f944b896fc8c83973219c97f57b690"}, + {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:da0c79c23a63723aa5d782250fbf51b768abca630285262fb5144ba5ae01e520"}, + {file = "argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d"}, +] + +[package.dependencies] +cffi = {version = ">=1.0.1", markers = "python_version < \"3.14\""} + +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] + +[[package]] +name = "astroid" +version = "3.3.11" +description = "An abstract syntax tree for Python with inference support." +optional = false +python-versions = ">=3.9.0" +groups = ["dev"] +files = [ + {file = "astroid-3.3.11-py3-none-any.whl", hash = "sha256:54c760ae8322ece1abd213057c4b5bba7c49818853fc901ef09719a60dbf9dec"}, + {file = "astroid-3.3.11.tar.gz", hash = "sha256:1e5a5011af2920c7c67a53f65d536d65bfa7116feeaf2354d8b94f29573bb0ce"}, +] + +[[package]] +name = "asttokens" +version = "3.0.0" +description = "Annotate AST trees with source code positions" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, + {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, +] + +[package.extras] +astroid = ["astroid (>=2,<4)"] +test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "async-lru" +version = "2.0.5" +description = "Simple LRU cache for asyncio" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943"}, + {file = "async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb"}, +] + +[[package]] +name = "attrs" +version = "25.3.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, + {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, +] + +[package.extras] +benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] +tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] + +[[package]] +name = "babel" +version = "2.17.0" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, + {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, +] + +[package.extras] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""] + +[[package]] +name = "beautifulsoup4" +version = "4.13.4" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.7.0" +groups = ["dev"] +files = [ + {file = "beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b"}, + {file = "beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195"}, +] + +[package.dependencies] +soupsieve = ">1.2" +typing-extensions = ">=4.0.0" + +[package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "bleach" +version = "6.2.0" +description = "An easy safelist-based HTML-sanitizing tool." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, + {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, +] + +[package.dependencies] +tinycss2 = {version = ">=1.1.0,<1.5", optional = true, markers = "extra == \"css\""} +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.5)"] + +[[package]] +name = "certifi" +version = "2025.8.3" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.7" +groups = ["main", "dev"] +files = [ + {file = "certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5"}, + {file = "certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407"}, +] + +[[package]] +name = "cffi" +version = "1.17.1" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, + {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, + {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, + {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, + {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, + {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, + {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, + {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, + {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, + {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, + {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, + {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, + {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, + {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, + {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "3.4.3" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7" +groups = ["main", "dev"] +files = [ + {file = "charset_normalizer-3.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-win32.whl", hash = "sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-win32.whl", hash = "sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-win32.whl", hash = "sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca"}, + {file = "charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a"}, + {file = "charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +markers = "sys_platform == \"win32\"" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "comm" +version = "0.2.3" +description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417"}, + {file = "comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971"}, +] + +[package.extras] +test = ["pytest"] + +[[package]] +name = "coverage" +version = "7.10.3" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "coverage-7.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:53808194afdf948c462215e9403cca27a81cf150d2f9b386aee4dab614ae2ffe"}, + {file = "coverage-7.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f4d1b837d1abf72187a61645dbf799e0d7705aa9232924946e1f57eb09a3bf00"}, + {file = "coverage-7.10.3-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2a90dd4505d3cc68b847ab10c5ee81822a968b5191664e8a0801778fa60459fa"}, + {file = "coverage-7.10.3-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d52989685ff5bf909c430e6d7f6550937bc6d6f3e6ecb303c97a86100efd4596"}, + {file = "coverage-7.10.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdb558a1d97345bde3a9f4d3e8d11c9e5611f748646e9bb61d7d612a796671b5"}, + {file = "coverage-7.10.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c9e6331a8f09cb1fc8bda032752af03c366870b48cce908875ba2620d20d0ad4"}, + {file = "coverage-7.10.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:992f48bf35b720e174e7fae916d943599f1a66501a2710d06c5f8104e0756ee1"}, + {file = "coverage-7.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c5595fc4ad6a39312c786ec3326d7322d0cf10e3ac6a6df70809910026d67cfb"}, + {file = "coverage-7.10.3-cp310-cp310-win32.whl", hash = "sha256:9e92fa1f2bd5a57df9d00cf9ce1eb4ef6fccca4ceabec1c984837de55329db34"}, + {file = "coverage-7.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:b96524d6e4a3ce6a75c56bb15dbd08023b0ae2289c254e15b9fbdddf0c577416"}, + {file = "coverage-7.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f2ff2e2afdf0d51b9b8301e542d9c21a8d084fd23d4c8ea2b3a1b3c96f5f7397"}, + {file = "coverage-7.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:18ecc5d1b9a8c570f6c9b808fa9a2b16836b3dd5414a6d467ae942208b095f85"}, + {file = "coverage-7.10.3-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1af4461b25fe92889590d438905e1fc79a95680ec2a1ff69a591bb3fdb6c7157"}, + {file = "coverage-7.10.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3966bc9a76b09a40dc6063c8b10375e827ea5dfcaffae402dd65953bef4cba54"}, + {file = "coverage-7.10.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:205a95b87ef4eb303b7bc5118b47b6b6604a644bcbdb33c336a41cfc0a08c06a"}, + {file = "coverage-7.10.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b3801b79fb2ad61e3c7e2554bab754fc5f105626056980a2b9cf3aef4f13f84"}, + {file = "coverage-7.10.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b0dc69c60224cda33d384572da945759756e3f06b9cdac27f302f53961e63160"}, + {file = "coverage-7.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a83d4f134bab2c7ff758e6bb1541dd72b54ba295ced6a63d93efc2e20cb9b124"}, + {file = "coverage-7.10.3-cp311-cp311-win32.whl", hash = "sha256:54e409dd64e5302b2a8fdf44ec1c26f47abd1f45a2dcf67bd161873ee05a59b8"}, + {file = "coverage-7.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:30c601610a9b23807c5e9e2e442054b795953ab85d525c3de1b1b27cebeb2117"}, + {file = "coverage-7.10.3-cp311-cp311-win_arm64.whl", hash = "sha256:dabe662312a97958e932dee056f2659051d822552c0b866823e8ba1c2fe64770"}, + {file = "coverage-7.10.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:449c1e2d3a84d18bd204258a897a87bc57380072eb2aded6a5b5226046207b42"}, + {file = "coverage-7.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d4f9ce50b9261ad196dc2b2e9f1fbbee21651b54c3097a25ad783679fd18294"}, + {file = "coverage-7.10.3-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4dd4564207b160d0d45c36a10bc0a3d12563028e8b48cd6459ea322302a156d7"}, + {file = "coverage-7.10.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5ca3c9530ee072b7cb6a6ea7b640bcdff0ad3b334ae9687e521e59f79b1d0437"}, + {file = "coverage-7.10.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b6df359e59fa243c9925ae6507e27f29c46698359f45e568fd51b9315dbbe587"}, + {file = "coverage-7.10.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a181e4c2c896c2ff64c6312db3bda38e9ade2e1aa67f86a5628ae85873786cea"}, + {file = "coverage-7.10.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a374d4e923814e8b72b205ef6b3d3a647bb50e66f3558582eda074c976923613"}, + {file = "coverage-7.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:daeefff05993e5e8c6e7499a8508e7bd94502b6b9a9159c84fd1fe6bce3151cb"}, + {file = "coverage-7.10.3-cp312-cp312-win32.whl", hash = "sha256:187ecdcac21f9636d570e419773df7bd2fda2e7fa040f812e7f95d0bddf5f79a"}, + {file = "coverage-7.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:4a50ad2524ee7e4c2a95e60d2b0b83283bdfc745fe82359d567e4f15d3823eb5"}, + {file = "coverage-7.10.3-cp312-cp312-win_arm64.whl", hash = "sha256:c112f04e075d3495fa3ed2200f71317da99608cbb2e9345bdb6de8819fc30571"}, + {file = "coverage-7.10.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b99e87304ffe0eb97c5308447328a584258951853807afdc58b16143a530518a"}, + {file = "coverage-7.10.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4af09c7574d09afbc1ea7da9dcea23665c01f3bc1b1feb061dac135f98ffc53a"}, + {file = "coverage-7.10.3-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:488e9b50dc5d2aa9521053cfa706209e5acf5289e81edc28291a24f4e4488f46"}, + {file = "coverage-7.10.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:913ceddb4289cbba3a310704a424e3fb7aac2bc0c3a23ea473193cb290cf17d4"}, + {file = "coverage-7.10.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b1f91cbc78c7112ab84ed2a8defbccd90f888fcae40a97ddd6466b0bec6ae8a"}, + {file = "coverage-7.10.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0bac054d45af7cd938834b43a9878b36ea92781bcb009eab040a5b09e9927e3"}, + {file = "coverage-7.10.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fe72cbdd12d9e0f4aca873fa6d755e103888a7f9085e4a62d282d9d5b9f7928c"}, + {file = "coverage-7.10.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c1e2e927ab3eadd7c244023927d646e4c15c65bb2ac7ae3c3e9537c013700d21"}, + {file = "coverage-7.10.3-cp313-cp313-win32.whl", hash = "sha256:24d0c13de473b04920ddd6e5da3c08831b1170b8f3b17461d7429b61cad59ae0"}, + {file = "coverage-7.10.3-cp313-cp313-win_amd64.whl", hash = "sha256:3564aae76bce4b96e2345cf53b4c87e938c4985424a9be6a66ee902626edec4c"}, + {file = "coverage-7.10.3-cp313-cp313-win_arm64.whl", hash = "sha256:f35580f19f297455f44afcd773c9c7a058e52eb6eb170aa31222e635f2e38b87"}, + {file = "coverage-7.10.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07009152f497a0464ffdf2634586787aea0e69ddd023eafb23fc38267db94b84"}, + {file = "coverage-7.10.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8dd2ba5f0c7e7e8cc418be2f0c14c4d9e3f08b8fb8e4c0f83c2fe87d03eb655e"}, + {file = "coverage-7.10.3-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1ae22b97003c74186e034a93e4f946c75fad8c0ce8d92fbbc168b5e15ee2841f"}, + {file = "coverage-7.10.3-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:eb329f1046888a36b1dc35504d3029e1dd5afe2196d94315d18c45ee380f67d5"}, + {file = "coverage-7.10.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce01048199a91f07f96ca3074b0c14021f4fe7ffd29a3e6a188ac60a5c3a4af8"}, + {file = "coverage-7.10.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:08b989a06eb9dfacf96d42b7fb4c9a22bafa370d245dc22fa839f2168c6f9fa1"}, + {file = "coverage-7.10.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:669fe0d4e69c575c52148511029b722ba8d26e8a3129840c2ce0522e1452b256"}, + {file = "coverage-7.10.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3262d19092771c83f3413831d9904b1ccc5f98da5de4ffa4ad67f5b20c7aaf7b"}, + {file = "coverage-7.10.3-cp313-cp313t-win32.whl", hash = "sha256:cc0ee4b2ccd42cab7ee6be46d8a67d230cb33a0a7cd47a58b587a7063b6c6b0e"}, + {file = "coverage-7.10.3-cp313-cp313t-win_amd64.whl", hash = "sha256:03db599f213341e2960430984e04cf35fb179724e052a3ee627a068653cf4a7c"}, + {file = "coverage-7.10.3-cp313-cp313t-win_arm64.whl", hash = "sha256:46eae7893ba65f53c71284585a262f083ef71594f05ec5c85baf79c402369098"}, + {file = "coverage-7.10.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:bce8b8180912914032785850d8f3aacb25ec1810f5f54afc4a8b114e7a9b55de"}, + {file = "coverage-7.10.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07790b4b37d56608536f7c1079bd1aa511567ac2966d33d5cec9cf520c50a7c8"}, + {file = "coverage-7.10.3-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e79367ef2cd9166acedcbf136a458dfe9a4a2dd4d1ee95738fb2ee581c56f667"}, + {file = "coverage-7.10.3-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:419d2a0f769f26cb1d05e9ccbc5eab4cb5d70231604d47150867c07822acbdf4"}, + {file = "coverage-7.10.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee221cf244757cdc2ac882e3062ab414b8464ad9c884c21e878517ea64b3fa26"}, + {file = "coverage-7.10.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c2079d8cdd6f7373d628e14b3357f24d1db02c9dc22e6a007418ca7a2be0435a"}, + {file = "coverage-7.10.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:bd8df1f83c0703fa3ca781b02d36f9ec67ad9cb725b18d486405924f5e4270bd"}, + {file = "coverage-7.10.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6b4e25e0fa335c8aa26e42a52053f3786a61cc7622b4d54ae2dad994aa754fec"}, + {file = "coverage-7.10.3-cp314-cp314-win32.whl", hash = "sha256:d7c3d02c2866deb217dce664c71787f4b25420ea3eaf87056f44fb364a3528f5"}, + {file = "coverage-7.10.3-cp314-cp314-win_amd64.whl", hash = "sha256:9c8916d44d9e0fe6cdb2227dc6b0edd8bc6c8ef13438bbbf69af7482d9bb9833"}, + {file = "coverage-7.10.3-cp314-cp314-win_arm64.whl", hash = "sha256:1007d6a2b3cf197c57105cc1ba390d9ff7f0bee215ced4dea530181e49c65ab4"}, + {file = "coverage-7.10.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ebc8791d346410d096818788877d675ca55c91db87d60e8f477bd41c6970ffc6"}, + {file = "coverage-7.10.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1f4e4d8e75f6fd3c6940ebeed29e3d9d632e1f18f6fb65d33086d99d4d073241"}, + {file = "coverage-7.10.3-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:24581ed69f132b6225a31b0228ae4885731cddc966f8a33fe5987288bdbbbd5e"}, + {file = "coverage-7.10.3-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ec151569ddfccbf71bac8c422dce15e176167385a00cd86e887f9a80035ce8a5"}, + {file = "coverage-7.10.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2ae8e7c56290b908ee817200c0b65929b8050bc28530b131fe7c6dfee3e7d86b"}, + {file = "coverage-7.10.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5fb742309766d7e48e9eb4dc34bc95a424707bc6140c0e7d9726e794f11b92a0"}, + {file = "coverage-7.10.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:c65e2a5b32fbe1e499f1036efa6eb9cb4ea2bf6f7168d0e7a5852f3024f471b1"}, + {file = "coverage-7.10.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d48d2cb07d50f12f4f18d2bb75d9d19e3506c26d96fffabf56d22936e5ed8f7c"}, + {file = "coverage-7.10.3-cp314-cp314t-win32.whl", hash = "sha256:dec0d9bc15ee305e09fe2cd1911d3f0371262d3cfdae05d79515d8cb712b4869"}, + {file = "coverage-7.10.3-cp314-cp314t-win_amd64.whl", hash = "sha256:424ea93a323aa0f7f01174308ea78bde885c3089ec1bef7143a6d93c3e24ef64"}, + {file = "coverage-7.10.3-cp314-cp314t-win_arm64.whl", hash = "sha256:f5983c132a62d93d71c9ef896a0b9bf6e6828d8d2ea32611f58684fba60bba35"}, + {file = "coverage-7.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:da749daa7e141985487e1ff90a68315b0845930ed53dc397f4ae8f8bab25b551"}, + {file = "coverage-7.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3126fb6a47d287f461d9b1aa5d1a8c97034d1dffb4f452f2cf211289dae74ef"}, + {file = "coverage-7.10.3-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3da794db13cc27ca40e1ec8127945b97fab78ba548040047d54e7bfa6d442dca"}, + {file = "coverage-7.10.3-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4e27bebbd184ef8d1c1e092b74a2b7109dcbe2618dce6e96b1776d53b14b3fe8"}, + {file = "coverage-7.10.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8fd4ee2580b9fefbd301b4f8f85b62ac90d1e848bea54f89a5748cf132782118"}, + {file = "coverage-7.10.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6999920bdd73259ce11cabfc1307484f071ecc6abdb2ca58d98facbcefc70f16"}, + {file = "coverage-7.10.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3623f929db885fab100cb88220a5b193321ed37e03af719efdbaf5d10b6e227"}, + {file = "coverage-7.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:25b902c5e15dea056485d782e420bb84621cc08ee75d5131ecb3dbef8bd1365f"}, + {file = "coverage-7.10.3-cp39-cp39-win32.whl", hash = "sha256:f930a4d92b004b643183451fe9c8fe398ccf866ed37d172ebaccfd443a097f61"}, + {file = "coverage-7.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:08e638a93c8acba13c7842953f92a33d52d73e410329acd472280d2a21a6c0e1"}, + {file = "coverage-7.10.3-py3-none-any.whl", hash = "sha256:416a8d74dc0adfd33944ba2f405897bab87b7e9e84a391e09d241956bd953ce1"}, + {file = "coverage-7.10.3.tar.gz", hash = "sha256:812ba9250532e4a823b070b0420a36499859542335af3dca8f47fc6aa1a05619"}, +] + +[package.extras] +toml = ["tomli ; python_full_version <= \"3.11.0a6\""] + +[[package]] +name = "debugpy" +version = "1.8.16" +description = "An implementation of the Debug Adapter Protocol for Python" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "debugpy-1.8.16-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:2a3958fb9c2f40ed8ea48a0d34895b461de57a1f9862e7478716c35d76f56c65"}, + {file = "debugpy-1.8.16-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5ca7314042e8a614cc2574cd71f6ccd7e13a9708ce3c6d8436959eae56f2378"}, + {file = "debugpy-1.8.16-cp310-cp310-win32.whl", hash = "sha256:8624a6111dc312ed8c363347a0b59c5acc6210d897e41a7c069de3c53235c9a6"}, + {file = "debugpy-1.8.16-cp310-cp310-win_amd64.whl", hash = "sha256:fee6db83ea5c978baf042440cfe29695e1a5d48a30147abf4c3be87513609817"}, + {file = "debugpy-1.8.16-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:67371b28b79a6a12bcc027d94a06158f2fde223e35b5c4e0783b6f9d3b39274a"}, + {file = "debugpy-1.8.16-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2abae6dd02523bec2dee16bd6b0781cccb53fd4995e5c71cc659b5f45581898"}, + {file = "debugpy-1.8.16-cp311-cp311-win32.whl", hash = "sha256:f8340a3ac2ed4f5da59e064aa92e39edd52729a88fbde7bbaa54e08249a04493"}, + {file = "debugpy-1.8.16-cp311-cp311-win_amd64.whl", hash = "sha256:70f5fcd6d4d0c150a878d2aa37391c52de788c3dc680b97bdb5e529cb80df87a"}, + {file = "debugpy-1.8.16-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:b202e2843e32e80b3b584bcebfe0e65e0392920dc70df11b2bfe1afcb7a085e4"}, + {file = "debugpy-1.8.16-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64473c4a306ba11a99fe0bb14622ba4fbd943eb004847d9b69b107bde45aa9ea"}, + {file = "debugpy-1.8.16-cp312-cp312-win32.whl", hash = "sha256:833a61ed446426e38b0dd8be3e9d45ae285d424f5bf6cd5b2b559c8f12305508"}, + {file = "debugpy-1.8.16-cp312-cp312-win_amd64.whl", hash = "sha256:75f204684581e9ef3dc2f67687c3c8c183fde2d6675ab131d94084baf8084121"}, + {file = "debugpy-1.8.16-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:85df3adb1de5258dca910ae0bb185e48c98801ec15018a263a92bb06be1c8787"}, + {file = "debugpy-1.8.16-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bee89e948bc236a5c43c4214ac62d28b29388453f5fd328d739035e205365f0b"}, + {file = "debugpy-1.8.16-cp313-cp313-win32.whl", hash = "sha256:cf358066650439847ec5ff3dae1da98b5461ea5da0173d93d5e10f477c94609a"}, + {file = "debugpy-1.8.16-cp313-cp313-win_amd64.whl", hash = "sha256:b5aea1083f6f50023e8509399d7dc6535a351cc9f2e8827d1e093175e4d9fa4c"}, + {file = "debugpy-1.8.16-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:2801329c38f77c47976d341d18040a9ac09d0c71bf2c8b484ad27c74f83dc36f"}, + {file = "debugpy-1.8.16-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:687c7ab47948697c03b8f81424aa6dc3f923e6ebab1294732df1ca9773cc67bc"}, + {file = "debugpy-1.8.16-cp38-cp38-win32.whl", hash = "sha256:a2ba6fc5d7c4bc84bcae6c5f8edf5988146e55ae654b1bb36fecee9e5e77e9e2"}, + {file = "debugpy-1.8.16-cp38-cp38-win_amd64.whl", hash = "sha256:d58c48d8dbbbf48a3a3a638714a2d16de537b0dace1e3432b8e92c57d43707f8"}, + {file = "debugpy-1.8.16-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:135ccd2b1161bade72a7a099c9208811c137a150839e970aeaf121c2467debe8"}, + {file = "debugpy-1.8.16-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:211238306331a9089e253fd997213bc4a4c65f949271057d6695953254095376"}, + {file = "debugpy-1.8.16-cp39-cp39-win32.whl", hash = "sha256:88eb9ffdfb59bf63835d146c183d6dba1f722b3ae2a5f4b9fc03e925b3358922"}, + {file = "debugpy-1.8.16-cp39-cp39-win_amd64.whl", hash = "sha256:c2c47c2e52b40449552843b913786499efcc3dbc21d6c49287d939cd0dbc49fd"}, + {file = "debugpy-1.8.16-py2.py3-none-any.whl", hash = "sha256:19c9521962475b87da6f673514f7fd610328757ec993bf7ec0d8c96f9a325f9e"}, + {file = "debugpy-1.8.16.tar.gz", hash = "sha256:31e69a1feb1cf6b51efbed3f6c9b0ef03bc46ff050679c4be7ea6d2e23540870"}, +] + +[[package]] +name = "decorator" +version = "5.2.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, + {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, +] + +[[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.*" +groups = ["dev"] +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 = "dill" +version = "0.4.0" +description = "serialize all of Python" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049"}, + {file = "dill-0.4.0.tar.gz", hash = "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0"}, +] + +[package.extras] +graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +description = "An implementation of lxml.xmlfile for the standard library" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa"}, + {file = "et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54"}, +] + +[[package]] +name = "executing" +version = "2.2.0" +description = "Get the currently executing AST node of a frame, and other information" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, + {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, +] + +[package.extras] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich ; python_version >= \"3.11\""] + +[[package]] +name = "fastjsonschema" +version = "2.21.1" +description = "Fastest Python implementation of JSON schema" +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"}, + {file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + +[[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" +groups = ["dev"] +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 = "h11" +version = "0.16.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, + {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, + {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.16" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<1.0)"] + +[[package]] +name = "httpx" +version = "0.28.1" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" + +[package.extras] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +groups = ["main", "dev"] +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "iniconfig" +version = "2.1.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, + {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, +] + +[[package]] +name = "ipykernel" +version = "6.30.1" +description = "IPython Kernel for Jupyter" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "ipykernel-6.30.1-py3-none-any.whl", hash = "sha256:aa6b9fb93dca949069d8b85b6c79b2518e32ac583ae9c7d37c51d119e18b3fb4"}, + {file = "ipykernel-6.30.1.tar.gz", hash = "sha256:6abb270161896402e76b91394fcdce5d1be5d45f456671e5080572f8505be39b"}, +] + +[package.dependencies] +appnope = {version = ">=0.1.2", markers = "platform_system == \"Darwin\""} +comm = ">=0.1.1" +debugpy = ">=1.6.5" +ipython = ">=7.23.1" +jupyter-client = ">=8.0.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +matplotlib-inline = ">=0.1" +nest-asyncio = ">=1.4" +packaging = ">=22" +psutil = ">=5.7" +pyzmq = ">=25" +tornado = ">=6.2" +traitlets = ">=5.4.0" + +[package.extras] +cov = ["coverage[toml]", "matplotlib", "pytest-cov", "trio"] +docs = ["intersphinx-registry", "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,<9)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "ipython" +version = "9.4.0" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.11" +groups = ["dev"] +files = [ + {file = "ipython-9.4.0-py3-none-any.whl", hash = "sha256:25850f025a446d9b359e8d296ba175a36aedd32e83ca9b5060430fe16801f066"}, + {file = "ipython-9.4.0.tar.gz", hash = "sha256:c033c6d4e7914c3d9768aabe76bbe87ba1dc66a92a05db6bfa1125d81f2ee270"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +ipython-pygments-lexers = "*" +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} +prompt_toolkit = ">=3.0.41,<3.1.0" +pygments = ">=2.4.0" +stack_data = "*" +traitlets = ">=5.13.0" + +[package.extras] +all = ["ipython[doc,matplotlib,test,test-extra]"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinx_toml (==0.0.4)", "typing_extensions"] +matplotlib = ["matplotlib"] +test = ["packaging", "pytest", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "ipykernel", "ipython[test]", "jupyter_ai", "matplotlib (!=3.2.0)", "nbclient", "nbformat", "numpy (>=1.23)", "pandas", "trio"] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +description = "Defines a variety of Pygments lexers for highlighting IPython code." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c"}, + {file = "ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81"}, +] + +[package.dependencies] +pygments = "*" + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +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 = "isort" +version = "6.0.1" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.9.0" +groups = ["dev"] +files = [ + {file = "isort-6.0.1-py3-none-any.whl", hash = "sha256:2dc5d7f65c9678d94c88dfc29161a320eec67328bc97aad576874cb4be1e9615"}, + {file = "isort-6.0.1.tar.gz", hash = "sha256:1cb5df28dfbc742e490c5e41bad6da41b805b0a8be7bc93cd0fb2a8a890ac450"}, +] + +[package.extras] +colors = ["colorama"] +plugins = ["setuptools"] + +[[package]] +name = "jedi" +version = "0.19.2" +description = "An autocompletion tool for Python that can be used for text editors." +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, + {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, +] + +[package.dependencies] +parso = ">=0.8.4,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] + +[[package]] +name = "jinja2" +version = "3.1.6" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "json5" +version = "0.12.1" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = ">=3.8.0" +groups = ["dev"] +files = [ + {file = "json5-0.12.1-py3-none-any.whl", hash = "sha256:d9c9b3bc34a5f54d43c35e11ef7cb87d8bdd098c6ace87117a7b7e83e705c1d5"}, + {file = "json5-0.12.1.tar.gz", hash = "sha256:b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990"}, +] + +[package.extras] +dev = ["build (==1.2.2.post1)", "coverage (==7.5.4) ; python_version < \"3.9\"", "coverage (==7.8.0) ; python_version >= \"3.9\"", "mypy (==1.14.1) ; python_version < \"3.9\"", "mypy (==1.15.0) ; python_version >= \"3.9\"", "pip (==25.0.1)", "pylint (==3.2.7) ; python_version < \"3.9\"", "pylint (==3.3.6) ; python_version >= \"3.9\"", "ruff (==0.11.2)", "twine (==6.1.0)", "uv (==0.6.11)"] + +[[package]] +name = "jsonpointer" +version = "3.0.0" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, + {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, +] + +[[package]] +name = "jsonschema" +version = "4.25.0" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "jsonschema-4.25.0-py3-none-any.whl", hash = "sha256:24c2e8da302de79c8b9382fee3e76b355e44d2a4364bb207159ce10b517bd716"}, + {file = "jsonschema-4.25.0.tar.gz", hash = "sha256:e63acf5c11762c0e6672ffb61482bdf57f0876684d8d249c0fe2d730d48bc55f"}, +] + +[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\""} +rfc3987-syntax = {version = ">=1.1.0", optional = true, markers = "extra == \"format-nongpl\""} +rpds-py = ">=0.7.1" +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=24.6.0", 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)", "rfc3987-syntax (>=1.1.0)", "uri-template", "webcolors (>=24.6.0)"] + +[[package]] +name = "jsonschema-specifications" +version = "2025.4.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af"}, + {file = "jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608"}, +] + +[package.dependencies] +referencing = ">=0.31.0" + +[[package]] +name = "jupyter-client" +version = "8.6.3" +description = "Jupyter protocol implementation and client libraries" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, + {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, +] + +[package.dependencies] +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 ; sys_platform == \"win32\"", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] + +[[package]] +name = "jupyter-core" +version = "5.8.1" +description = "Jupyter core package. A base package on which Jupyter projects rely." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0"}, + {file = "jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941"}, +] + +[package.dependencies] +platformdirs = ">=2.5" +pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = ">=5.3" + +[package.extras] +docs = ["intersphinx-registry", "myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest (<9)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-events" +version = "0.12.0" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb"}, + {file = "jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b"}, +] + +[package.dependencies] +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} +packaging = "*" +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 (>=0.16)", "sphinx (>=8)", "sphinxcontrib-spelling"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] + +[[package]] +name = "jupyter-lsp" +version = "2.2.6" +description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "jupyter_lsp-2.2.6-py3-none-any.whl", hash = "sha256:283783752bf0b459ee7fa88effa72104d87dd343b82d5c06cf113ef755b15b6d"}, + {file = "jupyter_lsp-2.2.6.tar.gz", hash = "sha256:0566bd9bb04fd9e6774a937ed01522b555ba78be37bebef787c8ab22de4c0361"}, +] + +[package.dependencies] +jupyter_server = ">=1.1.2" + +[[package]] +name = "jupyter-server" +version = "2.16.0" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "jupyter_server-2.16.0-py3-none-any.whl", hash = "sha256:3d8db5be3bc64403b1c65b400a1d7f4647a5ce743f3b20dbdefe8ddb7b55af9e"}, + {file = "jupyter_server-2.16.0.tar.gz", hash = "sha256:65d4b44fdf2dcbbdfe0aa1ace4a842d4aaf746a2b7b168134d5aaed35621b7f6"}, +] + +[package.dependencies] +anyio = ">=3.1.0" +argon2-cffi = ">=21.1" +jinja2 = ">=3.0.3" +jupyter-client = ">=7.4.4" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-events = ">=0.11.0" +jupyter-server-terminals = ">=0.4.4" +nbconvert = ">=6.4.4" +nbformat = ">=5.3.0" +overrides = ">=5.0" +packaging = ">=22.0" +prometheus-client = ">=0.9" +pywinpty = {version = ">=2.0.1", markers = "os_name == \"nt\""} +pyzmq = ">=24" +send2trash = ">=1.8.2" +terminado = ">=0.8.3" +tornado = ">=6.2.0" +traitlets = ">=5.6.0" +websocket-client = ">=1.7" + +[package.extras] +docs = ["ipykernel", "jinja2", "jupyter-client", "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,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.3" +description = "A Jupyter Server Extension Providing Terminals." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, + {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, +] + +[package.dependencies] +pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} +terminado = ">=0.8.3" + +[package.extras] +docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] + +[[package]] +name = "jupyterlab" +version = "4.4.5" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "jupyterlab-4.4.5-py3-none-any.whl", hash = "sha256:e76244cceb2d1fb4a99341f3edc866f2a13a9e14c50368d730d75d8017be0863"}, + {file = "jupyterlab-4.4.5.tar.gz", hash = "sha256:0bd6c18e6a3c3d91388af6540afa3d0bb0b2e76287a7b88ddf20ab41b336e595"}, +] + +[package.dependencies] +async-lru = ">=1.0.0" +httpx = ">=0.25.0" +ipykernel = ">=6.5.0" +jinja2 = ">=3.0.3" +jupyter-core = "*" +jupyter-lsp = ">=2.0.0" +jupyter-server = ">=2.4.0,<3" +jupyterlab-server = ">=2.27.1,<3" +notebook-shim = ">=0.2" +packaging = "*" +setuptools = ">=41.1.0" +tornado = ">=6.2.0" +traitlets = "*" + +[package.extras] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.11.4)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.2.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.5.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.3.post1)", "matplotlib (==3.10.0)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.15.1)", "vega-datasets (==0.9.0)"] +test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] +upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +description = "Pygments theme using JupyterLab CSS variables" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, + {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, +] + +[[package]] +name = "jupyterlab-server" +version = "2.27.3" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, + {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, +] + +[package.dependencies] +babel = ">=2.10" +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.18.0" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.31" + +[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.18.0,<0.19.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0,<8)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + +[[package]] +name = "lark" +version = "1.2.2" +description = "a modern parsing library" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c"}, + {file = "lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80"}, +] + +[package.extras] +atomic-cache = ["atomicwrites"] +interegular = ["interegular (>=0.3.1,<0.4.0)"] +nearley = ["js2py"] +regex = ["regex"] + +[[package]] +name = "markupsafe" +version = "3.0.2" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +] + +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +description = "Inline Matplotlib backend for Jupyter" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, + {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, +] + +[package.dependencies] +traitlets = "*" + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mistune" +version = "3.1.3" +description = "A sane and fast Markdown parser with useful plugins and renderers" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9"}, + {file = "mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0"}, +] + +[[package]] +name = "nbclient" +version = "0.10.2" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +optional = false +python-versions = ">=3.9.0" +groups = ["dev"] +files = [ + {file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"}, + {file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"}, +] + +[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", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "7.16.6" +description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b"}, + {file = "nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +bleach = {version = "!=5.0.0", extras = ["css"]} +defusedxml = "*" +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" +traitlets = ">=5.1" + +[package.extras] +all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] +qtpdf = ["pyqtwebengine (>=5.15)"] +qtpng = ["pyqtwebengine (>=5.15)"] +serve = ["tornado (>=6.1)"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] +webpdf = ["playwright"] + +[[package]] +name = "nbformat" +version = "5.10.4" +description = "The Jupyter Notebook format" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, + {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, +] + +[package.dependencies] +fastjsonschema = ">=2.15" +jsonschema = ">=2.6" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +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 = "nest-asyncio" +version = "1.6.0" +description = "Patch asyncio to allow nested event loops" +optional = false +python-versions = ">=3.5" +groups = ["dev"] +files = [ + {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, + {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, +] + +[[package]] +name = "notebook" +version = "7.4.5" +description = "Jupyter Notebook - A web-based notebook environment for interactive computing" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "notebook-7.4.5-py3-none-any.whl", hash = "sha256:351635461aca9dad08cf8946a4216f963e2760cc1bf7b1aaaecb23afc33ec046"}, + {file = "notebook-7.4.5.tar.gz", hash = "sha256:7c2c4ea245913c3ad8ab3e5d36b34a842c06e524556f5c2e1f5d7d08c986615e"}, +] + +[package.dependencies] +jupyter-server = ">=2.4.0,<3" +jupyterlab = ">=4.4.5,<4.5" +jupyterlab-server = ">=2.27.1,<3" +notebook-shim = ">=0.2,<0.3" +tornado = ">=6.2.0" + +[package.extras] +dev = ["hatch", "pre-commit"] +docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["importlib-resources (>=5.0) ; python_version < \"3.10\"", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] + +[[package]] +name = "notebook-shim" +version = "0.2.4" +description = "A shim layer for notebook traits and config" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, + {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, +] + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + +[[package]] +name = "numpy" +version = "2.3.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.11" +groups = ["main"] +files = [ + {file = "numpy-2.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:852ae5bed3478b92f093e30f785c98e0cb62fa0a939ed057c31716e18a7a22b9"}, + {file = "numpy-2.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a0e27186e781a69959d0230dd9909b5e26024f8da10683bd6344baea1885168"}, + {file = "numpy-2.3.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:f0a1a8476ad77a228e41619af2fa9505cf69df928e9aaa165746584ea17fed2b"}, + {file = "numpy-2.3.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cbc95b3813920145032412f7e33d12080f11dc776262df1712e1638207dde9e8"}, + {file = "numpy-2.3.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f75018be4980a7324edc5930fe39aa391d5734531b1926968605416ff58c332d"}, + {file = "numpy-2.3.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20b8200721840f5621b7bd03f8dcd78de33ec522fc40dc2641aa09537df010c3"}, + {file = "numpy-2.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f91e5c028504660d606340a084db4b216567ded1056ea2b4be4f9d10b67197f"}, + {file = "numpy-2.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fb1752a3bb9a3ad2d6b090b88a9a0ae1cd6f004ef95f75825e2f382c183b2097"}, + {file = "numpy-2.3.2-cp311-cp311-win32.whl", hash = "sha256:4ae6863868aaee2f57503c7a5052b3a2807cf7a3914475e637a0ecd366ced220"}, + {file = "numpy-2.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:240259d6564f1c65424bcd10f435145a7644a65a6811cfc3201c4a429ba79170"}, + {file = "numpy-2.3.2-cp311-cp311-win_arm64.whl", hash = "sha256:4209f874d45f921bde2cff1ffcd8a3695f545ad2ffbef6d3d3c6768162efab89"}, + {file = "numpy-2.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bc3186bea41fae9d8e90c2b4fb5f0a1f5a690682da79b92574d63f56b529080b"}, + {file = "numpy-2.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f4f0215edb189048a3c03bd5b19345bdfa7b45a7a6f72ae5945d2a28272727f"}, + {file = "numpy-2.3.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8b1224a734cd509f70816455c3cffe13a4f599b1bf7130f913ba0e2c0b2006c0"}, + {file = "numpy-2.3.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3dcf02866b977a38ba3ec10215220609ab9667378a9e2150615673f3ffd6c73b"}, + {file = "numpy-2.3.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:572d5512df5470f50ada8d1972c5f1082d9a0b7aa5944db8084077570cf98370"}, + {file = "numpy-2.3.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8145dd6d10df13c559d1e4314df29695613575183fa2e2d11fac4c208c8a1f73"}, + {file = "numpy-2.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:103ea7063fa624af04a791c39f97070bf93b96d7af7eb23530cd087dc8dbe9dc"}, + {file = "numpy-2.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc927d7f289d14f5e037be917539620603294454130b6de200091e23d27dc9be"}, + {file = "numpy-2.3.2-cp312-cp312-win32.whl", hash = "sha256:d95f59afe7f808c103be692175008bab926b59309ade3e6d25009e9a171f7036"}, + {file = "numpy-2.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:9e196ade2400c0c737d93465327d1ae7c06c7cb8a1756121ebf54b06ca183c7f"}, + {file = "numpy-2.3.2-cp312-cp312-win_arm64.whl", hash = "sha256:ee807923782faaf60d0d7331f5e86da7d5e3079e28b291973c545476c2b00d07"}, + {file = "numpy-2.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c8d9727f5316a256425892b043736d63e89ed15bbfe6556c5ff4d9d4448ff3b3"}, + {file = "numpy-2.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:efc81393f25f14d11c9d161e46e6ee348637c0a1e8a54bf9dedc472a3fae993b"}, + {file = "numpy-2.3.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dd937f088a2df683cbb79dda9a772b62a3e5a8a7e76690612c2737f38c6ef1b6"}, + {file = "numpy-2.3.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:11e58218c0c46c80509186e460d79fbdc9ca1eb8d8aee39d8f2dc768eb781089"}, + {file = "numpy-2.3.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5ad4ebcb683a1f99f4f392cc522ee20a18b2bb12a2c1c42c3d48d5a1adc9d3d2"}, + {file = "numpy-2.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:938065908d1d869c7d75d8ec45f735a034771c6ea07088867f713d1cd3bbbe4f"}, + {file = "numpy-2.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:66459dccc65d8ec98cc7df61307b64bf9e08101f9598755d42d8ae65d9a7a6ee"}, + {file = "numpy-2.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a7af9ed2aa9ec5950daf05bb11abc4076a108bd3c7db9aa7251d5f107079b6a6"}, + {file = "numpy-2.3.2-cp313-cp313-win32.whl", hash = "sha256:906a30249315f9c8e17b085cc5f87d3f369b35fedd0051d4a84686967bdbbd0b"}, + {file = "numpy-2.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:c63d95dc9d67b676e9108fe0d2182987ccb0f11933c1e8959f42fa0da8d4fa56"}, + {file = "numpy-2.3.2-cp313-cp313-win_arm64.whl", hash = "sha256:b05a89f2fb84d21235f93de47129dd4f11c16f64c87c33f5e284e6a3a54e43f2"}, + {file = "numpy-2.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4e6ecfeddfa83b02318f4d84acf15fbdbf9ded18e46989a15a8b6995dfbf85ab"}, + {file = "numpy-2.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:508b0eada3eded10a3b55725b40806a4b855961040180028f52580c4729916a2"}, + {file = "numpy-2.3.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:754d6755d9a7588bdc6ac47dc4ee97867271b17cee39cb87aef079574366db0a"}, + {file = "numpy-2.3.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f66e7d2b2d7712410d3bc5684149040ef5f19856f20277cd17ea83e5006286"}, + {file = "numpy-2.3.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de6ea4e5a65d5a90c7d286ddff2b87f3f4ad61faa3db8dabe936b34c2275b6f8"}, + {file = "numpy-2.3.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3ef07ec8cbc8fc9e369c8dcd52019510c12da4de81367d8b20bc692aa07573a"}, + {file = "numpy-2.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:27c9f90e7481275c7800dc9c24b7cc40ace3fdb970ae4d21eaff983a32f70c91"}, + {file = "numpy-2.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:07b62978075b67eee4065b166d000d457c82a1efe726cce608b9db9dd66a73a5"}, + {file = "numpy-2.3.2-cp313-cp313t-win32.whl", hash = "sha256:c771cfac34a4f2c0de8e8c97312d07d64fd8f8ed45bc9f5726a7e947270152b5"}, + {file = "numpy-2.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:72dbebb2dcc8305c431b2836bcc66af967df91be793d63a24e3d9b741374c450"}, + {file = "numpy-2.3.2-cp313-cp313t-win_arm64.whl", hash = "sha256:72c6df2267e926a6d5286b0a6d556ebe49eae261062059317837fda12ddf0c1a"}, + {file = "numpy-2.3.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:448a66d052d0cf14ce9865d159bfc403282c9bc7bb2a31b03cc18b651eca8b1a"}, + {file = "numpy-2.3.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:546aaf78e81b4081b2eba1d105c3b34064783027a06b3ab20b6eba21fb64132b"}, + {file = "numpy-2.3.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:87c930d52f45df092f7578889711a0768094debf73cfcde105e2d66954358125"}, + {file = "numpy-2.3.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:8dc082ea901a62edb8f59713c6a7e28a85daddcb67454c839de57656478f5b19"}, + {file = "numpy-2.3.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af58de8745f7fa9ca1c0c7c943616c6fe28e75d0c81f5c295810e3c83b5be92f"}, + {file = "numpy-2.3.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed5527c4cf10f16c6d0b6bee1f89958bccb0ad2522c8cadc2efd318bcd545f5"}, + {file = "numpy-2.3.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:095737ed986e00393ec18ec0b21b47c22889ae4b0cd2d5e88342e08b01141f58"}, + {file = "numpy-2.3.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5e40e80299607f597e1a8a247ff8d71d79c5b52baa11cc1cce30aa92d2da6e0"}, + {file = "numpy-2.3.2-cp314-cp314-win32.whl", hash = "sha256:7d6e390423cc1f76e1b8108c9b6889d20a7a1f59d9a60cac4a050fa734d6c1e2"}, + {file = "numpy-2.3.2-cp314-cp314-win_amd64.whl", hash = "sha256:b9d0878b21e3918d76d2209c924ebb272340da1fb51abc00f986c258cd5e957b"}, + {file = "numpy-2.3.2-cp314-cp314-win_arm64.whl", hash = "sha256:2738534837c6a1d0c39340a190177d7d66fdf432894f469728da901f8f6dc910"}, + {file = "numpy-2.3.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:4d002ecf7c9b53240be3bb69d80f86ddbd34078bae04d87be81c1f58466f264e"}, + {file = "numpy-2.3.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:293b2192c6bcce487dbc6326de5853787f870aeb6c43f8f9c6496db5b1781e45"}, + {file = "numpy-2.3.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:0a4f2021a6da53a0d580d6ef5db29947025ae8b35b3250141805ea9a32bbe86b"}, + {file = "numpy-2.3.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9c144440db4bf3bb6372d2c3e49834cc0ff7bb4c24975ab33e01199e645416f2"}, + {file = "numpy-2.3.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f92d6c2a8535dc4fe4419562294ff957f83a16ebdec66df0805e473ffaad8bd0"}, + {file = "numpy-2.3.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cefc2219baa48e468e3db7e706305fcd0c095534a192a08f31e98d83a7d45fb0"}, + {file = "numpy-2.3.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:76c3e9501ceb50b2ff3824c3589d5d1ab4ac857b0ee3f8f49629d0de55ecf7c2"}, + {file = "numpy-2.3.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:122bf5ed9a0221b3419672493878ba4967121514b1d7d4656a7580cd11dddcbf"}, + {file = "numpy-2.3.2-cp314-cp314t-win32.whl", hash = "sha256:6f1ae3dcb840edccc45af496f312528c15b1f79ac318169d094e85e4bb35fdf1"}, + {file = "numpy-2.3.2-cp314-cp314t-win_amd64.whl", hash = "sha256:087ffc25890d89a43536f75c5fe8770922008758e8eeeef61733957041ed2f9b"}, + {file = "numpy-2.3.2-cp314-cp314t-win_arm64.whl", hash = "sha256:092aeb3449833ea9c0bf0089d70c29ae480685dd2377ec9cdbbb620257f84631"}, + {file = "numpy-2.3.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:14a91ebac98813a49bc6aa1a0dfc09513dcec1d97eaf31ca21a87221a1cdcb15"}, + {file = "numpy-2.3.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:71669b5daae692189540cffc4c439468d35a3f84f0c88b078ecd94337f6cb0ec"}, + {file = "numpy-2.3.2-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:69779198d9caee6e547adb933941ed7520f896fd9656834c300bdf4dd8642712"}, + {file = "numpy-2.3.2-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2c3271cc4097beb5a60f010bcc1cc204b300bb3eafb4399376418a83a1c6373c"}, + {file = "numpy-2.3.2-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8446acd11fe3dc1830568c941d44449fd5cb83068e5c70bd5a470d323d448296"}, + {file = "numpy-2.3.2-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa098a5ab53fa407fded5870865c6275a5cd4101cfdef8d6fafc48286a96e981"}, + {file = "numpy-2.3.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6936aff90dda378c09bea075af0d9c675fe3a977a9d2402f95a87f440f59f619"}, + {file = "numpy-2.3.2.tar.gz", hash = "sha256:e0486a11ec30cdecb53f184d496d1c6a20786c81e55e41640270130056f8ee48"}, +] + +[[package]] +name = "openpyxl" +version = "3.1.5" +description = "A Python library to read/write Excel 2010 xlsx/xlsm files" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"}, + {file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"}, +] + +[package.dependencies] +et-xmlfile = "*" + +[[package]] +name = "overrides" +version = "7.7.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, +] + +[[package]] +name = "packaging" +version = "25.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, + {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, +] + +[[package]] +name = "pandas" +version = "2.3.1" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pandas-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:22c2e866f7209ebc3a8f08d75766566aae02bcc91d196935a1d9e59c7b990ac9"}, + {file = "pandas-2.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3583d348546201aff730c8c47e49bc159833f971c2899d6097bce68b9112a4f1"}, + {file = "pandas-2.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f951fbb702dacd390561e0ea45cdd8ecfa7fb56935eb3dd78e306c19104b9b0"}, + {file = "pandas-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd05b72ec02ebfb993569b4931b2e16fbb4d6ad6ce80224a3ee838387d83a191"}, + {file = "pandas-2.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1b916a627919a247d865aed068eb65eb91a344b13f5b57ab9f610b7716c92de1"}, + {file = "pandas-2.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fe67dc676818c186d5a3d5425250e40f179c2a89145df477dd82945eaea89e97"}, + {file = "pandas-2.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:2eb789ae0274672acbd3c575b0598d213345660120a257b47b5dafdc618aec83"}, + {file = "pandas-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2b0540963d83431f5ce8870ea02a7430adca100cec8a050f0811f8e31035541b"}, + {file = "pandas-2.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fe7317f578c6a153912bd2292f02e40c1d8f253e93c599e82620c7f69755c74f"}, + {file = "pandas-2.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6723a27ad7b244c0c79d8e7007092d7c8f0f11305770e2f4cd778b3ad5f9f85"}, + {file = "pandas-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3462c3735fe19f2638f2c3a40bd94ec2dc5ba13abbb032dd2fa1f540a075509d"}, + {file = "pandas-2.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:98bcc8b5bf7afed22cc753a28bc4d9e26e078e777066bc53fac7904ddef9a678"}, + {file = "pandas-2.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4d544806b485ddf29e52d75b1f559142514e60ef58a832f74fb38e48d757b299"}, + {file = "pandas-2.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b3cd4273d3cb3707b6fffd217204c52ed92859533e31dc03b7c5008aa933aaab"}, + {file = "pandas-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:689968e841136f9e542020698ee1c4fbe9caa2ed2213ae2388dc7b81721510d3"}, + {file = "pandas-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:025e92411c16cbe5bb2a4abc99732a6b132f439b8aab23a59fa593eb00704232"}, + {file = "pandas-2.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b7ff55f31c4fcb3e316e8f7fa194566b286d6ac430afec0d461163312c5841e"}, + {file = "pandas-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dcb79bf373a47d2a40cf7232928eb7540155abbc460925c2c96d2d30b006eb4"}, + {file = "pandas-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:56a342b231e8862c96bdb6ab97170e203ce511f4d0429589c8ede1ee8ece48b8"}, + {file = "pandas-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ca7ed14832bce68baef331f4d7f294411bed8efd032f8109d690df45e00c4679"}, + {file = "pandas-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:ac942bfd0aca577bef61f2bc8da8147c4ef6879965ef883d8e8d5d2dc3e744b8"}, + {file = "pandas-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9026bd4a80108fac2239294a15ef9003c4ee191a0f64b90f170b40cfb7cf2d22"}, + {file = "pandas-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6de8547d4fdb12421e2d047a2c446c623ff4c11f47fddb6b9169eb98ffba485a"}, + {file = "pandas-2.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:782647ddc63c83133b2506912cc6b108140a38a37292102aaa19c81c83db2928"}, + {file = "pandas-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba6aff74075311fc88504b1db890187a3cd0f887a5b10f5525f8e2ef55bfdb9"}, + {file = "pandas-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e5635178b387bd2ba4ac040f82bc2ef6e6b500483975c4ebacd34bec945fda12"}, + {file = "pandas-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6f3bf5ec947526106399a9e1d26d40ee2b259c66422efdf4de63c848492d91bb"}, + {file = "pandas-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:1c78cf43c8fde236342a1cb2c34bcff89564a7bfed7e474ed2fffa6aed03a956"}, + {file = "pandas-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8dfc17328e8da77be3cf9f47509e5637ba8f137148ed0e9b5241e1baf526e20a"}, + {file = "pandas-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ec6c851509364c59a5344458ab935e6451b31b818be467eb24b0fe89bd05b6b9"}, + {file = "pandas-2.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:911580460fc4884d9b05254b38a6bfadddfcc6aaef856fb5859e7ca202e45275"}, + {file = "pandas-2.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f4d6feeba91744872a600e6edbbd5b033005b431d5ae8379abee5bcfa479fab"}, + {file = "pandas-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fe37e757f462d31a9cd7580236a82f353f5713a80e059a29753cf938c6775d96"}, + {file = "pandas-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5db9637dbc24b631ff3707269ae4559bce4b7fd75c1c4d7e13f40edc42df4444"}, + {file = "pandas-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4645f770f98d656f11c69e81aeb21c6fca076a44bed3dcbb9396a4311bc7f6d8"}, + {file = "pandas-2.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:342e59589cc454aaff7484d75b816a433350b3d7964d7847327edda4d532a2e3"}, + {file = "pandas-2.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d12f618d80379fde6af007f65f0c25bd3e40251dbd1636480dfffce2cf1e6da"}, + {file = "pandas-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd71c47a911da120d72ef173aeac0bf5241423f9bfea57320110a978457e069e"}, + {file = "pandas-2.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:09e3b1587f0f3b0913e21e8b32c3119174551deb4a4eba4a89bc7377947977e7"}, + {file = "pandas-2.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2323294c73ed50f612f67e2bf3ae45aea04dce5690778e08a09391897f35ff88"}, + {file = "pandas-2.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:b4b0de34dc8499c2db34000ef8baad684cfa4cbd836ecee05f323ebfba348c7d"}, + {file = "pandas-2.3.1.tar.gz", hash = "sha256:0a95b9ac964fe83ce317827f80304d37388ea77616b1425f0ae41c9d2d0d7bb2"}, +] + +[package.dependencies] +numpy = {version = ">=1.26.0", markers = "python_version >= \"3.12\""} +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + +[[package]] +name = "pandocfilters" +version = "1.5.1" +description = "Utilities for writing pandoc filters in python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["dev"] +files = [ + {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, + {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, +] + +[[package]] +name = "parso" +version = "0.8.4" +description = "A Python Parser" +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, + {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, +] + +[package.extras] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] + +[[package]] +name = "pexpect" +version = "4.9.0" +description = "Pexpect allows easy control of interactive console applications." +optional = false +python-versions = "*" +groups = ["dev"] +markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "platformdirs" +version = "4.3.8" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4"}, + {file = "platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.14.1)"] + +[[package]] +name = "pluggy" +version = "1.6.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["coverage", "pytest", "pytest-benchmark"] + +[[package]] +name = "prometheus-client" +version = "0.22.1" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "prometheus_client-0.22.1-py3-none-any.whl", hash = "sha256:cca895342e308174341b2cbf99a56bef291fbc0ef7b9e5412a0f26d653ba7094"}, + {file = "prometheus_client-0.22.1.tar.gz", hash = "sha256:190f1331e783cf21eb60bca559354e0a4d4378facecf78f5428c39b675d20d28"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.51" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07"}, + {file = "prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "psutil" +version = "7.0.0" +description = "Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7." +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25"}, + {file = "psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993"}, + {file = "psutil-7.0.0-cp36-cp36m-win32.whl", hash = "sha256:84df4eb63e16849689f76b1ffcb36db7b8de703d1bc1fe41773db487621b6c17"}, + {file = "psutil-7.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:1e744154a6580bc968a0195fd25e80432d3afec619daf145b9e5ba16cc1d688e"}, + {file = "psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99"}, + {file = "psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553"}, + {file = "psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456"}, +] + +[package.extras] +dev = ["abi3audit", "black (==24.10.0)", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest", "pytest-cov", "pytest-xdist", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] +test = ["pytest", "pytest-xdist", "setuptools"] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = false +python-versions = "*" +groups = ["dev"] +markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\" or os_name != \"nt\"" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +description = "Safely evaluate AST nodes without side effects" +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, + {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, +] + +[package.extras] +tests = ["pytest"] + +[[package]] +name = "pycparser" +version = "2.22" +description = "C parser in Python" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, +] + +[[package]] +name = "pydantic" +version = "2.11.7" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b"}, + {file = "pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.33.2" +typing-extensions = ">=4.12.2" +typing-inspection = ">=0.4.0" + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] + +[[package]] +name = "pydantic-core" +version = "2.33.2" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8"}, + {file = "pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b"}, + {file = "pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22"}, + {file = "pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640"}, + {file = "pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7"}, + {file = "pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65"}, + {file = "pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc"}, + {file = "pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab"}, + {file = "pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f"}, + {file = "pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a2b911a5b90e0374d03813674bf0a5fbbb7741570dcd4b4e85a2e48d17def29d"}, + {file = "pydantic_core-2.33.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6fa6dfc3e4d1f734a34710f391ae822e0a8eb8559a85c6979e14e65ee6ba2954"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e6116757f7959a712db11f3e9c0a99ade00a5bbedae83cb801985aa154f071b"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d55ab81c57b8ff8548c3e4947f119551253f4e3787a7bbc0b6b3ca47498a9d3"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c20c462aa4434b33a2661701b861604913f912254e441ab8d78d30485736115a"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44857c3227d3fb5e753d5fe4a3420d6376fa594b07b621e220cd93703fe21782"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:eb9b459ca4df0e5c87deb59d37377461a538852765293f9e6ee834f0435a93b9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e"}, + {file = "pydantic_core-2.33.2-cp39-cp39-win32.whl", hash = "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:87acbfcf8e90ca885206e98359d7dca4bcbb35abdc0ff66672a293e1d7a19101"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7f92c15cd1e97d4b12acd1cc9004fa092578acfa57b67ad5e43a197175d01a64"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3eb3fe62804e8f859c49ed20a8451342de53ed764150cb14ca71357c765dc2a6"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3abcd9392a36025e3bd55f9bd38d908bd17962cc49bc6da8e7e96285336e2bca"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3a1c81334778f9e3af2f8aeb7a960736e5cab1dfebfb26aabca09afd2906c039"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2807668ba86cb38c6817ad9bc66215ab8584d1d304030ce4f0887336f28a5e27"}, + {file = "pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pydantic-settings" +version = "2.10.1" +description = "Settings management using Pydantic" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pydantic_settings-2.10.1-py3-none-any.whl", hash = "sha256:a60952460b99cf661dc25c29c0ef171721f98bfcb52ef8d9ea4c943d7c8cc796"}, + {file = "pydantic_settings-2.10.1.tar.gz", hash = "sha256:06f0062169818d0f5524420a360d632d5857b83cffd4d42fe29597807a1614ee"}, +] + +[package.dependencies] +pydantic = ">=2.7.0" +python-dotenv = ">=0.21.0" +typing-inspection = ">=0.4.0" + +[package.extras] +aws-secrets-manager = ["boto3 (>=1.35.0)", "boto3-stubs[secretsmanager]"] +azure-key-vault = ["azure-identity (>=1.16.0)", "azure-keyvault-secrets (>=4.8.0)"] +gcp-secret-manager = ["google-cloud-secret-manager (>=2.23.1)"] +toml = ["tomli (>=2.0.1)"] +yaml = ["pyyaml (>=6.0.1)"] + +[[package]] +name = "pydeps" +version = "3.0.1" +description = "Display module dependencies" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pydeps-3.0.1-py3-none-any.whl", hash = "sha256:7c86ee63c9ee6ddd088c840364981c5aa214a994d323bb7fa4724fca30829bee"}, + {file = "pydeps-3.0.1.tar.gz", hash = "sha256:a57415a8fae2ff6840a199b7dfcfecb90c37e4b9b54b58a111808a3440bc03bc"}, +] + +[package.dependencies] +stdlib_list = "*" + +[[package]] +name = "pygments" +version = "2.19.2" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, + {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pylint" +version = "3.3.8" +description = "python code static checker" +optional = false +python-versions = ">=3.9.0" +groups = ["dev"] +files = [ + {file = "pylint-3.3.8-py3-none-any.whl", hash = "sha256:7ef94aa692a600e82fabdd17102b73fc226758218c97473c7ad67bd4cb905d83"}, + {file = "pylint-3.3.8.tar.gz", hash = "sha256:26698de19941363037e2937d3db9ed94fb3303fdadf7d98847875345a8bb6b05"}, +] + +[package.dependencies] +astroid = ">=3.3.8,<=3.4.0.dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = {version = ">=0.3.7", markers = "python_version >= \"3.12\""} +isort = ">=4.2.5,<5.13 || >5.13,<7" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2" +tomlkit = ">=0.10.1" + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + +[[package]] +name = "pytest" +version = "8.4.1" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7"}, + {file = "pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c"}, +] + +[package.dependencies] +colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} +iniconfig = ">=1" +packaging = ">=20" +pluggy = ">=1.5,<2" +pygments = ">=2.7.2" + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-cov" +version = "6.2.1" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5"}, + {file = "pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2"}, +] + +[package.dependencies] +coverage = {version = ">=7.5", extras = ["toml"]} +pluggy = ">=1.2" +pytest = ">=6.2.5" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main", "dev"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "1.1.1" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc"}, + {file = "python_dotenv-1.1.1.tar.gz", hash = "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "python-json-logger" +version = "3.3.0" +description = "JSON Log Formatter for the Python Logging Package" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7"}, + {file = "python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84"}, +] + +[package.extras] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec ; implementation_name != \"pypy\"", "mypy", "orjson ; implementation_name != \"pypy\"", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] + +[[package]] +name = "pytz" +version = "2025.2" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, + {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, +] + +[[package]] +name = "pywin32" +version = "311" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +groups = ["dev"] +markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3"}, + {file = "pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b"}, + {file = "pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b"}, + {file = "pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151"}, + {file = "pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503"}, + {file = "pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2"}, + {file = "pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31"}, + {file = "pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067"}, + {file = "pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852"}, + {file = "pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d"}, + {file = "pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d"}, + {file = "pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a"}, + {file = "pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee"}, + {file = "pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87"}, + {file = "pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42"}, + {file = "pywin32-311-cp38-cp38-win32.whl", hash = "sha256:6c6f2969607b5023b0d9ce2541f8d2cbb01c4f46bc87456017cf63b73f1e2d8c"}, + {file = "pywin32-311-cp38-cp38-win_amd64.whl", hash = "sha256:c8015b09fb9a5e188f83b7b04de91ddca4658cee2ae6f3bc483f0b21a77ef6cd"}, + {file = "pywin32-311-cp39-cp39-win32.whl", hash = "sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b"}, + {file = "pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91"}, + {file = "pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d"}, +] + +[[package]] +name = "pywinpty" +version = "3.0.0" +description = "" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "os_name == \"nt\"" +files = [ + {file = "pywinpty-3.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:327b6034e0dc38352c1c99a7c0b3e54941b4e506a5f21acce63609cd2ab6cce2"}, + {file = "pywinpty-3.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:29daa71ac5dcbe1496ef99f4cde85a732b1f0a3b71405d42177dbcf9ee405e5a"}, + {file = "pywinpty-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:1e0c4b01e5b03b1531d7c5d0e044b8c66dd0288c6d2b661820849f2a8d91aec3"}, + {file = "pywinpty-3.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:828cbe756b7e3d25d886fbd5691a1d523cd59c5fb79286bb32bb75c5221e7ba1"}, + {file = "pywinpty-3.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:de0cbe27b96e5a2cebd86c4a6b8b4139f978d9c169d44a8edc7e30e88e5d7a69"}, + {file = "pywinpty-3.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:007735316170ec1b6e773deadab5fe9ec4074dfdc06f27513fe87b8cfe45237d"}, + {file = "pywinpty-3.0.0.tar.gz", hash = "sha256:68f70e68a9f0766ffdea3fc500351cb7b9b012bcb8239a411f7ff0fc8f86dcb1"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] + +[[package]] +name = "pyzmq" +version = "27.0.1" +description = "Python bindings for 0MQ" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pyzmq-27.0.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:90a4da42aa322de8a3522461e3b5fe999935763b27f69a02fced40f4e3cf9682"}, + {file = "pyzmq-27.0.1-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:e648dca28178fc879c814cf285048dd22fd1f03e1104101106505ec0eea50a4d"}, + {file = "pyzmq-27.0.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bca8abc31799a6f3652d13f47e0b0e1cab76f9125f2283d085a3754f669b607"}, + {file = "pyzmq-27.0.1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:092f4011b26d6b0201002f439bd74b38f23f3aefcb358621bdc3b230afc9b2d5"}, + {file = "pyzmq-27.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f02f30a4a6b3efe665ab13a3dd47109d80326c8fd286311d1ba9f397dc5f247"}, + {file = "pyzmq-27.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f293a1419266e3bf3557d1f8778f9e1ffe7e6b2c8df5c9dca191caf60831eb74"}, + {file = "pyzmq-27.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ce181dd1a7c6c012d0efa8ab603c34b5ee9d86e570c03415bbb1b8772eeb381c"}, + {file = "pyzmq-27.0.1-cp310-cp310-win32.whl", hash = "sha256:f65741cc06630652e82aa68ddef4986a3ab9073dd46d59f94ce5f005fa72037c"}, + {file = "pyzmq-27.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:44909aa3ed2234d69fe81e1dade7be336bcfeab106e16bdaa3318dcde4262b93"}, + {file = "pyzmq-27.0.1-cp310-cp310-win_arm64.whl", hash = "sha256:4401649bfa0a38f0f8777f8faba7cd7eb7b5b8ae2abc7542b830dd09ad4aed0d"}, + {file = "pyzmq-27.0.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9729190bd770314f5fbba42476abf6abe79a746eeda11d1d68fd56dd70e5c296"}, + {file = "pyzmq-27.0.1-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:696900ef6bc20bef6a242973943574f96c3f97d2183c1bd3da5eea4f559631b1"}, + {file = "pyzmq-27.0.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f96a63aecec22d3f7fdea3c6c98df9e42973f5856bb6812c3d8d78c262fee808"}, + {file = "pyzmq-27.0.1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c512824360ea7490390566ce00bee880e19b526b312b25cc0bc30a0fe95cb67f"}, + {file = "pyzmq-27.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dfb2bb5e0f7198eaacfb6796fb0330afd28f36d985a770745fba554a5903595a"}, + {file = "pyzmq-27.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4f6886c59ba93ffde09b957d3e857e7950c8fe818bd5494d9b4287bc6d5bc7f1"}, + {file = "pyzmq-27.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b99ea9d330e86ce1ff7f2456b33f1bf81c43862a5590faf4ef4ed3a63504bdab"}, + {file = "pyzmq-27.0.1-cp311-cp311-win32.whl", hash = "sha256:571f762aed89025ba8cdcbe355fea56889715ec06d0264fd8b6a3f3fa38154ed"}, + {file = "pyzmq-27.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:ee16906c8025fa464bea1e48128c048d02359fb40bebe5333103228528506530"}, + {file = "pyzmq-27.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:ba068f28028849da725ff9185c24f832ccf9207a40f9b28ac46ab7c04994bd41"}, + {file = "pyzmq-27.0.1-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:af7ebce2a1e7caf30c0bb64a845f63a69e76a2fadbc1cac47178f7bb6e657bdd"}, + {file = "pyzmq-27.0.1-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:8f617f60a8b609a13099b313e7e525e67f84ef4524b6acad396d9ff153f6e4cd"}, + {file = "pyzmq-27.0.1-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d59dad4173dc2a111f03e59315c7bd6e73da1a9d20a84a25cf08325b0582b1a"}, + {file = "pyzmq-27.0.1-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f5b6133c8d313bde8bd0d123c169d22525300ff164c2189f849de495e1344577"}, + {file = "pyzmq-27.0.1-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:58cca552567423f04d06a075f4b473e78ab5bdb906febe56bf4797633f54aa4e"}, + {file = "pyzmq-27.0.1-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:4b9d8e26fb600d0d69cc9933e20af08552e97cc868a183d38a5c0d661e40dfbb"}, + {file = "pyzmq-27.0.1-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2329f0c87f0466dce45bba32b63f47018dda5ca40a0085cc5c8558fea7d9fc55"}, + {file = "pyzmq-27.0.1-cp312-abi3-win32.whl", hash = "sha256:57bb92abdb48467b89c2d21da1ab01a07d0745e536d62afd2e30d5acbd0092eb"}, + {file = "pyzmq-27.0.1-cp312-abi3-win_amd64.whl", hash = "sha256:ff3f8757570e45da7a5bedaa140489846510014f7a9d5ee9301c61f3f1b8a686"}, + {file = "pyzmq-27.0.1-cp312-abi3-win_arm64.whl", hash = "sha256:df2c55c958d3766bdb3e9d858b911288acec09a9aab15883f384fc7180df5bed"}, + {file = "pyzmq-27.0.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:497bd8af534ae55dc4ef67eebd1c149ff2a0b0f1e146db73c8b5a53d83c1a5f5"}, + {file = "pyzmq-27.0.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:a066ea6ad6218b4c233906adf0ae67830f451ed238419c0db609310dd781fbe7"}, + {file = "pyzmq-27.0.1-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:72d235d6365ca73d8ce92f7425065d70f5c1e19baa458eb3f0d570e425b73a96"}, + {file = "pyzmq-27.0.1-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:313a7b374e3dc64848644ca348a51004b41726f768b02e17e689f1322366a4d9"}, + {file = "pyzmq-27.0.1-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:119ce8590409702394f959c159d048002cbed2f3c0645ec9d6a88087fc70f0f1"}, + {file = "pyzmq-27.0.1-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:45c3e00ce16896ace2cd770ab9057a7cf97d4613ea5f2a13f815141d8b6894b9"}, + {file = "pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:678e50ec112bdc6df5a83ac259a55a4ba97a8b314c325ab26b3b5b071151bc61"}, + {file = "pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d0b96c30be9f9387b18b18b6133c75a7b1b0065da64e150fe1feb5ebf31ece1c"}, + {file = "pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:88dc92d9eb5ea4968123e74db146d770b0c8d48f0e2bfb1dbc6c50a8edb12d64"}, + {file = "pyzmq-27.0.1-cp313-cp313t-win32.whl", hash = "sha256:6dcbcb34f5c9b0cefdfc71ff745459241b7d3cda5b27c7ad69d45afc0821d1e1"}, + {file = "pyzmq-27.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9fd0fda730461f510cfd9a40fafa5355d65f5e3dbdd8d6dfa342b5b3f5d1949"}, + {file = "pyzmq-27.0.1-cp313-cp313t-win_arm64.whl", hash = "sha256:56a3b1853f3954ec1f0e91085f1350cc57d18f11205e4ab6e83e4b7c414120e0"}, + {file = "pyzmq-27.0.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:f98f6b7787bd2beb1f0dde03f23a0621a0c978edf673b7d8f5e7bc039cbe1b60"}, + {file = "pyzmq-27.0.1-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:351bf5d8ca0788ca85327fda45843b6927593ff4c807faee368cc5aaf9f809c2"}, + {file = "pyzmq-27.0.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5268a5a9177afff53dc6d70dffe63114ba2a6e7b20d9411cc3adeba09eeda403"}, + {file = "pyzmq-27.0.1-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4aca06ba295aa78bec9b33ec028d1ca08744c36294338c41432b7171060c808"}, + {file = "pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1c363c6dc66352331d5ad64bb838765c6692766334a6a02fdb05e76bd408ae18"}, + {file = "pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:87aebf4acd7249bdff8d3df03aed4f09e67078e6762cfe0aecf8d0748ff94cde"}, + {file = "pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e4f22d67756518d71901edf73b38dc0eb4765cce22c8fe122cc81748d425262b"}, + {file = "pyzmq-27.0.1-cp314-cp314t-win32.whl", hash = "sha256:8c62297bc7aea2147b472ca5ca2b4389377ad82898c87cabab2a94aedd75e337"}, + {file = "pyzmq-27.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:bee5248d5ec9223545f8cc4f368c2d571477ae828c99409125c3911511d98245"}, + {file = "pyzmq-27.0.1-cp314-cp314t-win_arm64.whl", hash = "sha256:0fc24bf45e4a454e55ef99d7f5c8b8712539200ce98533af25a5bfa954b6b390"}, + {file = "pyzmq-27.0.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:9d16fdfd7d70a6b0ca45d36eb19f7702fa77ef6256652f17594fc9ce534c9da6"}, + {file = "pyzmq-27.0.1-cp38-cp38-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:d0356a21e58c3e99248930ff73cc05b1d302ff50f41a8a47371aefb04327378a"}, + {file = "pyzmq-27.0.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a27fa11ebaccc099cac4309c799aa33919671a7660e29b3e465b7893bc64ec81"}, + {file = "pyzmq-27.0.1-cp38-cp38-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b25e72e115399a4441aad322258fa8267b873850dc7c276e3f874042728c2b45"}, + {file = "pyzmq-27.0.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f8c3b74f1cd577a5a9253eae7ed363f88cbb345a990ca3027e9038301d47c7f4"}, + {file = "pyzmq-27.0.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:19dce6c93656f9c469540350d29b128cd8ba55b80b332b431b9a1e9ff74cfd01"}, + {file = "pyzmq-27.0.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:da81512b83032ed6cdf85ca62e020b4c23dda87f1b6c26b932131222ccfdbd27"}, + {file = "pyzmq-27.0.1-cp38-cp38-win32.whl", hash = "sha256:7418fb5736d0d39b3ecc6bec4ff549777988feb260f5381636d8bd321b653038"}, + {file = "pyzmq-27.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:af2ee67b3688b067e20fea3fe36b823a362609a1966e7e7a21883ae6da248804"}, + {file = "pyzmq-27.0.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:05a94233fdde585eb70924a6e4929202a747eea6ed308a6171c4f1c715bbe39e"}, + {file = "pyzmq-27.0.1-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:c96702e1082eab62ae583d64c4e19c9b848359196697e536a0c57ae9bd165bd5"}, + {file = "pyzmq-27.0.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c9180d1f5b4b73e28b64e63cc6c4c097690f102aa14935a62d5dd7426a4e5b5a"}, + {file = "pyzmq-27.0.1-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e971d8680003d0af6020713e52f92109b46fedb463916e988814e04c8133578a"}, + {file = "pyzmq-27.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fe632fa4501154d58dfbe1764a0495734d55f84eaf1feda4549a1f1ca76659e9"}, + {file = "pyzmq-27.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4c3874344fd5fa6d58bb51919708048ac4cab21099f40a227173cddb76b4c20b"}, + {file = "pyzmq-27.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ec09073ed67ae236785d543df3b322282acc0bdf6d1b748c3e81f3043b21cb5"}, + {file = "pyzmq-27.0.1-cp39-cp39-win32.whl", hash = "sha256:f44e7ea288d022d4bf93b9e79dafcb4a7aea45a3cbeae2116792904931cefccf"}, + {file = "pyzmq-27.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:ffe6b809a97ac6dea524b3b837d5b28743d8c2f121141056d168ff0ba8f614ef"}, + {file = "pyzmq-27.0.1-cp39-cp39-win_arm64.whl", hash = "sha256:fde26267416c8478c95432c81489b53f57b0b5d24cd5c8bfaebf5bbaac4dc90c"}, + {file = "pyzmq-27.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:544b995a6a1976fad5d7ff01409b4588f7608ccc41be72147700af91fd44875d"}, + {file = "pyzmq-27.0.1-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0f772eea55cccce7f45d6ecdd1d5049c12a77ec22404f6b892fae687faa87bee"}, + {file = "pyzmq-27.0.1-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9d63d66059114a6756d09169c9209ffceabacb65b9cb0f66e6fc344b20b73e6"}, + {file = "pyzmq-27.0.1-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1da8e645c655d86f0305fb4c65a0d848f461cd90ee07d21f254667287b5dbe50"}, + {file = "pyzmq-27.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1843fd0daebcf843fe6d4da53b8bdd3fc906ad3e97d25f51c3fed44436d82a49"}, + {file = "pyzmq-27.0.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7fb0ee35845bef1e8c4a152d766242164e138c239e3182f558ae15cb4a891f94"}, + {file = "pyzmq-27.0.1-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f379f11e138dfd56c3f24a04164f871a08281194dd9ddf656a278d7d080c8ad0"}, + {file = "pyzmq-27.0.1-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b978c0678cffbe8860ec9edc91200e895c29ae1ac8a7085f947f8e8864c489fb"}, + {file = "pyzmq-27.0.1-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ebccf0d760bc92a4a7c751aeb2fef6626144aace76ee8f5a63abeb100cae87f"}, + {file = "pyzmq-27.0.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:77fed80e30fa65708546c4119840a46691290efc231f6bfb2ac2a39b52e15811"}, + {file = "pyzmq-27.0.1-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9d7b6b90da7285642f480b48c9efd1d25302fd628237d8f6f6ee39ba6b2d2d34"}, + {file = "pyzmq-27.0.1-pp38-pypy38_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:d2976b7079f09f48d59dc123293ed6282fca6ef96a270f4ea0364e4e54c8e855"}, + {file = "pyzmq-27.0.1-pp38-pypy38_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2852f67371918705cc18b321695f75c5d653d5d8c4a9b946c1eec4dab2bd6fdf"}, + {file = "pyzmq-27.0.1-pp38-pypy38_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be45a895f98877271e8a0b6cf40925e0369121ce423421c20fa6d7958dc753c2"}, + {file = "pyzmq-27.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:64ca3c7c614aefcdd5e358ecdd41d1237c35fe1417d01ec0160e7cdb0a380edc"}, + {file = "pyzmq-27.0.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d97b59cbd8a6c8b23524a8ce237ff9504d987dc07156258aa68ae06d2dd5f34d"}, + {file = "pyzmq-27.0.1-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:27a78bdd384dbbe7b357af95f72efe8c494306b5ec0a03c31e2d53d6763e5307"}, + {file = "pyzmq-27.0.1-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b007e5dcba684e888fbc90554cb12a2f4e492927c8c2761a80b7590209821743"}, + {file = "pyzmq-27.0.1-pp39-pypy39_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:95594b2ceeaa94934e3e94dd7bf5f3c3659cf1a26b1fb3edcf6e42dad7e0eaf2"}, + {file = "pyzmq-27.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:70b719a130b81dd130a57ac0ff636dc2c0127c5b35ca5467d1b67057e3c7a4d2"}, + {file = "pyzmq-27.0.1.tar.gz", hash = "sha256:45c549204bc20e7484ffd2555f6cf02e572440ecf2f3bdd60d4404b20fddf64b"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "referencing" +version = "0.36.2" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"}, + {file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" +typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} + +[[package]] +name = "requests" +version = "2.32.4" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c"}, + {file = "requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset_normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-mock" +version = "1.12.1" +description = "Mock out responses from the requests package" +optional = false +python-versions = ">=3.5" +groups = ["dev"] +files = [ + {file = "requests-mock-1.12.1.tar.gz", hash = "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401"}, + {file = "requests_mock-1.12.1-py2.py3-none-any.whl", hash = "sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563"}, +] + +[package.dependencies] +requests = ">=2.22,<3" + +[package.extras] +fixture = ["fixtures"] + +[[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.*" +groups = ["dev"] +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.*" +groups = ["dev"] +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 = "rfc3987-syntax" +version = "1.1.0" +description = "Helper functions to syntactically validate strings according to RFC 3987." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f"}, + {file = "rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d"}, +] + +[package.dependencies] +lark = ">=1.2.2" + +[package.extras] +testing = ["pytest (>=8.3.5)"] + +[[package]] +name = "rpds-py" +version = "0.27.0" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "rpds_py-0.27.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:130c1ffa5039a333f5926b09e346ab335f0d4ec393b030a18549a7c7e7c2cea4"}, + {file = "rpds_py-0.27.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a4cf32a26fa744101b67bfd28c55d992cd19438aff611a46cac7f066afca8fd4"}, + {file = "rpds_py-0.27.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64a0fe3f334a40b989812de70160de6b0ec7e3c9e4a04c0bbc48d97c5d3600ae"}, + {file = "rpds_py-0.27.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a0ff7ee28583ab30a52f371b40f54e7138c52ca67f8ca17ccb7ccf0b383cb5f"}, + {file = "rpds_py-0.27.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:15ea4d2e182345dd1b4286593601d766411b43f868924afe297570658c31a62b"}, + {file = "rpds_py-0.27.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36184b44bf60a480863e51021c26aca3dfe8dd2f5eeabb33622b132b9d8b8b54"}, + {file = "rpds_py-0.27.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b78430703cfcf5f5e86eb74027a1ed03a93509273d7c705babb547f03e60016"}, + {file = "rpds_py-0.27.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:dbd749cff1defbde270ca346b69b3baf5f1297213ef322254bf2a28537f0b046"}, + {file = "rpds_py-0.27.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bde37765564cd22a676dd8101b657839a1854cfaa9c382c5abf6ff7accfd4ae"}, + {file = "rpds_py-0.27.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1d66f45b9399036e890fb9c04e9f70c33857fd8f58ac8db9f3278cfa835440c3"}, + {file = "rpds_py-0.27.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d85d784c619370d9329bbd670f41ff5f2ae62ea4519761b679d0f57f0f0ee267"}, + {file = "rpds_py-0.27.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5df559e9e7644d9042f626f2c3997b555f347d7a855a15f170b253f6c5bfe358"}, + {file = "rpds_py-0.27.0-cp310-cp310-win32.whl", hash = "sha256:b8a4131698b6992b2a56015f51646711ec5d893a0b314a4b985477868e240c87"}, + {file = "rpds_py-0.27.0-cp310-cp310-win_amd64.whl", hash = "sha256:cbc619e84a5e3ab2d452de831c88bdcad824414e9c2d28cd101f94dbdf26329c"}, + {file = "rpds_py-0.27.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:dbc2ab5d10544eb485baa76c63c501303b716a5c405ff2469a1d8ceffaabf622"}, + {file = "rpds_py-0.27.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7ec85994f96a58cf7ed288caa344b7fe31fd1d503bdf13d7331ead5f70ab60d5"}, + {file = "rpds_py-0.27.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:190d7285cd3bb6d31d37a0534d7359c1ee191eb194c511c301f32a4afa5a1dd4"}, + {file = "rpds_py-0.27.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c10d92fb6d7fd827e44055fcd932ad93dac6a11e832d51534d77b97d1d85400f"}, + {file = "rpds_py-0.27.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd2c1d27ebfe6a015cfa2005b7fe8c52d5019f7bbdd801bc6f7499aab9ae739e"}, + {file = "rpds_py-0.27.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4790c9d5dd565ddb3e9f656092f57268951398cef52e364c405ed3112dc7c7c1"}, + {file = "rpds_py-0.27.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4300e15e7d03660f04be84a125d1bdd0e6b2f674bc0723bc0fd0122f1a4585dc"}, + {file = "rpds_py-0.27.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:59195dc244fc183209cf8a93406889cadde47dfd2f0a6b137783aa9c56d67c85"}, + {file = "rpds_py-0.27.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fae4a01ef8c4cb2bbe92ef2063149596907dc4a881a8d26743b3f6b304713171"}, + {file = "rpds_py-0.27.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e3dc8d4ede2dbae6c0fc2b6c958bf51ce9fd7e9b40c0f5b8835c3fde44f5807d"}, + {file = "rpds_py-0.27.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c3782fb753aa825b4ccabc04292e07897e2fd941448eabf666856c5530277626"}, + {file = "rpds_py-0.27.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:887ab1f12b0d227e9260558a4a2320024b20102207ada65c43e1ffc4546df72e"}, + {file = "rpds_py-0.27.0-cp311-cp311-win32.whl", hash = "sha256:5d6790ff400254137b81b8053b34417e2c46921e302d655181d55ea46df58cf7"}, + {file = "rpds_py-0.27.0-cp311-cp311-win_amd64.whl", hash = "sha256:e24d8031a2c62f34853756d9208eeafa6b940a1efcbfe36e8f57d99d52bb7261"}, + {file = "rpds_py-0.27.0-cp311-cp311-win_arm64.whl", hash = "sha256:08680820d23df1df0a0260f714d12966bc6c42d02e8055a91d61e03f0c47dda0"}, + {file = "rpds_py-0.27.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:19c990fdf5acecbf0623e906ae2e09ce1c58947197f9bced6bbd7482662231c4"}, + {file = "rpds_py-0.27.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6c27a7054b5224710fcfb1a626ec3ff4f28bcb89b899148c72873b18210e446b"}, + {file = "rpds_py-0.27.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09965b314091829b378b60607022048953e25f0b396c2b70e7c4c81bcecf932e"}, + {file = "rpds_py-0.27.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:14f028eb47f59e9169bfdf9f7ceafd29dd64902141840633683d0bad5b04ff34"}, + {file = "rpds_py-0.27.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6168af0be75bba990a39f9431cdfae5f0ad501f4af32ae62e8856307200517b8"}, + {file = "rpds_py-0.27.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab47fe727c13c09d0e6f508e3a49e545008e23bf762a245b020391b621f5b726"}, + {file = "rpds_py-0.27.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa01b3d5e3b7d97efab65bd3d88f164e289ec323a8c033c5c38e53ee25c007e"}, + {file = "rpds_py-0.27.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:6c135708e987f46053e0a1246a206f53717f9fadfba27174a9769ad4befba5c3"}, + {file = "rpds_py-0.27.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc327f4497b7087d06204235199daf208fd01c82d80465dc5efa4ec9df1c5b4e"}, + {file = "rpds_py-0.27.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e57906e38583a2cba67046a09c2637e23297618dc1f3caddbc493f2be97c93f"}, + {file = "rpds_py-0.27.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f4f69d7a4300fbf91efb1fb4916421bd57804c01ab938ab50ac9c4aa2212f03"}, + {file = "rpds_py-0.27.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b4c4fbbcff474e1e5f38be1bf04511c03d492d42eec0babda5d03af3b5589374"}, + {file = "rpds_py-0.27.0-cp312-cp312-win32.whl", hash = "sha256:27bac29bbbf39601b2aab474daf99dbc8e7176ca3389237a23944b17f8913d97"}, + {file = "rpds_py-0.27.0-cp312-cp312-win_amd64.whl", hash = "sha256:8a06aa1197ec0281eb1d7daf6073e199eb832fe591ffa329b88bae28f25f5fe5"}, + {file = "rpds_py-0.27.0-cp312-cp312-win_arm64.whl", hash = "sha256:e14aab02258cb776a108107bd15f5b5e4a1bbaa61ef33b36693dfab6f89d54f9"}, + {file = "rpds_py-0.27.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:443d239d02d9ae55b74015234f2cd8eb09e59fbba30bf60baeb3123ad4c6d5ff"}, + {file = "rpds_py-0.27.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b8a7acf04fda1f30f1007f3cc96d29d8cf0a53e626e4e1655fdf4eabc082d367"}, + {file = "rpds_py-0.27.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d0f92b78cfc3b74a42239fdd8c1266f4715b573204c234d2f9fc3fc7a24f185"}, + {file = "rpds_py-0.27.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ce4ed8e0c7dbc5b19352b9c2c6131dd23b95fa8698b5cdd076307a33626b72dc"}, + {file = "rpds_py-0.27.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fde355b02934cc6b07200cc3b27ab0c15870a757d1a72fd401aa92e2ea3c6bfe"}, + {file = "rpds_py-0.27.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13bbc4846ae4c993f07c93feb21a24d8ec637573d567a924b1001e81c8ae80f9"}, + {file = "rpds_py-0.27.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be0744661afbc4099fef7f4e604e7f1ea1be1dd7284f357924af12a705cc7d5c"}, + {file = "rpds_py-0.27.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:069e0384a54f427bd65d7fda83b68a90606a3835901aaff42185fcd94f5a9295"}, + {file = "rpds_py-0.27.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4bc262ace5a1a7dc3e2eac2fa97b8257ae795389f688b5adf22c5db1e2431c43"}, + {file = "rpds_py-0.27.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2fe6e18e5c8581f0361b35ae575043c7029d0a92cb3429e6e596c2cdde251432"}, + {file = "rpds_py-0.27.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d93ebdb82363d2e7bec64eecdc3632b59e84bd270d74fe5be1659f7787052f9b"}, + {file = "rpds_py-0.27.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0954e3a92e1d62e83a54ea7b3fdc9efa5d61acef8488a8a3d31fdafbfb00460d"}, + {file = "rpds_py-0.27.0-cp313-cp313-win32.whl", hash = "sha256:2cff9bdd6c7b906cc562a505c04a57d92e82d37200027e8d362518df427f96cd"}, + {file = "rpds_py-0.27.0-cp313-cp313-win_amd64.whl", hash = "sha256:dc79d192fb76fc0c84f2c58672c17bbbc383fd26c3cdc29daae16ce3d927e8b2"}, + {file = "rpds_py-0.27.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b3a5c8089eed498a3af23ce87a80805ff98f6ef8f7bdb70bd1b7dae5105f6ac"}, + {file = "rpds_py-0.27.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:90fb790138c1a89a2e58c9282fe1089638401f2f3b8dddd758499041bc6e0774"}, + {file = "rpds_py-0.27.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:010c4843a3b92b54373e3d2291a7447d6c3fc29f591772cc2ea0e9f5c1da434b"}, + {file = "rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9ce7a9e967afc0a2af7caa0d15a3e9c1054815f73d6a8cb9225b61921b419bd"}, + {file = "rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa0bf113d15e8abdfee92aa4db86761b709a09954083afcb5bf0f952d6065fdb"}, + {file = "rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb91d252b35004a84670dfeafadb042528b19842a0080d8b53e5ec1128e8f433"}, + {file = "rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db8a6313dbac934193fc17fe7610f70cd8181c542a91382531bef5ed785e5615"}, + {file = "rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce96ab0bdfcef1b8c371ada2100767ace6804ea35aacce0aef3aeb4f3f499ca8"}, + {file = "rpds_py-0.27.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:7451ede3560086abe1aa27dcdcf55cd15c96b56f543fb12e5826eee6f721f858"}, + {file = "rpds_py-0.27.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:32196b5a99821476537b3f7732432d64d93a58d680a52c5e12a190ee0135d8b5"}, + {file = "rpds_py-0.27.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a029be818059870664157194e46ce0e995082ac49926f1423c1f058534d2aaa9"}, + {file = "rpds_py-0.27.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3841f66c1ffdc6cebce8aed64e36db71466f1dc23c0d9a5592e2a782a3042c79"}, + {file = "rpds_py-0.27.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:42894616da0fc0dcb2ec08a77896c3f56e9cb2f4b66acd76fc8992c3557ceb1c"}, + {file = "rpds_py-0.27.0-cp313-cp313t-win32.whl", hash = "sha256:b1fef1f13c842a39a03409e30ca0bf87b39a1e2a305a9924deadb75a43105d23"}, + {file = "rpds_py-0.27.0-cp313-cp313t-win_amd64.whl", hash = "sha256:183f5e221ba3e283cd36fdfbe311d95cd87699a083330b4f792543987167eff1"}, + {file = "rpds_py-0.27.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:f3cd110e02c5bf17d8fb562f6c9df5c20e73029d587cf8602a2da6c5ef1e32cb"}, + {file = "rpds_py-0.27.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8d0e09cf4863c74106b5265c2c310f36146e2b445ff7b3018a56799f28f39f6f"}, + {file = "rpds_py-0.27.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f689ab822f9b5eb6dfc69893b4b9366db1d2420f7db1f6a2adf2a9ca15ad64"}, + {file = "rpds_py-0.27.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e36c80c49853b3ffda7aa1831bf175c13356b210c73128c861f3aa93c3cc4015"}, + {file = "rpds_py-0.27.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6de6a7f622860af0146cb9ee148682ff4d0cea0b8fd3ad51ce4d40efb2f061d0"}, + {file = "rpds_py-0.27.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4045e2fc4b37ec4b48e8907a5819bdd3380708c139d7cc358f03a3653abedb89"}, + {file = "rpds_py-0.27.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9da162b718b12c4219eeeeb68a5b7552fbc7aadedf2efee440f88b9c0e54b45d"}, + {file = "rpds_py-0.27.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:0665be515767dc727ffa5f74bd2ef60b0ff85dad6bb8f50d91eaa6b5fb226f51"}, + {file = "rpds_py-0.27.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:203f581accef67300a942e49a37d74c12ceeef4514874c7cede21b012613ca2c"}, + {file = "rpds_py-0.27.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7873b65686a6471c0037139aa000d23fe94628e0daaa27b6e40607c90e3f5ec4"}, + {file = "rpds_py-0.27.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:249ab91ceaa6b41abc5f19513cb95b45c6f956f6b89f1fe3d99c81255a849f9e"}, + {file = "rpds_py-0.27.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d2f184336bc1d6abfaaa1262ed42739c3789b1e3a65a29916a615307d22ffd2e"}, + {file = "rpds_py-0.27.0-cp314-cp314-win32.whl", hash = "sha256:d3c622c39f04d5751408f5b801ecb527e6e0a471b367f420a877f7a660d583f6"}, + {file = "rpds_py-0.27.0-cp314-cp314-win_amd64.whl", hash = "sha256:cf824aceaeffff029ccfba0da637d432ca71ab21f13e7f6f5179cd88ebc77a8a"}, + {file = "rpds_py-0.27.0-cp314-cp314-win_arm64.whl", hash = "sha256:86aca1616922b40d8ac1b3073a1ead4255a2f13405e5700c01f7c8d29a03972d"}, + {file = "rpds_py-0.27.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:341d8acb6724c0c17bdf714319c393bb27f6d23d39bc74f94221b3e59fc31828"}, + {file = "rpds_py-0.27.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6b96b0b784fe5fd03beffff2b1533dc0d85e92bab8d1b2c24ef3a5dc8fac5669"}, + {file = "rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c431bfb91478d7cbe368d0a699978050d3b112d7f1d440a41e90faa325557fd"}, + {file = "rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20e222a44ae9f507d0f2678ee3dd0c45ec1e930f6875d99b8459631c24058aec"}, + {file = "rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:184f0d7b342967f6cda94a07d0e1fae177d11d0b8f17d73e06e36ac02889f303"}, + {file = "rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a00c91104c173c9043bc46f7b30ee5e6d2f6b1149f11f545580f5d6fdff42c0b"}, + {file = "rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7a37dd208f0d658e0487522078b1ed68cd6bce20ef4b5a915d2809b9094b410"}, + {file = "rpds_py-0.27.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:92f3b3ec3e6008a1fe00b7c0946a170f161ac00645cde35e3c9a68c2475e8156"}, + {file = "rpds_py-0.27.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a1b3db5fae5cbce2131b7420a3f83553d4d89514c03d67804ced36161fe8b6b2"}, + {file = "rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5355527adaa713ab693cbce7c1e0ec71682f599f61b128cf19d07e5c13c9b1f1"}, + {file = "rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fcc01c57ce6e70b728af02b2401c5bc853a9e14eb07deda30624374f0aebfe42"}, + {file = "rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3001013dae10f806380ba739d40dee11db1ecb91684febb8406a87c2ded23dae"}, + {file = "rpds_py-0.27.0-cp314-cp314t-win32.whl", hash = "sha256:0f401c369186a5743694dd9fc08cba66cf70908757552e1f714bfc5219c655b5"}, + {file = "rpds_py-0.27.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8a1dca5507fa1337f75dcd5070218b20bc68cf8844271c923c1b79dfcbc20391"}, + {file = "rpds_py-0.27.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e0d7151a1bd5d0a203a5008fc4ae51a159a610cb82ab0a9b2c4d80241745582e"}, + {file = "rpds_py-0.27.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42ccc57ff99166a55a59d8c7d14f1a357b7749f9ed3584df74053fd098243451"}, + {file = "rpds_py-0.27.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e377e4cf8795cdbdff75b8f0223d7b6c68ff4fef36799d88ccf3a995a91c0112"}, + {file = "rpds_py-0.27.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79af163a4b40bbd8cfd7ca86ec8b54b81121d3b213b4435ea27d6568bcba3e9d"}, + {file = "rpds_py-0.27.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2eff8ee57c5996b0d2a07c3601fb4ce5fbc37547344a26945dd9e5cbd1ed27a"}, + {file = "rpds_py-0.27.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7cf9bc4508efb18d8dff6934b602324eb9f8c6644749627ce001d6f38a490889"}, + {file = "rpds_py-0.27.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05284439ebe7d9f5f5a668d4d8a0a1d851d16f7d47c78e1fab968c8ad30cab04"}, + {file = "rpds_py-0.27.0-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:1321bce595ad70e80f97f998db37356b2e22cf98094eba6fe91782e626da2f71"}, + {file = "rpds_py-0.27.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:737005088449ddd3b3df5a95476ee1c2c5c669f5c30eed909548a92939c0e12d"}, + {file = "rpds_py-0.27.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9b2a4e17bfd68536c3b801800941c95a1d4a06e3cada11c146093ba939d9638d"}, + {file = "rpds_py-0.27.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:dc6b0d5a1ea0318ef2def2b6a55dccf1dcaf77d605672347271ed7b829860765"}, + {file = "rpds_py-0.27.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4c3f8a0d4802df34fcdbeb3dfe3a4d8c9a530baea8fafdf80816fcaac5379d83"}, + {file = "rpds_py-0.27.0-cp39-cp39-win32.whl", hash = "sha256:699c346abc73993962cac7bb4f02f58e438840fa5458a048d3a178a7a670ba86"}, + {file = "rpds_py-0.27.0-cp39-cp39-win_amd64.whl", hash = "sha256:be806e2961cd390a89d6c3ce8c2ae34271cfcd05660f716257838bb560f1c3b6"}, + {file = "rpds_py-0.27.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:46f48482c1a4748ab2773f75fffbdd1951eb59794e32788834b945da857c47a8"}, + {file = "rpds_py-0.27.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:419dd9c98bcc9fb0242be89e0c6e922df333b975d4268faa90d58499fd9c9ebe"}, + {file = "rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d42a0ef2bdf6bc81e1cc2d49d12460f63c6ae1423c4f4851b828e454ccf6f1"}, + {file = "rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2e39169ac6aae06dd79c07c8a69d9da867cef6a6d7883a0186b46bb46ccfb0c3"}, + {file = "rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:935afcdea4751b0ac918047a2df3f720212892347767aea28f5b3bf7be4f27c0"}, + {file = "rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8de567dec6d451649a781633d36f5c7501711adee329d76c095be2178855b042"}, + {file = "rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:555ed147cbe8c8f76e72a4c6cd3b7b761cbf9987891b9448808148204aed74a5"}, + {file = "rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:d2cc2b34f9e1d31ce255174da82902ad75bd7c0d88a33df54a77a22f2ef421ee"}, + {file = "rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cb0702c12983be3b2fab98ead349ac63a98216d28dda6f518f52da5498a27a1b"}, + {file = "rpds_py-0.27.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ba783541be46f27c8faea5a6645e193943c17ea2f0ffe593639d906a327a9bcc"}, + {file = "rpds_py-0.27.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:2406d034635d1497c596c40c85f86ecf2bf9611c1df73d14078af8444fe48031"}, + {file = "rpds_py-0.27.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dea0808153f1fbbad772669d906cddd92100277533a03845de6893cadeffc8be"}, + {file = "rpds_py-0.27.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d2a81bdcfde4245468f7030a75a37d50400ac2455c3a4819d9d550c937f90ab5"}, + {file = "rpds_py-0.27.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e6491658dd2569f05860bad645569145c8626ac231877b0fb2d5f9bcb7054089"}, + {file = "rpds_py-0.27.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:bec77545d188f8bdd29d42bccb9191682a46fb2e655e3d1fb446d47c55ac3b8d"}, + {file = "rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25a4aebf8ca02bbb90a9b3e7a463bbf3bee02ab1c446840ca07b1695a68ce424"}, + {file = "rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:44524b96481a4c9b8e6c46d6afe43fa1fb485c261e359fbe32b63ff60e3884d8"}, + {file = "rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45d04a73c54b6a5fd2bab91a4b5bc8b426949586e61340e212a8484919183859"}, + {file = "rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:343cf24de9ed6c728abefc5d5c851d5de06497caa7ac37e5e65dd572921ed1b5"}, + {file = "rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aed8118ae20515974650d08eb724150dc2e20c2814bcc307089569995e88a14"}, + {file = "rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:af9d4fd79ee1cc8e7caf693ee02737daabfc0fcf2773ca0a4735b356c8ad6f7c"}, + {file = "rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f0396e894bd1e66c74ecbc08b4f6a03dc331140942c4b1d345dd131b68574a60"}, + {file = "rpds_py-0.27.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:59714ab0a5af25d723d8e9816638faf7f4254234decb7d212715c1aa71eee7be"}, + {file = "rpds_py-0.27.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:88051c3b7d5325409f433c5a40328fcb0685fc04e5db49ff936e910901d10114"}, + {file = "rpds_py-0.27.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:181bc29e59e5e5e6e9d63b143ff4d5191224d355e246b5a48c88ce6b35c4e466"}, + {file = "rpds_py-0.27.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9ad08547995a57e74fea6abaf5940d399447935faebbd2612b3b0ca6f987946b"}, + {file = "rpds_py-0.27.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:61490d57e82e23b45c66f96184237994bfafa914433b8cd1a9bb57fecfced59d"}, + {file = "rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7cf5e726b6fa977e428a61880fb108a62f28b6d0c7ef675b117eaff7076df49"}, + {file = "rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dc662bc9375a6a394b62dfd331874c434819f10ee3902123200dbcf116963f89"}, + {file = "rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:299a245537e697f28a7511d01038c310ac74e8ea213c0019e1fc65f52c0dcb23"}, + {file = "rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:be3964f7312ea05ed283b20f87cb533fdc555b2e428cc7be64612c0b2124f08c"}, + {file = "rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33ba649a6e55ae3808e4c39e01580dc9a9b0d5b02e77b66bb86ef117922b1264"}, + {file = "rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:81f81bbd7cdb4bdc418c09a73809abeda8f263a6bf8f9c7f93ed98b5597af39d"}, + {file = "rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11e8e28c0ba0373d052818b600474cfee2fafa6c9f36c8587d217b13ee28ca7d"}, + {file = "rpds_py-0.27.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e3acb9c16530362aeaef4e84d57db357002dc5cbfac9a23414c3e73c08301ab2"}, + {file = "rpds_py-0.27.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2e307cb5f66c59ede95c00e93cd84190a5b7f3533d7953690b2036780622ba81"}, + {file = "rpds_py-0.27.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:f09c9d4c26fa79c1bad927efb05aca2391350b8e61c38cbc0d7d3c814e463124"}, + {file = "rpds_py-0.27.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:af22763a0a1eff106426a6e1f13c4582e0d0ad89c1493ab6c058236174cd6c6a"}, + {file = "rpds_py-0.27.0.tar.gz", hash = "sha256:8b23cf252f180cda89220b378d917180f29d313cd6a07b2431c0d3b776aae86f"}, +] + +[[package]] +name = "send2trash" +version = "1.8.3" +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.*,!=3.5.*,>=2.7" +groups = ["dev"] +files = [ + {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, + {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa ; sys_platform == \"darwin\"", "pywin32 ; sys_platform == \"win32\""] +objc = ["pyobjc-framework-Cocoa ; sys_platform == \"darwin\""] +win32 = ["pywin32 ; sys_platform == \"win32\""] + +[[package]] +name = "setuptools" +version = "80.9.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, + {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main", "dev"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "soupsieve" +version = "2.7" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4"}, + {file = "soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a"}, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +description = "Extract data from python stack frames and tracebacks for informative displays" +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, +] + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + +[[package]] +name = "stdlib-list" +version = "0.11.1" +description = "A list of Python Standard Libraries (2.7 through 3.13)." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "stdlib_list-0.11.1-py3-none-any.whl", hash = "sha256:9029ea5e3dfde8cd4294cfd4d1797be56a67fc4693c606181730148c3fd1da29"}, + {file = "stdlib_list-0.11.1.tar.gz", hash = "sha256:95ebd1d73da9333bba03ccc097f5bac05e3aa03e6822a0c0290f87e1047f1857"}, +] + +[package.extras] +dev = ["build", "stdlib-list[doc,lint,test]"] +doc = ["furo", "sphinx"] +lint = ["mypy", "ruff"] +support = ["sphobjinv"] +test = ["coverage[toml]", "pytest", "pytest-cov"] + +[[package]] +name = "terminado" +version = "0.18.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, + {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, +] + +[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"] +typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] + +[[package]] +name = "tinycss2" +version = "1.4.0" +description = "A tiny CSS parser" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, + {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["pytest", "ruff"] + +[[package]] +name = "tomlkit" +version = "0.13.3" +description = "Style preserving TOML library" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0"}, + {file = "tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1"}, +] + +[[package]] +name = "tornado" +version = "6.5.2" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6"}, + {file = "tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef"}, + {file = "tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e"}, + {file = "tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882"}, + {file = "tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108"}, + {file = "tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c"}, + {file = "tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4"}, + {file = "tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04"}, + {file = "tornado-6.5.2-cp39-abi3-win32.whl", hash = "sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0"}, + {file = "tornado-6.5.2-cp39-abi3-win_amd64.whl", hash = "sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f"}, + {file = "tornado-6.5.2-cp39-abi3-win_arm64.whl", hash = "sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af"}, + {file = "tornado-6.5.2.tar.gz", hash = "sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0"}, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] + +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20250809" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "types_python_dateutil-2.9.0.20250809-py3-none-any.whl", hash = "sha256:768890cac4f2d7fd9e0feb6f3217fce2abbfdfc0cadd38d11fba325a815e4b9f"}, + {file = "types_python_dateutil-2.9.0.20250809.tar.gz", hash = "sha256:69cbf8d15ef7a75c3801d65d63466e46ac25a0baa678d89d0a137fc31a608cc1"}, +] + +[[package]] +name = "typing-extensions" +version = "4.14.1" +description = "Backported and Experimental Type Hints for Python 3.9+" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76"}, + {file = "typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36"}, +] + +[[package]] +name = "typing-inspection" +version = "0.4.1" +description = "Runtime typing introspection tools" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51"}, + {file = "typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28"}, +] + +[package.dependencies] +typing-extensions = ">=4.12.0" + +[[package]] +name = "tzdata" +version = "2025.2" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +groups = ["main"] +files = [ + {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, + {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +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.5.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"}, + {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "wcwidth" +version = "0.2.13" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, +] + +[[package]] +name = "webcolors" +version = "24.11.1" +description = "A library for working with the color formats defined by HTML and CSS." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, + {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +groups = ["dev"] +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.8.0" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, + {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "xlsxwriter" +version = "3.2.5" +description = "A Python module for creating Excel XLSX files." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "xlsxwriter-3.2.5-py3-none-any.whl", hash = "sha256:4f4824234e1eaf9d95df9a8fe974585ff91d0f5e3d3f12ace5b71e443c1c6abd"}, + {file = "xlsxwriter-3.2.5.tar.gz", hash = "sha256:7e88469d607cdc920151c0ab3ce9cf1a83992d4b7bc730c5ffdd1a12115a7dbe"}, +] + +[metadata] +lock-version = "2.1" +python-versions = ">=3.12,<4.0" +content-hash = "abe3b5271081c3ad44b715ed68207041ce87d3e9fee9512f9c14d93248e21a5d" diff --git a/pyproject.toml b/pyproject.toml index 4c3d1cb..882a903 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,58 +1,50 @@ [build-system] -requires = ["setuptools", "wheel"] -build-backend = "setuptools.build_meta" +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" -[project] +[tool.poetry] name = "pyetm" -version = "2.0-beta" - -description = "Python-ETM Connector" -authors = [] # TODO: add us! +version = "2.0" +description = "A Python package for energy transition modeling." +authors = ["Your Name "] +license = "MIT" readme = "README.md" -requires-python = ">=3.12" -license = {file = "LICENSE"} -dependencies = [ - # 'requests>=2.26', - # 'pandas[parquet]>=2.2', - # 'openpyxl>=3.0', - # 'xlsxwriter>=3.0', -] -keywords = ["ETM", "Energy Transition Model"] -classifiers = [ - 'Development Status :: 4 - Beta', - 'Intended Audience :: Developers', - 'Intended Audience :: Education', - 'Intended Audience :: Science/Research', - # 'License :: OSI Approved :: European Union Public Licence 1.2 (EUPL 1.2)', - 'Natural Language :: English', - 'Operating System :: OS Independent', - 'Programming Language :: Python', - # 'Programming Language :: Python :: 3', - # 'Programming Language :: Python :: 3.10', - # 'Programming Language :: Python :: 3.11', - # 'Programming Language :: Python :: 3.12', -] +homepage = "https://github.com/quintel/pyetm" +repository = "https://github.com/quintel/pyetm" +documentation = "https://docs.energytransitionmodel.com/main/pyetm/introduction" +keywords = ["energy", "transition", "modeling", "api"] +packages = [{ include = "pyetm" }] -[project.urls] -repository = "https://github.com/robcalon/pyetm" +[tool.poetry.dependencies] +python = ">=3.12,<4.0" +pydantic = "*" +pandas = "*" +requests = "*" +python-dotenv = "*" +pyyaml = "*" +pydantic-settings = "*" +xlsxwriter = "*" +openpyxl = "*" -[project.optional-dependencies] -async = ["aiohttp>=3.8"] -dev = [ - "pytest>=7.0", - "pylint>=3.0", - "requests-mock>=1.11" -] +[tool.poetry.group.dev.dependencies] +pytest = "*" +pylint = "*" +requests-mock = "*" +ipykernel = "*" +notebook = "*" +pytest-cov = "*" +pydeps = "*" -[tool.setuptools.package-data] -"pyetm.data" = ["*.csv"] +[tool.poetry.scripts] +pyetm = "pyetm.__main__:main" -[tool.pylint] -max-args = 15 -max-local = 20 +[tool.poetry.urls] +"Bug Tracker" = "https://github.com/quintel/pyetm/issues" +"Documentation" = "https://docs.energytransitionmodel.com/main/pyetm/introduction" [tool.pytest.ini_options] -minversion = "7.0" -addopts = [ - "--import-mode=importlib", -] +addopts = "--cov=pyetm --cov-report=term-missing" +testpaths = ["tests"] + +[tool.pylint.main] +fail-under = 8.0 diff --git a/running_notebooks.md b/running_notebooks.md index e9af4a6..8fa45ba 100644 --- a/running_notebooks.md +++ b/running_notebooks.md @@ -1,9 +1,10 @@ # Running Notebooks This guide will help you install everything you need to open and run our Jupyter notebooks in VS Code, -even if you don’t have Python, Jupyter, or any VS Code extensions installed yet. If you'd like some -additional guidance or you're having trouble, check out [this helpful guide from vscode](https://www.youtube.com/watch?v=suAkMeWJ1yE&ab_channel=VisualStudioCode). -Just note that in the video they use venv, whereas we use pipenv (these are practically interchangable). +even if you don’t have Python, Jupyter, or any VS Code extensions installed yet. + +If you'd like some additional guidance or you're having trouble, check out [this helpful guide from VS Code](https://www.youtube.com/watch?v=suAkMeWJ1yE&ab_channel=VisualStudioCode). +Just note: in the video they use `venv`, whereas we use [Poetry](https://python-poetry.org/) for dependency management and virtual environments. --- @@ -17,17 +18,20 @@ Just note that in the video they use venv, whereas we use pipenv (these are prac ## 2. Install Python Go to the [official Python download page](https://www.python.org/downloads/) and download the latest -**Python 3.x** installer for your OS. -- **Windows:** Run the installer, **check** "Add Python to PATH", and click **Install Now**. -- **macOS/Linux:** Follow the on-screen instructions. On Linux, you can also use your package manager: - - ```bash - # Ubuntu/Debian - sudo apt update && sudo apt install python3 python3-venv python3-pip - ``` +**Python 3.12+** installer for your OS. + +- **Windows:** Run the installer, **check** "Add Python to PATH", and click **Install Now**. +- **macOS/Linux:** Follow the on-screen instructions. On macOS you can also use [Homebrew](https://brew.sh/): + ```bash + brew install python@3.12 + ``` + On Linux, you can use your package manager: + ```bash + # Ubuntu/Debian + sudo apt update && sudo apt install python3 python3-pip + ``` Verify installation by opening a terminal and running: - ```bash python3 --version # or on Windows @@ -43,7 +47,6 @@ python --version 3. (Optional) Check "Add to PATH" during installation for easier command-line use. Verify by running: - ```bash code --version ``` @@ -53,39 +56,39 @@ code --version ## 4. Install Necessary VS Code Extensions 1. Open VS Code. -2. Click the **Extensions** icon (or press Ctrl+Shift+X). +2. Click the **Extensions** icon (or press `Ctrl+Shift+X` / `Cmd+Shift+X` on macOS). 3. Install: - * **Python** (by Microsoft) * **Jupyter** (by Microsoft) --- -## 5. Set Up a Python Environment (using Pipenv) +## 5. Set Up a Python Environment (using Poetry) -If you'd like to learn more about pipenv, [check out the docs here.](https://pipenv.pypa.io/en/latest/index.html) - -In your project folder: - -1. **Install Pipenv** (if you don’t have it already): +We use [Poetry](https://python-poetry.org/) to manage dependencies and virtual environments. +1. **Install Poetry** (if you don’t have it already): ```bash - pip install pipenv + curl -sSL https://install.python-poetry.org | python3 - + ``` + Or on Windows (PowerShell): + ```powershell + (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py - ``` -2. **Install dependencies** from `Pipfile`: +2. **Install dependencies** from `pyproject.toml`: ```bash - pipenv install + poetry install --with dev ``` -3. **Activate** the Pipenv environment: +3. **Activate** the Poetry environment: ```bash - pipenv shell + eval $(poetry env activate) ``` -4. When adding new packages: +4. When adding new packages: ```bash - pipenv install + poetry add ``` --- @@ -93,13 +96,13 @@ In your project folder: ## 6. Open & Run the Notebook 1. In VS Code, go to **File → Open Folder** and select this project’s root folder. -2. Locate a `.ipynb` file in the Examples folder, and click to open it. -3. At the top right of the notebook editor, click **Select Kernel** and choose the interpreter from -your Pipenv environment (it will mention `Pipenv`). -4. Run cells by clicking the ▶️ icon or pressing Shift+Enter. +2. Locate a `.ipynb` file in the `examples` folder, and click to open it. +3. At the top right of the notebook editor, click **Select Kernel** and choose the interpreter from your Poetry environment (it will mention `.venv` or the Poetry-managed path). +4. Run cells by clicking the ▶️ icon or pressing `Shift+Enter`. --- ## 7. Important Notes -After this setup you will be *almost* ready to run the Jupyter notebooks in the examples folder. You -still need to configure your settings as [outlined in the main readme.](README.md) + +After this setup you will be *almost* ready to run the Jupyter notebooks in the examples folder. +You still need to configure your settings as [outlined in the main README](README.md). From 2fc6cabb95ddf8e3d37c12a51a8b266489abb975 Mon Sep 17 00:00:00 2001 From: louispt1 Date: Wed, 13 Aug 2025 14:07:29 +0200 Subject: [PATCH 4/5] Clean up Jupyter notebooks --- examples/.gitkeep | 0 ...ulti_scenario_flow.ipynb => multi_scenario.ipynb} | 12 +++++++----- .../create_and_update_a_scenario.ipynb | 0 examples/{ => old_examples}/excel_to_scenarios.ipynb | 0 .../{ => old_examples}/myc_notebook_for_tim.ipynb | 0 examples/{ => old_examples}/scenario_to_excel.ipynb | 0 .../serialization_deserialization.ipynb | 0 7 files changed, 7 insertions(+), 5 deletions(-) delete mode 100644 examples/.gitkeep rename examples/{full_multi_scenario_flow.ipynb => multi_scenario.ipynb} (85%) rename examples/{ => old_examples}/create_and_update_a_scenario.ipynb (100%) rename examples/{ => old_examples}/excel_to_scenarios.ipynb (100%) rename examples/{ => old_examples}/myc_notebook_for_tim.ipynb (100%) rename examples/{ => old_examples}/scenario_to_excel.ipynb (100%) rename examples/{ => old_examples}/serialization_deserialization.ipynb (100%) diff --git a/examples/.gitkeep b/examples/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/examples/full_multi_scenario_flow.ipynb b/examples/multi_scenario.ipynb similarity index 85% rename from examples/full_multi_scenario_flow.ipynb rename to examples/multi_scenario.ipynb index a71353a..81b522d 100644 --- a/examples/full_multi_scenario_flow.ipynb +++ b/examples/multi_scenario.ipynb @@ -31,9 +31,7 @@ "\n", "In the example, there are two scenarios, with short names scen_a and scen_b. You can use short names in the parameters sheet to specify which inputs belong to which scenario. Because scen_a has no scenario_id, it is being created. It will be created with all the metadata included in the sheet, plus any of the inputs under the column with its short_name and any sortables and curves specified in the sheets named beside the sortables and custom_curves rows. The same goes for scen_b, but because it has a scenario_id (2690555) that scenario will be loaded, and then updated with anything as set in the excel.\n", "\n", - "**TODO**: Figure out how to manage the fact that for this example whatever scenario 2690555 is will be constantly updated etc by everyone who wants to try running the script on pro/beta. At the moment its just a local scenario.\n", - "\n", - "Everything in the ETM is structured via scenarios, and so is pyetm." + "**TODO**: Figure out how to manage the fact that for this example whatever scenario 2690555 is will be constantly updated etc by everyone who wants to try running this script on pro/beta. At the moment its just a local scenario." ] }, { @@ -136,7 +134,7 @@ "id": "86643b22", "metadata": {}, "source": [ - "We can directly modify any of the attributes using Pandas, or we can re-export the scenarios to excel and make modifications that way." + "We can directly modify any of the attributes using Pandas, or we can re-export the scenarios to excel and make modifications that way. When exporting to excel, more data will be available than was in the input, because the ETM results will be included by default. The 'output curves' will be stored in a separate excel workbook, separated by carrier type. By default everything is included, but you can also specify what you want." ] }, { @@ -146,7 +144,11 @@ "metadata": {}, "outputs": [], "source": [ - "scenarios.to_excel(\"my_excel.xlsx\")" + "# Export the scenarios to excel\n", + "scenarios.to_excel(\"export.xlsx\") # This will create export.xlsx and export_output_curves.xlsx.\n", + "\n", + "# There are also options - decide whether to include the output_curves, specify where you want them and specify which carriers you're interested in.\n", + "scenarios.to_excel((\"export_with_options.xlsx\"), export_output_curves=True, output_curves_path=\"output_curves.xlsx\", carriers=[\"electricity\", \"heat\", \"hydrogen\"])" ] } ], diff --git a/examples/create_and_update_a_scenario.ipynb b/examples/old_examples/create_and_update_a_scenario.ipynb similarity index 100% rename from examples/create_and_update_a_scenario.ipynb rename to examples/old_examples/create_and_update_a_scenario.ipynb diff --git a/examples/excel_to_scenarios.ipynb b/examples/old_examples/excel_to_scenarios.ipynb similarity index 100% rename from examples/excel_to_scenarios.ipynb rename to examples/old_examples/excel_to_scenarios.ipynb diff --git a/examples/myc_notebook_for_tim.ipynb b/examples/old_examples/myc_notebook_for_tim.ipynb similarity index 100% rename from examples/myc_notebook_for_tim.ipynb rename to examples/old_examples/myc_notebook_for_tim.ipynb diff --git a/examples/scenario_to_excel.ipynb b/examples/old_examples/scenario_to_excel.ipynb similarity index 100% rename from examples/scenario_to_excel.ipynb rename to examples/old_examples/scenario_to_excel.ipynb diff --git a/examples/serialization_deserialization.ipynb b/examples/old_examples/serialization_deserialization.ipynb similarity index 100% rename from examples/serialization_deserialization.ipynb rename to examples/old_examples/serialization_deserialization.ipynb From e8d3a5c7f0f80628a0e787ee97ae497ebb5c6085 Mon Sep 17 00:00:00 2001 From: louispt1 Date: Wed, 13 Aug 2025 15:20:26 +0200 Subject: [PATCH 5/5] Clearing notebooks, updating poetry and handling setting environment not base url --- README.md | 21 +- .../advanced_scenario_example.ipynb | 689 ------- ....ipynb => create_or_query_scenarios.ipynb} | 3 +- examples/example.config.yml | 8 +- examples/exploring_a_scenario.ipynb | 211 --- .../create_and_update_a_scenario.ipynb | 181 -- .../old_examples/excel_to_scenarios.ipynb | 1470 --------------- .../old_examples/myc_notebook_for_tim.ipynb | 1631 ----------------- examples/old_examples/scenario_to_excel.ipynb | 280 --- .../serialization_deserialization.ipynb | 241 --- pyproject.toml | 2 +- src/pyetm/config/settings.py | 49 +- src/pyetm/models/scenarios.py | 2 +- 13 files changed, 69 insertions(+), 4719 deletions(-) delete mode 100644 examples/advanced_examples/advanced_scenario_example.ipynb rename examples/{multi_scenario.ipynb => create_or_query_scenarios.ipynb} (98%) delete mode 100644 examples/exploring_a_scenario.ipynb delete mode 100644 examples/old_examples/create_and_update_a_scenario.ipynb delete mode 100644 examples/old_examples/excel_to_scenarios.ipynb delete mode 100644 examples/old_examples/myc_notebook_for_tim.ipynb delete mode 100644 examples/old_examples/scenario_to_excel.ipynb delete mode 100644 examples/old_examples/serialization_deserialization.ipynb diff --git a/README.md b/README.md index 900b285..b0a1ca4 100644 --- a/README.md +++ b/README.md @@ -99,18 +99,18 @@ You can either: ## Configuring Your Settings -You can configure your API token and base URL either with a **config.yml** file or environment variables. +You can configure your API token and base URL either with a **config.yml** file or environment variables. You can now simply set an `environment` and the base URL will be inferred for you. ### Option 1: `config.yml` -1. Duplicate the example file (`examples/config.example.yml`) and rename it to `config.yml`. +1. Duplicate the example file (`examples/example.config.yml`) and rename it to `config.yml`. 2. Edit `config.yml`: - **etm_api_token**: Your ETM API token (overridden by `$ETM_API_TOKEN` if set). - - **base_url**: API base URL (overridden by `$BASE_URL` if set). - Examples: - - Production: `https://engine.energytransitionmodel.com/api/v3` - - Beta: `https://beta.engine.energytransitionmodel.com/api/v3` - - Stable engine snapshot: `https://2025-01.engine.energytransitionmodel.com/api/v3` - - **local_engine_url**, **local_model_url**: URLs for a local ETM instance. + - **environment**: pro (default), beta, local, or a stable tag like `2025-01`. When set, `base_url` is inferred automatically. + - (optional) **base_url**: API base URL (overridden by `$BASE_URL` if set). If both `environment` and `base_url` are set, `base_url` wins. + Examples if you need a direct override: + - `https://engine.energytransitionmodel.com/api/v3` (pro) + - `https://beta.engine.energytransitionmodel.com/api/v3` (beta) + - `https://2025-01.engine.energytransitionmodel.com/api/v3` (stable tag) - **proxy_servers**: (Optional) HTTP/HTTPS proxy URLs. - **csv_separator** and **decimal_separator**: Defaults are `,` and `.`. @@ -120,9 +120,9 @@ Place `config.yml` in the project root (`pyetm/` folder). If you prefer, set these environment variables: ```bash ETM_API_TOKEN= +ENVIRONMENT= +# or provide a direct override instead of ENVIRONMENT BASE_URL= -LOCAL_ENGINE_URL= -LOCAL_MODEL_URL= ``` --- @@ -139,4 +139,5 @@ LOCAL_MODEL_URL= - Set environment variables with: ```bash export ETM_API_TOKEN="your-token" + export ENVIRONMENT=beta # or pro/local/2025-01 ``` diff --git a/examples/advanced_examples/advanced_scenario_example.ipynb b/examples/advanced_examples/advanced_scenario_example.ipynb deleted file mode 100644 index e9baefc..0000000 --- a/examples/advanced_examples/advanced_scenario_example.ipynb +++ /dev/null @@ -1,689 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "ddbe7ab2", - "metadata": {}, - "source": [ - "# Advanced Scenario Examples\n", - "\n", - "This notebook demonstrates how to use the `Scenario` object within the pyetm package to retrieve and \n", - "inspect data from an ETM scenario. These examples are slightly more advanced, including analytics and\n", - "data operations on the scenario object and its sub-models.\n", - "\n", - "Make sure you have a valid `ETM_API_TOKEN` set in your environment.\n", - "\n", - "## Structure\n", - "\n", - "This notebook is organized into two main sections:\n", - "1. **Setup & Initialization** - Run these cells first to set up your environment and load a scenario\n", - "2. **Exploration Examples** - After setup is complete, these cells can be run in any order to explore different aspects of scenario data" - ] - }, - { - "cell_type": "markdown", - "id": "setup_header", - "metadata": {}, - "source": [ - "## Setup & Initialization\n", - "\n", - "**Run these cells first!** The following cells set up your environment and load a scenario. Complete this section before exploring the examples below." - ] - }, - { - "cell_type": "markdown", - "id": "5ba2f542", - "metadata": {}, - "source": [ - "##### Environment Setup" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dfa34991", - "metadata": {}, - "outputs": [], - "source": [ - "from example_helpers import setup_notebook\n", - "from pyetm.models import Scenario\n", - "\n", - "setup_notebook()" - ] - }, - { - "cell_type": "markdown", - "id": "f579be0a", - "metadata": {}, - "source": [ - "##### Load a scenario\n", - "\n", - "This cell connects to a specific scenario using its session ID and loads all its data.\n", - "\n", - "The scenario object will contain inputs, outputs, custom curves, and other configuration data." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6a514b5d", - "metadata": {}, - "outputs": [], - "source": [ - "# Connect to your scenario by supplying the session ID\n", - "scenario = Scenario.load(2690288)\n", - "\n", - "print(f\" Scenario {scenario.id} loaded successfully\")\n", - "print(f\" Total inputs: {len(scenario.inputs)}\")\n", - "print(f\" User-modified inputs: {len(scenario.user_values())}\")\n", - "print(\"\\n Setup complete! You can now run any of the exploration examples below in any order.\")" - ] - }, - { - "cell_type": "markdown", - "id": "exploration_header", - "metadata": {}, - "source": [ - "## Exploration Examples\n", - "\n", - "**The cells below can be run in any order** after completing the setup section above. Each cell demonstrates different ways to explore and analyze scenario data using the pyetm package to connect to the Energy Transition Model's API." - ] - }, - { - "cell_type": "markdown", - "id": "basic_properties_section", - "metadata": {}, - "source": [ - "### Basic Scenario Properties" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "basic_properties", - "metadata": {}, - "outputs": [], - "source": [ - "# Display basic scenario properties\n", - "# These properties define the fundamental characteristics of the scenario\n", - "\n", - "print(f\"Scenario ID: {scenario.id}\")\n", - "print(f\"Area Code: {scenario.area_code}\")\n", - "print(f\"End Year: {scenario.end_year}\")\n", - "print(f\"Start Year: {scenario.start_year}\")\n", - "print(f\"Created: {scenario.created_at}\")\n", - "print(f\"Updated: {scenario.updated_at}\")\n", - "print(f\"Private: {scenario.private}\")\n", - "print(f\"Template: {scenario.template}\")\n", - "print(f\"Source: {scenario.source}\")\n", - "print(f\"URL: {scenario.url}\")\n", - "print(f\"Keep Compatible: {scenario.keep_compatible}\")\n", - "print(f\"Scaling: {scenario.scaling}\")\n", - "print(f\"Version: {scenario.version}\")\n", - "\n", - "# Show metadata if available\n", - "if scenario.metadata:\n", - " print(\"\\nMetadata:\")\n", - " print(scenario.metadata)\n", - "else:\n", - " print(\"\\nNo additional metadata available\")" - ] - }, - { - "cell_type": "markdown", - "id": "7418c5e1", - "metadata": {}, - "source": [ - "### Complete Scenario Metadata Export\n", - "\n", - "The `model_dump()` method provides a complete export of all scenario metadata in a structured format. This includes all properties and their current values." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "972bd7c5", - "metadata": {}, - "outputs": [], - "source": [ - "# Export complete scenario metadata\n", - "# model_dump() returns a comprehensive dictionary containing all scenario metadata\n", - "\n", - "full_data = scenario.model_dump()\n", - "print(f\"Complete scenario metadata ({len(full_data)} fields):\")\n", - "print(\"\\n\" + \"-\"*70)\n", - "print(full_data)" - ] - }, - { - "cell_type": "markdown", - "id": "user_values_section", - "metadata": {}, - "source": [ - "### Exploring User-Modified Values\n", - "\n", - "The `user_values()` method returns a dictionary of all inputs that have been modified from their default values." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "user_values_example", - "metadata": {}, - "outputs": [], - "source": [ - "# Display all user-modified input values\n", - "# This shows only the inputs that have been changed from their default values\n", - "# The format is {input_key: user_value}\n", - "\n", - "user_values = scenario.user_values()\n", - "print(f\"Found {len(user_values)} user-modified inputs:\")\n", - "print(\"\\n\" + \"-\"*70)\n", - "print(user_values)" - ] - }, - { - "cell_type": "markdown", - "id": "input_analysis_section", - "metadata": {}, - "source": [ - "### Analyzing Input Properties\n", - "\n", - "Each input in a scenario has various properties that define its behavior:\n", - "- `key`: Unique identifier for the input\n", - "- `unit`: The unit of measurement (e.g., 'MW', '%', 'PJ')\n", - "- `disabled`: Whether the input is currently disabled\n", - "- `user`: The value set by the user (if any)\n", - "- `default`: The default value for this input\n", - "\n", - "Additional properties for specific input types:\n", - "- **Float inputs**: `min` and `max` values defining valid ranges\n", - "- **Enumerable inputs**: `permitted_values` showing available options" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "input_collection_overview", - "metadata": {}, - "outputs": [], - "source": [ - "# Overview of the input collection\n", - "# The inputs property provides access to all scenario inputs through an InputCollection\n", - "\n", - "print(f\"Input Collection Overview:\")\n", - "print(f\" Total inputs: {len(scenario.inputs)}\")\n", - "print(f\" Input collection type: {type(scenario.inputs)}\")\n", - "print(f\" User-modified inputs: {len([inp for inp in scenario.inputs if inp.user is not None])}\")\n", - "print(f\" Disabled inputs: {len([inp for inp in scenario.inputs if inp.disabled])}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6c4825ba", - "metadata": {}, - "outputs": [], - "source": [ - "# Analyze units used across all inputs\n", - "# This gives you an overview of what types of measurements are used in the scenario\n", - "\n", - "# Count inputs by unit type\n", - "unit_counts = {}\n", - "for input in scenario.inputs:\n", - " unit = input.unit or 'No unit'\n", - " unit_counts[unit] = unit_counts.get(unit, 0) + 1\n", - "\n", - "total_inputs = len(scenario.inputs)\n", - "print(f\"Found {len(unit_counts)} different units used across {total_inputs:,} inputs:\")\n", - "print(\"\\n\" + \"-\"*70)\n", - "\n", - "# Sort by count (most common first) and show percentages\n", - "sorted_units = sorted(unit_counts.items(), key=lambda x: x[1], reverse=True)\n", - "for unit, count in sorted_units:\n", - " percentage = (count / total_inputs) * 100\n", - " print(f\"{unit:15}: {count:4,} inputs ({percentage:5.1f}%)\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "38fd7d1c", - "metadata": {}, - "outputs": [], - "source": [ - "# Identify disabled inputs\n", - "# Disabled inputs are those that do not impact the scenario because of a coupling,\n", - "# or if you are not the owner/editor of the scenario\n", - "\n", - "disabled_inputs = [input.key for input in scenario.inputs if input.disabled]\n", - "print(f\"Found {len(disabled_inputs)} disabled inputs:\")\n", - "print(\"\\n\" + \"-\"*70)\n", - "print(disabled_inputs)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f44d29ef", - "metadata": {}, - "outputs": [], - "source": [ - "# Display default values for all inputs\n", - "# Default values represent the baseline scenario before user modifications\n", - "\n", - "default_values = { input.key: input.default for input in scenario.inputs }\n", - "print(f\"Default values for {len(default_values)} inputs:\")\n", - "print(\"\\n\" + \"-\"*70)\n", - "print(default_values)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d980ed9b", - "metadata": {}, - "outputs": [], - "source": [ - "# Explore Float input constraints\n", - "# Float inputs have minimum and maximum values that define valid ranges\n", - "# This information helps to understand input range-limitations and validation rules\n", - "\n", - "from pyetm.models.inputs import FloatInput\n", - "\n", - "float_inputs = [input for input in scenario.inputs if isinstance(input, FloatInput)]\n", - "print(f\"Found {len(float_inputs)} float inputs:\")\n", - "print(\"\\n\" + \"-\"*70)\n", - "\n", - "float_details = [input.model_dump() for input in float_inputs]\n", - "print(float_details)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "enumerable_inputs", - "metadata": {}, - "outputs": [], - "source": [ - "# Explore Enumerable input options\n", - "# Some inputs have a limited set of permitted values (like dropdown selections)\n", - "# This is useful for understanding available choices for categorical inputs\n", - "\n", - "from pyetm.models.inputs import EnumInput\n", - "\n", - "enum_inputs = [input for input in scenario.inputs if isinstance(input, EnumInput)]\n", - "print(f\"Found {len(enum_inputs)} enumerable inputs:\")\n", - "print(\"\\n\" + \"-\"*70)\n", - "\n", - "enum_details = [input.model_dump() for input in enum_inputs]\n", - "print(enum_details)" - ] - }, - { - "cell_type": "markdown", - "id": "curves_section", - "metadata": {}, - "source": [ - "### Working with Custom Curves\n", - "\n", - "Custom curves represent time-series data that can be attached to specific inputs. These are typically used for:\n", - "- Load profiles (electricity demand over time)\n", - "- Production profiles (renewable energy output patterns)\n", - "- Availability curves (when technologies are available)\n", - "- Price curves (energy prices over time)\n", - "\n", - "The curves contain hourly data points for an entire year (8760 hours)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "custom_curves_overview", - "metadata": {}, - "outputs": [], - "source": [ - "# Overview of custom curves collection\n", - "# Custom curves are hourly time-series data used to define dynamic behaviour across a year\n", - "\n", - "print(f\"Custom Curves Collection Overview:\")\n", - "print(f\" Collection type: {type(scenario.custom_curves)}\")\n", - "\n", - "# Show attached custom curves\n", - "attached_curves = list(scenario.custom_curves.attached_keys())\n", - "print(f\"\\nAttached custom curves ({len(attached_curves)}):\")\n", - "for i, curve_key in enumerate(attached_curves[:10]):\n", - " print(f\" {i+1}. {curve_key}\")\n", - "if len(attached_curves) > 10:\n", - " print(f\" ... and {len(attached_curves) - 10} more\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f18f67df", - "metadata": {}, - "outputs": [], - "source": [ - "# Example: Display data from a specific curve\n", - "# This shows how to access the actual time-series data from a custom curve\n", - "# The custom_curve_series() method returns the hourly values for the specified curve\n", - "# The curve is stored as a pandas Series\n", - "\n", - "curve_key = 'interconnector_1_import_availability'\n", - "if curve_key in scenario.custom_curves.attached_keys():\n", - " curve_data = scenario.custom_curve_series(curve_key)\n", - " print(f\"Curve data for '{curve_key}':\")\n", - " print(f\" Data points: {len(curve_data)}\")\n", - " print(f\" First 10 values: {curve_data.head(10).tolist()}\")\n", - " print(f\" Data type: {type(curve_data)}\")\n", - " print(f\" Min value: {curve_data.min()}\")\n", - " print(f\" Max value: {curve_data.max()}\")\n", - " print(f\" Mean value: {curve_data.mean():.4f}\")\n", - "else:\n", - " print(f\"Curve '{curve_key}' not found in this scenario.\")\n", - " print(\"Available curves:\", list(scenario.custom_curves.attached_keys()))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "all_custom_curves_analysis", - "metadata": {}, - "outputs": [], - "source": [ - "# Analyze all custom curves in the scenario\n", - "# This iterates through max 5 attached curves and provides summary statistics\n", - "\n", - "print(\"Analysis of all custom curves in the scenario:\")\n", - "print(\"\\n\" + \"-\"*70)\n", - "\n", - "curve_count = 0\n", - "for curve_series in scenario.custom_curves_series():\n", - " curve_count += 1\n", - " print(f\"\\nCurve {curve_count}:\")\n", - " print(f\" Length: {len(curve_series)}\")\n", - " print(f\" Min: {curve_series.min():.4f}\")\n", - " print(f\" Max: {curve_series.max():.4f}\")\n", - " print(f\" Mean: {curve_series.mean():.4f}\")\n", - " print(f\" Standard deviation: {curve_series.std():.4f}\")\n", - "\n", - " # Stop after first 5 to avoid overwhelming output\n", - " if curve_count >= 5:\n", - " total_curves = len(list(scenario.custom_curves.attached_keys()))\n", - " if total_curves > 5:\n", - " print(f\"\\n... {total_curves - 5} more curves\")\n", - " break\n", - "\n", - "if curve_count == 0:\n", - " print(\"No custom curves found in this scenario.\")" - ] - }, - { - "cell_type": "markdown", - "id": "output_curves_section", - "metadata": {}, - "source": [ - "### Working with Output Curves\n", - "\n", - "Output curves represent time-series data for energy carriers (electricity, heat, gas, etc.) within the energy system. \n", - "\n", - "Each output curve represents an export from your scenario, so they are actually sets of curves, stored as a dataframe where each column is a curve and the index is a time series for each hour." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "output_curves_overview", - "metadata": {}, - "outputs": [], - "source": [ - "# Overview of output curves collection\n", - "# Output curves represent energy flows and storage for different energy carriers\n", - "\n", - "print(f\"Output Curves Collection Overview:\")\n", - "print(f\" Collection type: {type(scenario.output_curves)}\")\n", - "\n", - "# Show first 10 available output curve types\n", - "attached_output_curves = list(scenario.output_curves.attached_keys())\n", - "print(f\"\\nAttached output curves ({len(attached_output_curves)}):\")\n", - "for i, curve_key in enumerate(attached_output_curves[:10]):\n", - " print(f\" {i+1}. {curve_key}\")\n", - "if len(attached_output_curves) > 10:\n", - " print(f\" ... {len(attached_output_curves) - 10} more\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "all_output_curves_analysis", - "metadata": {}, - "outputs": [], - "source": [ - "# Analyze all output curves in the scenario\n", - "# This provides a comprehensive overview of output curve behaviour and format\n", - "\n", - "print(\"Analysis of all output curves in the scenario:\")\n", - "print(\"\\n\" + \"-\"*70)\n", - "\n", - "curve_count = 0\n", - "attached_curve_keys = list(scenario.output_curves.attached_keys())\n", - "for curve_data in scenario.all_output_curves():\n", - " curve_name = attached_curve_keys[curve_count] if curve_count < len(attached_curve_keys) else f\"Unknown Curve {curve_count + 1}\"\n", - " curve_count += 1\n", - " print(f\"\\n{curve_name}:\")\n", - "\n", - " if curve_data is not None and not curve_data.empty:\n", - " print(f\" Shape (rows × columns): {curve_data.shape}\")\n", - " print(f\" Columns: {list(curve_data.columns)}\")\n", - "\n", - " # For DataFrames, show summary stats differently\n", - " numeric_cols = curve_data.select_dtypes(include=[float, int]).columns\n", - " if len(numeric_cols) > 0:\n", - " print(f\" Summary for numeric columns:\")\n", - " for col in numeric_cols[:3]: # Show first 3 columns to avoid clutter\n", - " col_data = curve_data[col]\n", - " print(f\" {col}:\")\n", - " print(f\" Min: {float(col_data.min()):.4f}\")\n", - " print(f\" Max: {float(col_data.max()):.4f}\")\n", - " print(f\" Mean: {float(col_data.mean()):.4f}\")\n", - " print(f\" Std: {float(col_data.std()):.4f}\")\n", - " if len(numeric_cols) > 3:\n", - " print(f\" ... and {len(numeric_cols) - 3} more columns\")\n", - " else:\n", - " print(f\" No numeric data available\")\n", - " else:\n", - " print(f\" No data available\")\n", - "\n", - " # Stop after first 5 to avoid overwhelming output\n", - " if curve_count >= 5:\n", - " total_curves = len(attached_curve_keys)\n", - " if total_curves > 5:\n", - " print(f\"\\n... and {total_curves - 5} more output curve exports\")\n", - " break\n", - "\n", - "if curve_count == 0:\n", - " print(\"No output curves found in this scenario.\")" - ] - }, - { - "cell_type": "markdown", - "id": "sortables_section", - "metadata": {}, - "source": [ - "### Exploring Sortables\n", - "\n", - "Sortables represent ordered lists of technologies or components within the energy system. They define priority orders for:\n", - "- Merit order\n", - "- Forecast order\n", - "- Heat network order\n", - "- Hydrogen supply/demand\n", - "\n", - "The order of items in sortables affects how the energy system model calculates results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "sortables_overview", - "metadata": {}, - "outputs": [], - "source": [ - "# Overview of sortables collection\n", - "# Sortables define ordering and priority for various energy system components\n", - "\n", - "print(f\"Sortables Overview:\")\n", - "print(f\" Data type: {type(scenario.sortables)}\")\n", - "\n", - "# Show all sortables\n", - "sortable_keys = list(scenario.sortables.as_dict().keys())\n", - "print(f\"\\nSortables ({len(sortable_keys)}):\")\n", - "for i, sortable_key in enumerate(sortable_keys):\n", - " print(f\" {i+1}. {sortable_key}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4c90688f", - "metadata": {}, - "outputs": [], - "source": [ - "# Display sortable configurations\n", - "# Sortables define the order/priority of different technologies in the energy system\n", - "# For example, merit order determines which power plants are dispatched first\n", - "# The order directly affects energy system calculations and results\n", - "\n", - "sortables_data = scenario.sortables.as_dict()\n", - "print(f\"Found {len(sortables_data)} sortable orders:\")\n", - "print(\"\\n\" + \"-\"*70)\n", - "print(sortables_data)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "sortables_detailed_analysis", - "metadata": {}, - "outputs": [], - "source": [ - "# Analysis of each sortable category\n", - "# This examines the structure and content of each sortable configuration\n", - "\n", - "sortables_data = scenario.sortables.as_dict()\n", - "print(\"Detailed analysis of sortables:\")\n", - "print(\"\\n\" + \"-\"*70)\n", - "\n", - "for category, sortables in sortables_data.items():\n", - " print(f\"\\n{category.upper()}:\")\n", - "\n", - " if sortables:\n", - " print(f\" Number of items: {len(sortables)}\")\n", - " print(f\" Sortables:\")\n", - " for i, order in enumerate(sortables):\n", - " print(f\" {i+1}. {order}\")" - ] - }, - { - "cell_type": "markdown", - "id": "f1f53bd1", - "metadata": {}, - "source": [ - "### Working with Gqueries\n", - "\n", - "Gqueries allow you to extract specific calculated values from the ETM.\n", - "\n", - "You can request multiple queries and execute them together for efficiency." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6942e344", - "metadata": {}, - "outputs": [], - "source": [ - "scenario.add_queries([\n", - " \"dashboard_emissions\",\n", - " \"dashboard_total_costs\",\n", - " \"dashboard_renewability\"\n", - "])\n", - "\n", - "print(f\"Added {len(scenario._queries.query_keys())} queries:\")\n", - "for i, query in enumerate(scenario._queries.query_keys(), 1):\n", - " print(f\" {i}. {query}\")\n", - "\n", - "print(f\"\\nQueries ready: {scenario._queries.is_ready()}\")\n", - "\n", - "print(\"Gqueries Overview:\")\n", - "print(f\" Queries requested: {scenario.queries_requested()}\")\n", - "\n", - "if scenario.queries_requested():\n", - " print(f\" Query keys: {scenario._queries.query_keys()}\")\n", - " print(f\" Queries ready: {scenario._queries.is_ready()}\")\n", - "\n", - " # Get results if available\n", - " results = scenario.results()\n", - " if results is not None and not results.empty:\n", - " print(f\"\\nQuery Results:\")\n", - " print(f\" Results shape: {results.shape}\")\n", - " print(f\" Columns: {list(results.columns)}\")\n", - " print(f\" \")\n", - " print(results.head())\n", - " else:\n", - " print(\"\\nNo query results available\")" - ] - }, - { - "cell_type": "markdown", - "id": "warnings_errors_section", - "metadata": {}, - "source": [ - "### Handling Warnings and Errors\n", - "\n", - "The scenario object can accumulate warnings during data fetching and processing. These warnings provide important information about non-breaking issues with data quality, your API configuration, or service-level issues." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "warnings_analysis", - "metadata": {}, - "outputs": [], - "source": [ - "# Check for warnings and errors in the scenario\n", - "# Warnings can accumulate from API calls, data validation, or processing issues\n", - "\n", - "# Check if the scenario object has any warnings\n", - "if hasattr(scenario, 'warnings') and scenario.warnings:\n", - " print(f\" Total warnings: {len(scenario.warnings)}\")\n", - " print(\"\\nWarnings:\")\n", - " for i, warning in enumerate(scenario.warnings, 1):\n", - " print(f\" {i}. {warning}\")\n", - "else:\n", - " print(f\" No warnings found\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "pyetm-qKH2ozgc", - "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.12.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/multi_scenario.ipynb b/examples/create_or_query_scenarios.ipynb similarity index 98% rename from examples/multi_scenario.ipynb rename to examples/create_or_query_scenarios.ipynb index 81b522d..a661cee 100644 --- a/examples/multi_scenario.ipynb +++ b/examples/create_or_query_scenarios.ipynb @@ -43,7 +43,8 @@ "source": [ "from pyetm.models.scenarios import Scenarios\n", "\n", - "scenarios = Scenarios.from_excel(\"example_input_excel.xlsx\")" + "scenarios = Scenarios.from_excel(\"example_input_excel.xlsx\")\n", + "#scenario_a = Scenario.load(123456789) #TODO: Also load a scenario" ] }, { diff --git a/examples/example.config.yml b/examples/example.config.yml index 75d6259..23a9221 100644 --- a/examples/example.config.yml +++ b/examples/example.config.yml @@ -10,13 +10,19 @@ # etm_api_token: your.token.here +# Select the environment; base_url will be inferred automatically if set. +# Supported: pro (default), beta, local, or a stable tag like 2025-01 +environment: pro + + # Override the API base URL - here you can set which environment of the ETM you want to interact with. # Options include the default (pro), https://2025-01.engine.energytransitionmodel.com/api/v3 (a stable version) or # https://beta.engine.energytransitionmodel.com/api/v3 (the staging environment), or http://localhost:3000/api/v3 # (your local environment). # For more information, see: https://docs.energytransitionmodel.com/api/intro#environments # -BASE_URL: https://engine.energytransitionmodel.com/api/v3 +# Optional override: specify base_url directly instead of using 'environment'. E.g. +# base_url: https://engine.energytransitionmodel.com/api/v3 #TODO: Setup so the below is actually used # URLs of your proxy server addresses (replace the examples below by your own settings) diff --git a/examples/exploring_a_scenario.ipynb b/examples/exploring_a_scenario.ipynb deleted file mode 100644 index 5fd681c..0000000 --- a/examples/exploring_a_scenario.ipynb +++ /dev/null @@ -1,211 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "ddbe7ab2", - "metadata": {}, - "source": [ - "# Scenario Examples\n", - "\n", - "This notebook demonstrates how to use the `Scenario` object within the pyetm package to retrieve and \n", - "inspect data from an ETM scenario.\n", - "\n", - "Make sure you have a valid `ETM_API_TOKEN` set in your environment.\n", - "\n", - "## Structure\n", - "\n", - "This notebook is organized into two main sections:\n", - "1. **Setup** - Run these cells first to set up your environment and load a scenario\n", - "2. **Examples** - After setup is complete, these cells can be run in any order to explore different aspects of scenario data\n", - "\n", - "## Setup:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "59514b1f", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Environment setup complete\n", - " Using ETM API at http://localhost:3000/api/v3\n", - " Token loaded? True\n", - "API connection ready\n" - ] - }, - { - "ename": "ScenarioError", - "evalue": "Could not load scenario 2690288: [\"HTTPConnectionPool(host='localhost', port=3000): Max retries exceeded with url: /api/v3/scenarios/2690288 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 61] Connection refused'))\"]", - "output_type": "error", - "traceback": [ - "\u001b[31mScenarioError\u001b[39m\u001b[31m:\u001b[39m Could not load scenario 2690288: [\"HTTPConnectionPool(host='localhost', port=3000): Max retries exceeded with url: /api/v3/scenarios/2690288 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 61] Connection refused'))\"]\n" - ] - } - ], - "source": [ - "from example_helpers import setup_notebook\n", - "from pyetm.models import Scenario\n", - "\n", - "setup_notebook()\n", - "\n", - "# Change the scenario id to anything you want! This is a scenario on pro.\n", - "scenario = Scenario.load(2690555)" - ] - }, - { - "cell_type": "markdown", - "id": "4056266c", - "metadata": {}, - "source": [ - "## Examples\n", - "\n", - "Basic scenario info:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "aca02e6c", - "metadata": {}, - "outputs": [], - "source": [ - "print(f\"Area: {scenario.area_code}\")\n", - "print(f\"End year: {scenario.end_year}\")\n", - "print(f\"Version: {scenario.version}\")" - ] - }, - { - "cell_type": "markdown", - "id": "b3026722", - "metadata": {}, - "source": [ - "User inputs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7b529ffa", - "metadata": {}, - "outputs": [], - "source": [ - "user_vals = scenario.user_values()\n", - "print(f\"Modified inputs: {len(user_vals)}\")\n", - "print(f\"First input: {list(user_vals.keys())[0]} = {list(user_vals.values())[0]}\")" - ] - }, - { - "cell_type": "markdown", - "id": "625977af", - "metadata": {}, - "source": [ - "Example Input" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f9c453cf", - "metadata": {}, - "outputs": [], - "source": [ - "first_input = next(iter(scenario.inputs))\n", - "print(f\"Key: {first_input.key}\")\n", - "print(f\"Unit: {first_input.unit}\")\n", - "print(f\"Default: {first_input.default}\")" - ] - }, - { - "cell_type": "markdown", - "id": "50ef3d36", - "metadata": {}, - "source": [ - "Output curve (an export from the scenario)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4289f9c4", - "metadata": {}, - "outputs": [], - "source": [ - "carrier_keys = list(scenario.output_curves.attached_keys())\n", - "if carrier_keys:\n", - " first_carrier = carrier_keys[0]\n", - " carrier_data = list(scenario.all_output_curves())[0]\n", - " print(f\"Carrier curve: {first_carrier}\")\n", - " print(f\"Shape: {carrier_data.shape}\")" - ] - }, - { - "cell_type": "markdown", - "id": "af75d6e6", - "metadata": {}, - "source": [ - "Sortables" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "411ce7e1", - "metadata": {}, - "outputs": [], - "source": [ - "sortables = scenario.sortables.as_dict()\n", - "if sortables:\n", - " first_sortable = list(sortables.keys())[0]\n", - " print(f\"Sortable: {first_sortable}\")\n", - " print(f\"Items: {len(sortables[first_sortable])}\")" - ] - }, - { - "cell_type": "markdown", - "id": "73192cdf", - "metadata": {}, - "source": [ - "Gqueries" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1dbe4e91", - "metadata": {}, - "outputs": [], - "source": [ - "scenario.add_queries([\"dashboard_emissions\"])\n", - "results = scenario.results()\n", - "if results is not None:\n", - " print(f\"Query present result: {results['present'].iloc[0]:.2f}\")\n", - " print(f\"Query future result: {results['future'].iloc[0]:.2f}\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "pyetm-qKH2ozgc", - "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.12.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/old_examples/create_and_update_a_scenario.ipynb b/examples/old_examples/create_and_update_a_scenario.ipynb deleted file mode 100644 index 0fa51bd..0000000 --- a/examples/old_examples/create_and_update_a_scenario.ipynb +++ /dev/null @@ -1,181 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "d9bff682", - "metadata": {}, - "source": [ - "Creating / Updating a scenario flow:\n", - "\n", - "#TODO: Expand descriptions etc, this is just to show the funnctionality" - ] - }, - { - "cell_type": "markdown", - "id": "21347fc1", - "metadata": {}, - "source": [ - "# SETUP" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3ada4b30", - "metadata": {}, - "outputs": [], - "source": [ - "from example_helpers import setup_notebook\n", - "from pyetm.models import Scenario\n", - "\n", - "setup_notebook()" - ] - }, - { - "cell_type": "markdown", - "id": "84571cab", - "metadata": {}, - "source": [ - "Create a new scenario:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4770e6a9", - "metadata": {}, - "outputs": [], - "source": [ - "# scenario = Scenario.new(\"nl\", 2050, True)\n", - "\n", - "scenario = Scenario.new(\n", - " area_code=\"nl2019\",\n", - " end_year=2050,\n", - " private=False,\n", - " keep_compatible=False,\n", - " source=\"pyetm\")" - ] - }, - { - "cell_type": "markdown", - "id": "07461117", - "metadata": {}, - "source": [ - "Update inputs for a scenario:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5a1549ac", - "metadata": {}, - "outputs": [], - "source": [ - "scenario.update_user_values({\n", - " \"co_firing_biocoal_share\": 80.0,\n", - " \"external_coupling_industry_chemical_other_burner_crude_oil_share\": \"hello\"\n", - "})\n" - ] - }, - { - "cell_type": "markdown", - "id": "af9d11bd", - "metadata": {}, - "source": [ - "View the changes (so you know it happened):" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7fc4dc21", - "metadata": {}, - "outputs": [], - "source": [ - "print(f\"Area: {scenario.area_code}\")\n", - "print(f\"End year: {scenario.end_year}\")\n", - "print(f\"Start year: {scenario.start_year}\")\n", - "print(f\"Version: {scenario.version}\")\n", - "user_vals = scenario.user_values()\n", - "print(f\"Modified inputs: {len(user_vals)}\")\n", - "print(f\"First input: {list(user_vals.keys())[0]} = {list(user_vals.values())[0]}\")\n", - "print(f\"Second input: {list(user_vals.keys())[1]} = {list(user_vals.values())[1]}\")" - ] - }, - { - "cell_type": "markdown", - "id": "4dba3824", - "metadata": {}, - "source": [ - "Update the metadata for the scenario:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c6a65f6a", - "metadata": {}, - "outputs": [], - "source": [ - "scenario.update_metadata(\n", - " private= True,\n", - " keep_compatible= True,\n", - " source= \"test_change_source\",\n", - " end_year= 2040\n", - ")\n", - "\n", - "# You can also update the metadata attribute\n", - "scenario.update_metadata(\n", - " metadata= {\n", - " \"title\": \"Test scenario!\",\n", - " \"description\": \"Updated scenario description\",\n", - " \"author\": \"Ernie\"\n", - " }\n", - "})\n", - "\n", - "print(scenario.private)" - ] - }, - { - "cell_type": "markdown", - "id": "3cd56ce2", - "metadata": {}, - "source": [ - "You can also remove inputs, which means the default value is then used." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "98ab2f5c", - "metadata": {}, - "outputs": [], - "source": [ - "scenario.remove_user_values([\"co_firing_biocoal_share\"])\n", - "user_vals = scenario.user_values()\n", - "print(f\"Modified inputs: {len(user_vals)}\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "pyetm-qKH2ozgc", - "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.12.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/old_examples/excel_to_scenarios.ipynb b/examples/old_examples/excel_to_scenarios.ipynb deleted file mode 100644 index c3c709b..0000000 --- a/examples/old_examples/excel_to_scenarios.ipynb +++ /dev/null @@ -1,1470 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "70d54062", - "metadata": {}, - "source": [ - "This notebook is for demonstrating and testing the excel to scenarios flow.\n", - "\n", - "Currently can only handle metadata and inputs." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4866f9d1", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Environment setup complete\n", - " Using ETM API at http://localhost:3000/api/v3\n", - " Token loaded? True\n", - "API connection ready\n" - ] - }, - { - "data": { - "text/plain": [ - "{'total_scenarios': 2,\n", - " 'inputs': {'scenario_count': 2},\n", - " 'sortables': {'scenario_count': 2},\n", - " 'custom_curves': {'scenario_count': 2},\n", - " 'output_curves': {'scenario_count': 2},\n", - " 'scenario_ids': [2690555, 2690658]}" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from example_helpers import setup_notebook\n", - "from pyetm.models.scenario_packer import ScenarioPacker\n", - "\n", - "setup_notebook()\n", - "packer = ScenarioPacker.from_excel(\"example_input_excel.xlsx\")\n", - "packer.get_summary()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "8205cd53", - "metadata": {}, - "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", - "
scen_bscen_a
input
agriculture_bio_kerosene_in_crude_oil_share0.0NaN
agriculture_biodiesel_in_crude_oil_share0.0NaN
agriculture_burner_crude_oil_share0.0NaN
agriculture_burner_hydrogen_share0.0NaN
agriculture_burner_network_gas_share0.0NaN
.........
wtp_of_industry_chemicals_other_flexibility_p2h_electricity25.0NaN
wtp_of_industry_chemicals_refineries_flexibility_p2h_electricity25.0NaN
wtp_of_industry_other_food_flexibility_p2h_electricity25.0NaN
wtp_of_industry_other_paper_flexibility_p2h_electricity25.0NaN
wtp_of_transport_car_flexibility_p2p_electricity5.0NaN
\n", - "

1318 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " scen_b scen_a\n", - "input \n", - "agriculture_bio_kerosene_in_crude_oil_share 0.0 NaN\n", - "agriculture_biodiesel_in_crude_oil_share 0.0 NaN\n", - "agriculture_burner_crude_oil_share 0.0 NaN\n", - "agriculture_burner_hydrogen_share 0.0 NaN\n", - "agriculture_burner_network_gas_share 0.0 NaN\n", - "... ... ...\n", - "wtp_of_industry_chemicals_other_flexibility_p2h... 25.0 NaN\n", - "wtp_of_industry_chemicals_refineries_flexibilit... 25.0 NaN\n", - "wtp_of_industry_other_food_flexibility_p2h_elec... 25.0 NaN\n", - "wtp_of_industry_other_paper_flexibility_p2h_ele... 25.0 NaN\n", - "wtp_of_transport_car_flexibility_p2p_electricity 5.0 NaN\n", - "\n", - "[1318 rows x 2 columns]" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "packer.inputs()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "cd08ff26", - "metadata": {}, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
B: Load a scenario by id2690658
forecast_storagehydrogen_supplyhydrogen_demandspace_heatingheat_network_ltheat_network_mtheat_network_htforecast_storagehydrogen_supplyhydrogen_demandspace_heatingheat_network_ltheat_network_mtheat_network_ht
sortables
0energy_flexibility_pumped_storage_electricityenergy_hydrogen_storage_depleted_gas_fieldenergy_hydrogen_storage_depleted_gas_fieldhouseholds_space_heater_district_heating_lt_st...energy_heat_network_storage_lt_steam_hot_waterenergy_heat_network_storage_mt_steam_hot_waterenergy_heat_network_storage_ht_steam_hot_waterhouseholds_flexibility_p2p_electricityenergy_hydrogen_storage_depleted_gas_fieldenergy_hydrogen_storage_depleted_gas_fieldhouseholds_space_heater_district_heating_lt_st...energy_heat_network_storage_lt_steam_hot_waterenergy_heat_network_storage_mt_steam_hot_waterenergy_heat_network_storage_ht_steam_hot_water
1transport_van_flexibility_p2p_electricityenergy_hydrogen_storage_salt_cavernenergy_hydrogen_storage_salt_cavernhouseholds_space_heater_heatpump_surface_water...energy_heat_boiler_lt_electricityenergy_heat_boiler_mt_electricityenergy_heat_boiler_ht_electricityenergy_flexibility_mv_batteries_electricityenergy_hydrogen_storage_salt_cavernenergy_hydrogen_storage_salt_cavernhouseholds_space_heater_heatpump_surface_water...energy_heat_boiler_lt_electricityenergy_heat_boiler_mt_electricityenergy_heat_boiler_ht_electricity
2transport_truck_flexibility_p2p_electricityenergy_hydrogen_autothermal_reformer_dispatchableNonehouseholds_space_heater_heatpump_air_water_ele...energy_heat_burner_lt_hydrogenenergy_heat_burner_mt_coalenergy_heat_burner_ht_coaltransport_car_flexibility_p2p_electricityenergy_hydrogen_autothermal_reformer_dispatchableNonehouseholds_space_heater_heatpump_air_water_ele...energy_heat_burner_lt_hydrogenenergy_heat_burner_mt_coalenergy_heat_burner_ht_coal
3transport_bus_flexibility_p2p_electricityenergy_hydrogen_steam_methane_reformer_dispatc...Nonehouseholds_space_heater_heatpump_ground_water_...energy_heat_heatpump_water_water_lt_electricityenergy_heat_burner_mt_crude_oilenergy_heat_burner_ht_crude_oilenergy_flexibility_flow_batteries_electricityenergy_hydrogen_steam_methane_reformer_dispatc...Nonehouseholds_space_heater_heatpump_ground_water_...energy_heat_heatpump_water_water_lt_electricityenergy_heat_burner_mt_crude_oilenergy_heat_burner_ht_crude_oil
4energy_flexibility_hv_opac_electricityenergy_hydrogen_ammonia_reformer_dispatchableNonehouseholds_space_heater_heatpump_pvt_electricityenergy_heat_heatpump_surface_water_water_ts_lt...energy_heat_burner_mt_hydrogenenergy_heat_burner_ht_hydrogenenergy_flexibility_hv_opac_electricityenergy_hydrogen_ammonia_reformer_dispatchableNonehouseholds_space_heater_heatpump_pvt_electricityenergy_heat_heatpump_surface_water_water_ts_lt...energy_heat_burner_mt_hydrogenenergy_heat_burner_ht_hydrogen
5energy_flexibility_flow_batteries_electricityNoneNonehouseholds_space_heater_district_heating_mt_st...energy_heat_heatpump_waste_water_water_ts_lt_e...energy_heat_burner_mt_network_gasenergy_heat_burner_ht_network_gastransport_bus_flexibility_p2p_electricityNoneNonehouseholds_space_heater_district_heating_mt_st...energy_heat_heatpump_waste_water_water_ts_lt_e...energy_heat_burner_mt_network_gasenergy_heat_burner_ht_network_gas
6transport_car_flexibility_p2p_electricityNoneNonehouseholds_space_heater_hybrid_heatpump_air_wa...energy_heat_heatpump_drink_water_water_ts_lt_e...energy_heat_burner_mt_waste_mixenergy_heat_burner_ht_waste_mixtransport_truck_flexibility_p2p_electricityNoneNonehouseholds_space_heater_hybrid_heatpump_air_wa...energy_heat_heatpump_drink_water_water_ts_lt_e...energy_heat_burner_mt_waste_mixenergy_heat_burner_ht_waste_mix
7energy_flexibility_mv_batteries_electricityNoneNonehouseholds_space_heater_hybrid_hydrogen_heatpu...Noneenergy_heat_burner_mt_wood_pelletsenergy_heat_burner_ht_wood_pelletstransport_van_flexibility_p2p_electricityNoneNonehouseholds_space_heater_hybrid_hydrogen_heatpu...Noneenergy_heat_burner_mt_wood_pelletsenergy_heat_burner_ht_wood_pellets
8households_flexibility_p2p_electricityNoneNonehouseholds_space_heater_hybrid_crude_oil_heatp...Noneenergy_heat_heatpump_water_water_mt_electricityenergy_heat_heatpump_water_water_ht_electricityenergy_flexibility_pumped_storage_electricityNoneNonehouseholds_space_heater_hybrid_crude_oil_heatp...Noneenergy_heat_heatpump_water_water_mt_electricityenergy_heat_heatpump_water_water_ht_electricity
9NoneNoneNonehouseholds_space_heater_district_heating_ht_st...Noneenergy_heat_heatpump_surface_water_water_ts_mt...NoneNoneNoneNonehouseholds_space_heater_district_heating_ht_st...Noneenergy_heat_heatpump_surface_water_water_ts_mt...None
10NoneNoneNonehouseholds_space_heater_electricityNoneenergy_heat_heatpump_waste_water_water_ts_mt_e...NoneNoneNoneNonehouseholds_space_heater_electricityNoneenergy_heat_heatpump_waste_water_water_ts_mt_e...None
11NoneNoneNonehouseholds_space_heater_combined_network_gasNoneenergy_heat_heatpump_drink_water_water_ts_mt_e...NoneNoneNoneNonehouseholds_space_heater_combined_network_gasNoneenergy_heat_heatpump_drink_water_water_ts_mt_e...None
12NoneNoneNonehouseholds_space_heater_combined_hydrogenNoneNoneNoneNoneNoneNonehouseholds_space_heater_combined_hydrogenNoneNoneNone
13NoneNoneNonehouseholds_space_heater_wood_pelletsNoneNoneNoneNoneNoneNonehouseholds_space_heater_wood_pelletsNoneNoneNone
14NoneNoneNonehouseholds_space_heater_network_gasNoneNoneNoneNoneNoneNonehouseholds_space_heater_network_gasNoneNoneNone
15NoneNoneNonehouseholds_space_heater_coalNoneNoneNoneNoneNoneNonehouseholds_space_heater_coalNoneNoneNone
16NoneNoneNonehouseholds_space_heater_crude_oilNoneNoneNoneNoneNoneNonehouseholds_space_heater_crude_oilNoneNoneNone
\n", - "
" - ], - "text/plain": [ - " B: Load a scenario by id \\\n", - " forecast_storage \n", - "sortables \n", - "0 energy_flexibility_pumped_storage_electricity \n", - "1 transport_van_flexibility_p2p_electricity \n", - "2 transport_truck_flexibility_p2p_electricity \n", - "3 transport_bus_flexibility_p2p_electricity \n", - "4 energy_flexibility_hv_opac_electricity \n", - "5 energy_flexibility_flow_batteries_electricity \n", - "6 transport_car_flexibility_p2p_electricity \n", - "7 energy_flexibility_mv_batteries_electricity \n", - "8 households_flexibility_p2p_electricity \n", - "9 None \n", - "10 None \n", - "11 None \n", - "12 None \n", - "13 None \n", - "14 None \n", - "15 None \n", - "16 None \n", - "\n", - " \\\n", - " hydrogen_supply \n", - "sortables \n", - "0 energy_hydrogen_storage_depleted_gas_field \n", - "1 energy_hydrogen_storage_salt_cavern \n", - "2 energy_hydrogen_autothermal_reformer_dispatchable \n", - "3 energy_hydrogen_steam_methane_reformer_dispatc... \n", - "4 energy_hydrogen_ammonia_reformer_dispatchable \n", - "5 None \n", - "6 None \n", - "7 None \n", - "8 None \n", - "9 None \n", - "10 None \n", - "11 None \n", - "12 None \n", - "13 None \n", - "14 None \n", - "15 None \n", - "16 None \n", - "\n", - " \\\n", - " hydrogen_demand \n", - "sortables \n", - "0 energy_hydrogen_storage_depleted_gas_field \n", - "1 energy_hydrogen_storage_salt_cavern \n", - "2 None \n", - "3 None \n", - "4 None \n", - "5 None \n", - "6 None \n", - "7 None \n", - "8 None \n", - "9 None \n", - "10 None \n", - "11 None \n", - "12 None \n", - "13 None \n", - "14 None \n", - "15 None \n", - "16 None \n", - "\n", - " \\\n", - " space_heating \n", - "sortables \n", - "0 households_space_heater_district_heating_lt_st... \n", - "1 households_space_heater_heatpump_surface_water... \n", - "2 households_space_heater_heatpump_air_water_ele... \n", - "3 households_space_heater_heatpump_ground_water_... \n", - "4 households_space_heater_heatpump_pvt_electricity \n", - "5 households_space_heater_district_heating_mt_st... \n", - "6 households_space_heater_hybrid_heatpump_air_wa... \n", - "7 households_space_heater_hybrid_hydrogen_heatpu... \n", - "8 households_space_heater_hybrid_crude_oil_heatp... \n", - "9 households_space_heater_district_heating_ht_st... \n", - "10 households_space_heater_electricity \n", - "11 households_space_heater_combined_network_gas \n", - "12 households_space_heater_combined_hydrogen \n", - "13 households_space_heater_wood_pellets \n", - "14 households_space_heater_network_gas \n", - "15 households_space_heater_coal \n", - "16 households_space_heater_crude_oil \n", - "\n", - " \\\n", - " heat_network_lt \n", - "sortables \n", - "0 energy_heat_network_storage_lt_steam_hot_water \n", - "1 energy_heat_boiler_lt_electricity \n", - "2 energy_heat_burner_lt_hydrogen \n", - "3 energy_heat_heatpump_water_water_lt_electricity \n", - "4 energy_heat_heatpump_surface_water_water_ts_lt... \n", - "5 energy_heat_heatpump_waste_water_water_ts_lt_e... \n", - "6 energy_heat_heatpump_drink_water_water_ts_lt_e... \n", - "7 None \n", - "8 None \n", - "9 None \n", - "10 None \n", - "11 None \n", - "12 None \n", - "13 None \n", - "14 None \n", - "15 None \n", - "16 None \n", - "\n", - " \\\n", - " heat_network_mt \n", - "sortables \n", - "0 energy_heat_network_storage_mt_steam_hot_water \n", - "1 energy_heat_boiler_mt_electricity \n", - "2 energy_heat_burner_mt_coal \n", - "3 energy_heat_burner_mt_crude_oil \n", - "4 energy_heat_burner_mt_hydrogen \n", - "5 energy_heat_burner_mt_network_gas \n", - "6 energy_heat_burner_mt_waste_mix \n", - "7 energy_heat_burner_mt_wood_pellets \n", - "8 energy_heat_heatpump_water_water_mt_electricity \n", - "9 energy_heat_heatpump_surface_water_water_ts_mt... \n", - "10 energy_heat_heatpump_waste_water_water_ts_mt_e... \n", - "11 energy_heat_heatpump_drink_water_water_ts_mt_e... \n", - "12 None \n", - "13 None \n", - "14 None \n", - "15 None \n", - "16 None \n", - "\n", - " \\\n", - " heat_network_ht \n", - "sortables \n", - "0 energy_heat_network_storage_ht_steam_hot_water \n", - "1 energy_heat_boiler_ht_electricity \n", - "2 energy_heat_burner_ht_coal \n", - "3 energy_heat_burner_ht_crude_oil \n", - "4 energy_heat_burner_ht_hydrogen \n", - "5 energy_heat_burner_ht_network_gas \n", - "6 energy_heat_burner_ht_waste_mix \n", - "7 energy_heat_burner_ht_wood_pellets \n", - "8 energy_heat_heatpump_water_water_ht_electricity \n", - "9 None \n", - "10 None \n", - "11 None \n", - "12 None \n", - "13 None \n", - "14 None \n", - "15 None \n", - "16 None \n", - "\n", - " 2690658 \\\n", - " forecast_storage \n", - "sortables \n", - "0 households_flexibility_p2p_electricity \n", - "1 energy_flexibility_mv_batteries_electricity \n", - "2 transport_car_flexibility_p2p_electricity \n", - "3 energy_flexibility_flow_batteries_electricity \n", - "4 energy_flexibility_hv_opac_electricity \n", - "5 transport_bus_flexibility_p2p_electricity \n", - "6 transport_truck_flexibility_p2p_electricity \n", - "7 transport_van_flexibility_p2p_electricity \n", - "8 energy_flexibility_pumped_storage_electricity \n", - "9 None \n", - "10 None \n", - "11 None \n", - "12 None \n", - "13 None \n", - "14 None \n", - "15 None \n", - "16 None \n", - "\n", - " \\\n", - " hydrogen_supply \n", - "sortables \n", - "0 energy_hydrogen_storage_depleted_gas_field \n", - "1 energy_hydrogen_storage_salt_cavern \n", - "2 energy_hydrogen_autothermal_reformer_dispatchable \n", - "3 energy_hydrogen_steam_methane_reformer_dispatc... \n", - "4 energy_hydrogen_ammonia_reformer_dispatchable \n", - "5 None \n", - "6 None \n", - "7 None \n", - "8 None \n", - "9 None \n", - "10 None \n", - "11 None \n", - "12 None \n", - "13 None \n", - "14 None \n", - "15 None \n", - "16 None \n", - "\n", - " \\\n", - " hydrogen_demand \n", - "sortables \n", - "0 energy_hydrogen_storage_depleted_gas_field \n", - "1 energy_hydrogen_storage_salt_cavern \n", - "2 None \n", - "3 None \n", - "4 None \n", - "5 None \n", - "6 None \n", - "7 None \n", - "8 None \n", - "9 None \n", - "10 None \n", - "11 None \n", - "12 None \n", - "13 None \n", - "14 None \n", - "15 None \n", - "16 None \n", - "\n", - " \\\n", - " space_heating \n", - "sortables \n", - "0 households_space_heater_district_heating_lt_st... \n", - "1 households_space_heater_heatpump_surface_water... \n", - "2 households_space_heater_heatpump_air_water_ele... \n", - "3 households_space_heater_heatpump_ground_water_... \n", - "4 households_space_heater_heatpump_pvt_electricity \n", - "5 households_space_heater_district_heating_mt_st... \n", - "6 households_space_heater_hybrid_heatpump_air_wa... \n", - "7 households_space_heater_hybrid_hydrogen_heatpu... \n", - "8 households_space_heater_hybrid_crude_oil_heatp... \n", - "9 households_space_heater_district_heating_ht_st... \n", - "10 households_space_heater_electricity \n", - "11 households_space_heater_combined_network_gas \n", - "12 households_space_heater_combined_hydrogen \n", - "13 households_space_heater_wood_pellets \n", - "14 households_space_heater_network_gas \n", - "15 households_space_heater_coal \n", - "16 households_space_heater_crude_oil \n", - "\n", - " \\\n", - " heat_network_lt \n", - "sortables \n", - "0 energy_heat_network_storage_lt_steam_hot_water \n", - "1 energy_heat_boiler_lt_electricity \n", - "2 energy_heat_burner_lt_hydrogen \n", - "3 energy_heat_heatpump_water_water_lt_electricity \n", - "4 energy_heat_heatpump_surface_water_water_ts_lt... \n", - "5 energy_heat_heatpump_waste_water_water_ts_lt_e... \n", - "6 energy_heat_heatpump_drink_water_water_ts_lt_e... \n", - "7 None \n", - "8 None \n", - "9 None \n", - "10 None \n", - "11 None \n", - "12 None \n", - "13 None \n", - "14 None \n", - "15 None \n", - "16 None \n", - "\n", - " \\\n", - " heat_network_mt \n", - "sortables \n", - "0 energy_heat_network_storage_mt_steam_hot_water \n", - "1 energy_heat_boiler_mt_electricity \n", - "2 energy_heat_burner_mt_coal \n", - "3 energy_heat_burner_mt_crude_oil \n", - "4 energy_heat_burner_mt_hydrogen \n", - "5 energy_heat_burner_mt_network_gas \n", - "6 energy_heat_burner_mt_waste_mix \n", - "7 energy_heat_burner_mt_wood_pellets \n", - "8 energy_heat_heatpump_water_water_mt_electricity \n", - "9 energy_heat_heatpump_surface_water_water_ts_mt... \n", - "10 energy_heat_heatpump_waste_water_water_ts_mt_e... \n", - "11 energy_heat_heatpump_drink_water_water_ts_mt_e... \n", - "12 None \n", - "13 None \n", - "14 None \n", - "15 None \n", - "16 None \n", - "\n", - " \n", - " heat_network_ht \n", - "sortables \n", - "0 energy_heat_network_storage_ht_steam_hot_water \n", - "1 energy_heat_boiler_ht_electricity \n", - "2 energy_heat_burner_ht_coal \n", - "3 energy_heat_burner_ht_crude_oil \n", - "4 energy_heat_burner_ht_hydrogen \n", - "5 energy_heat_burner_ht_network_gas \n", - "6 energy_heat_burner_ht_waste_mix \n", - "7 energy_heat_burner_ht_wood_pellets \n", - "8 energy_heat_heatpump_water_water_ht_electricity \n", - "9 None \n", - "10 None \n", - "11 None \n", - "12 None \n", - "13 None \n", - "14 None \n", - "15 None \n", - "16 None " - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "packer.sortables()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "0d3e771e", - "metadata": {}, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
B: Load a scenario by id2690658
interconnector_1_priceinterconnector_1_import_availabilityinterconnector_1_export_availabilityinterconnector_2_priceinterconnector_2_import_availabilityinterconnector_2_export_availabilityinterconnector_3_priceinterconnector_3_import_availabilityinterconnector_3_export_availabilityinterconnector_4_price...weather/wind_offshore_baselineweather/wind_coastal_baselineweather/wind_inland_baselineinterconnector_1_priceinterconnector_1_import_availabilityinterconnector_1_export_availabilityinterconnector_2_priceinterconnector_2_import_availabilityinterconnector_2_export_availabilityinterconnector_3_price
09.09.09.09.09.09.09.09.09.09.0...9.09.09.00.011.00.026.001.01.00.01
19.09.09.09.09.09.09.09.09.09.0...9.09.09.00.011.00.026.001.01.00.00
29.09.09.09.09.09.09.09.09.09.0...9.09.09.00.011.00.014.481.01.00.00
39.09.09.09.09.09.09.09.09.09.0...9.09.09.00.011.00.00.011.00.00.00
49.09.09.09.09.09.09.09.09.09.0...9.09.09.00.011.00.00.021.00.00.00
..................................................................
87559.09.09.09.09.09.09.09.09.09.0...9.09.09.00.011.00.00.011.00.00.00
87569.09.09.09.09.09.09.09.09.09.0...9.09.09.00.011.00.00.011.00.00.00
87579.09.09.09.09.09.09.09.09.09.0...9.09.09.00.011.00.00.011.00.00.00
87589.09.09.09.09.09.09.09.09.09.0...9.09.09.00.011.00.00.021.00.00.00
87599.09.09.09.09.09.09.09.09.09.0...9.09.09.00.011.00.00.001.00.00.00
\n", - "

8760 rows × 52 columns

\n", - "
" - ], - "text/plain": [ - " B: Load a scenario by id \\\n", - " interconnector_1_price interconnector_1_import_availability \n", - "0 9.0 9.0 \n", - "1 9.0 9.0 \n", - "2 9.0 9.0 \n", - "3 9.0 9.0 \n", - "4 9.0 9.0 \n", - "... ... ... \n", - "8755 9.0 9.0 \n", - "8756 9.0 9.0 \n", - "8757 9.0 9.0 \n", - "8758 9.0 9.0 \n", - "8759 9.0 9.0 \n", - "\n", - " \\\n", - " interconnector_1_export_availability interconnector_2_price \n", - "0 9.0 9.0 \n", - "1 9.0 9.0 \n", - "2 9.0 9.0 \n", - "3 9.0 9.0 \n", - "4 9.0 9.0 \n", - "... ... ... \n", - "8755 9.0 9.0 \n", - "8756 9.0 9.0 \n", - "8757 9.0 9.0 \n", - "8758 9.0 9.0 \n", - "8759 9.0 9.0 \n", - "\n", - " \\\n", - " interconnector_2_import_availability \n", - "0 9.0 \n", - "1 9.0 \n", - "2 9.0 \n", - "3 9.0 \n", - "4 9.0 \n", - "... ... \n", - "8755 9.0 \n", - "8756 9.0 \n", - "8757 9.0 \n", - "8758 9.0 \n", - "8759 9.0 \n", - "\n", - " \\\n", - " interconnector_2_export_availability interconnector_3_price \n", - "0 9.0 9.0 \n", - "1 9.0 9.0 \n", - "2 9.0 9.0 \n", - "3 9.0 9.0 \n", - "4 9.0 9.0 \n", - "... ... ... \n", - "8755 9.0 9.0 \n", - "8756 9.0 9.0 \n", - "8757 9.0 9.0 \n", - "8758 9.0 9.0 \n", - "8759 9.0 9.0 \n", - "\n", - " \\\n", - " interconnector_3_import_availability \n", - "0 9.0 \n", - "1 9.0 \n", - "2 9.0 \n", - "3 9.0 \n", - "4 9.0 \n", - "... ... \n", - "8755 9.0 \n", - "8756 9.0 \n", - "8757 9.0 \n", - "8758 9.0 \n", - "8759 9.0 \n", - "\n", - " ... \\\n", - " interconnector_3_export_availability interconnector_4_price ... \n", - "0 9.0 9.0 ... \n", - "1 9.0 9.0 ... \n", - "2 9.0 9.0 ... \n", - "3 9.0 9.0 ... \n", - "4 9.0 9.0 ... \n", - "... ... ... ... \n", - "8755 9.0 9.0 ... \n", - "8756 9.0 9.0 ... \n", - "8757 9.0 9.0 ... \n", - "8758 9.0 9.0 ... \n", - "8759 9.0 9.0 ... \n", - "\n", - " \\\n", - " weather/wind_offshore_baseline weather/wind_coastal_baseline \n", - "0 9.0 9.0 \n", - "1 9.0 9.0 \n", - "2 9.0 9.0 \n", - "3 9.0 9.0 \n", - "4 9.0 9.0 \n", - "... ... ... \n", - "8755 9.0 9.0 \n", - "8756 9.0 9.0 \n", - "8757 9.0 9.0 \n", - "8758 9.0 9.0 \n", - "8759 9.0 9.0 \n", - "\n", - " 2690658 \\\n", - " weather/wind_inland_baseline interconnector_1_price \n", - "0 9.0 0.01 \n", - "1 9.0 0.01 \n", - "2 9.0 0.01 \n", - "3 9.0 0.01 \n", - "4 9.0 0.01 \n", - "... ... ... \n", - "8755 9.0 0.01 \n", - "8756 9.0 0.01 \n", - "8757 9.0 0.01 \n", - "8758 9.0 0.01 \n", - "8759 9.0 0.01 \n", - "\n", - " \\\n", - " interconnector_1_import_availability \n", - "0 1.0 \n", - "1 1.0 \n", - "2 1.0 \n", - "3 1.0 \n", - "4 1.0 \n", - "... ... \n", - "8755 1.0 \n", - "8756 1.0 \n", - "8757 1.0 \n", - "8758 1.0 \n", - "8759 1.0 \n", - "\n", - " \\\n", - " interconnector_1_export_availability interconnector_2_price \n", - "0 0.0 26.00 \n", - "1 0.0 26.00 \n", - "2 0.0 14.48 \n", - "3 0.0 0.01 \n", - "4 0.0 0.02 \n", - "... ... ... \n", - "8755 0.0 0.01 \n", - "8756 0.0 0.01 \n", - "8757 0.0 0.01 \n", - "8758 0.0 0.02 \n", - "8759 0.0 0.00 \n", - "\n", - " \\\n", - " interconnector_2_import_availability \n", - "0 1.0 \n", - "1 1.0 \n", - "2 1.0 \n", - "3 1.0 \n", - "4 1.0 \n", - "... ... \n", - "8755 1.0 \n", - "8756 1.0 \n", - "8757 1.0 \n", - "8758 1.0 \n", - "8759 1.0 \n", - "\n", - " \n", - " interconnector_2_export_availability interconnector_3_price \n", - "0 1.0 0.01 \n", - "1 1.0 0.00 \n", - "2 1.0 0.00 \n", - "3 0.0 0.00 \n", - "4 0.0 0.00 \n", - "... ... ... \n", - "8755 0.0 0.00 \n", - "8756 0.0 0.00 \n", - "8757 0.0 0.00 \n", - "8758 0.0 0.00 \n", - "8759 0.0 0.00 \n", - "\n", - "[8760 rows x 52 columns]" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "packer.custom_curves()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "54cc3f61", - "metadata": {}, - "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", - "
B: Load a scenario by id2690658
futurefuture
gqueryunit
dashboard_emissionsfactor-0.9479290.024027
dashboard_co2_emissions_versus_start_yearfactor-0.9970370.028299
dashboard_total_costsbln_euro56.4630339.300293
\n", - "
" - ], - "text/plain": [ - " B: Load a scenario by id \\\n", - " future \n", - "gquery unit \n", - "dashboard_emissions factor -0.947929 \n", - "dashboard_co2_emissions_versus_start_year factor -0.997037 \n", - "dashboard_total_costs bln_euro 56.46303 \n", - "\n", - " 2690658 \n", - " future \n", - "gquery unit \n", - "dashboard_emissions factor 0.024027 \n", - "dashboard_co2_emissions_versus_start_year factor 0.028299 \n", - "dashboard_total_costs bln_euro 39.300293 " - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "packer.gquery_results()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "pyetm-qKH2ozgc", - "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.12.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/old_examples/myc_notebook_for_tim.ipynb b/examples/old_examples/myc_notebook_for_tim.ipynb deleted file mode 100644 index 6545857..0000000 --- a/examples/old_examples/myc_notebook_for_tim.ipynb +++ /dev/null @@ -1,1631 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "8128efd6", - "metadata": {}, - "source": [ - "This notebook mimics the myc_notebook from pyetm v1 to demonstrate how functionalities remain the same, despite being dressed up differently." - ] - }, - { - "cell_type": "markdown", - "id": "53e5210e", - "metadata": {}, - "source": [ - "**Multi-year charts**\n", - "\n", - "The MYC function within the ETM allows users to view and edit multiple scenarios at once. This \n", - "feature is useful to compare different scenarios or to built a transition path that contains \n", - "scenarios with different end years, see https://myc.energytransitionmodel.com/\n" - ] - }, - { - "cell_type": "markdown", - "id": "205371e8", - "metadata": {}, - "source": [ - "**Model Initialisation**\n", - "\n", - "Where you used to initialize the 'model' with the `model.from_excel()` function, now we work with a 'scenario' or 'scenarios' (TBC - what will we call the multiple scenario object?).\n", - "\n", - "You need to run the setup_notebook() command to get the API ready - this will also validate that you've set your API token correctly. You determine whether you connect with the beta, stable or live version of the ETM via the ETM_URL in the config." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e3d108b6", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Environment setup complete\n", - " Using ETM API at https://beta.engine.energytransitionmodel.com/api/v3\n", - " Token loaded? True\n", - "API connection ready\n" - ] - } - ], - "source": [ - "from example_helpers import setup_notebook\n", - "from pyetm.models import Scenario\n", - "\n", - "setup_notebook()\n", - "# put a comment how to make the setup" - ] - }, - { - "cell_type": "markdown", - "id": "f87a2eef", - "metadata": {}, - "source": [ - "Then, you can create a scenario (or scenarios) with the Scenario.from_excel. For now this functionality is not implemented, so the example will continue by loading an individual scenario. Note that when multi-scenario functionality has been implemented, these same steps should work exactly the same way, but on the Scenarios object, rather than the Scenario object." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76dce178", - "metadata": {}, - "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", - "
2690499
scenario
end_year2040
privateFalse
area_codenl2019
template2402157
\n", - "
" - ], - "text/plain": [ - " 2690499\n", - "scenario \n", - "end_year 2040\n", - "private False\n", - "area_code nl2019\n", - "template 2402157" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "scenario = Scenario.load(2690499)\n", - "scenario.to_dataframe()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5c8a7628", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " max min user\n", - "input unit \n", - "climate_relevant_co2_biomass_gas_future % 100.0 0.0 0.0\n", - "climate_relevant_co2_biomass_gas_present % 100.0 0.0 0.0\n", - "climate_relevant_co2_biomass_liquid_future % 100.0 0.0 0.0\n", - "climate_relevant_co2_biomass_liquid_present % 100.0 0.0 0.0\n", - "climate_relevant_co2_biomass_solid_future % 100.0 0.0 0.0\n" - ] - } - ], - "source": [ - "# Get scenario input parameters (incl. units)\n", - "inputs = scenario.inputs\n", - "# Give an explanation of available columns\n", - "print(inputs.to_dataframe(columns=['max', 'min', 'user']).head())" - ] - }, - { - "cell_type": "markdown", - "id": "ba56a5f2", - "metadata": {}, - "source": [ - "You will notice that in the original pyetm this call was:\n", - "```\n", - "inputs = model.get_parameters(exclude=True)\n", - "inputs.head()\n", - "```\n", - "Pyetm v2 is more developer friendly, which means that each of the 'objects' on the model (for example the inputs) are still python objects until you call **to_dataframe()** on them. This is one of the more significant changes - you will have to specify (in the notebooks) what format you want the data in. For the flows from Excel --> ETM and ETM --> Excel, this is all taken care of internally." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e3a3bfab", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'climate_relevant_co2_biomass_gas_future': 0.0,\n", - " 'climate_relevant_co2_biomass_gas_present': 0.0,\n", - " 'climate_relevant_co2_biomass_liquid_future': 0.0,\n", - " 'climate_relevant_co2_biomass_liquid_present': 0.0,\n", - " 'climate_relevant_co2_biomass_solid_future': 0.0,\n", - " 'climate_relevant_co2_biomass_solid_present': 0.0,\n", - " 'capacity_costs_energy_flexibility_flow_batteries_electricity': 0.0,\n", - " 'costs_bio_ethanol': 0.9482455192,\n", - " 'costs_biodiesel': 0.9588091368,\n", - " 'costs_biogas': 58.0,\n", - " 'costs_captured_biogenic_co2': 0.0,\n", - " 'costs_co2': 123.0,\n", - " 'costs_co2_free_allocation': 0.0,\n", - " 'costs_coal': 56.0,\n", - " 'costs_electricity_fallback_price': 3000.0,\n", - " 'costs_gas': 15.0,\n", - " 'costs_greengas': 61.0,\n", - " 'costs_heat_infra_indoors': 100.0,\n", - " 'costs_heat_infra_outdoors': 100.0,\n", - " 'costs_heat_network_storage_ht_steam_hot_water': 43.2,\n", - " 'costs_hydrogen': 30.0,\n", - " 'costs_hydrogen_transport_compressed_trucks': 50.0822647794,\n", - " 'costs_hydrogen_transport_pipelines': 1.5706418062,\n", - " 'costs_imported_ammonia': 43.2145152,\n", - " 'costs_imported_heat': 11.569444,\n", - " 'costs_industry_residual_heat': 0.0,\n", - " 'costs_infrastructure_electricity_hv_net': 364.0,\n", - " 'costs_infrastructure_electricity_interconnector_net': 364.0,\n", - " 'costs_infrastructure_electricity_lv_mv_trafo': 200.0,\n", - " 'costs_infrastructure_electricity_lv_net': 916.0,\n", - " 'costs_infrastructure_electricity_mv_hv_trafo': 250.0,\n", - " 'costs_infrastructure_electricity_mv_net': 690.0,\n", - " 'costs_infrastructure_electricity_offshore_net': 1159.0,\n", - " 'costs_oil': 61.0,\n", - " 'costs_uranium': 69.100026,\n", - " 'costs_wacc_households': 2.0,\n", - " 'costs_wacc_proven_technologies': 4.0,\n", - " 'costs_wacc_public_infrastructure': 3.0,\n", - " 'costs_wacc_unproven_technologies': 7.0,\n", - " 'costs_wood': 149.7799980001,\n", - " 'efficiency_agriculture_heatpump_water_water_electricity': 4.5,\n", - " 'efficiency_agriculture_heatpump_water_water_ts_electricity': 23.0000000001,\n", - " 'efficiency_ammonia_reforming': 68.5,\n", - " 'efficiency_buildings_space_heater_collective_heatpump_water_water_ts_electricity': 3.76,\n", - " 'efficiency_buildings_space_heater_combined_hydrogen': 108.6956522,\n", - " 'efficiency_buildings_space_heater_crude_oil': 85.0,\n", - " 'efficiency_buildings_space_heater_electricity': 100.0,\n", - " 'efficiency_buildings_space_heater_heatpump_air_water_electricity': 100.0,\n", - " 'efficiency_buildings_space_heater_hybrid_heatpump_air_water_electricity': 100.0,\n", - " 'efficiency_buildings_space_heater_hybrid_hydrogen_heatpump_air_water_electricity': 100.0,\n", - " 'efficiency_buildings_space_heater_network_gas': 106.7,\n", - " 'efficiency_buildings_space_heater_wood_pellets': 82.0,\n", - " 'efficiency_energy_chp_combined_cycle_network_gas_electricity': 43.3,\n", - " 'efficiency_energy_chp_combined_cycle_network_gas_heat': 30.5,\n", - " 'efficiency_energy_chp_local_engine_biogas_electricity': 42.0,\n", - " 'efficiency_energy_chp_local_engine_biogas_heat': 39.0,\n", - " 'efficiency_energy_chp_local_engine_network_gas_electricity': 42.0,\n", - " 'efficiency_energy_chp_local_engine_network_gas_heat': 50.0,\n", - " 'efficiency_energy_chp_local_wood_pellets_electricity': 18.3,\n", - " 'efficiency_energy_chp_local_wood_pellets_heat': 47.0,\n", - " 'efficiency_energy_chp_supercritical_waste_mix_electricity': 20.45,\n", - " 'efficiency_energy_chp_supercritical_waste_mix_heat': 19.9500000001,\n", - " 'efficiency_energy_chp_ultra_supercritical_coal_electricity': 44.0,\n", - " 'efficiency_energy_chp_ultra_supercritical_coal_heat': 13.0,\n", - " 'efficiency_energy_chp_ultra_supercritical_cofiring_coal_electricity': 40.0,\n", - " 'efficiency_energy_chp_ultra_supercritical_cofiring_coal_heat': 15.0,\n", - " 'efficiency_energy_power_combined_cycle_coal': 45.3000000001,\n", - " 'efficiency_energy_power_combined_cycle_hydrogen': 60.0,\n", - " 'efficiency_energy_power_combined_cycle_network_gas': 60.0,\n", - " 'efficiency_energy_power_engine_diesel': 38.0,\n", - " 'efficiency_energy_power_engine_network_gas': 48.0,\n", - " 'efficiency_energy_power_nuclear_gen2_uranium_oxide': 36.93,\n", - " 'efficiency_energy_power_nuclear_gen3_uranium_oxide': 36.93,\n", - " 'efficiency_energy_power_nuclear_small_modular_reactor_uranium_oxide': 28.0000000001,\n", - " 'efficiency_energy_power_solar_pv_solar_radiation': 23.0,\n", - " 'efficiency_energy_power_supercritical_coal': 36.0,\n", - " 'efficiency_energy_power_supercritical_waste_mix': 25.0,\n", - " 'efficiency_energy_power_turbine_hydrogen': 34.0,\n", - " 'efficiency_energy_power_turbine_network_gas': 34.0,\n", - " 'efficiency_energy_power_ultra_supercritical_coal': 46.0,\n", - " 'efficiency_energy_power_ultra_supercritical_cofiring_coal': 42.0,\n", - " 'efficiency_energy_power_ultra_supercritical_crude_oil': 45.0,\n", - " 'efficiency_energy_power_ultra_supercritical_network_gas': 40.0,\n", - " 'efficiency_households_space_heater_combined_hydrogen': 110.0000000001,\n", - " 'efficiency_households_space_heater_combined_network_gas': 107.0,\n", - " 'efficiency_households_space_heater_crude_oil': 85.0,\n", - " 'efficiency_households_space_heater_electricity': 100.0,\n", - " 'efficiency_households_space_heater_heatpump_air_water_electricity': 100.0,\n", - " 'efficiency_households_space_heater_heatpump_ground_water_electricity': 4.8000000001,\n", - " 'efficiency_households_space_heater_hybrid_heatpump_air_water_electricity': 100.0,\n", - " 'efficiency_households_space_heater_hybrid_hydrogen_heatpump_air_water_electricity': 100.0,\n", - " 'efficiency_households_space_heater_network_gas': 80.0,\n", - " 'efficiency_households_space_heater_wood_pellets': 82.0,\n", - " 'efficiency_hydrogen_electrolysis': 66.0,\n", - " 'efficiency_industry_chp_turbine_hydrogen_electricity': 33.4448160536,\n", - " 'efficiency_industry_chp_turbine_hydrogen_heat': 41.4715719064,\n", - " 'investment_costs_ammonia_reforming': 0.0,\n", - " 'investment_costs_co2_capture_industry': 0.0,\n", - " 'investment_costs_co2_ccs': 0.0,\n", - " 'investment_costs_co2_storage': 0.0,\n", - " 'investment_costs_co2_transport': 0.0,\n", - " 'investment_costs_co2_utilisation': 0.0,\n", - " 'investment_costs_combustion_biomass_plants': 0.0,\n", - " 'investment_costs_combustion_coal_plant': 0.0,\n", - " 'investment_costs_combustion_gas_plant': 0.0,\n", - " 'investment_costs_combustion_hydrogen_plant': 0.0,\n", - " 'investment_costs_combustion_oil_plant': 0.0,\n", - " 'investment_costs_combustion_waste_incinerator': 0.0,\n", - " 'investment_costs_electric_heat_pumps': 0.0,\n", - " 'investment_costs_electrolyzers': 0.0,\n", - " 'investment_costs_energy_flexibility_hv_opac_electricity': 0.0,\n", - " 'investment_costs_energy_flexibility_mv_batteries_electricity': 0.0,\n", - " 'investment_costs_flexibility_p2h_electricity': 0.0,\n", - " 'investment_costs_gas_heat_pumps': 0.0,\n", - " 'investment_costs_geothermal': 0.0,\n", - " 'investment_costs_households_flexibility_p2p_electricity': 0.0,\n", - " 'investment_costs_households_storage_space_heating': 154.7368,\n", - " 'investment_costs_households_storage_water_heating': 50.71375,\n", - " 'investment_costs_hydrogen_electrolysis': 0.0,\n", - " 'investment_costs_nuclear_nuclear_plant': 0.0,\n", - " 'investment_costs_nuclear_small_modular_reactor': 0.0,\n", - " 'investment_costs_solar_concentrated_solar_power': 0.0,\n", - " 'investment_costs_solar_solar_panels': 0.0,\n", - " 'investment_costs_solar_thermal': 0.0,\n", - " 'investment_costs_water_river': 0.0,\n", - " 'investment_costs_wind_offshore': 0.0,\n", - " 'investment_costs_wind_onshore': 0.0,\n", - " 'om_costs_co2_capture_industry': 0.0,\n", - " 'om_costs_co2_ccs': 0.0,\n", - " 'om_costs_co2_storage': 0.0,\n", - " 'om_costs_co2_transport': 0.0,\n", - " 'om_costs_co2_utilisation': 0.0,\n", - " 'om_costs_combustion_biomass_plant': 0.0,\n", - " 'om_costs_combustion_coal_plant': 0.0,\n", - " 'om_costs_combustion_gas_plant': 0.0,\n", - " 'om_costs_combustion_hydrogen_plant': 0.0,\n", - " 'om_costs_combustion_oil_plant': 0.0,\n", - " 'om_costs_combustion_waste_incinerator': 0.0,\n", - " 'om_costs_geothermal': 0.0,\n", - " 'om_costs_nuclear_nuclear_plant': 0.0,\n", - " 'om_costs_nuclear_small_modular_reactor': 0.0,\n", - " 'om_costs_solar_thermal': 0.0,\n", - " 'om_costs_water_river': 0.0,\n", - " 'om_costs_wind_offshore': 0.0,\n", - " 'om_costs_wind_onshore': 0.0,\n", - " 'volume_costs_energy_flexibility_flow_batteries_electricity': 0.0,\n", - " 'agriculture_burner_crude_oil_share': 0.0,\n", - " 'agriculture_burner_hydrogen_share': 0.0,\n", - " 'agriculture_burner_network_gas_share': 0.0,\n", - " 'agriculture_burner_wood_pellets_share': 10.0,\n", - " 'agriculture_final_demand_ht_central_steam_hot_water_share': 48.0,\n", - " 'agriculture_final_demand_local_steam_hot_water_share': 0.0,\n", - " 'agriculture_geothermal_share': 20.0,\n", - " 'agriculture_heatpump_water_water_electricity_share': 5.0,\n", - " 'agriculture_heatpump_water_water_ts_electricity_share': 17.0,\n", - " 'agriculture_useful_demand_electricity': 0.6,\n", - " 'agriculture_useful_demand_useable_heat': -1.7,\n", - " 'capacity_of_agriculture_flexibility_p2h_electricity': 0.0,\n", - " 'buildings_cooling_airconditioning_share': 82.0,\n", - " 'buildings_cooling_collective_heatpump_water_water_ts_electricity_share': 18.0,\n", - " 'buildings_cooling_heatpump_air_water_electricity_share': 0.0,\n", - " 'buildings_cooling_heatpump_air_water_network_gas_share': 0.0,\n", - " 'buildings_space_heater_coal_share': 0.0,\n", - " 'buildings_space_heater_collective_heatpump_water_water_ts_electricity_share': 4.56,\n", - " 'buildings_space_heater_combined_hydrogen_share': 0.0,\n", - " 'buildings_space_heater_crude_oil_share': 0.0,\n", - " 'buildings_space_heater_district_heating_ht_steam_hot_water_share': 18.05,\n", - " 'buildings_space_heater_electricity_share': 0.0,\n", - " 'buildings_space_heater_heatpump_air_water_electricity_share': 41.8,\n", - " 'buildings_space_heater_heatpump_air_water_network_gas_share': 0.0,\n", - " 'buildings_space_heater_hybrid_heatpump_air_water_electricity_share': 19.45,\n", - " 'buildings_space_heater_hybrid_hydrogen_heatpump_air_water_electricity_share': 0.0,\n", - " 'buildings_space_heater_network_gas_share': 14.75,\n", - " 'buildings_space_heater_solar_thermal_share': 40.0,\n", - " 'buildings_space_heater_wood_pellets_share': 1.39,\n", - " 'buildings_insulation_level_buildings_future': 169.44532976497808,\n", - " 'buildings_insulation_level_buildings_present': 217.2208864009762,\n", - " 'buildings_lighting_efficient_fluorescent_electricity_share': 2.0,\n", - " 'buildings_lighting_led_electricity_share': 98.0,\n", - " 'buildings_lighting_standard_fluorescent_electricity_share': 0.0,\n", - " 'buildings_lighting_savings_from_daylight_control_light': 45.0,\n", - " 'buildings_lighting_savings_from_motion_detection_light': 49.0,\n", - " 'buildings_useful_demand_cooling': -0.2972159969666939,\n", - " 'buildings_useful_demand_electricity': 0.0,\n", - " 'buildings_useful_demand_for_appliances': 1.1,\n", - " 'buildings_number_of_buildings_future': 122142.46602400357,\n", - " 'bunkers_allocated_percentage_aviation': 0.0,\n", - " 'bunkers_allocated_percentage_shipping': 0.0,\n", - " 'bunkers_plane_using_bio_kerosene_share': 42.67,\n", - " 'bunkers_plane_using_kerosene_share': 57.33,\n", - " 'bunkers_ship_using_ammonia_share': 0.0,\n", - " 'bunkers_ship_using_heavy_fuel_oil_share': 67.0,\n", - " 'bunkers_ship_using_hydrogen_share': 0.0,\n", - " 'bunkers_ship_using_lng_share': 33.0,\n", - " 'bunkers_useful_demand_planes': 0.0,\n", - " 'bunkers_useful_demand_ships': 0.0,\n", - " 'volume_of_baseload_export_hydrogen': 134.63050808711347,\n", - " 'households_cooker_halogen_electricity_share': 0.0,\n", - " 'households_cooker_induction_electricity_share': 88.35,\n", - " 'households_cooker_network_gas_share': 9.5,\n", - " 'households_cooker_resistive_electricity_share': 2.15,\n", - " 'households_cooker_wood_pellets_share': 0.0,\n", - " 'households_cooling_airconditioning_electricity_share': 81.9300000001,\n", - " 'households_cooling_heatpump_air_water_electricity_share': 9.67,\n", - " 'households_cooling_heatpump_ground_water_electricity_share': 8.4,\n", - " 'households_useful_demand_for_cooling': 0.0,\n", - " 'households_useful_demand_cooking_per_person': 0.0,\n", - " 'households_useful_demand_electric_appliances': 0.0,\n", - " 'households_useful_demand_lighting': 0.0,\n", - " 'households_appliances_electricity_efficiency': 13.770491803278606,\n", - " 'households_heater_coal_share': 0.0,\n", - " 'households_heater_combined_hydrogen_share': 0.0,\n", - " 'households_heater_combined_network_gas_share': 15.0,\n", - " 'households_heater_crude_oil_share': 0.0,\n", - " 'households_heater_district_heating_ht_steam_hot_water_share': 18.0,\n", - " 'households_heater_electricity_share': 2.8,\n", - " 'households_heater_heatpump_air_water_electricity_share': 33.6,\n", - " 'households_heater_heatpump_ground_water_electricity_share': 8.2,\n", - " 'households_heater_heatpump_pvt_electricity_share': 0.0,\n", - " 'households_heater_hybrid_heatpump_air_water_electricity_share': 19.5,\n", - " 'households_heater_hybrid_hydrogen_heatpump_air_water_electricity_share': 0.0,\n", - " 'households_heater_network_gas_share': 0.0,\n", - " 'households_heater_wood_pellets_share': 2.9,\n", - " 'households_useful_demand_hot_water_share': 0.0,\n", - " 'households_water_heater_solar_thermal_share': 32.5,\n", - " 'households_insulation_level_apartments_1945_1964': 187.26134107628562,\n", - " 'households_insulation_level_apartments_1965_1984': 160.57671114919341,\n", - " 'households_insulation_level_apartments_1985_2004': 128.26307690023407,\n", - " 'households_insulation_level_apartments_2005_present': 96.18100458657419,\n", - " 'households_insulation_level_apartments_before_1945': 256.6002436636793,\n", - " 'households_insulation_level_apartments_future': 53.92879181106722,\n", - " 'households_insulation_level_detached_houses_1945_1964': 194.75462565741475,\n", - " 'households_insulation_level_detached_houses_1965_1984': 162.1440300736066,\n", - " 'households_insulation_level_detached_houses_1985_2004': 128.41872640805985,\n", - " 'households_insulation_level_detached_houses_2005_present': 93.16911568453558,\n", - " 'households_insulation_level_detached_houses_before_1945': 237.0837495697443,\n", - " 'households_insulation_level_detached_houses_future': 44.03429181614837,\n", - " 'households_insulation_level_semi_detached_houses_1945_1964': 180.82152900785633,\n", - " 'households_insulation_level_semi_detached_houses_1965_1984': 156.09290631617938,\n", - " 'households_insulation_level_semi_detached_houses_1985_2004': 128.38268907671798,\n", - " 'households_insulation_level_semi_detached_houses_2005_present': 95.1754172419351,\n", - " 'households_insulation_level_semi_detached_houses_before_1945': 224.08322620338217,\n", - " 'households_insulation_level_semi_detached_houses_future': 45.8219794702538,\n", - " 'households_insulation_level_terraced_houses_1945_1964': 244.77387685870463,\n", - " 'households_insulation_level_terraced_houses_1965_1984': 190.10073010677155,\n", - " 'households_insulation_level_terraced_houses_1985_2004': 131.53138563876874,\n", - " 'households_insulation_level_terraced_houses_2005_present': 101.4220246175114,\n", - " 'households_insulation_level_terraced_houses_before_1945': 266.01945785021763,\n", - " 'households_insulation_level_terraced_houses_future': 47.969841149677144,\n", - " 'households_lighting_efficient_fluorescent_electricity_share': 8.25,\n", - " 'households_lighting_incandescent_electricity_share': 0.0,\n", - " 'households_lighting_led_electricity_share': 91.75,\n", - " 'households_number_of_apartments_future': 407270.7379999999,\n", - " 'households_number_of_detached_houses_future': 141946.5721,\n", - " 'households_number_of_inhabitants': 19.1,\n", - " 'households_number_of_semi_detached_houses_future': 246876.06719999993,\n", - " 'households_number_of_terraced_houses_future': 334197.6226999997,\n", - " 'capacity_of_industry_chemicals_fertilizers_flexibility_p2h_electricity': 0.0,\n", - " 'capacity_of_industry_chemicals_other_flexibility_p2h_electricity': 0.0,\n", - " 'capacity_of_industry_chemicals_refineries_flexibility_p2h_electricity': 0.0,\n", - " 'capacity_of_industry_other_food_flexibility_p2h_electricity': 700.0,\n", - " 'capacity_of_industry_other_paper_flexibility_p2h_electricity': 175.0,\n", - " 'industry_aggregated_other_industry_coal_share_energetic': 0.0,\n", - " 'industry_aggregated_other_industry_cokes_share_energetic': 0.0,\n", - " 'industry_aggregated_other_industry_crude_oil_share_energetic': 0.0,\n", - " 'industry_aggregated_other_industry_electricity_share': 80.0,\n", - " 'industry_aggregated_other_industry_hydrogen_share_energetic': 3.0,\n", - " 'industry_aggregated_other_industry_hydrogen_share_non_energetic': 0.0,\n", - " 'industry_aggregated_other_industry_network_gas_share_energetic': 17.0,\n", - " 'industry_aggregated_other_industry_useable_heat_share': 0.0,\n", - " 'industry_aggregated_other_industry_wood_pellets_share_energetic': 0.0,\n", - " 'industry_aluminium_carbothermalreduction_electricity_share': 0.0,\n", - " 'industry_aluminium_electrolysis_bat_electricity_share': 16.66666667,\n", - " 'industry_aluminium_electrolysis_current_electricity_share': 42.8571428601,\n", - " 'industry_aluminium_production': 0.0,\n", - " 'industry_aluminium_smeltoven_electricity_share': 40.47619048,\n", - " 'industry_chemicals_fertilizers_burner_coal_share': 0.0,\n", - " 'industry_chemicals_fertilizers_burner_crude_oil_share': 0.0,\n", - " 'industry_chemicals_fertilizers_burner_hydrogen_share': 0.0,\n", - " 'industry_chemicals_fertilizers_burner_network_gas_share': 78.7151702787,\n", - " 'industry_chemicals_fertilizers_burner_wood_pellets_share': 0.0,\n", - " 'industry_chemicals_fertilizers_central_ammonia_share': 0.0,\n", - " 'industry_chemicals_fertilizers_hydrogen_network_share': 0.0,\n", - " 'industry_chemicals_fertilizers_local_ammonia_central_hydrogen_share': 0.0,\n", - " 'industry_chemicals_fertilizers_local_ammonia_local_hydrogen_share': 100.0,\n", - " 'industry_chemicals_fertilizers_steam_methane_reformer_hydrogen_share': 100.0,\n", - " 'industry_chemicals_other_burner_coal_share': 0.0,\n", - " 'industry_chemicals_other_burner_crude_oil_share': 45.3258609475,\n", - " 'industry_chemicals_other_burner_hydrogen_share': 0.0,\n", - " 'industry_chemicals_other_burner_network_gas_share': 24.2727467215,\n", - " 'industry_chemicals_other_burner_wood_pellets_share': 0.0,\n", - " 'industry_chemicals_other_coal_non_energetic_share': 0.0,\n", - " 'industry_chemicals_other_crude_oil_non_energetic_share': 88.8015390165,\n", - " 'industry_chemicals_other_heater_electricity_share': 0.0,\n", - " 'industry_chemicals_other_heatpump_water_water_electricity_share': 0.0,\n", - " 'industry_chemicals_other_hydrogen_non_energetic_share': 0.0,\n", - " 'industry_chemicals_other_network_gas_non_energetic_share': 11.1984609836,\n", - " 'industry_chemicals_other_steam_recompression_electricity_share': 0.0,\n", - " 'industry_chemicals_other_wood_pellets_non_energetic_share': 0.0,\n", - " 'industry_chemicals_refineries_burner_coal_share': 0.0,\n", - " 'industry_chemicals_refineries_burner_crude_oil_share': 64.2192843659,\n", - " 'industry_chemicals_refineries_burner_hydrogen_share': 0.0,\n", - " 'industry_chemicals_refineries_burner_network_gas_share': 27.8138338165,\n", - " 'industry_chemicals_refineries_burner_wood_pellets_share': 0.0,\n", - " 'industry_final_demand_for_chemical_fertilizers_steam_hot_water_share': 21.2848297214,\n", - " 'industry_final_demand_for_chemical_other_steam_hot_water_share': 30.4013923311,\n", - " 'industry_final_demand_for_chemical_refineries_steam_hot_water_share': 7.9668818178,\n", - " 'industry_final_demand_for_other_food_steam_hot_water_share': 0.0,\n", - " 'industry_final_demand_for_other_paper_steam_hot_water_share': 0.0,\n", - " 'industry_other_food_burner_coal_share': 0.0,\n", - " 'industry_other_food_burner_crude_oil_share': 0.0,\n", - " 'industry_other_food_burner_hydrogen_share': 0.0,\n", - " 'industry_other_food_burner_network_gas_share': 57.6,\n", - " 'industry_other_food_burner_wood_pellets_share': 0.0,\n", - " 'industry_other_food_heater_electricity_share': 42.4,\n", - " 'industry_other_metals_process_electricity_efficiency': 0.0,\n", - " 'industry_other_metals_process_heat_useable_heat_efficiency': 13.023776445487979,\n", - " 'industry_other_metals_production': 0.0,\n", - " 'industry_other_paper_burner_coal_share': 0.0,\n", - " 'industry_other_paper_burner_crude_oil_share': 0.0,\n", - " 'industry_other_paper_burner_hydrogen_share': 0.0,\n", - " 'industry_other_paper_burner_network_gas_share': 60.0,\n", - " 'industry_other_paper_burner_wood_pellets_share': 0.0,\n", - " 'industry_other_paper_heater_electricity_share': 40.0,\n", - " 'industry_steel_blastfurnace_bof_share': 100.0,\n", - " 'industry_steel_cyclonefurnace_bof_share': 0.0,\n", - " 'industry_steel_cyclonefurnace_bof_wood_pellets_share': 0.0,\n", - " 'industry_steel_dri_hydrogen_share': 0.0,\n", - " 'industry_steel_dri_network_gas_share': 0.0,\n", - " 'industry_steel_production': 100.0,\n", - " 'industry_steel_scrap_hbi_eaf_share': 0.0,\n", - " 'industry_useful_demand_for_aggregated_other_energetic': 89.0,\n", - " 'industry_useful_demand_for_aggregated_other_non_energetic': 89.0,\n", - " 'industry_useful_demand_for_chemical_fertilizers': 100.0,\n", - " 'industry_useful_demand_for_chemical_fertilizers_electricity_efficiency': 0.0,\n", - " 'industry_useful_demand_for_chemical_fertilizers_useable_heat_efficiency': 0.0,\n", - " 'industry_useful_demand_for_chemical_other': 100.0,\n", - " 'industry_useful_demand_for_chemical_other_electricity_efficiency': 0.0,\n", - " 'industry_useful_demand_for_chemical_other_useable_heat_efficiency': 0.0,\n", - " 'industry_useful_demand_for_chemical_refineries': 100.0,\n", - " 'industry_useful_demand_for_chemical_refineries_electricity_efficiency': 0.0,\n", - " 'industry_useful_demand_for_chemical_refineries_useable_heat_efficiency': 0.0,\n", - " 'industry_useful_demand_for_other_food': 100.0,\n", - " 'industry_useful_demand_for_other_food_electricity_efficiency': 25.320234587005388,\n", - " 'industry_useful_demand_for_other_food_useable_heat_efficiency': 25.320234587005388,\n", - " 'industry_useful_demand_for_other_ict': 329.0,\n", - " 'industry_useful_demand_for_other_ict_efficiency': 0.0,\n", - " 'industry_useful_demand_for_other_paper': 100.0,\n", - " 'industry_useful_demand_for_other_paper_electricity_efficiency': 31.246207044055573,\n", - " 'industry_useful_demand_for_other_paper_useable_heat_efficiency': 31.246207044055573,\n", - " 'other_useful_demand_electricity': 0.0,\n", - " 'other_useful_demand_non_energetic': 0.0,\n", - " 'other_useful_demand_useable_heat': 0.0,\n", - " 'transport_planes_efficiency': 0.0,\n", - " 'transport_ships_efficiency': 0.4,\n", - " 'transport_trains_efficiency': 0.1,\n", - " 'transport_vehicle_combustion_engine_efficiency': 0.4,\n", - " 'transport_vehicle_using_electricity_efficiency': 0.3,\n", - " 'transport_vehicle_using_hydrogen_efficiency': 0.3,\n", - " 'transport_freight_train_using_coal_share': 0.0,\n", - " 'transport_freight_train_using_diesel_mix_share': 0.66,\n", - " 'transport_freight_train_using_electricity_share': 98.68,\n", - " 'transport_freight_train_using_hydrogen_share': 0.66,\n", - " 'transport_freight_trains_share': 1.7501397973,\n", - " 'transport_ship_using_ammonia_share': 0.0,\n", - " 'transport_ship_using_diesel_mix_share': 64.68,\n", - " 'transport_ship_using_electricity_share': 9.93,\n", - " 'transport_ship_using_hydrogen_share': 16.66,\n", - " 'transport_ship_using_lng_mix_share': 8.73,\n", - " 'transport_ships_share': 19.9593814327,\n", - " 'transport_truck_using_compressed_natural_gas_share': 2.33,\n", - " 'transport_truck_using_diesel_mix_share': 29.15,\n", - " 'transport_truck_using_electricity_share': 45.07,\n", - " 'transport_truck_using_gasoline_mix_share': 0.0,\n", - " 'transport_truck_using_hydrogen_share': 19.12,\n", - " 'transport_truck_using_lng_mix_share': 4.33,\n", - " 'transport_trucks_share': 77.6037449859,\n", - " 'transport_useful_demand_freight_tonne_kms': 0.5,\n", - " 'transport_van_using_compressed_natural_gas_share': 0.0,\n", - " 'transport_van_using_diesel_mix_share': 23.2,\n", - " 'transport_van_using_electricity_share': 74.81,\n", - " 'transport_van_using_gasoline_mix_share': 0.44,\n", - " 'transport_van_using_hydrogen_share': 0.0,\n", - " 'transport_van_using_lpg_share': 1.55,\n", - " 'transport_vans_share': 0.6867337843,\n", - " 'transport_rail_mixer_diesel_diesel_share': 55.24,\n", - " 'transport_road_mixer_diesel_biodiesel_share': 44.81,\n", - " 'transport_road_mixer_diesel_diesel_share': 55.19,\n", - " 'transport_road_mixer_gasoline_ethanol_share': 45.69,\n", - " 'transport_road_mixer_gasoline_gasoline_share': 54.31,\n", - " 'transport_road_mixer_lng_bio_lng_share': 33.0,\n", - " 'transport_road_mixer_lng_lng_share': 67.0,\n", - " 'transport_shipping_mixer_diesel_bio_ethanol_share': 0.0,\n", - " 'transport_shipping_mixer_diesel_bio_lng_share': 33.0,\n", - " 'transport_shipping_mixer_diesel_biodiesel_share': 14.7,\n", - " 'transport_shipping_mixer_diesel_diesel_share': 52.3,\n", - " 'transport_shipping_mixer_diesel_heavy_fuel_oil_share': 0.0,\n", - " 'transport_shipping_mixer_diesel_lng_share': 0.0,\n", - " 'transport_shipping_mixer_lng_bio_lng_share': 42.67,\n", - " 'transport_shipping_mixer_lng_lng_share': 57.33,\n", - " 'transport_bicycle_using_electricity_share': 40.67,\n", - " 'transport_bicycle_using_human_power_share': 59.33,\n", - " 'transport_bicycles_share': 8.5,\n", - " 'transport_bus_using_compressed_natural_gas_share': 0.0,\n", - " 'transport_bus_using_diesel_mix_share': 0.0,\n", - " 'transport_bus_using_electricity_share': 96.67,\n", - " 'transport_bus_using_gasoline_mix_share': 0.0,\n", - " 'transport_bus_using_hydrogen_share': 3.33,\n", - " 'transport_bus_using_lng_share': 0.0,\n", - " 'transport_busses_share': 7.34,\n", - " 'transport_car_using_compressed_natural_gas_share': 0.0,\n", - " 'transport_car_using_diesel_mix_share': 0.0,\n", - " 'transport_car_using_electricity_share': 67.97,\n", - " 'transport_car_using_gasoline_mix_share': 28.27,\n", - " 'transport_car_using_hydrogen_share': 3.76,\n", - " 'transport_car_using_lpg_share': 0.0,\n", - " 'transport_cars_share': 69.0717377,\n", - " 'transport_motorcycle_using_electricity_share': 63.0,\n", - " 'transport_motorcycle_using_gasoline_mix_share': 37.0,\n", - " 'transport_motorcycles_share': 2.9115407598,\n", - " 'transport_passenger_train_using_coal_share': 0.0,\n", - " 'transport_passenger_train_using_diesel_mix_share': 0.7,\n", - " 'transport_passenger_train_using_electricity_share': 98.6,\n", - " 'transport_passenger_train_using_hydrogen_share': 0.7,\n", - " 'transport_passenger_trains_share': 12.0,\n", - " 'transport_rail_mixer_diesel_biodiesel_share': 44.76,\n", - " 'transport_plane_using_bio_ethanol_share': 0.0,\n", - " 'transport_plane_using_electricity_share': 16.7,\n", - " 'transport_plane_using_gasoline_share': 3.28,\n", - " 'transport_plane_using_hydrogen_share': 16.7,\n", - " 'transport_plane_using_kerosene_share': 63.32,\n", - " 'transport_planes_share': 0.0787128481,\n", - " 'transport_trams_share': 0.0980087341,\n", - " 'transport_useful_demand_passenger_kms': 1.0,\n", - " 'demand_of_molecules_direct_air_capture_co2': 0.0,\n", - " 'share_of_energy_chp_supercritical_ccs_ht_waste_mix': 0.0,\n", - " 'share_of_energy_hydrogen_autothermal_reformer_ccs_must_run': 0.0,\n", - " 'share_of_energy_hydrogen_biomass_gasification_ccs': 100.0,\n", - " 'share_of_energy_hydrogen_steam_methane_reformer_ccs_must_run': 100.0,\n", - " 'share_of_energy_power_combined_cycle_ccs_coal': 0.0,\n", - " 'share_of_energy_power_combined_cycle_ccs_network_gas': 0.0,\n", - " 'share_of_energy_power_supercritical_ccs_waste_mix': 0.0,\n", - " 'share_of_energy_power_ultra_supercritical_ccs_coal': 0.0,\n", - " 'share_of_energy_power_ultra_supercritical_oxyfuel_ccs_lignite': 0.0,\n", - " 'share_of_industry_chemicals_fertilizers_captured_combustion_co2': 0.0,\n", - " 'share_of_industry_chemicals_fertilizers_captured_processes_co2': 65.0,\n", - " 'share_of_industry_chemicals_other_captured_co2': 0.0,\n", - " 'share_of_industry_chemicals_refineries_captured_co2': 0.0,\n", - " 'share_of_industry_other_food_captured_co2': 0.0,\n", - " 'share_of_industry_other_paper_captured_co2': 0.0,\n", - " 'share_of_industry_steel_captured_co2': 0.0,\n", - " 'share_of_energy_steel_chemical_feedstock_coal_gas': 0.0,\n", - " 'share_of_energy_steel_energy_production_coal_gas': 100.0,\n", - " 'share_of_molecules_transport_pipelines_co2': 50.0,\n", - " 'share_of_molecules_transport_ships_co2': 50.0,\n", - " 'demand_of_molecules_offshore_sequestration_co2': 5.9,\n", - " 'demand_of_molecules_other_utilisation_co2': 2.342574,\n", - " 'output_of_energy_production_synthetic_methanol': 0.0,\n", - " 'share_of_molecules_other_utilisation_delayed_emitted_co2': 100.0,\n", - " 'share_of_molecules_other_utilisation_delayed_indefinitely_co2': 0.0,\n", - " 'co2_emissions_of_imported_ammonia_future': 348.3870984,\n", - " 'co2_emissions_of_imported_hydrogen_future': 0.0,\n", - " 'change_in_energetic_emissions_other_ghg_agriculture': 117.0,\n", - " 'change_in_energetic_emissions_other_ghg_buildings': 100.0,\n", - " 'change_in_energetic_emissions_other_ghg_energy': 100.0,\n", - " 'change_in_energetic_emissions_other_ghg_households': 100.0,\n", - " 'change_in_energetic_emissions_other_ghg_industry': 34.0,\n", - " 'change_in_energetic_emissions_other_ghg_transport': 20.0,\n", - " 'change_in_indirect_emissions_co2': 100.0,\n", - " 'change_in_non_energetic_emissions_co2_agriculture_manure': 50.0,\n", - " 'change_in_non_energetic_emissions_co2_agriculture_soil_cultivation': 50.0,\n", - " 'change_in_non_energetic_emissions_co2_chemical_industry': 66.66666667,\n", - " 'change_in_non_energetic_emissions_co2_other_industry': 40.0,\n", - " 'change_in_non_energetic_emissions_co2_waste_management': 50.0,\n", - " 'change_in_non_energetic_emissions_other_ghg_agriculture_fermentation': 48.0,\n", - " 'change_in_non_energetic_emissions_other_ghg_agriculture_manure': 102.0,\n", - " 'change_in_non_energetic_emissions_other_ghg_agriculture_other': 48.0,\n", - " 'change_in_non_energetic_emissions_other_ghg_agriculture_soil_cultivation': 64.0,\n", - " 'change_in_non_energetic_emissions_other_ghg_chemical_industry': 34.0,\n", - " 'change_in_non_energetic_emissions_other_ghg_other_industry': 34.0,\n", - " 'change_in_non_energetic_emissions_other_ghg_waste_management': 34.0,\n", - " 'battery_capacity_always_on_solar_pv_solar_radiation': 100.0,\n", - " 'battery_capacity_always_on_wind_turbine_inland': 100.0,\n", - " 'capacity_of_energy_flexibility_flow_batteries_electricity': 6500.0,\n", - " 'capacity_of_energy_flexibility_hv_opac_electricity': 0.0,\n", - " 'capacity_of_energy_flexibility_mv_batteries_electricity': 18500.0,\n", - " 'capacity_of_energy_flexibility_pumped_storage_electricity': 0.0,\n", - " 'capacity_of_energy_heat_flexibility_p2h_boiler_electricity': 4500.0,\n", - " 'capacity_of_energy_heat_flexibility_p2h_heatpump_electricity': 3500.0,\n", - " 'capacity_of_energy_hydrogen_flexibility_p2g_electricity': 14475.0,\n", - " 'connection_capacity_always_on_solar_pv_solar_radiation': 25.0,\n", - " 'connection_capacity_always_on_wind_turbine_inland': 75.0,\n", - " 'settings_enable_storage_optimisation_energy_flexibility_flow_batteries_electricity': 1.0,\n", - " 'settings_enable_storage_optimisation_energy_flexibility_hv_opac_electricity': 0.0,\n", - " 'settings_enable_storage_optimisation_energy_flexibility_mv_batteries_electricity': 1.0,\n", - " 'settings_enable_storage_optimisation_energy_flexibility_pumped_storage_electricity': 0.0,\n", - " 'volume_of_energy_flexibility_flow_batteries_electricity': 41.052631579,\n", - " 'wta_of_energy_flexibility_flow_batteries_electricity': 6.4285714286,\n", - " 'wta_of_energy_flexibility_hv_opac_electricity': 5.375,\n", - " 'wta_of_energy_flexibility_mv_batteries_electricity': 4.9411764706,\n", - " 'wta_of_energy_flexibility_pumped_storage_electricity': 5.5,\n", - " 'wtp_of_agriculture_flexibility_p2h_electricity': 22.0,\n", - " 'wtp_of_energy_flexibility_flow_batteries_electricity': 4.5,\n", - " 'wtp_of_energy_flexibility_hv_opac_electricity': 4.3,\n", - " 'wtp_of_energy_flexibility_mv_batteries_electricity': 4.2,\n", - " 'wtp_of_energy_flexibility_pumped_storage_electricity': 4.4,\n", - " 'wtp_of_energy_heat_flexibility_p2h_boiler_electricity': 25.0,\n", - " 'wtp_of_energy_heat_flexibility_p2h_heatpump_electricity': 25.0,\n", - " 'wtp_of_energy_hydrogen_flexibility_p2g_electricity': 30.0,\n", - " 'flexibility_heat_pump_space_heating_cop_cutoff_gas': 2.6,\n", - " 'flexibility_heat_pump_water_heating_cop_cutoff': 6.0,\n", - " 'households_flexibility_consumer_electricity_price': 22.5,\n", - " 'households_flexibility_consumer_gas_price': 81.4,\n", - " 'households_flexibility_p2p_electricity_market_penetration': 30.0,\n", - " 'settings_enable_storage_optimisation_households_flexibility_p2p_electricity': 'optimizing_storage',\n", - " 'wta_of_households_flexibility_p2p_electricity': 10.0,\n", - " 'wtp_of_households_flexibility_p2p_electricity': 5.0,\n", - " 'electricity_interconnector_1_capacity': 4400.0,\n", - " 'electricity_interconnector_1_co2_emissions_future': 0.0,\n", - " 'electricity_interconnector_1_co2_emissions_present': 0.0,\n", - " 'electricity_interconnector_1_export_availability': 100.0,\n", - " 'electricity_interconnector_1_import_availability': 100.0,\n", - " 'electricity_interconnector_1_marginal_costs': 37.5999984001,\n", - " 'electricity_interconnector_10_capacity': 0.0,\n", - " 'electricity_interconnector_10_co2_emissions_future': 370.0000008,\n", - " 'electricity_interconnector_10_co2_emissions_present': 370.0000008,\n", - " 'electricity_interconnector_10_export_availability': 100.0,\n", - " 'electricity_interconnector_10_import_availability': 100.0,\n", - " 'electricity_interconnector_10_marginal_costs': 37.5999984001,\n", - " 'electricity_interconnector_11_capacity': 0.0,\n", - " 'electricity_interconnector_11_co2_emissions_future': 370.0000008,\n", - " 'electricity_interconnector_11_co2_emissions_present': 370.0000008,\n", - " 'electricity_interconnector_11_export_availability': 100.0,\n", - " 'electricity_interconnector_11_import_availability': 100.0,\n", - " 'electricity_interconnector_11_marginal_costs': 37.5999984001,\n", - " 'electricity_interconnector_12_capacity': 0.0,\n", - " 'electricity_interconnector_12_co2_emissions_future': 370.0000008,\n", - " 'electricity_interconnector_12_co2_emissions_present': 370.0000008,\n", - " 'electricity_interconnector_12_export_availability': 100.0,\n", - " 'electricity_interconnector_12_import_availability': 100.0,\n", - " 'electricity_interconnector_12_marginal_costs': 37.5999984001,\n", - " 'electricity_interconnector_2_capacity': 6000.0,\n", - " 'electricity_interconnector_2_co2_emissions_future': 369.0,\n", - " 'electricity_interconnector_2_co2_emissions_present': 370.0000008,\n", - " 'electricity_interconnector_2_export_availability': 100.0,\n", - " 'electricity_interconnector_2_import_availability': 100.0,\n", - " 'electricity_interconnector_2_marginal_costs': 37.5999984001,\n", - " 'electricity_interconnector_3_capacity': 700.0,\n", - " 'electricity_interconnector_3_co2_emissions_future': 0.0,\n", - " 'electricity_interconnector_3_co2_emissions_present': 370.0000008,\n", - " 'electricity_interconnector_3_export_availability': 100.0,\n", - " 'electricity_interconnector_3_import_availability': 100.0,\n", - " 'electricity_interconnector_3_marginal_costs': 37.5999984001,\n", - " 'electricity_interconnector_4_capacity': 0.0,\n", - " 'electricity_interconnector_4_co2_emissions_future': 0.0,\n", - " 'electricity_interconnector_4_co2_emissions_present': 370.0000008,\n", - " 'electricity_interconnector_4_export_availability': 100.0,\n", - " 'electricity_interconnector_4_import_availability': 100.0,\n", - " 'electricity_interconnector_4_marginal_costs': 37.5999984001,\n", - " 'electricity_interconnector_5_capacity': 700.0,\n", - " 'electricity_interconnector_5_co2_emissions_future': 0.0,\n", - " 'electricity_interconnector_5_co2_emissions_present': 370.0000008,\n", - " 'electricity_interconnector_5_export_availability': 100.0,\n", - " 'electricity_interconnector_5_import_availability': 100.0,\n", - " 'electricity_interconnector_5_marginal_costs': 37.5999984001,\n", - " 'electricity_interconnector_6_capacity': 0.0,\n", - " 'electricity_interconnector_6_co2_emissions_future': 0.0,\n", - " 'electricity_interconnector_6_co2_emissions_present': 370.0000008,\n", - " 'electricity_interconnector_6_export_availability': 100.0,\n", - " 'electricity_interconnector_6_import_availability': 100.0,\n", - " 'electricity_interconnector_6_marginal_costs': 37.5999984001,\n", - " 'electricity_interconnector_7_capacity': 1000.0,\n", - " 'electricity_interconnector_7_co2_emissions_future': 0.0,\n", - " 'electricity_interconnector_7_co2_emissions_present': 370.0000008,\n", - " 'electricity_interconnector_7_export_availability': 100.0,\n", - " 'electricity_interconnector_7_import_availability': 100.0,\n", - " 'electricity_interconnector_7_marginal_costs': 37.5999984001,\n", - " 'electricity_interconnector_8_capacity': 2000.0,\n", - " 'electricity_interconnector_8_co2_emissions_future': 0.0,\n", - " 'electricity_interconnector_8_co2_emissions_present': 370.0000008,\n", - " 'electricity_interconnector_8_export_availability': 100.0,\n", - " 'electricity_interconnector_8_import_availability': 100.0,\n", - " 'electricity_interconnector_8_marginal_costs': 37.5999984001,\n", - " 'electricity_interconnector_9_capacity': 0.0,\n", - " 'electricity_interconnector_9_co2_emissions_future': 370.0000008,\n", - " 'electricity_interconnector_9_co2_emissions_present': 370.0000008,\n", - " 'electricity_interconnector_9_export_availability': 100.0,\n", - " 'electricity_interconnector_9_import_availability': 100.0,\n", - " 'electricity_interconnector_9_marginal_costs': 37.5999984001,\n", - " 'capacity_of_industry_chemical_flexibility_load_shifting_electricity': 35.0,\n", - " 'capacity_of_industry_metal_flexibility_load_shifting_electricity': 35.0,\n", - " 'capacity_of_industry_other_flexibility_load_shifting_electricity': 35.0,\n", - " 'capacity_of_industry_other_ict_flexibility_load_shifting_electricity': 30.0,\n", - " 'deficit_limit_of_industry_chemical_flexibility_load_shifting_electricity': 72.0,\n", - " 'deficit_limit_of_industry_metal_flexibility_load_shifting_electricity': 72.0,\n", - " 'deficit_limit_of_industry_other_flexibility_load_shifting_electricity': 72.0,\n", - " 'deficit_limit_of_industry_other_ict_flexibility_load_shifting_electricity': 24.0,\n", - " 'input_capacity_of_industry_chemical_flexibility_load_shifting_electricity': 35.0,\n", - " 'input_capacity_of_industry_metal_flexibility_load_shifting_electricity': 35.0,\n", - " 'input_capacity_of_industry_other_flexibility_load_shifting_electricity': 35.0,\n", - " 'input_capacity_of_industry_other_ict_flexibility_load_shifting_electricity': 30.0,\n", - " 'wta_of_industry_chemical_flexibility_load_shifting_electricity': 100.0,\n", - " 'wta_of_industry_metal_flexibility_load_shifting_electricity': 100.0,\n", - " 'wta_of_industry_other_flexibility_load_shifting_electricity': 100.0,\n", - " 'wta_of_industry_other_ict_flexibility_load_shifting_electricity': 100.0,\n", - " 'wtp_of_industry_chemicals_fertilizers_flexibility_p2h_electricity': 22.0,\n", - " 'wtp_of_industry_chemicals_other_flexibility_p2h_electricity': 22.0,\n", - " 'wtp_of_industry_chemicals_refineries_flexibility_p2h_electricity': 22.0,\n", - " 'wtp_of_industry_other_food_flexibility_p2h_electricity': 22.0,\n", - " 'wtp_of_industry_other_paper_flexibility_p2h_electricity': 22.0,\n", - " 'flexibility_residual_load_curve_moving_average': 72.0,\n", - " 'curtailment_of_buildings_solar_pv_solar_radiation': 55.0,\n", - " 'curtailment_of_energy_power_solar_pv_offshore': 55.0,\n", - " 'curtailment_of_energy_power_solar_pv_solar_radiation': 55.0,\n", - " 'curtailment_of_households_solar_pv_solar_radiation': 45.0,\n", - " 'settings_enable_storage_optimisation_transport_car_flexibility_p2p_electricity': 1.0,\n", - " 'transport_bus_using_electricity_availability': 0.0,\n", - " 'transport_car_using_electricity_availability': 17.5,\n", - " 'transport_car_using_electricity_custom_profile_charging_share': 100.0,\n", - " 'transport_car_using_electricity_fast_charging_share': 0.0,\n", - " 'transport_car_using_electricity_home_charging_share': 0.0,\n", - " 'transport_car_using_electricity_public_charging_share': 0.0,\n", - " 'transport_car_using_electricity_work_charging_share': 0.0,\n", - " 'transport_truck_using_electricity_availability': 0.0,\n", - " 'transport_van_using_electricity_availability': 0.0,\n", - " 'wta_of_transport_car_flexibility_p2p_electricity': 10.0,\n", - " 'wtp_of_transport_car_flexibility_p2p_electricity': 5.0,\n", - " 'flexibility_outdoor_temperature': 0.2125175493,\n", - " 'settings_weather_curve_set': 'default',\n", - " 'flh_of_energy_hydrogen_wind_turbine_offshore': 4000.0,\n", - " 'flh_of_energy_power_wind_turbine_coastal': 3200.000003,\n", - " 'flh_of_energy_power_wind_turbine_coastal_user_curve': 3200.000003,\n", - " 'flh_of_energy_power_wind_turbine_inland': 3200.000003,\n", - " 'flh_of_energy_power_wind_turbine_inland_user_curve': 3200.000003,\n", - " 'flh_of_energy_power_wind_turbine_offshore': 4750.000003461496,\n", - " 'flh_of_energy_power_wind_turbine_offshore_user_curve': 4750.000003461496,\n", - " 'flh_of_solar_pv_solar_radiation': 1012.334936,\n", - " 'flh_of_solar_pv_solar_radiation_user_curve': 1012.334936,\n", - " 'initial_updates_interconnector_curves': 0.0,\n", - " 'initial_updates_interconnector_prices': 0.0,\n", - " 'settings_enable_merit_order': 1.0,\n", - " 'energy_mix_capacity_per_unit_wind_turbine_inland': 3.0,\n", - " 'external_coupling_energy_production_synthetic_kerosene_demand': 0.0,\n", - " 'external_coupling_energy_production_synthetic_methanol_demand': 0.0,\n", - " 'external_coupling_molecules_other_utilisation_demand': 3.29209488358461,\n", - " 'external_coupling_industry_chemical_fertilizers_burner_coal_share': 0.0,\n", - " 'external_coupling_industry_chemical_fertilizers_burner_crude_oil_share': 0.0,\n", - " 'external_coupling_industry_chemical_fertilizers_burner_hydrogen_share': 50.6732983222066,\n", - " 'external_coupling_industry_chemical_fertilizers_burner_network_gas_share': 46.3963051101963,\n", - " 'external_coupling_industry_chemical_fertilizers_burner_wood_pellets_share': 0.0,\n", - " 'external_coupling_industry_chemical_fertilizers_combustion_ccus_capture_potential': 100.0,\n", - " 'external_coupling_industry_chemical_fertilizers_combustion_ccus_captured_co2': 0.0,\n", - " 'external_coupling_industry_chemical_fertilizers_combustion_ccus_electricity_use': 0.229514968527056,\n", - " 'external_coupling_industry_chemical_fertilizers_electricity': 475.351855618162,\n", - " 'external_coupling_industry_chemical_fertilizers_non_energetic_coal_share': 0.0,\n", - " 'external_coupling_industry_chemical_fertilizers_non_energetic_crude_oil_share': 0.0,\n", - " 'external_coupling_industry_chemical_fertilizers_non_energetic_hydrogen_share': 83.584159630957,\n", - " 'external_coupling_industry_chemical_fertilizers_non_energetic_network_gas_share': 16.415840369043,\n", - " 'external_coupling_industry_chemical_fertilizers_non_energetic_wood_pellets_share': 0.0,\n", - " 'external_coupling_industry_chemical_fertilizers_p2h_capacity': 0.0,\n", - " 'external_coupling_industry_chemical_fertilizers_processes_ccus_capture_potential': 100.0,\n", - " 'external_coupling_industry_chemical_fertilizers_processes_ccus_captured_co2': 100.0,\n", - " 'external_coupling_industry_chemical_fertilizers_processes_ccus_electricity_use': 0.229514968527056,\n", - " 'external_coupling_industry_chemical_fertilizers_residual_heat_share': 18.520027186658,\n", - " 'external_coupling_industry_chemical_fertilizers_steam_hot_water_share': 2.93039656759714,\n", - " 'external_coupling_industry_chemical_fertilizers_total_excluding_electricity': 94.05517289851,\n", - " 'external_coupling_industry_chemical_fertilizers_total_useable_heat_share': 15.4869053374752,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_ammonia_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_ammonia_output_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_crude_oil_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_diesel_output_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_electricity_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_gasoline_output_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_greengas_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_greengas_output_share': 2.5662122493785073,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_heavy_fuel_oil_output_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_hydrogen_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_hydrogen_output_share': 28.3253720842459,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_kerosene_output_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_loss_output_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_lpg_output_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_methanol_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_methanol_output_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_natural_gas_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_natural_gas_output_share': 69.10841566637559,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_not_defined_input_share': 100.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_steam_hot_water_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_total_demand': 145.02798773572636,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_waste_mix_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_other_transformation_external_coupling_node_wood_pellets_input_share': 0.0,\n", - " 'external_coupling_industry_chemical_other_burner_coal_share': 0.0,\n", - " 'external_coupling_industry_chemical_other_burner_crude_oil_share': 4.15140444622588,\n", - " 'external_coupling_industry_chemical_other_burner_hydrogen_share': 38.163121847451,\n", - " 'external_coupling_industry_chemical_other_burner_network_gas_share': 44.1422501321988,\n", - " 'external_coupling_industry_chemical_other_burner_wood_pellets_share': 0.0,\n", - " 'external_coupling_industry_chemical_other_ccus_capture_potential': 100.0,\n", - " 'external_coupling_industry_chemical_other_ccus_captured_co2': 6.11129600882643,\n", - " 'external_coupling_industry_chemical_other_ccus_electricity_use': 0.124294429762498,\n", - " 'external_coupling_industry_chemical_other_electricity': 277.599988376699,\n", - " 'external_coupling_industry_chemical_other_heater_electricity_share': 0.0,\n", - " 'external_coupling_industry_chemical_other_heatpump_water_water_electricity_share': 0.0,\n", - " 'external_coupling_industry_chemical_other_non_energetic_coal_share': 0.0,\n", - " 'external_coupling_industry_chemical_other_non_energetic_crude_oil_share': 56.6568218227432,\n", - " 'external_coupling_industry_chemical_other_non_energetic_hydrogen_share': 6.74856929748537,\n", - " 'external_coupling_industry_chemical_other_non_energetic_network_gas_share': 11.3846995406033,\n", - " 'external_coupling_industry_chemical_other_non_energetic_wood_pellets_share': 25.2099093391682,\n", - " 'external_coupling_industry_chemical_other_p2h_capacity': 522.183604084003,\n", - " 'external_coupling_industry_chemical_other_residual_heat_share': 15.4433084571522,\n", - " 'external_coupling_industry_chemical_other_steam_hot_water_share': 13.5432235741243,\n", - " 'external_coupling_industry_chemical_other_steam_recompression_electricity_share': 0.0,\n", - " 'external_coupling_industry_chemical_other_total_non_energetic': 45.7297367916897,\n", - " 'external_coupling_industry_chemical_other_useable_heat': 33.9923944655155,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_ammonia_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_ammonia_output_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_crude_oil_input_share': 100.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_diesel_output_share': 28.8754407902916,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_electricity_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_gasoline_output_share': 6.23530119017238,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_greengas_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_greengas_output_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_heavy_fuel_oil_output_share': 14.7654523402727,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_hydrogen_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_hydrogen_output_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_kerosene_output_share': 14.7523934475443,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_loss_output_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_lpg_output_share': 2.25239174447402,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_methanol_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_methanol_output_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_natural_gas_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_natural_gas_output_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_not_defined_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_not_defined_output_share': 3.58796542047281,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_steam_hot_water_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_total_demand': 1889.958629148879,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_waste_mix_input_share': 0.0,\n", - " 'external_coupling_energy_chemical_refineries_transformation_external_coupling_node_wood_pellets_input_share': 0.0,\n", - " 'external_coupling_industry_chemical_refineries_burner_coal_share': 0.0,\n", - " 'external_coupling_industry_chemical_refineries_burner_crude_oil_share': 8.55291494528118,\n", - " 'external_coupling_industry_chemical_refineries_burner_hydrogen_share': 80.3160063659157,\n", - " 'external_coupling_industry_chemical_refineries_burner_network_gas_share': 10.7766510976364,\n", - " 'external_coupling_industry_chemical_refineries_burner_wood_pellets_share': 0.0,\n", - " 'external_coupling_industry_chemical_refineries_ccus_capture_potential': 100.0,\n", - " 'external_coupling_industry_chemical_refineries_ccus_captured_co2': 100.0,\n", - " 'external_coupling_industry_chemical_refineries_ccus_electricity_use': 0.030510017109512,\n", - " 'external_coupling_industry_chemical_refineries_electricity': 105.933269100756,\n", - " 'external_coupling_industry_chemical_refineries_p2h_capacity': 455.06386174751,\n", - " 'external_coupling_industry_chemical_refineries_residual_heat_share': 28.7767084382513,\n", - " 'external_coupling_industry_chemical_refineries_steam_hot_water_share': 0.354427591166749,\n", - " 'external_coupling_industry_chemical_refineries_useable_heat': 62.5640162386857,\n", - " 'external_coupling_energy_distribution_coal_gas_chemical_feedstock_share': 0.0,\n", - " 'external_coupling_energy_distribution_coal_gas_energy_production_share': 99.99,\n", - " 'external_coupling_energy_distribution_coal_gas_final_demand_share': 0.010000000000005116,\n", - " 'external_coupling_industry_metal_steel_blastfurnace_bof_share': 0.0,\n", - " 'external_coupling_industry_metal_steel_ccus_capture_potential': 100.0,\n", - " 'external_coupling_industry_metal_steel_ccus_captured_co2': 52.5547546810199,\n", - " 'external_coupling_industry_metal_steel_ccus_electricity_use': 0.57,\n", - " 'external_coupling_industry_metal_steel_cyclonefurnace_bof_share': 0.0,\n", - " 'external_coupling_industry_metal_steel_dri_hydrogen_share': 0.0,\n", - " 'external_coupling_industry_metal_steel_dri_network_gas_share': 0.0,\n", - " 'external_coupling_industry_metal_steel_efficiency': 7.31410052617644,\n", - " 'external_coupling_industry_metal_steel_energetic_coal_gas_share': 0.0,\n", - " 'external_coupling_industry_metal_steel_energetic_coal_share': 7.76726831346224,\n", - " 'external_coupling_industry_metal_steel_energetic_cokes_share': 0.0,\n", - " 'external_coupling_industry_metal_steel_energetic_crude_oil_share': 0.0,\n", - " 'external_coupling_industry_metal_steel_energetic_electricity_share': 22.7926669333398,\n", - " 'external_coupling_industry_metal_steel_energetic_hydrogen_share': 23.6267669198569,\n", - " 'external_coupling_industry_metal_steel_energetic_network_gas_share': 45.813297833341,\n", - " 'external_coupling_industry_metal_steel_energetic_steam_hot_water_share': 0.0,\n", - " 'external_coupling_industry_metal_steel_energetic_wood_pellets_share': 0.0,\n", - " 'external_coupling_industry_metal_steel_external_coupling_share': 100.0,\n", - " 'external_coupling_industry_metal_steel_fixed_om_costs': 316684316.043427,\n", - " 'external_coupling_industry_metal_steel_investment_costs': 4309820685.96129,\n", - " 'external_coupling_industry_metal_steel_scrap_hbi_eaf_share': 0.0,\n", - " 'external_coupling_industry_metal_steel_technical_lifetime': 19.0,\n", - " 'external_coupling_industry_metal_steel_total_demand': 97.33,\n", - " 'external_coupling_industry_metal_steel_wacc': 0.08,\n", - " 'external_coupling_biogenic_waste_max_demand': 27.8493698855199,\n", - " 'external_coupling_energy_chp_supercritical_ccs_waste_mix_captured_co2': 58.8235294117647,\n", - " 'external_coupling_energy_chp_supercritical_ccs_waste_mix_electrical_efficiency': 15.3827945040516,\n", - " 'external_coupling_energy_chp_supercritical_ccs_waste_mix_heat_efficiency': 1.23427917997262,\n", - " 'external_coupling_energy_chp_supercritical_waste_mix_capacity': 133.04294558354,\n", - " 'external_coupling_energy_chp_supercritical_waste_mix_electrical_efficiency': 15.3827945040516,\n", - " 'external_coupling_energy_chp_supercritical_waste_mix_heat_efficiency': 1.23427917997262,\n", - " 'external_coupling_non_biogenic_waste_max_demand': 23.3679305603854,\n", - " 'external_coupling_waste_mix_biogenic_waste_share': 54.9694458639823,\n", - " 'external_coupling_waste_mix_non_biogenic_waste_share': 45.0305541360177,\n", - " 'capacity_of_energy_imported_ammonia_baseload': 0.0,\n", - " 'max_demand_of_biogenic_waste': 21.38166,\n", - " 'max_demand_of_dry_biomass': 62.16023,\n", - " 'max_demand_of_oily_biomass': 10.5,\n", - " 'max_demand_of_wet_biomass': 109.873,\n", - " 'co_firing_biocoal_share': 0.0,\n", - " 'co_firing_coal_share': 100.0,\n", - " 'capacity_of_energy_chp_ultra_supercritical_coal': 0.0,\n", - " 'capacity_of_energy_chp_ultra_supercritical_cofiring_coal': 0.0,\n", - " 'capacity_of_energy_power_combined_cycle_coal': 0.0,\n", - " 'capacity_of_energy_power_supercritical_coal': 0.0,\n", - " 'capacity_of_energy_power_ultra_supercritical_coal': 0.0,\n", - " 'capacity_of_energy_power_ultra_supercritical_cofiring_coal': 0.0,\n", - " 'capacity_of_energy_power_ultra_supercritical_lignite': 0.0,\n", - " 'capacity_of_energy_chp_combined_cycle_network_gas': 56.0,\n", - " 'capacity_of_energy_chp_local_engine_network_gas': 0.0,\n", - " 'capacity_of_energy_power_combined_cycle_network_gas': 5280.0,\n", - " 'capacity_of_energy_power_engine_network_gas': 0.0,\n", - " 'capacity_of_energy_power_turbine_network_gas': 9.0,\n", - " 'capacity_of_energy_power_ultra_supercritical_network_gas': 11.0,\n", - " 'capacity_of_energy_power_nuclear_gen2_uranium_oxide': 0.0,\n", - " 'capacity_of_energy_power_nuclear_gen3_uranium_oxide': 0.0,\n", - " 'capacity_of_energy_power_nuclear_small_modular_reactor_uranium_oxide': 0.0,\n", - " 'merit_order_subtype_of_energy_power_nuclear_uranium_oxide': 0.0,\n", - " 'capacity_of_energy_power_engine_diesel': 0.0,\n", - " 'capacity_of_energy_power_ultra_supercritical_crude_oil': 0.0,\n", - " 'energy_mixer_for_gas_power_fuel_bio_oil_share': 0.0,\n", - " 'energy_mixer_for_gas_power_fuel_crude_oil_share': 7.9728731956,\n", - " 'energy_mixer_for_gas_power_fuel_natural_gas_share': 92.0271268045,\n", - " 'fuel_production_coal': 0.0,\n", - " 'fuel_production_crude_oil': 0.0,\n", - " 'fuel_production_lignite': 0.0,\n", - " 'fuel_production_natural_gas': 26.0,\n", - " 'fuel_production_uranium_oxide': 0.0,\n", - " 'green_gas_total_share': 37.7,\n", - " 'natural_gas_total_share': 62.3,\n", - " 'energy_biogas_fermentation_share': 50.0,\n", - " 'energy_greengas_gasification_dry_biomass_share': 25.0259259,\n", - " 'energy_greengas_gasification_wet_biomass_share': 24.9740741,\n", - " 'energy_regasification_lng_share': 1.4544312017,\n", - " 'energy_treatment_natural_gas_share': 98.5455687984,\n", - " 'capacity_of_agriculture_chp_engine_biogas': 0.0,\n", - " 'capacity_of_agriculture_chp_engine_network_gas_dispatchable': 207.0,\n", - " 'capacity_of_agriculture_chp_engine_network_gas_must_run': 0.0,\n", - " 'capacity_of_agriculture_chp_wood_pellets': 0.0,\n", - " 'capacity_of_energy_heat_burner_ht_coal': 0.0,\n", - " 'capacity_of_energy_heat_burner_ht_crude_oil': 0.0,\n", - " 'capacity_of_energy_heat_burner_ht_hydrogen': 0.0,\n", - " 'capacity_of_energy_heat_burner_ht_network_gas': 1000.0,\n", - " 'capacity_of_energy_heat_burner_ht_waste_mix': 0.0,\n", - " 'capacity_of_energy_heat_burner_ht_wood_pellets': 200.0,\n", - " 'capacity_of_energy_heat_heatpump_water_water_ht_electricity': 1500.0,\n", - " 'capacity_of_energy_heat_solar_ht_solar_thermal': 2500.0,\n", - " 'capacity_of_energy_heat_well_deep_ht_geothermal': 1400.0,\n", - " 'volume_of_ht_imported_heat': 0.0,\n", - " 'volume_of_ht_residual_heat': 25.714236461457922,\n", - " 'energy_heat_network_storage_ht_loss_share': 30.0000068049,\n", - " 'energy_heat_network_storage_ht_steam_hot_water_output_capacity_share': 200.0,\n", - " 'heat_storage_enabled_ht': 1.0,\n", - " 'energy_heat_distribution_ht_loss_share': 15.0,\n", - " 'co2_emissions_of_imported_heat': 35.97,\n", - " 'capacity_of_industry_chp_combined_cycle_gas_power_fuelmix': 478.0,\n", - " 'capacity_of_industry_chp_engine_gas_power_fuelmix': 62.0,\n", - " 'capacity_of_industry_chp_turbine_gas_power_fuelmix': 647.0,\n", - " 'capacity_of_industry_chp_turbine_hydrogen': 0.0,\n", - " 'capacity_of_industry_chp_ultra_supercritical_coal': 0.0,\n", - " 'capacity_of_industry_chp_wood_pellets': 0.0,\n", - " 'capacity_of_industry_heat_burner_coal': 0.0,\n", - " 'capacity_of_industry_heat_burner_crude_oil': 0.0,\n", - " 'capacity_of_industry_heat_burner_hydrogen': 0.0,\n", - " 'capacity_of_industry_heat_burner_lignite': 0.0,\n", - " 'capacity_of_industry_heat_well_geothermal': 0.0,\n", - " 'capacity_of_energy_hydrogen_ammonia_reformer_must_run': 0.0,\n", - " 'capacity_of_energy_hydrogen_autothermal_reformer_must_run': 0.0,\n", - " 'capacity_of_energy_hydrogen_biomass_gasification': 201.59999999999997,\n", - " 'capacity_of_energy_hydrogen_solar_pv_solar_radiation': 0.0,\n", - " 'capacity_of_energy_hydrogen_steam_methane_reformer_must_run': 2422.711775504852,\n", - " 'capacity_of_energy_hydrogen_wind_turbine_offshore': 2640.0,\n", - " 'capacity_of_energy_imported_hydrogen_baseload': 5459.0,\n", - " 'capacity_of_energy_hydrogen_storage_salt_cavern': 428.64444379753854,\n", - " 'volume_of_energy_hydrogen_storage_salt_cavern': 11.151657026441995,\n", - " 'energy_hydrogen_distribution_compressed_trucks_share': 1.0,\n", - " 'energy_hydrogen_transport_pipelines_share': 99.0,\n", - " 'agriculture_bio_kerosene_in_crude_oil_share': 0.0,\n", - " 'agriculture_biodiesel_in_crude_oil_share': 53.5628368135,\n", - " 'agriculture_diesel_in_crude_oil_share': 42.975430639,\n", - " 'agriculture_kerosene_in_crude_oil_share': 0.0,\n", - " 'agriculture_lpg_in_crude_oil_share': 3.4617325477,\n", - " 'agriculture_other_bio_oil_in_crude_oil_share': 0.0,\n", - " 'agriculture_other_oil_in_crude_oil_share': 0.0,\n", - " 'buildings_bio_kerosene_in_crude_oil_share': 0.0,\n", - " 'buildings_biodiesel_in_crude_oil_share': 0.0,\n", - " 'buildings_diesel_in_crude_oil_share': 54.3798623065,\n", - " 'buildings_kerosene_in_crude_oil_share': 0.114329433,\n", - " 'buildings_lpg_in_crude_oil_share': 42.7920472269,\n", - " 'buildings_other_bio_oil_in_crude_oil_share': 2.3839238021,\n", - " 'buildings_other_oil_in_crude_oil_share': 0.3298372318,\n", - " 'households_bio_kerosene_in_crude_oil_share': 0.0,\n", - " 'households_biodiesel_in_crude_oil_share': 0.0,\n", - " 'households_diesel_in_crude_oil_share': 20.1462563364,\n", - " 'households_kerosene_in_crude_oil_share': 15.5535857733,\n", - " 'households_lpg_in_crude_oil_share': 64.3001578904,\n", - " 'households_other_bio_oil_in_crude_oil_share': 0.0,\n", - " 'households_other_oil_in_crude_oil_share': 0.0,\n", - " 'industry_bio_kerosene_in_crude_oil_share': 0.0,\n", - " 'industry_biodiesel_in_crude_oil_share': 0.035695073,\n", - " 'industry_diesel_in_crude_oil_share': 0.006797406,\n", - " 'industry_kerosene_in_crude_oil_share': 0.0,\n", - " 'industry_lpg_in_crude_oil_share': 0.526530287,\n", - " 'industry_other_bio_oil_in_crude_oil_share': 33.70284273,\n", - " 'industry_other_oil_in_crude_oil_share': 65.72813451,\n", - " 'capacity_of_energy_chp_local_engine_biogas': 105.2173341123,\n", - " 'capacity_of_energy_chp_local_wood_pellets_dispatchable': 49.4967396253,\n", - " 'capacity_of_energy_power_geothermal': 0.0,\n", - " 'capacity_of_energy_power_hydro_river': 37.0013815462,\n", - " 'capacity_of_energy_power_combined_cycle_hydrogen': 3520.0,\n", - " 'capacity_of_energy_power_turbine_hydrogen': 7040.0,\n", - " 'capacity_of_buildings_solar_pv_solar_radiation': 44300.0,\n", - " 'capacity_of_energy_battery_solar_pv_solar_radiation': 0.0,\n", - " 'capacity_of_energy_power_solar_pv_offshore': 0.0,\n", - " 'capacity_of_energy_power_solar_pv_solar_radiation': 41800.0,\n", - " 'capacity_of_households_solar_pv_solar_radiation': 40000.0,\n", - " 'capacity_of_energy_chp_supercritical_waste_mix': 894.6490091117,\n", - " 'capacity_of_energy_power_supercritical_waste_mix': 0.0,\n", - " 'capacity_of_energy_battery_wind_turbine_inland': 0.0,\n", - " 'capacity_of_energy_power_wind_turbine_coastal': 4000.0,\n", - " 'capacity_of_energy_power_wind_turbine_inland': 8100.0,\n", - " 'capacity_of_energy_power_wind_turbine_offshore': 32000.0}" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# We also distinguish between inputs and user_values. Usually user values are more interesting:\n", - "user_values = scenario.user_values()\n", - "# Check if we can make this also to_dataframe\n", - "user_values" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "fca99519", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Empty DataFrame\n", - "Columns: []\n", - "Index: []\n" - ] - } - ], - "source": [ - "# Execute gqueries to fetch data from ETM (incl. units)\n", - "gqueries = scenario.results()\n", - "print(gqueries)" - ] - }, - { - "cell_type": "markdown", - "id": "fd5267db", - "metadata": {}, - "source": [ - "There are no default gqueries, you need to specify them yourself - hence the empty dataframe ." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "ed984767", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " future\n", - "gquery unit \n", - "dashboard_emissions factor -0.780545\n" - ] - } - ], - "source": [ - "scenario.add_queries([\"dashboard_emissions\"])\n", - "gqueries = scenario.results()\n", - "print(gqueries)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5b0d61ec", - "metadata": {}, - "outputs": [], - "source": [ - "# Optional: Fetch hourly electricity price profiles from ETM\n", - "custom_curves = scenario.custom_curves_series()\n", - "for key in custom_curves: print(key)" - ] - }, - { - "cell_type": "markdown", - "id": "ddd8fa69", - "metadata": {}, - "source": [ - "#TODO: Discuss\n", - "\n", - "Do you want a convenient way to only get the custom curves related to electricity price? Or are you more interested in the carrier curves? " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6a57a5bf", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'merit_order': agriculture_chp_engine_biogas.output (MW) \\\n", - " 0 0.0 \n", - " 1 0.0 \n", - " 2 0.0 \n", - " 3 0.0 \n", - " 4 0.0 \n", - " ... ... \n", - " 8755 0.0 \n", - " 8756 0.0 \n", - " 8757 0.0 \n", - " 8758 0.0 \n", - " 8759 0.0 \n", - " \n", - " agriculture_chp_engine_network_gas_dispatchable.output (MW) \\\n", - " 0 0.0 \n", - " 1 0.0 \n", - " 2 0.0 \n", - " 3 0.0 \n", - " 4 0.0 \n", - " ... ... \n", - " 8755 0.0 \n", - " 8756 0.0 \n", - " 8757 0.0 \n", - " 8758 0.0 \n", - " 8759 0.0 \n", - " \n", - " agriculture_chp_engine_network_gas_must_run.output (MW) \\\n", - " 0 0.0 \n", - " 1 0.0 \n", - " 2 0.0 \n", - " 3 0.0 \n", - " 4 0.0 \n", - " ... ... \n", - " 8755 0.0 \n", - " 8756 0.0 \n", - " 8757 0.0 \n", - " 8758 0.0 \n", - " 8759 0.0 \n", - " \n", - " agriculture_chp_wood_pellets.output (MW) \\\n", - " 0 0.0 \n", - " 1 0.0 \n", - " 2 0.0 \n", - " 3 0.0 \n", - " 4 0.0 \n", - " ... ... \n", - " 8755 0.0 \n", - " 8756 0.0 \n", - " 8757 0.0 \n", - " 8758 0.0 \n", - " 8759 0.0 \n", - " \n", - " agriculture_flexibility_p2h_hydrogen_electricity.output (MW) \\\n", - " 0 0.0 \n", - " 1 0.0 \n", - " 2 0.0 \n", - " 3 0.0 \n", - " 4 0.0 \n", - " ... ... \n", - " 8755 0.0 \n", - " 8756 0.0 \n", - " 8757 0.0 \n", - " 8758 0.0 \n", - " 8759 0.0 \n", - " \n", - " agriculture_flexibility_p2h_network_gas_electricity.output (MW) \\\n", - " 0 0.0 \n", - " 1 0.0 \n", - " 2 0.0 \n", - " 3 0.0 \n", - " 4 0.0 \n", - " ... ... \n", - " 8755 0.0 \n", - " 8756 0.0 \n", - " 8757 0.0 \n", - " 8758 0.0 \n", - " 8759 0.0 \n", - " \n", - " buildings_solar_pv_solar_radiation.output (MW) \\\n", - " 0 0.0 \n", - " 1 0.0 \n", - " 2 0.0 \n", - " 3 0.0 \n", - " 4 0.0 \n", - " ... ... \n", - " 8755 0.0 \n", - " 8756 0.0 \n", - " 8757 0.0 \n", - " 8758 0.0 \n", - " 8759 0.0 \n", - " \n", - " energy_battery_solar_electricity.output (MW) \\\n", - " 0 0.0 \n", - " 1 0.0 \n", - " 2 0.0 \n", - " 3 0.0 \n", - " 4 0.0 \n", - " ... ... \n", - " 8755 0.0 \n", - " 8756 0.0 \n", - " 8757 0.0 \n", - " 8758 0.0 \n", - " 8759 0.0 \n", - " \n", - " energy_battery_wind_electricity.output (MW) \\\n", - " 0 0.0 \n", - " 1 0.0 \n", - " 2 0.0 \n", - " 3 0.0 \n", - " 4 0.0 \n", - " ... ... \n", - " 8755 0.0 \n", - " 8756 0.0 \n", - " 8757 0.0 \n", - " 8758 0.0 \n", - " 8759 0.0 \n", - " \n", - " energy_chp_coal_gas.output (MW) ... \\\n", - " 0 0.0 ... \n", - " 1 0.0 ... \n", - " 2 0.0 ... \n", - " 3 0.0 ... \n", - " 4 0.0 ... \n", - " ... ... ... \n", - " 8755 0.0 ... \n", - " 8756 0.0 ... \n", - " 8757 0.0 ... \n", - " 8758 0.0 ... \n", - " 8759 0.0 ... \n", - " \n", - " transport_motorcycle_using_electricity.input (MW) \\\n", - " 0 6.0868 \n", - " 1 2.2664 \n", - " 2 1.0671 \n", - " 3 0.7418 \n", - " 4 0.7422 \n", - " ... ... \n", - " 8755 29.4081 \n", - " 8756 19.4375 \n", - " 8757 11.9942 \n", - " 8758 10.6178 \n", - " 8759 9.7232 \n", - " \n", - " transport_passenger_train_using_electricity.input (MW) \\\n", - " 0 100.6524 \n", - " 1 37.4773 \n", - " 2 17.6460 \n", - " 3 12.2670 \n", - " 4 12.2725 \n", - " ... ... \n", - " 8755 486.2939 \n", - " 8756 321.4203 \n", - " 8757 198.3364 \n", - " 8758 175.5763 \n", - " 8759 160.7839 \n", - " \n", - " transport_plane_using_electricity.input (MW) \\\n", - " 0 2.0642 \n", - " 1 2.0642 \n", - " 2 2.0642 \n", - " 3 2.0642 \n", - " 4 2.0642 \n", - " ... ... \n", - " 8755 2.0642 \n", - " 8756 2.0642 \n", - " 8757 2.0642 \n", - " 8758 2.0642 \n", - " 8759 2.0642 \n", - " \n", - " transport_ship_using_electricity.input (MW) \\\n", - " 0 29.8321 \n", - " 1 30.9370 \n", - " 2 30.9370 \n", - " 3 30.9370 \n", - " 4 30.9370 \n", - " ... ... \n", - " 8755 33.7494 \n", - " 8756 31.9414 \n", - " 8757 26.5174 \n", - " 8758 26.5174 \n", - " 8759 26.5174 \n", - " \n", - " transport_tram_using_electricity.input (MW) \\\n", - " 0 1.8122 \n", - " 1 0.6748 \n", - " 2 0.3177 \n", - " 3 0.2209 \n", - " 4 0.2210 \n", - " ... ... \n", - " 8755 8.7557 \n", - " 8756 5.7871 \n", - " 8757 3.5710 \n", - " 8758 3.1612 \n", - " 8759 2.8949 \n", - " \n", - " transport_truck_flexibility_p2p_electricity.input (MW) \\\n", - " 0 0.0 \n", - " 1 0.0 \n", - " 2 0.0 \n", - " 3 0.0 \n", - " 4 0.0 \n", - " ... ... \n", - " 8755 0.0 \n", - " 8756 0.0 \n", - " 8757 0.0 \n", - " 8758 0.0 \n", - " 8759 0.0 \n", - " \n", - " transport_truck_using_electricity.input (MW) \\\n", - " 0 301.1724 \n", - " 1 255.8993 \n", - " 2 255.7102 \n", - " 3 255.7102 \n", - " 4 255.7562 \n", - " ... ... \n", - " 8755 3632.1744 \n", - " 8756 3654.7956 \n", - " 8757 3290.3259 \n", - " 8758 2912.0708 \n", - " 8759 2633.8673 \n", - " \n", - " transport_van_flexibility_p2p_electricity.input (MW) \\\n", - " 0 0.0 \n", - " 1 0.0 \n", - " 2 0.0 \n", - " 3 0.0 \n", - " 4 0.0 \n", - " ... ... \n", - " 8755 0.0 \n", - " 8756 0.0 \n", - " 8757 0.0 \n", - " 8758 0.0 \n", - " 8759 0.0 \n", - " \n", - " transport_van_using_electricity.input (MW) deficit \n", - " 0 225.7143 0.0 \n", - " 1 183.4868 0.0 \n", - " 2 164.2823 0.0 \n", - " 3 152.3737 0.0 \n", - " 4 145.7294 0.0 \n", - " ... ... ... \n", - " 8755 1951.6292 0.0 \n", - " 8756 1756.9386 0.0 \n", - " 8757 1423.4249 0.0 \n", - " 8758 1141.5322 0.0 \n", - " 8759 1016.2915 0.0 \n", - " \n", - " [8760 rows x 284 columns],\n", - " 'electricity_price': Price (Euros)\n", - " 0 22.00\n", - " 1 22.00\n", - " 2 14.48\n", - " 3 0.01\n", - " 4 0.02\n", - " ... ...\n", - " 8755 0.01\n", - " 8756 0.01\n", - " 8757 0.01\n", - " 8758 0.02\n", - " 8759 0.00\n", - " \n", - " [8760 rows x 1 columns],\n", - " 'residual_load': Electricity imbalance (MW) Heat network imbalance (MW) \\\n", - " 0 -13983.316952 -7650.762461 \n", - " 1 -15074.662973 -2063.605451 \n", - " 2 -16392.624827 -236.749238 \n", - " 3 -18084.064350 -7257.637108 \n", - " 4 -18698.295084 -6777.697551 \n", - " ... ... ... \n", - " 8755 -10461.245439 -2908.084718 \n", - " 8756 -12120.991687 -3196.334417 \n", - " 8757 -14277.783965 -3698.939229 \n", - " 8758 -12769.564116 -4265.195281 \n", - " 8759 -14036.141852 -5382.621751 \n", - " \n", - " Network gas imbalance (MW) Hydrogen imbalance (MW) \\\n", - " 0 -4781.342416 -10122.196681 \n", - " 1 -3483.696797 -9409.232452 \n", - " 2 -3475.263835 -9413.765713 \n", - " 3 -4570.081283 -10137.602583 \n", - " 4 -4175.876527 -10138.862839 \n", - " ... ... ... \n", - " 8755 -1895.359218 -10120.066139 \n", - " 8756 -2098.834088 -10121.282579 \n", - " 8757 -2551.241935 -10122.752998 \n", - " 8758 -2865.165589 -10123.043235 \n", - " 8759 -3823.803492 -10123.672193 \n", - " \n", - " Network gas imbalance (short timescale) (MW) \\\n", - " 0 -1833.873449 \n", - " 1 -574.860579 \n", - " 2 -605.611833 \n", - " 3 -1739.687791 \n", - " 4 -1383.891692 \n", - " ... ... \n", - " 8755 1241.238351 \n", - " 8756 1013.073005 \n", - " 8757 519.009108 \n", - " 8758 160.843578 \n", - " 8759 -837.070806 \n", - " \n", - " Network gas imbalance (long timescale) (MW) \\\n", - " 0 -2947.468967 \n", - " 1 -2908.836218 \n", - " 2 -2869.652003 \n", - " 3 -2830.393493 \n", - " 4 -2791.984835 \n", - " ... ... \n", - " 8755 -3136.597568 \n", - " 8756 -3111.907093 \n", - " 8757 -3070.251043 \n", - " 8758 -3026.009167 \n", - " 8759 -2986.732687 \n", - " \n", - " Hydrogen imblanace (short timescale) (MW) \\\n", - " 0 -171.967531 \n", - " 1 529.822127 \n", - " 2 514.208089 \n", - " 3 -220.919672 \n", - " 4 -232.647398 \n", - " ... ... \n", - " 8755 -83.391025 \n", - " 8756 -103.105800 \n", - " 8757 -122.762259 \n", - " 8758 -140.510517 \n", - " 8759 -159.955285 \n", - " \n", - " Hydrogen imblanace (long timescale) (MW) \n", - " 0 -9950.229150 \n", - " 1 -9939.054580 \n", - " 2 -9927.973802 \n", - " 3 -9916.682911 \n", - " 4 -9906.215441 \n", - " ... ... \n", - " 8755 -10036.675114 \n", - " 8756 -10018.176778 \n", - " 8757 -9999.990739 \n", - " 8758 -9982.532718 \n", - " 8759 -9963.716908 \n", - " \n", - " [8760 rows x 8 columns]}" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Optional: Fetch hourly carrier profiles from ETM\n", - "output_curves = scenario.get_output_curves(carrier_type='electricity')\n", - "# Also serval carriers at ones. One carrier per sheet, with carrier name as sheet name\n", - "output_curves" - ] - }, - { - "cell_type": "markdown", - "id": "f29ee72f", - "metadata": {}, - "source": [ - "As you can see, this returns a dictionary of dataframes, including the merit_order, electricity_price and residual_load dataframes. If you want a specific output, just request it:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5366a81c", - "metadata": {}, - "outputs": [], - "source": [ - "electricity_price = scenario.output_curve(curve_name='electricity_price')\n", - "# Also in it's own sheet\n", - "# Hydrogen price also in it's own sheet\n", - "\n", - "# Nice to have: also make other downloads like sankey and energy_flows available\n", - "electricity_price" - ] - }, - { - "cell_type": "markdown", - "id": "638116c5", - "metadata": {}, - "source": [ - "**Export scenarios to Excel**\n", - "\n", - "Just like with the original implementation, everything in the scenario can be exported to an excel file. This is done via a \"Scenario Packer\" which organises the data usefully to display via excel.\n", - "\n", - "This example is simplified in the sense that we just add everything in the scenario to the packer, but you can also add specific inputs, gqueries curves etc to a packer (see more examples in the scenario_to_excel notebook)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4266f27d", - "metadata": {}, - "outputs": [], - "source": [ - "from pyetm.models import ScenarioPacker\n", - "\n", - "packer = ScenarioPacker()\n", - "packer.add(scenario, scenario2, scenario3)\n", - "packer.to_excel('folder/my_excel.xlsx')\n", - "\n", - "# Specify explicitly what to export in to_excel\n", - "packer.to_excel('folder/my_excel.xlsx', include_curves=True)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "pyetm-qKH2ozgc", - "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.12.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/old_examples/scenario_to_excel.ipynb b/examples/old_examples/scenario_to_excel.ipynb deleted file mode 100644 index 174d273..0000000 --- a/examples/old_examples/scenario_to_excel.ipynb +++ /dev/null @@ -1,280 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "930300db", - "metadata": {}, - "source": [ - "## Preamble" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "4e9a9e7c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Environment setup complete\n", - " Using ETM API at http://localhost:3000/api/v3\n", - " Token loaded? True\n", - "API connection ready\n" - ] - } - ], - "source": [ - "from example_helpers import setup_notebook\n", - "from pyetm.models import Scenario\n", - "\n", - "setup_notebook()" - ] - }, - { - "cell_type": "markdown", - "id": "1f4414c0", - "metadata": {}, - "source": [ - "## Picking my scenario" - ] - }, - { - "cell_type": "markdown", - "id": "c3cd461f", - "metadata": {}, - "source": [ - "Use an API session ID to load up one of your scenarios.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "c4f42def", - "metadata": {}, - "outputs": [], - "source": [ - "# Example beta scenario\n", - "scenario = Scenario.load(2690456)\n", - "\n", - "# Example pro scenario\n", - "# scenario = Scenario.load(1340415)" - ] - }, - { - "cell_type": "markdown", - "id": "8d946757", - "metadata": {}, - "source": [ - "## Create a Packer\n", - "\n", - "The scenario packer allows you to collect scenarios and define what information you want to extract from all of them. It helps to collect all info into dataframes or Excel.\n", - "\n", - "- **Main info** with `main_info()` you display all meta information about the scenarios, like area code and end years;\n", - "\n", - "- Input settings\n", - " - **Inputs** `inputs()` displays all inputs for the scenario including their unit, default and user-set values;\n", - " - **Custom curves** using `custom_curves()` you can retrieve and display the curves uploaded to the scenario;\n", - " - **Sortables** `sortables()` shows all user sortables set for the scenario, like heat network orders, etc;\n", - "- Outputs:\n", - " - **GQuery results** with `gquery_results()` you can retrieve the queries that were prepared for the scenarios;\n", - " - **Output curves** `output_curves()` downloads and shows the carreir curves requested for the scenarios.\n", - "\n", - "\n", - "Scenarios can be added to a packer in multiple ways:\n", - "\n", - "- `add(*scenarios)` will ready the scenario for all 6 packs (or Excel tabs) described above\n", - "- `add_inputs(*scenarios)` will only ready the scenarios for the inputs dataframe or Excel tab\n", - "- `add_sortables(*scenarios)` will only ready the scenarios for the sortables dataframe or Excel tab\n", - "- `add_custom_curves(*scenarios)` will only ready the scenarios for the custom_curves dataframe or Excel tab\n", - "- `add_output_curves(*scenarios)` will only ready the scenarios for the output_curves dataframe or Excel tab\n", - "\n", - "If a scenario is added in any of the individual packs, it will be automatically added for main info and prepared gqueries." - ] - }, - { - "cell_type": "markdown", - "id": "a9d9214a", - "metadata": {}, - "source": [ - "-----------------\n", - "\n", - "NOTE: the packer currently only works for a single scenario!\n", - "\n", - "-----------------" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "fa8ac6ab", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " II3050v2_NAT_2050 \\\n", - "input \n", - "agriculture_bio_kerosene_in_crude_oil_share 0.0 \n", - "agriculture_biodiesel_in_crude_oil_share 0.0 \n", - "agriculture_burner_crude_oil_share 0.0 \n", - "agriculture_burner_hydrogen_share 0.0 \n", - "agriculture_burner_network_gas_share 0.0 \n", - "... ... \n", - "wtp_of_industry_chemicals_other_flexibility_p2h... 25.0 \n", - "wtp_of_industry_chemicals_refineries_flexibilit... 25.0 \n", - "wtp_of_industry_other_food_flexibility_p2h_elec... 25.0 \n", - "wtp_of_industry_other_paper_flexibility_p2h_ele... 25.0 \n", - "wtp_of_transport_car_flexibility_p2p_electricity 5.0 \n", - "\n", - " II3050v2_EUR_2050 \n", - "input \n", - "agriculture_bio_kerosene_in_crude_oil_share 0.0 \n", - "agriculture_biodiesel_in_crude_oil_share 0.0 \n", - "agriculture_burner_crude_oil_share 0.0 \n", - "agriculture_burner_hydrogen_share 0.0 \n", - "agriculture_burner_network_gas_share 0.0 \n", - "... ... \n", - "wtp_of_industry_chemicals_other_flexibility_p2h... 25.0 \n", - "wtp_of_industry_chemicals_refineries_flexibilit... 25.0 \n", - "wtp_of_industry_other_food_flexibility_p2h_elec... 25.0 \n", - "wtp_of_industry_other_paper_flexibility_p2h_ele... 25.0 \n", - "wtp_of_transport_car_flexibility_p2p_electricity 5.0 \n", - "\n", - "[1318 rows x 2 columns]\n", - " 2690455 2690456\n", - "scenario \n", - "end_year 2050 2050\n", - "private False False\n", - "area_code nl2019 nl2019\n", - "template None None\n" - ] - } - ], - "source": [ - "from pyetm.models import ScenarioPacker\n", - "\n", - "packer = ScenarioPacker()\n", - "\n", - "scenario = Scenario.load(2690456)\n", - "scenario2 = Scenario.load(2690455)\n", - "# Ready the scenario for inputs\n", - "packer.add_inputs(scenario)\n", - "packer.add_inputs(scenario2)\n", - "\n", - "# Main info is automatically readied\n", - "print(packer.inputs())\n", - "print(packer.main_info())\n" - ] - }, - { - "cell_type": "markdown", - "id": "ed1cefd4", - "metadata": {}, - "source": [ - "When you add gqueries to a scenario which is connected to the packer, these queries will be readied for the pack." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "739e2a12", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " II3050v2_EUR_2050\n", - " future\n", - "gquery unit \n", - "dashboard_total_costs bln_euro 69.189065\n", - "dashboard_co2_emissions_versus_start_year factor -1.026581\n" - ] - } - ], - "source": [ - "scenario.add_queries(\n", - " [\"dashboard_total_costs\", \"dashboard_co2_emissions_versus_start_year\"]\n", - ")\n", - "\n", - "print(packer.gquery_results())" - ] - }, - { - "cell_type": "markdown", - "id": "c924ac3d", - "metadata": {}, - "source": [ - "Queries can be added on-the-go. When the packer is exported to Excel, all requested queries will show up." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "ce5e2bdb", - "metadata": {}, - "outputs": [], - "source": [ - "scenario.add_queries(\n", - " [\"dashboard_emissions\"]\n", - ")\n", - "\n", - "scenario2.add_queries(\n", - " [\"dashboard_emissions\"]\n", - ")\n", - "\n", - "# packer.to_excel('my_excel.xlsx')" - ] - }, - { - "cell_type": "markdown", - "id": "68ce86c3", - "metadata": {}, - "source": [ - "Output curves:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "bffd54b8", - "metadata": {}, - "outputs": [], - "source": [ - "packer.add_output_curves(scenario)\n", - "packer.add_output_curves(scenario2)\n", - "packer.add_custom_curves(scenario)\n", - "packer.add_custom_curves(scenario2)\n", - "packer.add_sortables(scenario)\n", - "packer.add_sortables(scenario2)\n", - "\n", - "\n", - "packer.to_excel('full_scenario.xlsx')" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "pyetm-qKH2ozgc", - "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.12.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/old_examples/serialization_deserialization.ipynb b/examples/old_examples/serialization_deserialization.ipynb deleted file mode 100644 index b2b130a..0000000 --- a/examples/old_examples/serialization_deserialization.ipynb +++ /dev/null @@ -1,241 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "a1b2c3d4", - "metadata": {}, - "source": [ - "# Input Serialization/Deserialization\n", - "\n", - "This notebook demonstrates the serialization and deserialization capabilities of the `Inputs` model.\n", - "We'll load a scenario, serialize its inputs to a DataFrame, deserialize them back to objects,\n", - "and verify with some stats.\n", - "\n", - "## Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "setup_cell", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Environment setup complete\n", - " Using ETM API at https://beta.engine.energytransitionmodel.com/api/v3\n", - " Token loaded? True\n", - "API connection ready\n" - ] - } - ], - "source": [ - "from example_helpers import setup_notebook\n", - "from pyetm.models import Scenario\n", - "\n", - "setup_notebook()\n", - "scenario = Scenario.load(2690288)\n", - "scenario.update_user_values({\n", - " \"climate_relevant_co2_biomass_gas_future\": 20.0\n", - "})" - ] - }, - { - "cell_type": "markdown", - "id": "original_data", - "metadata": {}, - "source": [ - "## Step 1: Examine Original Inputs\n", - "\n", - "Let's look at the original inputs and collect some basic statistics:" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "examine_original", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Some inputs:\n", - " climate_relevant_co2_biomass_gas_future (%): default=0.0, user=20.0\n", - " climate_relevant_co2_biomass_gas_present (%): default=0.0, user=None\n", - " climate_relevant_co2_biomass_liquid_future (%): default=0.0, user=None\n" - ] - } - ], - "source": [ - "original_inputs = scenario.inputs\n", - "\n", - "print(\"Some inputs:\")\n", - "for i, input in enumerate(original_inputs):\n", - " if i < 3:\n", - " print(f\" {input.key} ({input.unit}): default={input.default}, user={input.user}\")\n", - " elif i == 3:\n", - " break" - ] - }, - { - "cell_type": "markdown", - "id": "serialization", - "metadata": {}, - "source": [ - "## Step 2: Serialize to DataFrame\n", - "\n", - "Convert the inputs to a DataFrame for inspection and storage:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "serialize", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DataFrame shape: (1318, 5)\n", - "DataFrame index: ['input', 'unit']\n", - "DataFrame columns: ['user', 'default', 'min', 'max', 'disabled']\n", - " user default min max \\\n", - "input unit \n", - "climate_relevant_co2_biomass_gas_future % 20.0 0.0 0.0 100.0 \n", - "climate_relevant_co2_biomass_gas_present % NaN 0.0 0.0 100.0 \n", - "climate_relevant_co2_biomass_liquid_future % NaN 0.0 0.0 100.0 \n", - "climate_relevant_co2_biomass_liquid_present % NaN 0.0 0.0 100.0 \n", - "climate_relevant_co2_biomass_solid_future % NaN 0.0 0.0 100.0 \n", - "\n", - " disabled \n", - "input unit \n", - "climate_relevant_co2_biomass_gas_future % False \n", - "climate_relevant_co2_biomass_gas_present % False \n", - "climate_relevant_co2_biomass_liquid_future % False \n", - "climate_relevant_co2_biomass_liquid_present % False \n", - "climate_relevant_co2_biomass_solid_future % False \n" - ] - } - ], - "source": [ - "# Serialize to DataFrame with multiple columns\n", - "df = original_inputs.to_dataframe(columns=[\"user\", \"default\", \"min\", \"max\", \"disabled\"])\n", - "\n", - "print(f\"DataFrame shape: {df.shape}\")\n", - "print(f\"DataFrame index: {df.index.names}\")\n", - "print(f\"DataFrame columns: {list(df.columns)}\")\n", - "\n", - "print(df.head())" - ] - }, - { - "cell_type": "markdown", - "id": "deserialization", - "metadata": {}, - "source": [ - "## Step 3: Deserialize from DataFrame\n", - "\n", - "Convert the DataFrame back to Input objects:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "deserialize", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DataFrame shape: (1318, 1)\n", - "DataFrame index: ['input', 'unit']\n", - "DataFrame columns: ['user']\n", - " user\n", - "input unit \n", - "climate_relevant_co2_biomass_gas_future % 20.0\n", - "climate_relevant_co2_biomass_gas_present % NaN\n", - "climate_relevant_co2_biomass_liquid_future % NaN\n", - "climate_relevant_co2_biomass_liquid_present % NaN\n", - "climate_relevant_co2_biomass_solid_future % NaN\n", - " user default min max \\\n", - "input unit \n", - "climate_relevant_co2_biomass_gas_future % 20.0 0.0 0.0 100.0 \n", - "climate_relevant_co2_biomass_gas_present % NaN 0.0 0.0 100.0 \n", - "climate_relevant_co2_biomass_liquid_future % NaN 0.0 0.0 100.0 \n", - "climate_relevant_co2_biomass_liquid_present % NaN 0.0 0.0 100.0 \n", - "climate_relevant_co2_biomass_solid_future % NaN 0.0 0.0 100.0 \n", - "\n", - " disabled \n", - "input unit \n", - "climate_relevant_co2_biomass_gas_future % False \n", - "climate_relevant_co2_biomass_gas_present % False \n", - "climate_relevant_co2_biomass_liquid_future % False \n", - "climate_relevant_co2_biomass_liquid_present % False \n", - "climate_relevant_co2_biomass_solid_future % False \n", - "\n", - "No deserialization warnings!\n", - "Same inputs:\n", - " climate_relevant_co2_biomass_gas_future (%): default=0.0, user=20.0\n", - " climate_relevant_co2_biomass_gas_present (%): default=0.0, user=None\n", - " climate_relevant_co2_biomass_liquid_future (%): default=0.0, user=None\n" - ] - } - ], - "source": [ - "scenario.set_user_values_from_dataframe(df)\n", - "reconstructed_inputs = scenario.inputs\n", - "\n", - "print(f\"DataFrame shape: {reconstructed_inputs.to_dataframe().shape}\")\n", - "print(f\"DataFrame index: {reconstructed_inputs.to_dataframe().index.names}\")\n", - "print(f\"DataFrame columns: {list(reconstructed_inputs.to_dataframe().columns)}\")\n", - "\n", - "print(reconstructed_inputs.to_dataframe().head())\n", - "\n", - "df_again = reconstructed_inputs.to_dataframe(columns=[\"user\", \"default\", \"min\", \"max\", \"disabled\"])\n", - "\n", - "print(df_again.head())\n", - "\n", - "# Check for warnings during deserialization\n", - "if reconstructed_inputs.warnings:\n", - " print(f\"\\nDeserialization warnings ({len(reconstructed_inputs.warnings)}):\")\n", - " reconstructed_inputs.show_warnings()\n", - "else:\n", - " print(\"\\nNo deserialization warnings!\")\n", - "\n", - "\n", - "print(\"Same inputs:\")\n", - "for i, input in enumerate(reconstructed_inputs):\n", - " if i < 3:\n", - " print(f\" {input.key} ({input.unit}): default={input.default}, user={input.user}\")\n", - " elif i == 3:\n", - " break" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "pyetm-FWBOHxp3", - "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.12.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/pyproject.toml b/pyproject.toml index 882a903..6a76a4f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ homepage = "https://github.com/quintel/pyetm" repository = "https://github.com/quintel/pyetm" documentation = "https://docs.energytransitionmodel.com/main/pyetm/introduction" keywords = ["energy", "transition", "modeling", "api"] -packages = [{ include = "pyetm" }] +packages = [{ include = "pyetm", from = "src" }] [tool.poetry.dependencies] python = ">=3.12,<4.0" diff --git a/src/pyetm/config/settings.py b/src/pyetm/config/settings.py index 3119b40..a04ed36 100644 --- a/src/pyetm/config/settings.py +++ b/src/pyetm/config/settings.py @@ -1,4 +1,5 @@ from pathlib import Path +import re import yaml, os from typing import Optional, ClassVar, List, Annotated from pydantic import Field, ValidationError, HttpUrl, field_validator @@ -7,6 +8,7 @@ PROJECT_ROOT = Path(__file__).resolve().parents[3] CONFIG_FILE = PROJECT_ROOT / "config.yml" + class AppConfig(BaseSettings): """ Application configuration loaded from YAML. @@ -23,6 +25,13 @@ class AppConfig(BaseSettings): "https://engine.energytransitionmodel.com/api/v3", description="Base URL for the ETM API", ) + environment: Optional[str] = Field( + None, + description=( + "ETM environment to target. One of: 'pro' (default), 'beta', 'local', or a stable tag 'YYYY-MM'. " + "When set and base_url is not provided, base_url will be inferred." + ), + ) log_level: Optional[str] = Field( "INFO", description="App logging level", @@ -32,7 +41,7 @@ class AppConfig(BaseSettings): env_file=None, extra="ignore", case_sensitive=False ) - temp_folder: Optional[Path] = PROJECT_ROOT / 'tmp' + temp_folder: Optional[Path] = PROJECT_ROOT / "tmp" @field_validator("etm_api_token") @classmethod @@ -84,10 +93,17 @@ def from_yaml(cls, path: Path) -> "AppConfig": data = {k.lower(): v for k, v in raw.items()} - for field in ("etm_api_token", "base_url", "log_level"): + # Collect environment variables overriding YAML + for field in ("etm_api_token", "base_url", "log_level", "environment"): if val := os.getenv(field.upper()): data[field] = val + # If base_url wasn't explicitly provided, infer it from environment if present + if "base_url" not in data or not data["base_url"]: + env = (data.get("environment") or "").strip().lower() + if env: + data["base_url"] = _infer_base_url_from_env(env) + return cls(**data) @@ -111,3 +127,32 @@ def get_settings() -> AppConfig: f"{detail}\n\n" f"Please set them via environment variables or in `{CONFIG_FILE}`." ) from exc + + +def _infer_base_url_from_env(environment: str) -> str: + """ + Infers the ETM API base URL from an environment string. + + Supported values (case-insensitive): + - 'pro'/'prod' (default): https://engine.energytransitionmodel.com/api/v3 + - 'beta'/'staging': https://beta.engine.energytransitionmodel.com/api/v3 + - 'local'/'dev'/'development': http://localhost:3000/api/v3 + - stable tags 'YYYY-MM': https://{YYYY-MM}.engine.energytransitionmodel.com/api/v3 + + Falls back to the 'pro' URL if the input is empty or unrecognized. + """ + env = (environment or "").strip().lower() + + if env in ("", "pro", "prod"): # default + return "https://engine.energytransitionmodel.com/api/v3" + if env in ("beta", "staging"): + return "https://beta.engine.energytransitionmodel.com/api/v3" + if env in ("local", "dev", "development"): + return "http://localhost:3000/api/v3" + + # Stable tagged environments e.g., '2025-01' + if re.fullmatch(r"\d{4}-\d{2}", env): + return f"https://{env}.engine.energytransitionmodel.com/api/v3" + + # Unrecognized: be conservative and return production + return "https://engine.energytransitionmodel.com/api/v3" diff --git a/src/pyetm/models/scenarios.py b/src/pyetm/models/scenarios.py index 5842a23..082b9f7 100644 --- a/src/pyetm/models/scenarios.py +++ b/src/pyetm/models/scenarios.py @@ -57,5 +57,5 @@ def from_excel(cls, xlsx_path: PathLike | str) -> "Scenarios": """ Load or create scenarios from an Excel workbook and wrap them in Scenarios. """ - scenarios = Scenario.load_from_excel(xlsx_path) + scenarios = Scenario.from_excel(xlsx_path) return cls(items=scenarios)