From cb905a36cb7709792246fd2cec63f0caa053bb45 Mon Sep 17 00:00:00 2001 From: Samuel Huestis Date: Tue, 5 May 2026 17:53:41 -0600 Subject: [PATCH 01/46] changes to pyproject toml for UV, removed environment.yml and added python version --- .python-version | 1 + ReEDS.egg-info/PKG-INFO | 141 ++ ReEDS.egg-info/SOURCES.txt | 53 + ReEDS.egg-info/dependency_links.txt | 1 + ReEDS.egg-info/requires.txt | 61 + ReEDS.egg-info/top_level.txt | 3 + environment.yml | 50 - pyproject.toml | 95 +- uv.lock | 2345 +++++++++++++++++++++++++++ 9 files changed, 2691 insertions(+), 59 deletions(-) create mode 100644 .python-version create mode 100644 ReEDS.egg-info/PKG-INFO create mode 100644 ReEDS.egg-info/SOURCES.txt create mode 100644 ReEDS.egg-info/dependency_links.txt create mode 100644 ReEDS.egg-info/requires.txt create mode 100644 ReEDS.egg-info/top_level.txt delete mode 100644 environment.yml create mode 100644 uv.lock diff --git a/.python-version b/.python-version new file mode 100644 index 000000000..2c0733315 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.11 diff --git a/ReEDS.egg-info/PKG-INFO b/ReEDS.egg-info/PKG-INFO new file mode 100644 index 000000000..e117a0ca0 --- /dev/null +++ b/ReEDS.egg-info/PKG-INFO @@ -0,0 +1,141 @@ +Metadata-Version: 2.4 +Name: ReEDS +Version: 2024.0.0 +Summary: ReEDS-2.0 Python environment managed with uv +Requires-Python: ==3.11.* +Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: bokeh==3.2.* +Requires-Dist: click==8.0.* +Requires-Dist: gitpython==3.1.* +Requires-Dist: h5py==3.9.* +Requires-Dist: matplotlib==3.7.* +Requires-Dist: numpy==1.26.* +Requires-Dist: openpyxl==3.0.* +Requires-Dist: pandas==2.0.* +Requires-Dist: tables==3.11.1 +Requires-Dist: pytest==7.4.* +Requires-Dist: requests==2.31.* +Requires-Dist: scikit-learn==1.2.* +Requires-Dist: scipy==1.11.* +Requires-Dist: tqdm==4.65.* +Requires-Dist: cmocean==3.0.3 +Requires-Dist: gdxpds==1.4.0 +Requires-Dist: geopandas==0.14.0 +Requires-Dist: pulp==2.7.0 +Requires-Dist: shapely==2.0.1 +Provides-Extra: interactive +Requires-Dist: ipykernel==6.25.*; extra == "interactive" +Requires-Dist: ipywidgets==8.0.*; extra == "interactive" +Requires-Dist: notebook==6.5.*; extra == "interactive" +Provides-Extra: maps +Requires-Dist: fiona==1.9.5; extra == "maps" +Requires-Dist: folium==0.14.0; extra == "maps" +Requires-Dist: mapclassify==2.5.*; extra == "maps" +Requires-Dist: pyproj==3.6.1; extra == "maps" +Provides-Extra: docs +Requires-Dist: sphinx==7.2.6; extra == "docs" +Requires-Dist: myst-parser==2.0.0; extra == "docs" +Requires-Dist: sphinx-rtd-theme==2.0.0; extra == "docs" +Requires-Dist: sphinxcontrib-bibtex==2.6.2; extra == "docs" +Provides-Extra: reporting +Requires-Dist: python-pptx==0.6.22; extra == "reporting" +Provides-Extra: network +Requires-Dist: networkx==3.1.*; extra == "network" +Provides-Extra: testing +Requires-Dist: gamspy-base==50.5.0; extra == "testing" +Provides-Extra: dev +Requires-Dist: ipykernel==6.25.*; extra == "dev" +Requires-Dist: ipywidgets==8.0.*; extra == "dev" +Requires-Dist: notebook==6.5.*; extra == "dev" +Requires-Dist: fiona==1.9.5; extra == "dev" +Requires-Dist: folium==0.14.0; extra == "dev" +Requires-Dist: mapclassify==2.5.*; extra == "dev" +Requires-Dist: pyproj==3.6.1; extra == "dev" +Requires-Dist: sphinx==7.2.6; extra == "dev" +Requires-Dist: myst-parser==2.0.0; extra == "dev" +Requires-Dist: sphinx-rtd-theme==2.0.0; extra == "dev" +Requires-Dist: sphinxcontrib-bibtex==2.6.2; extra == "dev" +Requires-Dist: python-pptx==0.6.22; extra == "dev" +Requires-Dist: networkx==3.1.*; extra == "dev" +Requires-Dist: gamspy-base==50.5.0; extra == "dev" +Dynamic: license-file + +## ReEDS +**Regional Energy Deployment System (ReEDS) Model** + + +[![CI](https://github.com/ReEDS-Model/ReEDS/actions/workflows/python-app.yaml/badge.svg?branch=main)](https://github.com/ReEDS-Model/ReEDS/actions/workflows/python-app.yaml) +[![Documentation](https://img.shields.io/badge/Documentation-view%20online-0a7f5e?logo=readthedocs&logoColor=white&labelColor=555)](https://reeds-model.github.io/ReEDS) +![Static Badge](https://img.shields.io/badge/python-3.11-blue) +![GitHub License](https://img.shields.io/github/license/ReEDS-Model/ReEDS) +[![DOI](https://zenodo.org/badge/189060033.svg)](https://doi.org/10.5281/zenodo.16943302) + +
+
+ +This GitHub repository contains the source code for NLR's ReEDS model. +The ReEDS model source code is available at no cost from the National Laboratory of the Rockies. +The ReEDS model can be downloaded or cloned from [https://github.com/ReEDS-Model/ReEDS](https://github.com/ReEDS-Model/ReEDS). + +**For more information about the model, see the [ReEDS Documentation](https://reeds-model.github.io/ReEDS).** + +ReEDS training videos are available on the [NLR Learning YouTube channel](https://youtube.com/playlist?list=PLmIn8Hncs7bG558qNlmz2QbKhsv7QCKiC&si=NgGBaL_MxNcYiIEX). + + + + + +## Introduction + +[ReEDS](https://www.nlr.gov/analysis/reeds/) is a capacity planning and dispatch model for the U.S. electricity system. + +As NLR's flagship long-term power sector model, ReEDS has served as the primary analytic tool for [many studies](https://reeds-model.github.io/ReEDS/publications.html) of electricity sector research questions. +Example model results are available in the [Scenario Viewer](https://scenarioviewer.nlr.gov/). + + + + + + +## Quick-start guide + +The ReEDS model is written in [Python](https://www.python.org/), [GAMS](https://www.gams.com/), and [Julia](https://julialang.org/). +Python and Julia are free, open-source languages; +GAMS requires a software license from the vendor. +A step-by-step guide for getting started with ReEDS is available [here](https://reeds-model.github.io/ReEDS/setup.html), and a quick-start guide for advanced users is outlined below. + +1. Install Python using the Anaconda Distribution: +2. Set up GAMS: + 1. Install GAMS: + 2. Obtain a combined GAMS/CPLEX license: + 1. Small ReEDS systems have been solved using the open-source [COIN-OR](https://www.coin-or.org/) solver as described [here](https://www.nlr.gov/docs/fy21osti/77907.pdf), but this capability is not actively maintained. + 2. Other commercial solvers have also been successfully applied to ReEDS, but setup details and some solver tuning are specific to the CPLEX solver. +3. Install Julia version 1.12.1 as described in the [documentation](https://reeds-model.github.io/ReEDS/setup.html#reeds2pras-julia-and-stress-periods-setup): + 1. Follow the platform-dependent installation instructions at to install both `julia` and `juliaup` + 2. Specify version 1.12.1 by running: + 1. `juliaup add 1.12.1` + 2. `juliaup default 1.12.1` +4. Open a command-line interface and set up your environments: + 1. Clone the ReEDS repository: `git clone git@github.com:ReEDS-Model/ReEDS.git` or `git clone https://github.com/ReEDS-Model/ReEDS.git` + 2. Navigate to the cloned repository + 3. Create the `reeds2` [conda environment](https://docs.conda.io/projects/conda/en/stable/user-guide/tasks/manage-environments.html): `conda env create -f environment.yml` + 4. Activate the `reeds2` environment: `conda activate reeds2` + 5. Instantiate the Julia environment: `julia --project=. instantiate.jl` + 6. (Optional) Several large data files are hosted remotely. + These files are downloaded automatically as needed during a ReEDS run, but to finish all the internet-requiring steps up front, you can download them all by running `python reeds/remote.py`. + Additional details on remote files and other topics can be found in the [user guide](https://reeds-model.github.io/ReEDS/user_guide.html#large-input-files). +5. Run ReEDS on a test case from the root of the cloned repository: + 1. For interactive setup: `python runbatch.py` + 2. For one-line operation: `python runbatch.py -b v20250314_main -c test`. + In this example, "v20250314_main" is the prefix for this batch of cases, and "test" is the suffix of the cases file, in this case `cases_test.csv`, located in the root of the repository. + Run `python runbatch.py -h` for information on other optional command-line arguments for ReEDS. + + + + + + +## Contact Us + +If you have comments and/or questions, you can contact the ReEDS team at [ReEDS.Inquiries@nlr.gov](mailto:ReEDS.Inquiries@nlr.gov) or post a question on the [discussion pages](https://github.com/ReEDS-Model/ReEDS/discussions). diff --git a/ReEDS.egg-info/SOURCES.txt b/ReEDS.egg-info/SOURCES.txt new file mode 100644 index 000000000..e09b647df --- /dev/null +++ b/ReEDS.egg-info/SOURCES.txt @@ -0,0 +1,53 @@ +LICENSE +README.md +pyproject.toml +ReEDS.egg-info/PKG-INFO +ReEDS.egg-info/SOURCES.txt +ReEDS.egg-info/dependency_links.txt +ReEDS.egg-info/requires.txt +ReEDS.egg-info/top_level.txt +ReEDS_Augur/capacity_credit.py +ReEDS_Augur/diagnostic_plots.py +ReEDS_Augur/prep_data.py +ReEDS_Augur/stress_periods.py +hourlize/load.py +hourlize/reeds_to_rev.py +hourlize/reeds_to_rev_cli.py +hourlize/resource.py +hourlize/run_hourlize.py +hourlize/simulate_PV_AC.py +hourlize/write_site_parameters.py +hourlize/agg_buildings/agg_buildings.py +hourlize/dsgrid_to_reeds/dsgrid_to_reeds.py +hourlize/dsgrid_to_reeds/eer_make_parquet.py +hourlize/qaqc/summarize_supply_curves.py +hourlize/qaqc/supply_curve_comparison.py +hourlize/tests/conftest.py +hourlize/tests/path_fix.py +hourlize/tests/test_reeds_to_rev.py +hourlize/tests/test_reeds_to_rev_cli.py +input_processing/WriteHintage.py +input_processing/__init__.py +input_processing/aggregate_regions.py +input_processing/calc_financial_inputs.py +input_processing/check_inputs.py +input_processing/climateprep.py +input_processing/copy_files.py +input_processing/forecast.py +input_processing/fuelcostprep.py +input_processing/h2_storage.py +input_processing/hourly_load.py +input_processing/hourly_plots.py +input_processing/hourly_repperiods.py +input_processing/hourly_writetimeseries.py +input_processing/hydcf.py +input_processing/mcs_sampler.py +input_processing/outage_rates.py +input_processing/plantcostprep.py +input_processing/recf.py +input_processing/transmission.py +input_processing/writecapdat.py +input_processing/writedrshift.py +input_processing/writesupplycurves.py +tests/test_outputs.py +tests/test_read_h5_files.py \ No newline at end of file diff --git a/ReEDS.egg-info/dependency_links.txt b/ReEDS.egg-info/dependency_links.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/ReEDS.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/ReEDS.egg-info/requires.txt b/ReEDS.egg-info/requires.txt new file mode 100644 index 000000000..908a050eb --- /dev/null +++ b/ReEDS.egg-info/requires.txt @@ -0,0 +1,61 @@ +bokeh==3.2.* +click==8.0.* +gitpython==3.1.* +h5py==3.9.* +matplotlib==3.7.* +numpy==1.26.* +openpyxl==3.0.* +pandas==2.0.* +tables==3.11.1 +pytest==7.4.* +requests==2.31.* +scikit-learn==1.2.* +scipy==1.11.* +tqdm==4.65.* +cmocean==3.0.3 +gdxpds==1.4.0 +geopandas==0.14.0 +pulp==2.7.0 +shapely==2.0.1 + +[dev] +ipykernel==6.25.* +ipywidgets==8.0.* +notebook==6.5.* +fiona==1.9.5 +folium==0.14.0 +mapclassify==2.5.* +pyproj==3.6.1 +sphinx==7.2.6 +myst-parser==2.0.0 +sphinx-rtd-theme==2.0.0 +sphinxcontrib-bibtex==2.6.2 +python-pptx==0.6.22 +networkx==3.1.* +gamspy-base==50.5.0 + +[docs] +sphinx==7.2.6 +myst-parser==2.0.0 +sphinx-rtd-theme==2.0.0 +sphinxcontrib-bibtex==2.6.2 + +[interactive] +ipykernel==6.25.* +ipywidgets==8.0.* +notebook==6.5.* + +[maps] +fiona==1.9.5 +folium==0.14.0 +mapclassify==2.5.* +pyproj==3.6.1 + +[network] +networkx==3.1.* + +[reporting] +python-pptx==0.6.22 + +[testing] +gamspy-base==50.5.0 diff --git a/ReEDS.egg-info/top_level.txt b/ReEDS.egg-info/top_level.txt new file mode 100644 index 000000000..740653512 --- /dev/null +++ b/ReEDS.egg-info/top_level.txt @@ -0,0 +1,3 @@ +ReEDS_Augur +hourlize +input_processing diff --git a/environment.yml b/environment.yml deleted file mode 100644 index c0161fcbe..000000000 --- a/environment.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: reeds2 -channels: - - defaults - - conda-forge -dependencies: - - python=3.11 - - bokeh=3.2 - - click=8.0 - - git-lfs=2.13 - - gitpython=3.1 - - h5py=3.9 - - matplotlib=3.7 - - numpy=1.26 - - openpyxl=3.0 - - pandas=2.0 - - pip=23.2 - - pytables=3.8 - - pytest=7.4 - - requests=2.31 - - scikit-learn=1.2 - - scipy=1.11 - - tqdm=4.65 - ## vvv The next packages are optional for default settings and may - ## vvv be excluded if you're having trouble building the environment. - - ipykernel=6.25 # for interactive python in VS Code - - ipywidgets=8.0 # for jupyter notebooks - - mapclassify=2.5 # more mapping tools - - mscorefonts=0.0 # extra fonts for plotting (only relevant on linux/HPC) - - networkx=3.1 # for uncommonly-used network analysis postprocessing - - notebook=6.5 # for jupyter notebooks - ## ^^^ - - pip: - - cmocean==3.0.3 - - gdxpds==1.4.0 - - geopandas==0.14.0 - - pulp==2.7.0 - - shapely==2.0.1 - ## vvv The next packages are optional for default settings and may - ## vvv be excluded if they cause trouble building the environment. - - fiona==1.9.5 # for interactive maps - - folium==0.14.0 # for interactive maps - - gamspy_base==50.5.0 # for tests on the github runner - - myst-parser==2.0.0 # for building documentation - - proj==0.2.0 # for plotting maps - - pyproj==3.6.1 # for plotting maps - - python-pptx==0.6.22 # for postprocessing/compare_cases.py - - sphinx_rtd_theme==2.0.0 # for documentation - - sphinx==7.2.6 # for building documentation - - sphinxcontrib-bibtex==2.6.2 # for documentation - ## ^^^ diff --git a/pyproject.toml b/pyproject.toml index debef993c..f99526bd8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,20 +1,97 @@ -[tool.black] -include = ''' -( - hourlize/tests/.*\.py?$ - | hourlize/reeds_to_rev\.py?$ -) -''' +[build-system] +requires = ["setuptools>=68", "wheel"] +build-backend = "setuptools.build_meta" [project] name = "ReEDS" version = "2024.0.0" +requires-python = "==3.11.*" +description = "ReEDS-2.0 Python environment managed with uv" +readme = "README.md" +dependencies = [ + "bokeh==3.2.*", + "click==8.0.*", + "gitpython==3.1.*", + "h5py==3.9.*", + "matplotlib==3.7.*", + "numpy==1.26.*", + "openpyxl==3.0.*", + "pandas==2.0.*", + "tables==3.11.1", + "pytest==7.4.*", + "requests==2.31.*", + "scikit-learn==1.2.*", + "scipy==1.11.*", + "tqdm==4.65.*", + "cmocean==3.0.3", + "gdxpds==1.4.0", + "geopandas==0.14.0", + "pulp==2.7.0", + "shapely==2.0.1", +] [project.optional-dependencies] +interactive = [ + "ipykernel==6.25.*", + "ipywidgets==8.0.*", + "notebook==6.5.*", +] + +maps = [ + "fiona==1.9.5", + "folium==0.14.0", + "mapclassify==2.5.*", + "pyproj==3.6.1", +] + docs = [ - "sphinx", - "myst-parser", + "sphinx==7.2.6", + "myst-parser==2.0.0", + "sphinx-rtd-theme==2.0.0", + "sphinxcontrib-bibtex==2.6.2", ] +reporting = [ + "python-pptx==0.6.22", +] +network = [ + "networkx==3.1.*", +] +testing = [ + "gamspy-base==50.5.0", +] + +dev = [ + "ipykernel==6.25.*", + "ipywidgets==8.0.*", + "notebook==6.5.*", + "fiona==1.9.5", + "folium==0.14.0", + "mapclassify==2.5.*", + "pyproj==3.6.1", + "sphinx==7.2.6", + "myst-parser==2.0.0", + "sphinx-rtd-theme==2.0.0", + "sphinxcontrib-bibtex==2.6.2", + "python-pptx==0.6.22", + "networkx==3.1.*", + "gamspy-base==50.5.0", +] + +[tool.setuptools] +include-package-data = true + +[tool.setuptools.packages.find] +where = ["."] +include = ["hourlize*", "ReEDS_Augur*", "input_processing*"] +exclude = ["inputs*"] + +[tool.black] +include = ''' +( + hourlize/tests/.*\.py?$ + | hourlize/reeds_to_rev\.py?$ +) +''' diff --git a/uv.lock b/uv.lock new file mode 100644 index 000000000..a39d8ddd2 --- /dev/null +++ b/uv.lock @@ -0,0 +1,2345 @@ +version = 1 +revision = 1 +requires-python = "==3.11.*" + +[[package]] +name = "alabaster" +version = "0.7.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/3e/13dd8e5ed9094e734ac430b5d0eb4f2bb001708a8b7856cbf8e084e001ba/alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65", size = 23776 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92", size = 13511 }, +] + +[[package]] +name = "anyio" +version = "4.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", size = 114353 }, +] + +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, +] + +[[package]] +name = "argon2-cffi" +version = "25.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "argon2-cffi-bindings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/89/ce5af8a7d472a67cc819d5d998aa8c82c5d860608c4db9f46f1162d7dab9/argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1", size = 45706 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741", size = 14657 }, +] + +[[package]] +name = "argon2-cffi-bindings" +version = "25.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5c/2d/db8af0df73c1cf454f71b2bbe5e356b8c1f8041c979f505b3d3186e520a9/argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d", size = 1783441 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/57/96b8b9f93166147826da5f90376e784a10582dd39a393c99bb62cfcf52f0/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aecba1723ae35330a008418a91ea6cfcedf6d31e5fbaa056a166462ff066d500", size = 54121 }, + { url = "https://files.pythonhosted.org/packages/0a/08/a9bebdb2e0e602dde230bdde8021b29f71f7841bd54801bcfd514acb5dcf/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2630b6240b495dfab90aebe159ff784d08ea999aa4b0d17efa734055a07d2f44", size = 29177 }, + { url = "https://files.pythonhosted.org/packages/b6/02/d297943bcacf05e4f2a94ab6f462831dc20158614e5d067c35d4e63b9acb/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7aef0c91e2c0fbca6fc68e7555aa60ef7008a739cbe045541e438373bc54d2b0", size = 31090 }, + { url = "https://files.pythonhosted.org/packages/c1/93/44365f3d75053e53893ec6d733e4a5e3147502663554b4d864587c7828a7/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e021e87faa76ae0d413b619fe2b65ab9a037f24c60a1e6cc43457ae20de6dc6", size = 81246 }, + { url = "https://files.pythonhosted.org/packages/09/52/94108adfdd6e2ddf58be64f959a0b9c7d4ef2fa71086c38356d22dc501ea/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e924cfc503018a714f94a49a149fdc0b644eaead5d1f089330399134fa028a", size = 87126 }, + { url = "https://files.pythonhosted.org/packages/72/70/7a2993a12b0ffa2a9271259b79cc616e2389ed1a4d93842fac5a1f923ffd/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87b72589133f0346a1cb8d5ecca4b933e3c9b64656c9d175270a000e73b288d", size = 80343 }, + { url = "https://files.pythonhosted.org/packages/78/9a/4e5157d893ffc712b74dbd868c7f62365618266982b64accab26bab01edc/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1db89609c06afa1a214a69a462ea741cf735b29a57530478c06eb81dd403de99", size = 86777 }, + { url = "https://files.pythonhosted.org/packages/74/cd/15777dfde1c29d96de7f18edf4cc94c385646852e7c7b0320aa91ccca583/argon2_cffi_bindings-25.1.0-cp39-abi3-win32.whl", hash = "sha256:473bcb5f82924b1becbb637b63303ec8d10e84c8d241119419897a26116515d2", size = 27180 }, + { url = "https://files.pythonhosted.org/packages/e2/c6/a759ece8f1829d1f162261226fbfd2c6832b3ff7657384045286d2afa384/argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl", hash = "sha256:a98cd7d17e9f7ce244c0803cad3c23a7d379c301ba618a5fa76a67d116618b98", size = 31715 }, + { url = "https://files.pythonhosted.org/packages/42/b9/f8d6fa329ab25128b7e98fd83a3cb34d9db5b059a9847eddb840a0af45dd/argon2_cffi_bindings-25.1.0-cp39-abi3-win_arm64.whl", hash = "sha256:b0fdbcf513833809c882823f98dc2f931cf659d9a1429616ac3adebb49f5db94", size = 27149 }, +] + +[[package]] +name = "arrow" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/33/032cdc44182491aa708d06a68b62434140d8c50820a087fac7af37703357/arrow-1.4.0.tar.gz", hash = "sha256:ed0cc050e98001b8779e84d461b0098c4ac597e88704a655582b21d116e526d7", size = 152931 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl", hash = "sha256:749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205", size = 68797 }, +] + +[[package]] +name = "asttokens" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/a5/8e3f9b6771b0b408517c82d97aed8f2036509bc247d46114925e32fe33f0/asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7", size = 62308 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a", size = 27047 }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548 }, +] + +[[package]] +name = "babel" +version = "2.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845 }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.14.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c3/b0/1c6a16426d389813b48d95e26898aff79abbde42ad353958ad95cc8c9b21/beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86", size = 627737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721 }, +] + +[[package]] +name = "bleach" +version = "6.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/07/18/3c8523962314be6bf4c8989c79ad9531c825210dd13a8669f6b84336e8bd/bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22", size = 203533 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6", size = 164437 }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2" }, +] + +[[package]] +name = "blosc2" +version = "4.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "msgpack" }, + { name = "ndindex" }, + { name = "numexpr", marker = "platform_machine != 'wasm32'" }, + { name = "numpy" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/fa/d72f624903dad1f2e95cb97d4e3777284f7eb398792f0d3380fdd73c1fc4/blosc2-4.1.2.tar.gz", hash = "sha256:c127342d976de44fee242137e83660097e0b072779f4164a34e149ac9f693c8a", size = 4341120 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/85/1240460e27c82897608df1c3f4b9c9243019a2e2345215d5f04e1a36fb15/blosc2-4.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7f8cd9d95563fbd6a76eed81ba85669d11c53385fb01ee8a91bed3b8070fa661", size = 4641818 }, + { url = "https://files.pythonhosted.org/packages/f1/51/a988a96be0cc8a7c187d26579c21770c0f679a1d12b6268629f554640e33/blosc2-4.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0dcddab7db4398c11190f21b48c2fe468d99b4a003bbacb30011c00be11d9c75", size = 4116600 }, + { url = "https://files.pythonhosted.org/packages/f2/b6/1c8b6b703d6f000df557ca594451883d18dcbe89b881fe1be75df82d76e7/blosc2-4.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09127cb9d32e2b0d04333ef9e50f7bcf00765f1a20216cede40a04f36d786069", size = 5094195 }, + { url = "https://files.pythonhosted.org/packages/2d/2a/d71c52fae9ae60337ad34f872a8537d1329be028b7449951c8f61421298f/blosc2-4.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ca2a8cdb85d6c3dc2ed19b550ee57041c9ea9230f9fa9829cfd0fe467fa6ad1d", size = 5229746 }, + { url = "https://files.pythonhosted.org/packages/50/3d/e29f14df0053c510ed75a3f8a7a1429b6e5e72f8e3928911d15f6b63fe36/blosc2-4.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:ab8e878763b8f19c284cca8854f312988cb8039181eda508a01a1174f97938c5", size = 3145620 }, +] + +[[package]] +name = "bokeh" +version = "3.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "jinja2" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pillow" }, + { name = "pyyaml" }, + { name = "tornado" }, + { name = "xyzservices" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/b5/7b422944c31c3259ddf47c854fbdf09bc0c3a64fb9460aac046848234803/bokeh-3.2.2.tar.gz", hash = "sha256:b2959b8524d69ec4e7886bc36407445f0a92e1f19530d3bfc4045236a1b7a6ff", size = 7252097 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/60/33f23dbb15fcd785d6287bdd6fa8c9d836dacb40e21c14aad41a57a0ec0f/bokeh-3.2.2-py3-none-any.whl", hash = "sha256:e31670a013e1ff15c3d4d04f587c8162c4cc9fe1af507fd741d295e6c4e1225b", size = 7827099 }, +] + +[[package]] +name = "branca" +version = "0.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jinja2" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/32/14/9d409124bda3f4ab7af3802aba07181d1fd56aa96cc4b999faea6a27a0d2/branca-0.8.2.tar.gz", hash = "sha256:e5040f4c286e973658c27de9225c1a5a7356dd0702a7c8d84c0f0dfbde388fe7", size = 27890 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/50/fc9680058e63161f2f63165b84c957a0df1415431104c408e8104a3a18ef/branca-0.8.2-py3-none-any.whl", hash = "sha256:2ebaef3983e3312733c1ae2b793b0a8ba3e1c4edeb7598e10328505280cf2f7c", size = 26193 }, +] + +[[package]] +name = "certifi" +version = "2026.4.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580", size = 137077 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a", size = 135707 }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344 }, + { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560 }, + { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613 }, + { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476 }, + { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374 }, + { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597 }, + { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574 }, + { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971 }, + { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972 }, + { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078 }, + { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076 }, + { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820 }, + { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705 }, + { url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", size = 206419 }, + { url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", size = 227901 }, + { url = "https://files.pythonhosted.org/packages/fb/73/77486c4cd58f1267bf17db420e930c9afa1b3be3fe8c8b8ebbebc9624359/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", size = 222742 }, + { url = "https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", size = 214061 }, + { url = "https://files.pythonhosted.org/packages/dc/92/42bd3cefcf7687253fb86694b45f37b733c97f59af3724f356fa92b8c344/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", size = 199239 }, + { url = "https://files.pythonhosted.org/packages/4c/3d/069e7184e2aa3b3cddc700e3dd267413dc259854adc3380421c805c6a17d/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", size = 210173 }, + { url = "https://files.pythonhosted.org/packages/62/51/9d56feb5f2e7074c46f93e0ebdbe61f0848ee246e2f0d89f8e20b89ebb8f/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", size = 209841 }, + { url = "https://files.pythonhosted.org/packages/d2/59/893d8f99cc4c837dda1fe2f1139079703deb9f321aabcb032355de13b6c7/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", size = 200304 }, + { url = "https://files.pythonhosted.org/packages/7d/1d/ee6f3be3464247578d1ed5c46de545ccc3d3ff933695395c402c21fa6b77/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", size = 229455 }, + { url = "https://files.pythonhosted.org/packages/54/bb/8fb0a946296ea96a488928bdce8ef99023998c48e4713af533e9bb98ef07/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", size = 210036 }, + { url = "https://files.pythonhosted.org/packages/9a/bc/015b2387f913749f82afd4fcba07846d05b6d784dd16123cb66860e0237d/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", size = 224739 }, + { url = "https://files.pythonhosted.org/packages/17/ab/63133691f56baae417493cba6b7c641571a2130eb7bceba6773367ab9ec5/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", size = 216277 }, + { url = "https://files.pythonhosted.org/packages/06/6d/3be70e827977f20db77c12a97e6a9f973631a45b8d186c084527e53e77a4/charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad", size = 147819 }, + { url = "https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00", size = 159281 }, + { url = "https://files.pythonhosted.org/packages/ca/83/6413f36c5a34afead88ce6f66684d943d91f233d76dd083798f9602b75ae/charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1", size = 147843 }, + { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958 }, +] + +[[package]] +name = "click" +version = "8.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dd/cf/706c1ad49ab26abed0b77a2f867984c1341ed7387b8030a6aa914e2942a0/click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb", size = 329520 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/a8/0b2ced25639fb20cc1c9784de90a8c25f9504a7f18cd8b5397bd61696d7d/click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1", size = 97486 }, +] + +[[package]] +name = "click-plugins" +version = "1.1.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c3/a4/34847b59150da33690a36da3681d6bbc2ec14ee9a846bc30a6746e5984e4/click_plugins-1.1.1.2.tar.gz", hash = "sha256:d7af3984a99d243c131aa1a828331e7630f4a88a9741fd05c927b204bcf92261", size = 8343 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/9a/2abecb28ae875e39c8cad711eb1186d8d14eab564705325e77e4e6ab9ae5/click_plugins-1.1.1.2-py2.py3-none-any.whl", hash = "sha256:008d65743833ffc1f5417bf0e78e8d2c23aab04d9745ba817bd3e71b0feb6aa6", size = 11051 }, +] + +[[package]] +name = "cligj" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/0d/837dbd5d8430fd0f01ed72c4cfb2f548180f4c68c635df84ce87956cff32/cligj-0.7.2.tar.gz", hash = "sha256:a4bc13d623356b373c2c27c53dbd9c68cae5d526270bfa71f6c6fa69669c6b27", size = 9803 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/86/43fa9f15c5b9fb6e82620428827cd3c284aa933431405d1bcf5231ae3d3e/cligj-0.7.2-py3-none-any.whl", hash = "sha256:c1ca117dbce1fe20a5809dc96f01e1c2840f6dcc939b3ddbb1111bf330ba82df", size = 7069 }, +] + +[[package]] +name = "cmocean" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/11/ee/f0704510c258d286fa75f405d16bb9ce6d6bdb3156371d02d61af1445e55/cmocean-3.0.3.tar.gz", hash = "sha256:abaf99383c1a60f52970c86052ae6c14eafa84fc16984488040283c02db77c0b", size = 6950346 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/33/1b5353a244ea5b8b21e2324b3e00f4983b8f1b2f48f02b61379423e0d259/cmocean-3.0.3-py3-none-any.whl", hash = "sha256:a23e4b7893e05dfd958931df53fc0e31bca09a572c13d78158a79ade47dc44bf", size = 222097 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "comm" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294 }, +] + +[[package]] +name = "contourpy" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1", size = 288773 }, + { url = "https://files.pythonhosted.org/packages/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381", size = 270149 }, + { url = "https://files.pythonhosted.org/packages/30/2e/dd4ced42fefac8470661d7cb7e264808425e6c5d56d175291e93890cce09/contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7", size = 329222 }, + { url = "https://files.pythonhosted.org/packages/f2/74/cc6ec2548e3d276c71389ea4802a774b7aa3558223b7bade3f25787fafc2/contourpy-1.3.3-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1", size = 377234 }, + { url = "https://files.pythonhosted.org/packages/03/b3/64ef723029f917410f75c09da54254c5f9ea90ef89b143ccadb09df14c15/contourpy-1.3.3-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a", size = 380555 }, + { url = "https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db", size = 355238 }, + { url = "https://files.pythonhosted.org/packages/98/56/f914f0dd678480708a04cfd2206e7c382533249bc5001eb9f58aa693e200/contourpy-1.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620", size = 1326218 }, + { url = "https://files.pythonhosted.org/packages/fb/d7/4a972334a0c971acd5172389671113ae82aa7527073980c38d5868ff1161/contourpy-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f", size = 1392867 }, + { url = "https://files.pythonhosted.org/packages/75/3e/f2cc6cd56dc8cff46b1a56232eabc6feea52720083ea71ab15523daab796/contourpy-1.3.3-cp311-cp311-win32.whl", hash = "sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff", size = 183677 }, + { url = "https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42", size = 225234 }, + { url = "https://files.pythonhosted.org/packages/d9/b6/71771e02c2e004450c12b1120a5f488cad2e4d5b590b1af8bad060360fe4/contourpy-1.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470", size = 193123 }, + { url = "https://files.pythonhosted.org/packages/a5/29/8dcfe16f0107943fa92388c23f6e05cff0ba58058c4c95b00280d4c75a14/contourpy-1.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497", size = 278809 }, + { url = "https://files.pythonhosted.org/packages/85/a9/8b37ef4f7dafeb335daee3c8254645ef5725be4d9c6aa70b50ec46ef2f7e/contourpy-1.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8", size = 261593 }, + { url = "https://files.pythonhosted.org/packages/0a/59/ebfb8c677c75605cc27f7122c90313fd2f375ff3c8d19a1694bda74aaa63/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e", size = 302202 }, + { url = "https://files.pythonhosted.org/packages/3c/37/21972a15834d90bfbfb009b9d004779bd5a07a0ec0234e5ba8f64d5736f4/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989", size = 329207 }, + { url = "https://files.pythonhosted.org/packages/0c/58/bd257695f39d05594ca4ad60df5bcb7e32247f9951fd09a9b8edb82d1daa/contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77", size = 225315 }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, +] + +[[package]] +name = "debugpy" +version = "1.8.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/b7/cd8080344452e4874aae67c40d8940e2b4d47b01601a8fd9f44786c757c7/debugpy-1.8.20.tar.gz", hash = "sha256:55bc8701714969f1ab89a6d5f2f3d40c36f91b2cbe2f65d98bf8196f6a6a2c33", size = 1645207 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/56/c3baf5cbe4dd77427fd9aef99fcdade259ad128feeb8a786c246adb838e5/debugpy-1.8.20-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:eada6042ad88fa1571b74bd5402ee8b86eded7a8f7b827849761700aff171f1b", size = 2208318 }, + { url = "https://files.pythonhosted.org/packages/9a/7d/4fa79a57a8e69fe0d9763e98d1110320f9ecd7f1f362572e3aafd7417c9d/debugpy-1.8.20-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:7de0b7dfeedc504421032afba845ae2a7bcc32ddfb07dae2c3ca5442f821c344", size = 3171493 }, + { url = "https://files.pythonhosted.org/packages/7d/f2/1e8f8affe51e12a26f3a8a8a4277d6e60aa89d0a66512f63b1e799d424a4/debugpy-1.8.20-cp311-cp311-win32.whl", hash = "sha256:773e839380cf459caf73cc533ea45ec2737a5cc184cf1b3b796cd4fd98504fec", size = 5209240 }, + { url = "https://files.pythonhosted.org/packages/d5/92/1cb532e88560cbee973396254b21bece8c5d7c2ece958a67afa08c9f10dc/debugpy-1.8.20-cp311-cp311-win_amd64.whl", hash = "sha256:1f7650546e0eded1902d0f6af28f787fa1f1dbdbc97ddabaf1cd963a405930cb", size = 5233481 }, + { url = "https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl", hash = "sha256:5be9bed9ae3be00665a06acaa48f8329d2b9632f15fd09f6a9a8c8d9907e54d7", size = 5337658 }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 }, +] + +[[package]] +name = "docutils" +version = "0.20.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/53/a5da4f2c5739cf66290fac1431ee52aff6851c7c8ffd8264f13affd7bcdd/docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b", size = 2058365 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/87/f238c0670b94533ac0353a4e2a1a771a0cc73277b88bff23d3ae35a256c1/docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6", size = 572666 }, +] + +[[package]] +name = "entrypoints" +version = "0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/8d/a7121ffe5f402dc015277d2d31eb82d2187334503a011c18f2e78ecbb9b2/entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4", size = 13974 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f", size = 5294 }, +] + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059 }, +] + +[[package]] +name = "executing" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317 }, +] + +[[package]] +name = "fastjsonschema" +version = "2.21.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024 }, +] + +[[package]] +name = "fiona" +version = "1.9.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "certifi" }, + { name = "click" }, + { name = "click-plugins" }, + { name = "cligj" }, + { name = "setuptools" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/a0/6b870864ceebcd046d2e952b0d18932812ff7a48d3b05670af3f702d9c01/fiona-1.9.5.tar.gz", hash = "sha256:99e2604332caa7692855c2ae6ed91e1fffdf9b59449aa8032dd18e070e59a2f7", size = 409295 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/40/f25a33d54825d52f8b7f53adf8cb6d8f554179feb942bf2983c8b440decf/fiona-1.9.5-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:6ad04c1877b9fd742871b11965606c6a52f40706f56a48d66a87cc3073943828", size = 18466036 }, + { url = "https://files.pythonhosted.org/packages/62/50/cc0cbc48d4f11899611edfb23a99d9d43101d3d28f2ef90a5506782cae84/fiona-1.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9fb9a24a8046c724787719e20557141b33049466145fc3e665764ac7caf5748c", size = 14042703 }, + { url = "https://files.pythonhosted.org/packages/07/ea/6674320c62a688bc1dc14201dfb7d4aeaea0939a1e733b85bae39e177325/fiona-1.9.5-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:d722d7f01a66f4ab6cd08d156df3fdb92f0669cf5f8708ddcb209352f416f241", size = 15662883 }, + { url = "https://files.pythonhosted.org/packages/7f/27/b24c1610c7ae5716709321f04d38d7b8b71ed531f80df4f697b9ad99cfc3/fiona-1.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:7ede8ddc798f3d447536080c6db9a5fb73733ad8bdb190cb65eed4e289dd4c50", size = 22911581 }, +] + +[[package]] +name = "folium" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "branca" }, + { name = "jinja2" }, + { name = "numpy" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/d0/2d8d1a500d829caa0e6b394ee933344f7fee81cb685409e5aaf5c9492f64/folium-0.14.0.tar.gz", hash = "sha256:8ec44697d18f5932e0fdaee8b19da98625de4d0e72cb30ef56f9479f18e11b9f", size = 93500 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/0f/22068577bc5eafdcbf5521dbaed6a5317a434ad6847ad3711dee1fd1f6ba/folium-0.14.0-py2.py3-none-any.whl", hash = "sha256:c894e2c029a8ca40e043a311978a895cefe32d746a94263f807dd7b6b2e9c679", size = 102282 }, +] + +[[package]] +name = "fonttools" +version = "4.62.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/08/7012b00a9a5874311b639c3920270c36ee0c445b69d9989a85e5c92ebcb0/fonttools-4.62.1.tar.gz", hash = "sha256:e54c75fd6041f1122476776880f7c3c3295ffa31962dc6ebe2543c00dca58b5d", size = 3580737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/23ff32561ec8d45a4d48578b4d241369d9270dc50926c017570e60893701/fonttools-4.62.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:40975849bac44fb0b9253d77420c6d8b523ac4dcdcefeff6e4d706838a5b80f7", size = 2871039 }, + { url = "https://files.pythonhosted.org/packages/24/7f/66d3f8a9338a9b67fe6e1739f47e1cd5cee78bd3bc1206ef9b0b982289a5/fonttools-4.62.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9dde91633f77fa576879a0c76b1d89de373cae751a98ddf0109d54e173b40f14", size = 2416346 }, + { url = "https://files.pythonhosted.org/packages/aa/53/5276ceba7bff95da7793a07c5284e1da901cf00341ce5e2f3273056c0cca/fonttools-4.62.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6acb4109f8bee00fec985c8c7afb02299e35e9c94b57287f3ea542f28bd0b0a7", size = 5100897 }, + { url = "https://files.pythonhosted.org/packages/cc/a1/40a5c4d8e28b0851d53a8eeeb46fbd73c325a2a9a165f290a5ed90e6c597/fonttools-4.62.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1c5c25671ce8805e0d080e2ffdeca7f1e86778c5cbfbeae86d7f866d8830517b", size = 5071078 }, + { url = "https://files.pythonhosted.org/packages/e3/be/d378fca4c65ea1956fee6d90ace6e861776809cbbc5af22388a090c3c092/fonttools-4.62.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a5d8825e1140f04e6c99bb7d37a9e31c172f3bc208afbe02175339e699c710e1", size = 5076908 }, + { url = "https://files.pythonhosted.org/packages/f8/d9/ae6a1d0693a4185a84605679c8a1f719a55df87b9c6e8e817bfdd9ef5936/fonttools-4.62.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:268abb1cb221e66c014acc234e872b7870d8b5d4657a83a8f4205094c32d2416", size = 5202275 }, + { url = "https://files.pythonhosted.org/packages/54/6c/af95d9c4efb15cabff22642b608342f2bd67137eea6107202d91b5b03184/fonttools-4.62.1-cp311-cp311-win32.whl", hash = "sha256:942b03094d7edbb99bdf1ae7e9090898cad7bf9030b3d21f33d7072dbcb51a53", size = 2293075 }, + { url = "https://files.pythonhosted.org/packages/d3/97/bf54c5b3f2be34e1f143e6db838dfdc54f2ffa3e68c738934c82f3b2a08d/fonttools-4.62.1-cp311-cp311-win_amd64.whl", hash = "sha256:e8514f4924375f77084e81467e63238b095abda5107620f49421c368a6017ed2", size = 2344593 }, + { url = "https://files.pythonhosted.org/packages/fd/ba/56147c165442cc5ba7e82ecf301c9a68353cede498185869e6e02b4c264f/fonttools-4.62.1-py3-none-any.whl", hash = "sha256:7487782e2113861f4ddcc07c3436450659e3caa5e470b27dc2177cade2d8e7fd", size = 1152647 }, +] + +[[package]] +name = "fqdn" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121 }, +] + +[[package]] +name = "gamspy-base" +version = "50.5.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/e2/b3af9281d8a941ed18bf7db80816bb7cae5ac161f8fb5d1ddef80562a4d4/gamspy_base-50.5.0-py3-none-macosx_12_0_x86_64.whl", hash = "sha256:345784c3bc5a2adf63a21a2af7e12234b0feba429d975310fb5719c34b8b8dd1", size = 27619253 }, + { url = "https://files.pythonhosted.org/packages/db/32/71726589acbdadedfdfb45f800d66d4652587e9553d098311076d5e89e29/gamspy_base-50.5.0-py3-none-macosx_13_0_arm64.whl", hash = "sha256:64144945225fa4e4729db3c77afa545f7533101dded22384d2ff763e2f6363df", size = 21607257 }, + { url = "https://files.pythonhosted.org/packages/b6/c9/9dcd6bd6b8d51a1ec47655c30c024ccd00a983925c616f3ebada472c25a9/gamspy_base-50.5.0-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:ddddaae98b566f416e86319cbdf98aed67427d16dba41c601bc3d429545f33b2", size = 23440305 }, + { url = "https://files.pythonhosted.org/packages/1b/22/17acad56e17b6dc4a6ab973dede6c2df030fe4c259e9f12780c5cecae0a5/gamspy_base-50.5.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:a495d427929a63b1d7776c2d9bfdc6cfec3df1c6890cacebfee7cf665291c32b", size = 28557743 }, + { url = "https://files.pythonhosted.org/packages/64/05/890622fcdcb0a0d729f762a53e2578e156d3ba828137f72cbfcdaaefa062/gamspy_base-50.5.0-py3-none-win_amd64.whl", hash = "sha256:dc09d7772a15f7eea362fcfdc2a9ced7c6f45dd0e7aa786d7537c2a09ae6b719", size = 36300400 }, +] + +[[package]] +name = "gdxcc" +version = "8.33.2.post1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/e4/313721ff961d49f2422b72c41090e7da20e43d810e0ba6b82ef41b43adf3/gdxcc-8.33.2.post1.tar.gz", hash = "sha256:a4a26f0a92e04a9e90e6e8159468676a7f6bb1036b64869240659d8dd5b49053", size = 70521 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/33/7ea7496305bfd0a5ab7d29ccdbc5130aee77f9e07137f19675f183ccf4fe/gdxcc-8.33.2.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c2e13ae1cf5df31a97fe231684ea938df2679c28a00ee6e478424badc68904c5", size = 144485 }, + { url = "https://files.pythonhosted.org/packages/ed/04/8509fee5393a2dff9ae341446a8b3e8d86afc7845cd24a594f861e0cfab3/gdxcc-8.33.2.post1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75d69469dd2a110525ca3b706c01554a9d0c84135600fe82ae66bca727f0b63e", size = 138721 }, + { url = "https://files.pythonhosted.org/packages/32/4c/a42b3c5b8ab4e60df826040ad90dcd8505c02be39947ef3a1c9bb04c83d9/gdxcc-8.33.2.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5158fdb82f9f93e166cfdf7b5f953329c003f80bf454638df8c5340af06d5bf", size = 414077 }, + { url = "https://files.pythonhosted.org/packages/fb/28/9a94e168bbe78366913a8c085c672201ef4a13bba6dd1b47503100559ffa/gdxcc-8.33.2.post1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cbcd055624b17fbc6d8ec3353b7594b658df30ab40d373ad71822f856b3de1ba", size = 371571 }, + { url = "https://files.pythonhosted.org/packages/15/28/3e9ee2a8fcbc3700d8a3572771b0c42351217b3c453792eca016914fa41c/gdxcc-8.33.2.post1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7498914db3670e9644f6fbcc366e1cf7569207e44febc3e9403de4205bc100b0", size = 383702 }, + { url = "https://files.pythonhosted.org/packages/51/1c/730ffeec51acc75c9f8f999bf929ff0bab97f5fa31134465471e267a2940/gdxcc-8.33.2.post1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f5c5a174339c7c43ff1c387b0af4156fe3713c1e478b8ec10d7b9a2c6c76eb30", size = 427767 }, + { url = "https://files.pythonhosted.org/packages/60/9b/7cecc1c611e44f5a7ee221b12444daaffe52f6c8318b1024194598595151/gdxcc-8.33.2.post1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:78059bf9661de541909cc7253d1a4dec676f908388c58a956a2d504b50f97179", size = 382692 }, + { url = "https://files.pythonhosted.org/packages/61/cb/1243e0308a6b862ec0a43e467380035bc346737c6a426d29d474f7b590b7/gdxcc-8.33.2.post1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ce34ebbdcedfe24f9fd9541c218a9ed35a48cfbbb2915f5beb9fb4e376eccd10", size = 409305 }, + { url = "https://files.pythonhosted.org/packages/dd/6a/718ff373c4f034f9b0400e511decdf358440badd2757727e5238d79e55cf/gdxcc-8.33.2.post1-cp311-cp311-win32.whl", hash = "sha256:66b5058aba4bd2ba7ed89199a7bd963919061a02260288e8e56c1091caf23399", size = 129619 }, + { url = "https://files.pythonhosted.org/packages/c1/f4/c83616b01bd249af963d524b328c9387c1fbabb1e9c75fa301662f39aa66/gdxcc-8.33.2.post1-cp311-cp311-win_amd64.whl", hash = "sha256:0a49700d74bd84ee6a9211431e399b1bbe8504ee7058b0caaab5b78c86a831a7", size = 144724 }, +] + +[[package]] +name = "gdxpds" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gdxcc" }, + { name = "numpy" }, + { name = "pandas" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/24/8e/8cb2a5ab8118367a107a1c230e0e983ab1288e6fb960cc18a09ac9ee22dd/gdxpds-1.4.0.tar.gz", hash = "sha256:3956e9fefec844d2727b11c43f5276a25fb2540ff6e4eb3e085239422f5ef2be", size = 645945 } + +[[package]] +name = "geopandas" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fiona" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pyproj" }, + { name = "shapely" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/02/5cf0414db0922448819a05c5cbca5cd70a5e3fd2e58f08f7484e5d09c393/geopandas-0.14.0.tar.gz", hash = "sha256:ea6c031889e1e1888aecaa6e182ca620d78f63551c49b3002a998bcbb280531f", size = 1100371 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/27/2687abaa2ac02b5814e2929a5033da1e5d132c19a904dc56f77f63fd6eb9/geopandas-0.14.0-py3-none-any.whl", hash = "sha256:a402a565e727642cb44a500c911f226eea26c1b1247c6586827031e3d7a9403a", size = 1103231 }, +] + +[[package]] +name = "gitdb" +version = "4.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "smmap" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794 }, +] + +[[package]] +name = "gitpython" +version = "3.1.49" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gitdb" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/63/210aaa302d6a0a78daa67c5c15bbac2cad361722841278b0209b6da20855/gitpython-3.1.49.tar.gz", hash = "sha256:42f9399c9eb33fc581014bedd76049dfbaf6375aa2a5754575966387280315e1", size = 219367 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/6f/b842bfa6f21d6f87c57f9abf7194225e55279d96d869775e19e9f7236fc5/gitpython-3.1.49-py3-none-any.whl", hash = "sha256:024b0422d7f84d15cd794844e029ffebd4c5d42a7eb9b936b458697ef550a02c", size = 212190 }, +] + +[[package]] +name = "h5py" +version = "3.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/ea/e59bf321fdbfed5ada0b856b3ed1d319733adaebe55aeb132673b5aa8501/h5py-3.9.0.tar.gz", hash = "sha256:e604db6521c1e367c6bd7fad239c847f53cc46646f2d2651372d05ae5e95f817", size = 402856 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/3e/935ebbd6cccd0b7965aaaceebabce979e032f15eacfeca12276e790a3e8b/h5py-3.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:551e358db05a874a0f827b22e95b30092f2303edc4b91bb62ad2f10e0236e1a0", size = 3211045 }, + { url = "https://files.pythonhosted.org/packages/37/82/859d9fc800a316e692bd040437d45613512b43d49fb0435c5bbab9e71511/h5py-3.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6822a814b9d8b8363ff102f76ea8d026f0ca25850bb579d85376029ee3e73b93", size = 2632919 }, + { url = "https://files.pythonhosted.org/packages/a3/0e/5f727157ba25c5d48c535c8e8a88fa6ea7938c093c3bb5aa9909e8af6b7d/h5py-3.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f01202cdea754ab4227dd27014bdbd561a4bbe4b631424fd812f7c2ce9c6ac", size = 8968961 }, + { url = "https://files.pythonhosted.org/packages/a7/d9/ac660616671e30d70c091e46ed4fdc50df48ca79b1ac99df5499a45de128/h5py-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64acceaf6aff92af091a4b83f6dee3cf8d3061f924a6bb3a33eb6c4658a8348b", size = 4774189 }, + { url = "https://files.pythonhosted.org/packages/d1/93/0f4cf5058095d749d464e4f770d2bf339930e5f3374331f0d2fa6ddfbf28/h5py-3.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:804c7fb42a34c8ab3a3001901c977a5c24d2e9c586a0f3e7c0a389130b4276fc", size = 2650517 }, +] + +[[package]] +name = "idna" +version = "3.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/cc/762dfb036166873f0059f3b7de4565e1b5bc3d6f28a414c13da27e442f99/idna-3.13.tar.gz", hash = "sha256:585ea8fe5d69b9181ec1afba340451fba6ba764af97026f92a91d4eef164a242", size = 194210 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/13/ad7d7ca3808a898b4612b6fe93cde56b53f3034dcde235acb1f0e1df24c6/idna-3.13-py3-none-any.whl", hash = "sha256:892ea0cde124a99ce773decba204c5552b69c3c67ffd5f232eb7696135bc8bb3", size = 68629 }, +] + +[[package]] +name = "imagesize" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/e6/7bf14eeb8f8b7251141944835abd42eb20a658d89084b7e1f3e5fe394090/imagesize-2.0.0.tar.gz", hash = "sha256:8e8358c4a05c304f1fccf7ff96f036e7243a189e9e42e90851993c558cfe9ee3", size = 1773045 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl", hash = "sha256:5667c5bbb57ab3f1fa4bc366f4fbc971db3d5ed011fd2715fd8001f782718d96", size = 9441 }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484 }, +] + +[[package]] +name = "ipykernel" +version = "6.25.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/4a/3c1ba010e1517191eefb9f2fc556a3aed146b8c4e65708aed3ad17e803c5/ipykernel-6.25.2.tar.gz", hash = "sha256:f468ddd1f17acb48c8ce67fcfa49ba6d46d4f9ac0438c1f441be7c3d1372230b", size = 156247 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/e3/70fb6e6bdd42cb0586d6b6680713997d2a9dc46642aec207ca04d0df80b8/ipykernel-6.25.2-py3-none-any.whl", hash = "sha256:2e2ee359baba19f10251b99415bb39de1e97d04e1fab385646f24f0596510b77", size = 154150 }, +] + +[[package]] +name = "ipython" +version = "9.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "ipython-pygments-lexers" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "psutil" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/c4/87cda5842cf5c31837c06ddb588e11c3c35d8ece89b7a0108c06b8c9b00a/ipython-9.13.0.tar.gz", hash = "sha256:7e834b6afc99f020e3f05966ced34792f40267d64cb1ea9043886dab0dde5967", size = 4430549 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/86/3060e8029b7cc505cce9a0137431dda81d0a3fde93a8f0f50ee0bf37a795/ipython-9.13.0-py3-none-any.whl", hash = "sha256:57f9d4639e20818d328d287c7b549af3d05f12486ea8f2e7f73e52a36ec4d201", size = 627274 }, +] + +[[package]] +name = "ipython-genutils" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/69/fbeffffc05236398ebfcfb512b6d2511c622871dca1746361006da310399/ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8", size = 22208 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/bc/9bd3b5c2b4774d5f33b2d544f1460be9df7df2fe42f352135381c347c69a/ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8", size = 26343 }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, +] + +[[package]] +name = "ipywidgets" +version = "8.0.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipykernel" }, + { name = "ipython" }, + { name = "jupyterlab-widgets" }, + { name = "traitlets" }, + { name = "widgetsnbextension" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/93/7c/d88ab96dfeafdbd0669ff52879032631757a9ec51693baff17b3487d502f/ipywidgets-8.0.7.tar.gz", hash = "sha256:50ace0a8886e9a0d68b980db82f94c25d55d21ff2340ed36f802dd9365e94acf", size = 115457 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/af/9d5f256025100b578b11d7280e76fda349255666f752b618a613785cb58d/ipywidgets-8.0.7-py3-none-any.whl", hash = "sha256:e0aed0c95a1e55b6a123f64305245578bdc09e52965a34941c2b6a578b8c64a0", size = 138302 }, +] + +[[package]] +name = "isoduration" +version = "20.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "arrow" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7c/1a/3c8edc664e06e6bd06cce40c6b22da5f1429aa4224d0c590f3be21c91ead/isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", size = 11649 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042", size = 11321 }, +] + +[[package]] +name = "jedi" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/b7/a3635f6a2d7cf5b5dd98064fc1d5fbbafcb25477bcea204a3a92145d158b/jedi-0.20.0.tar.gz", hash = "sha256:c3f4ccbd276696f4b19c54618d4fb18f9fc24b0aef02acf704b23f487daa1011", size = 3119416 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl", hash = "sha256:7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67", size = 4884812 }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, +] + +[[package]] +name = "joblib" +version = "1.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/41/f2/d34e8b3a08a9cc79a50b2208a93dce981fe615b64d5a4d4abee421d898df/joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3", size = 331603 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713", size = 309071 }, +] + +[[package]] +name = "jsonpointer" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/c7/af399a2e7a67fd18d63c40c5e62d3af4e67b836a2107468b6a5ea24c4304/jsonpointer-3.1.1.tar.gz", hash = "sha256:0b801c7db33a904024f6004d526dcc53bbb8a4a0f4e32bfd10beadf60adf1900", size = 9068 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659 }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630 }, +] + +[package.optional-dependencies] +format-nongpl = [ + { name = "fqdn" }, + { name = "idna" }, + { name = "isoduration" }, + { name = "jsonpointer" }, + { name = "rfc3339-validator" }, + { name = "rfc3986-validator" }, + { name = "rfc3987-syntax" }, + { name = "uri-template" }, + { name = "webcolors" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437 }, +] + +[[package]] +name = "jupyter-client" +version = "7.4.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "entrypoints" }, + { name = "jupyter-core" }, + { name = "nest-asyncio" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1e/33/71778cdd2c69445bcd3bb6029da2e43cc9b5cbbeef4f4982ef3aaf396650/jupyter_client-7.4.9.tar.gz", hash = "sha256:52be28e04171f07aed8f20e1616a5a552ab9fee9cbbe6c1896ae170c3880d392", size = 329115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/a7/ef3b7c8b9d6730a21febdd0809084e4cea6d2a7e43892436adecdd0acbd4/jupyter_client-7.4.9-py3-none-any.whl", hash = "sha256:214668aaea208195f4c13d28eb272ba79f945fc0cf3f11c7092c20b2ca1980e7", size = 133492 }, +] + +[[package]] +name = "jupyter-core" +version = "5.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032 }, +] + +[[package]] +name = "jupyter-events" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema", extra = ["format-nongpl"] }, + { name = "packaging" }, + { name = "python-json-logger" }, + { name = "pyyaml" }, + { name = "referencing" }, + { name = "rfc3339-validator" }, + { name = "rfc3986-validator" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/f8/475c4241b2b75af0deaae453ed003c6c851766dbc44d332d8baf245dc931/jupyter_events-0.12.1.tar.gz", hash = "sha256:faff25f77218335752f35f23c5fe6e4a392a7bd99a5939ccb9b8fbf594636cf3", size = 62854 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/6c/6fcde0c8f616ed360ffd3587f7db9e225a7e62b583a04494d2f069cf64ea/jupyter_events-0.12.1-py3-none-any.whl", hash = "sha256:c366585253f537a627da52fa7ca7410c5b5301fe893f511e7b077c2d93ec8bcf", size = 19512 }, +] + +[[package]] +name = "jupyter-server" +version = "2.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "argon2-cffi" }, + { name = "jinja2" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "jupyter-events" }, + { name = "jupyter-server-terminals" }, + { name = "nbconvert" }, + { name = "nbformat" }, + { name = "overrides" }, + { name = "packaging" }, + { name = "prometheus-client" }, + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "pyzmq" }, + { name = "send2trash" }, + { name = "terminado" }, + { name = "tornado" }, + { name = "traitlets" }, + { name = "websocket-client" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/b0/666586d557a71a58cd9960b154fb9aee0ed81dd62a50371195ab95731909/jupyter_server-2.18.1.tar.gz", hash = "sha256:f62be526369b791625e03bd658070563c1a4e9a0a2f439ea1f9dbacea5f7191a", size = 752024 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/45/bfe3779fd06714a379128f2c4eaf7c99414f0eb081f9f34c135f6b3d511c/jupyter_server-2.18.1-py3-none-any.whl", hash = "sha256:db0374d52a975f88a92a7f20de44e08ef5be9763ba7e99630baf16c46ac8dbf0", size = 391844 }, +] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "terminado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f4/a7/bcd0a9b0cbba88986fe944aaaf91bfda603e5a50bda8ed15123f381a3b2f/jupyter_server_terminals-0.5.4.tar.gz", hash = "sha256:bbda128ed41d0be9020349f9f1f2a4ab9952a73ed5f5ac9f1419794761fb87f5", size = 31770 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl", hash = "sha256:55be353fc74a80bc7f3b20e6be50a55a61cd525626f578dcb66a5708e2007d14", size = 13704 }, +] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884 }, +] + +[[package]] +name = "jupyterlab-widgets" +version = "3.0.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/2d/ef58fed122b268c69c0aa099da20bc67657cdfb2e222688d5731bd5b971d/jupyterlab_widgets-3.0.16.tar.gz", hash = "sha256:423da05071d55cf27a9e602216d35a3a65a3e41cdf9c5d3b643b814ce38c19e0", size = 897423 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl", hash = "sha256:45fa36d9c6422cf2559198e4db481aa243c7a32d9926b500781c830c80f7ecf8", size = 914926 }, +] + +[[package]] +name = "kiwisolver" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/67/9c61eccb13f0bdca9307614e782fec49ffdde0f7a2314935d489fa93cd9c/kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a", size = 103482 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/dd/a495a9c104be1c476f0386e714252caf2b7eca883915422a64c50b88c6f5/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9eed0f7edbb274413b6ee781cca50541c8c0facd3d6fd289779e494340a2b85c", size = 122798 }, + { url = "https://files.pythonhosted.org/packages/11/60/37b4047a2af0cf5ef6d8b4b26e91829ae6fc6a2d1f74524bcb0e7cd28a32/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c4923e404d6bcd91b6779c009542e5647fef32e4a5d75e115e3bbac6f2335eb", size = 66216 }, + { url = "https://files.pythonhosted.org/packages/0a/aa/510dc933d87767584abfe03efa445889996c70c2990f6f87c3ebaa0a18c5/kiwisolver-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0df54df7e686afa55e6f21fb86195224a6d9beb71d637e8d7920c95cf0f89aac", size = 63911 }, + { url = "https://files.pythonhosted.org/packages/80/46/bddc13df6c2a40741e0cc7865bb1c9ed4796b6760bd04ce5fae3928ef917/kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27", size = 1438209 }, + { url = "https://files.pythonhosted.org/packages/fd/d6/76621246f5165e5372f02f5e6f3f48ea336a8f9e96e43997d45b240ed8cd/kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff710414307fefa903e0d9bdf300972f892c23477829f49504e59834f4195398", size = 1248888 }, + { url = "https://files.pythonhosted.org/packages/b2/c1/31559ec6fb39a5b48035ce29bb63ade628f321785f38c384dee3e2c08bc1/kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6176c1811d9d5a04fa391c490cc44f451e240697a16977f11c6f722efb9041db", size = 1266304 }, + { url = "https://files.pythonhosted.org/packages/5e/ef/1cb8276f2d29cc6a41e0a042f27946ca347d3a4a75acf85d0a16aa6dcc82/kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50847dca5d197fcbd389c805aa1a1cf32f25d2e7273dc47ab181a517666b68cc", size = 1319650 }, + { url = "https://files.pythonhosted.org/packages/4c/e4/5ba3cecd7ce6236ae4a80f67e5d5531287337d0e1f076ca87a5abe4cd5d0/kiwisolver-1.5.0-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:01808c6d15f4c3e8559595d6d1fe6411c68e4a3822b4b9972b44473b24f4e679", size = 970949 }, + { url = "https://files.pythonhosted.org/packages/5a/69/dc61f7ae9a2f071f26004ced87f078235b5507ab6e5acd78f40365655034/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f1f9f4121ec58628c96baa3de1a55a4e3a333c5102c8e94b64e23bf7b2083309", size = 2199125 }, + { url = "https://files.pythonhosted.org/packages/e5/7b/abbe0f1b5afa85f8d084b73e90e5f801c0939eba16ac2e49af7c61a6c28d/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b7d335370ae48a780c6e6a6bbfa97342f563744c39c35562f3f367665f5c1de2", size = 2293783 }, + { url = "https://files.pythonhosted.org/packages/8a/80/5908ae149d96d81580d604c7f8aefd0e98f4fd728cf172f477e9f2a81744/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:800ee55980c18545af444d93fdd60c56b580db5cc54867d8cbf8a1dc0829938c", size = 1960726 }, + { url = "https://files.pythonhosted.org/packages/84/08/a78cb776f8c085b7143142ce479859cfec086bd09ee638a317040b6ef420/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c438f6ca858697c9ab67eb28246c92508af972e114cac34e57a6d4ba17a3ac08", size = 2464738 }, + { url = "https://files.pythonhosted.org/packages/b1/e1/65584da5356ed6cb12c63791a10b208860ac40a83de165cb6a6751a686e3/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8c63c91f95173f9c2a67c7c526b2cea976828a0e7fced9cdcead2802dc10f8a4", size = 2270718 }, + { url = "https://files.pythonhosted.org/packages/be/6c/28f17390b62b8f2f520e2915095b3c94d88681ecf0041e75389d9667f202/kiwisolver-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:beb7f344487cdcb9e1efe4b7a29681b74d34c08f0043a327a74da852a6749e7b", size = 73480 }, + { url = "https://files.pythonhosted.org/packages/d8/0e/2ee5debc4f77a625778fec5501ff3e8036fe361b7ee28ae402a485bb9694/kiwisolver-1.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:ad4ae4ffd1ee9cd11357b4c66b612da9888f4f4daf2f36995eda64bd45370cac", size = 64930 }, + { url = "https://files.pythonhosted.org/packages/e9/eb/5fcbbbf9a0e2c3a35effb88831a483345326bbc3a030a3b5b69aee647f84/kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ec4c85dc4b687c7f7f15f553ff26a98bfe8c58f5f7f0ac8905f0ba4c7be60232", size = 59532 }, + { url = "https://files.pythonhosted.org/packages/c3/9b/e17104555bb4db148fd52327feea1e96be4b88e8e008b029002c281a21ab/kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:12e91c215a96e39f57989c8912ae761286ac5a9584d04030ceb3368a357f017a", size = 57420 }, + { url = "https://files.pythonhosted.org/packages/48/44/2b5b95b7aa39fb2d8d9d956e0f3d5d45aef2ae1d942d4c3ffac2f9cfed1a/kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be4a51a55833dc29ab5d7503e7bcb3b3af3402d266018137127450005cdfe737", size = 79892 }, + { url = "https://files.pythonhosted.org/packages/52/7d/7157f9bba6b455cfb4632ed411e199fc8b8977642c2b12082e1bd9e6d173/kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:daae526907e262de627d8f70058a0f64acc9e2641c164c99c8f594b34a799a16", size = 77603 }, + { url = "https://files.pythonhosted.org/packages/0a/dd/8050c947d435c8d4bc94e3252f4d8bb8a76cfb424f043a8680be637a57f1/kiwisolver-1.5.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:59cd8683f575d96df5bb48f6add94afc055012c29e28124fcae2b63661b9efb1", size = 73558 }, +] + +[[package]] +name = "lark" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/34/28fff3ab31ccff1fd4f6c7c7b0ceb2b6968d8ea4950663eadcb5720591a0/lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", size = 382732 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151 }, +] + +[[package]] +name = "latexcodec" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/dd/4270b2c5e2ee49316c3859e62293bd2ea8e382339d63ab7bbe9f39c0ec3b/latexcodec-3.0.1.tar.gz", hash = "sha256:e78a6911cd72f9dec35031c6ec23584de6842bfbc4610a9678868d14cdfb0357", size = 31222 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/40/23569737873cc9637fd488606347e9dd92b9fa37ba4fcda1f98ee5219a97/latexcodec-3.0.1-py3-none-any.whl", hash = "sha256:a9eb8200bff693f0437a69581f7579eb6bca25c4193515c09900ce76451e452e", size = 18532 }, +] + +[[package]] +name = "lxml" +version = "6.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/28/30/9abc9e34c657c33834eaf6cd02124c61bdf5944d802aa48e69be8da3585d/lxml-6.1.0.tar.gz", hash = "sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13", size = 4197006 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/5d/3bccad330292946f97962df9d5f2d3ae129cce6e212732a781e856b91e07/lxml-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9", size = 8526232 }, + { url = "https://files.pythonhosted.org/packages/a7/51/adc8826570a112f83bb4ddb3a2ab510bbc2ccd62c1b9fe1f34fae2d90b57/lxml-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50", size = 4595448 }, + { url = "https://files.pythonhosted.org/packages/54/84/5a9ec07cbe1d2334a6465f863b949a520d2699a755738986dcd3b6b89e3f/lxml-6.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5", size = 4923771 }, + { url = "https://files.pythonhosted.org/packages/a7/23/851cfa33b6b38adb628e45ad51fb27105fa34b2b3ba9d1d4aa7a9428dfe0/lxml-6.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e", size = 5068101 }, + { url = "https://files.pythonhosted.org/packages/b0/38/41bf99c2023c6b79916ba057d83e9db21d642f473cac210201222882d38b/lxml-6.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512", size = 5002573 }, + { url = "https://files.pythonhosted.org/packages/c2/20/053aa10bdc39747e1e923ce2d45413075e84f70a136045bb09e5eaca41d3/lxml-6.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c", size = 5202816 }, + { url = "https://files.pythonhosted.org/packages/9a/da/bc710fad8bf04b93baee752c192eaa2210cd3a84f969d0be7830fea55802/lxml-6.1.0-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5", size = 5329999 }, + { url = "https://files.pythonhosted.org/packages/b3/cb/bf035dedbdf7fab49411aa52e4236f3445e98d38647d85419e6c0d2806b9/lxml-6.1.0-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289", size = 4659643 }, + { url = "https://files.pythonhosted.org/packages/5c/4f/22be31f33727a5e4c7b01b0a874503026e50329b259d3587e0b923cf964b/lxml-6.1.0-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a", size = 5265963 }, + { url = "https://files.pythonhosted.org/packages/c8/2b/d44d0e5c79226017f4ab8c87a802ebe4f89f97e6585a8e4166dffcdd7b6e/lxml-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3", size = 5045444 }, + { url = "https://files.pythonhosted.org/packages/d3/c3/3f034fec1594c331a6dbf9491238fdcc9d66f68cc529e109ec75b97197e1/lxml-6.1.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9", size = 4712703 }, + { url = "https://files.pythonhosted.org/packages/12/16/0b83fccc158218aca75a7aa33e97441df737950734246b9fffa39301603d/lxml-6.1.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11", size = 5252745 }, + { url = "https://files.pythonhosted.org/packages/dd/ee/12e6c1b39a77666c02eaa77f94a870aaf63c4ac3a497b2d52319448b01c6/lxml-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4", size = 5226822 }, + { url = "https://files.pythonhosted.org/packages/34/20/c7852904858b4723af01d2fc14b5d38ff57cb92f01934a127ebd9a9e51aa/lxml-6.1.0-cp311-cp311-win32.whl", hash = "sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3", size = 3594026 }, + { url = "https://files.pythonhosted.org/packages/02/05/d60c732b56da5085175c07c74b2df4e6d181b0c9a61e1691474f06ef4b39/lxml-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7", size = 4025114 }, + { url = "https://files.pythonhosted.org/packages/c2/df/c84dcc175fd690823436d15b41cb920cd5ba5e14cd8bfb00949d5903b320/lxml-6.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39", size = 3667742 }, + { url = "https://files.pythonhosted.org/packages/f2/88/55143966481409b1740a3ac669e611055f49efd68087a5ce41582325db3e/lxml-6.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842", size = 3930134 }, + { url = "https://files.pythonhosted.org/packages/b5/97/28b985c2983938d3cb696dd5501423afb90a8c3e869ef5d3c62569282c0f/lxml-6.1.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c", size = 4210749 }, + { url = "https://files.pythonhosted.org/packages/29/67/dfab2b7d58214921935ccea7ce9b3df9b7d46f305d12f0f532ac7cf6b804/lxml-6.1.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de", size = 4318463 }, + { url = "https://files.pythonhosted.org/packages/32/a2/4ac7eb32a4d997dd352c32c32399aae27b3f268d440e6f9cfa405b575d2f/lxml-6.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635", size = 4251124 }, + { url = "https://files.pythonhosted.org/packages/33/ef/d6abd850bb4822f9b720cfe36b547a558e694881010ff7d012191e8769c6/lxml-6.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037", size = 4401758 }, + { url = "https://files.pythonhosted.org/packages/40/44/3ee09a5b60cb44c4f2fbc1c9015cfd6ff5afc08f991cab295d3024dcbf2d/lxml-6.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace", size = 3508860 }, +] + +[[package]] +name = "mapclassify" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "networkx" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "scikit-learn" }, + { name = "scipy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/63/d5cce1d7deee87721f98c5a72a563d5f5d6e616eaff647b247cdd6538062/mapclassify-2.5.0.tar.gz", hash = "sha256:5eb1f782155b5a90ec93c1dc52b300a2fad33117dcf08b7c858ed96da2a7baa0", size = 61906 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/e3/66416c37afce85fee750de8641314dda2a5af9457c8802ca4b173874f4e5/mapclassify-2.5.0-py3-none-any.whl", hash = "sha256:90299a8ae3a06cdb531f02ab8160a3693ff4bc710ba52c05bec0d0a192b3d608", size = 39466 }, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631 }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058 }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287 }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940 }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887 }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692 }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471 }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923 }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572 }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077 }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876 }, +] + +[[package]] +name = "matplotlib" +version = "3.7.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b6/f0/3836719cc3982fbba3b840d18a59db1d0ee9ac7986f24e8c0a092851b67b/matplotlib-3.7.5.tar.gz", hash = "sha256:1e5c971558ebc811aa07f54c7b7c677d78aa518ef4c390e14673a09e0860184a", size = 38098611 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/c6/45d0485e59d70b7a6a81eade5d0aed548b42cc65658c0ce0f813b9249165/matplotlib-3.7.5-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:f65342c147572673f02a4abec2d5a23ad9c3898167df9b47c149f32ce61ca078", size = 8325506 }, + { url = "https://files.pythonhosted.org/packages/0e/0a/83bd8589f3597745f624fbcc7da1140088b2f4160ca51c71553c561d0df5/matplotlib-3.7.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4ddf7fc0e0dc553891a117aa083039088d8a07686d4c93fb8a810adca68810af", size = 7439905 }, + { url = "https://files.pythonhosted.org/packages/84/c1/a7705b24f8f9b4d7ceea0002c13bae50cf9423f299f56d8c47a5cd2627d2/matplotlib-3.7.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0ccb830fc29442360d91be48527809f23a5dcaee8da5f4d9b2d5b867c1b087b8", size = 7342895 }, + { url = "https://files.pythonhosted.org/packages/94/6e/55d7d8310c96a7459c883aa4be3f5a9338a108278484cbd5c95d480d1cef/matplotlib-3.7.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efc6bb28178e844d1f408dd4d6341ee8a2e906fc9e0fa3dae497da4e0cab775d", size = 11358830 }, + { url = "https://files.pythonhosted.org/packages/55/57/3b36afe104216db1cf2f3889c394b403ea87eda77c4815227c9524462ba8/matplotlib-3.7.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b15c4c2d374f249f324f46e883340d494c01768dd5287f8bc00b65b625ab56c", size = 11462575 }, + { url = "https://files.pythonhosted.org/packages/f3/0b/fabcf5f66b12fab5c4110d06a6c0fed875c7e63bc446403f58f9dadc9999/matplotlib-3.7.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d028555421912307845e59e3de328260b26d055c5dac9b182cc9783854e98fb", size = 11584280 }, + { url = "https://files.pythonhosted.org/packages/47/a9/1ad7df27a9da70b62109584632f83fe6ef45774701199c44d5777107c240/matplotlib-3.7.5-cp311-cp311-win32.whl", hash = "sha256:fe184b4625b4052fa88ef350b815559dd90cc6cc8e97b62f966e1ca84074aafa", size = 7340429 }, + { url = "https://files.pythonhosted.org/packages/e3/b1/1b6c34b89173d6c206dc5a4028e8518b4dfee3569c13bdc0c88d0486cae7/matplotlib-3.7.5-cp311-cp311-win_amd64.whl", hash = "sha256:084f1f0f2f1010868c6f1f50b4e1c6f2fb201c58475494f1e5b66fed66093647", size = 7507112 }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/74/97e72a36efd4ae2bccb3463284300f8953f199b5ffbc04cbbb0ec78f74b1/matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe", size = 8110 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76", size = 9516 }, +] + +[[package]] +name = "mdit-py-plugins" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/fd/a756d36c0bfba5f6e39a1cdbdbfdd448dc02692467d83816dff4592a1ebc/mdit_py_plugins-0.5.0.tar.gz", hash = "sha256:f4918cb50119f50446560513a8e311d574ff6aaed72606ddae6d35716fe809c6", size = 44655 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl", hash = "sha256:07a08422fc1936a5d26d146759e9155ea466e842f5ab2f7d2266dd084c8dab1f", size = 57205 }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, +] + +[[package]] +name = "mistune" +version = "3.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/84/620cc3f7e3adf6f5067e10f4dbae71295d8f9e16d5d3f9ef97c40f2f592c/mistune-3.2.1.tar.gz", hash = "sha256:7c8e5501d38bac1582e067e46c8343f17d57ea1aaa735823f3aba1fd59c88a28", size = 98003 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl", hash = "sha256:78cdb0ba5e938053ccf63651b352508d2efa9411dc8810bfb05f2dc5140c0048", size = 53749 }, +] + +[[package]] +name = "msgpack" +version = "1.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4d/f2/bfb55a6236ed8725a96b0aa3acbd0ec17588e6a2c3b62a93eb513ed8783f/msgpack-1.1.2.tar.gz", hash = "sha256:3b60763c1373dd60f398488069bcdc703cd08a711477b5d480eecc9f9626f47e", size = 173581 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/97/560d11202bcd537abca693fd85d81cebe2107ba17301de42b01ac1677b69/msgpack-1.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2e86a607e558d22985d856948c12a3fa7b42efad264dca8a3ebbcfa2735d786c", size = 82271 }, + { url = "https://files.pythonhosted.org/packages/83/04/28a41024ccbd67467380b6fb440ae916c1e4f25e2cd4c63abe6835ac566e/msgpack-1.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:283ae72fc89da59aa004ba147e8fc2f766647b1251500182fac0350d8af299c0", size = 84914 }, + { url = "https://files.pythonhosted.org/packages/71/46/b817349db6886d79e57a966346cf0902a426375aadc1e8e7a86a75e22f19/msgpack-1.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61c8aa3bd513d87c72ed0b37b53dd5c5a0f58f2ff9f26e1555d3bd7948fb7296", size = 416962 }, + { url = "https://files.pythonhosted.org/packages/da/e0/6cc2e852837cd6086fe7d8406af4294e66827a60a4cf60b86575a4a65ca8/msgpack-1.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:454e29e186285d2ebe65be34629fa0e8605202c60fbc7c4c650ccd41870896ef", size = 426183 }, + { url = "https://files.pythonhosted.org/packages/25/98/6a19f030b3d2ea906696cedd1eb251708e50a5891d0978b012cb6107234c/msgpack-1.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7bc8813f88417599564fafa59fd6f95be417179f76b40325b500b3c98409757c", size = 411454 }, + { url = "https://files.pythonhosted.org/packages/b7/cd/9098fcb6adb32187a70b7ecaabf6339da50553351558f37600e53a4a2a23/msgpack-1.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bafca952dc13907bdfdedfc6a5f579bf4f292bdd506fadb38389afa3ac5b208e", size = 422341 }, + { url = "https://files.pythonhosted.org/packages/e6/ae/270cecbcf36c1dc85ec086b33a51a4d7d08fc4f404bdbc15b582255d05ff/msgpack-1.1.2-cp311-cp311-win32.whl", hash = "sha256:602b6740e95ffc55bfb078172d279de3773d7b7db1f703b2f1323566b878b90e", size = 64747 }, + { url = "https://files.pythonhosted.org/packages/2a/79/309d0e637f6f37e83c711f547308b91af02b72d2326ddd860b966080ef29/msgpack-1.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:d198d275222dc54244bf3327eb8cbe00307d220241d9cec4d306d49a44e85f68", size = 71633 }, + { url = "https://files.pythonhosted.org/packages/73/4d/7c4e2b3d9b1106cd0aa6cb56cc57c6267f59fa8bfab7d91df5adc802c847/msgpack-1.1.2-cp311-cp311-win_arm64.whl", hash = "sha256:86f8136dfa5c116365a8a651a7d7484b65b13339731dd6faebb9a0242151c406", size = 64755 }, +] + +[[package]] +name = "myst-parser" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "jinja2" }, + { name = "markdown-it-py" }, + { name = "mdit-py-plugins" }, + { name = "pyyaml" }, + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e8/c1/48ea47b78ade0bb0281f34c9e343e3ea0c681fbc81464dbfd134e983954f/myst_parser-2.0.0.tar.gz", hash = "sha256:ea929a67a6a0b1683cdbe19b8d2e724cd7643f8aa3e7bb18dd65beac3483bead", size = 85800 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/f6/6d61a023d758f488e36638076e8a4ec4447a2cdf86938cf6c60cf1c860e6/myst_parser-2.0.0-py3-none-any.whl", hash = "sha256:7c36344ae39c8e740dad7fdabf5aa6fc4897a813083c6cc9990044eb93656b14", size = 77158 }, +] + +[[package]] +name = "nbclassic" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipykernel" }, + { name = "ipython-genutils" }, + { name = "nest-asyncio" }, + { name = "notebook-shim" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ec/cc/a495b5eb9a964b70c6ae8c861168b78386d2520fd89c68390932f96400b2/nbclassic-1.3.3.tar.gz", hash = "sha256:434228763f8cee754318cd6dfa42370db191af630dabab8e30bafc8c1aa3eee6", size = 64116062 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/fd/dfb6db427bb4e0a50c9802b11df0b69d9364192f3db999849cde9209c8d0/nbclassic-1.3.3-py3-none-any.whl", hash = "sha256:dcee5149aa6aa01846c7458d6394b29b325213b5e118ee14c80d689122e0e4f2", size = 11527229 }, +] + +[[package]] +name = "nbclient" +version = "0.10.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "nbformat" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/56/91/1c1d5a4b9a9ebba2b4e32b8c852c2975c872aec1fe42ab5e516b2cecd193/nbclient-0.10.4.tar.gz", hash = "sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9", size = 62554 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl", hash = "sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440", size = 25465 }, +] + +[[package]] +name = "nbconvert" +version = "7.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "bleach", extra = ["css"] }, + { name = "defusedxml" }, + { name = "jinja2" }, + { name = "jupyter-core" }, + { name = "jupyterlab-pygments" }, + { name = "markupsafe" }, + { name = "mistune" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "packaging" }, + { name = "pandocfilters" }, + { name = "pygments" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/01/b1/708e53fe2e429c103c6e6e159106bcf0357ac41aa4c28772bd8402339051/nbconvert-7.17.1.tar.gz", hash = "sha256:34d0d0a7e73ce3cbab6c5aae8f4f468797280b01fd8bd2ca746da8569eddd7d2", size = 865311 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl", hash = "sha256:aa85c087b435e7bf1ffd03319f658e285f2b89eccab33bc1ba7025495ab3e7c8", size = 261927 }, +] + +[[package]] +name = "nbformat" +version = "5.10.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastjsonschema" }, + { name = "jsonschema" }, + { name = "jupyter-core" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454 }, +] + +[[package]] +name = "ndindex" +version = "1.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/92/4b9d2f4e0f3eabcfc7b02b48261f6e5ad36a3e2c1bbdcc4e3b7b6c768fa6/ndindex-1.10.1.tar.gz", hash = "sha256:0f6113c1f031248f8818cbee1aa92aa3c9472b7701debcce9fddebcd2f610f11", size = 271395 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/d9/c94ab6151c9fdd199c2b560f23e3759a9fb86a7a1275855e0b97291bf05a/ndindex-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e2ad917bcdf8dc5ba1e21f01054c991d26862d4d01c3c203a50e907096d558ac", size = 172128 }, + { url = "https://files.pythonhosted.org/packages/3a/34/880c4073750766e44492d51280d025f28e36475394ca3d741b0a4adad4b0/ndindex-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e851990a68937db5f485cd9f3e760c1fd47fa0f2a99f63a5e2cc880908faf3bb", size = 171423 }, + { url = "https://files.pythonhosted.org/packages/f0/1e/0342da55dabe4075efc2b2ab91a6a22ed3047c5bd511ef771a7a3f822c90/ndindex-1.10.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27385939f317b55773ea53f6bf9334810cf1d66206034c0a6a6f2a88f2001c3c", size = 519590 }, + { url = "https://files.pythonhosted.org/packages/fd/cb/7a02b6f29b15a16cd0002f4591d14493eff8e9236f7ca4c02ee4d4bcefbd/ndindex-1.10.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fdf3ca16efcdfbb8800aa88fbab1bc6528e6a0504bcb9cf7af4cb9d50e9f5d9", size = 516676 }, + { url = "https://files.pythonhosted.org/packages/67/d5/38da808f968a54b0fead2d7e15ca011d3df93c96a07f4914e8ef3974506e/ndindex-1.10.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3307817bdc92846b18f309fae3582856f567dd6e0742fb0b41ac68682bfc4e2a", size = 1491141 }, + { url = "https://files.pythonhosted.org/packages/bc/1f/8c66ef982a01ae4cbdabba679a2bc711f262cedf23bfb9682293146f8a98/ndindex-1.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae73cd2d66b09ef2f2a7d7f93bad396d6abf168d1ee825e403c6c5fb8ae1341c", size = 1543876 }, + { url = "https://files.pythonhosted.org/packages/05/a1/7c7e3a3c6e81b4284fd0d53cbaec51d9e5b90df26dd78e9bde06cb307217/ndindex-1.10.1-cp311-cp311-win32.whl", hash = "sha256:890bb92f0a779e6f16bdbcc8bd2e06c32bcc0239e5893ba246114eb924aecaaa", size = 149149 }, + { url = "https://files.pythonhosted.org/packages/3b/38/99e1fb0effdef74b883be615ea0053ebcea28a53fd8b896263f4e99b0113/ndindex-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:1827a40301405b44ad709e388c5b48cf35cd90a67f77e63f0f17d87f6000fa81", size = 157246 }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, +] + +[[package]] +name = "networkx" +version = "3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/a1/47b974da1a73f063c158a1f4cc33ed0abf7c04f98a19050e80c533c31f0c/networkx-3.1.tar.gz", hash = "sha256:de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61", size = 2021691 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/05/9d4f9b78ead6b2661d6e8ea772e111fc4a9fbd866ad0c81906c11206b55e/networkx-3.1-py3-none-any.whl", hash = "sha256:4f33f68cb2afcf86f28a45f43efc27a9386b535d567d2127f8f61d51dec58d36", size = 2072251 }, +] + +[[package]] +name = "notebook" +version = "6.5.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "argon2-cffi" }, + { name = "ipykernel" }, + { name = "ipython-genutils" }, + { name = "jinja2" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "nbclassic" }, + { name = "nbconvert" }, + { name = "nbformat" }, + { name = "nest-asyncio" }, + { name = "prometheus-client" }, + { name = "pyzmq" }, + { name = "send2trash" }, + { name = "terminado" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/05/bc/b025bac523640c13b0c1150466475eac3d79acbf187ef6c1967596c41c43/notebook-6.5.7.tar.gz", hash = "sha256:04eb9011dfac634fbd4442adaf0a8c27cd26beef831fe1d19faf930c327768e4", size = 5786526 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/9c/0620631da9d7013e95a8f985043cad229a0d8fb537a7e3f8ff8467565a8c/notebook-6.5.7-py3-none-any.whl", hash = "sha256:a6afa9a4ff4d149a0771ff8b8c881a7a73b3835f9add0606696d6e9d98ac1cd0", size = 529829 }, +] + +[[package]] +name = "notebook-shim" +version = "0.2.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/54/d2/92fa3243712b9a3e8bafaf60aac366da1cada3639ca767ff4b5b3654ec28/notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb", size = 13167 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307 }, +] + +[[package]] +name = "numexpr" +version = "2.14.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cb/2f/fdba158c9dbe5caca9c3eca3eaffffb251f2fb8674bf8e2d0aed5f38d319/numexpr-2.14.1.tar.gz", hash = "sha256:4be00b1086c7b7a5c32e31558122b7b80243fe098579b170967da83f3152b48b", size = 119400 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/a3/67999bdd1ed1f938d38f3fedd4969632f2f197b090e50505f7cc1fa82510/numexpr-2.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2d03fcb4644a12f70a14d74006f72662824da5b6128bf1bcd10cc3ed80e64c34", size = 163195 }, + { url = "https://files.pythonhosted.org/packages/25/95/d64f680ea1fc56d165457287e0851d6708800f9fcea346fc1b9957942ee6/numexpr-2.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2773ee1133f77009a1fc2f34fe236f3d9823779f5f75450e183137d49f00499f", size = 152088 }, + { url = "https://files.pythonhosted.org/packages/0e/7f/3bae417cb13ae08afd86d08bb0301c32440fe0cae4e6262b530e0819aeda/numexpr-2.14.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ebe4980f9494b9f94d10d2e526edc29e72516698d3bf95670ba79415492212a4", size = 451126 }, + { url = "https://files.pythonhosted.org/packages/4c/1a/edbe839109518364ac0bd9e918cf874c755bb2c128040e920f198c494263/numexpr-2.14.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a381e5e919a745c9503bcefffc1c7f98c972c04ec58fc8e999ed1a929e01ba6", size = 442012 }, + { url = "https://files.pythonhosted.org/packages/66/b1/be4ce99bff769a5003baddac103f34681997b31d4640d5a75c0e8ed59c78/numexpr-2.14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d08856cfc1b440eb1caaa60515235369654321995dd68eb9377577392020f6cb", size = 1415975 }, + { url = "https://files.pythonhosted.org/packages/e7/33/b33b8fdc032a05d9ebb44a51bfcd4b92c178a2572cd3e6c1b03d8a4b45b2/numexpr-2.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03130afa04edf83a7b590d207444f05a00363c9b9ea5d81c0f53b1ea13fad55a", size = 1464683 }, + { url = "https://files.pythonhosted.org/packages/d0/b2/ddcf0ac6cf0a1d605e5aecd4281507fd79a9628a67896795ab2e975de5df/numexpr-2.14.1-cp311-cp311-win32.whl", hash = "sha256:db78fa0c9fcbaded3ae7453faf060bd7a18b0dc10299d7fcd02d9362be1213ed", size = 166838 }, + { url = "https://files.pythonhosted.org/packages/64/72/4ca9bd97b2eb6dce9f5e70a3b6acec1a93e1fb9b079cb4cba2cdfbbf295d/numexpr-2.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:e9b2f957798c67a2428be96b04bce85439bed05efe78eb78e4c2ca43737578e7", size = 160069 }, +] + +[[package]] +name = "numpy" +version = "1.26.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", size = 15786129 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/57/baae43d14fe163fa0e4c47f307b6b2511ab8d7d30177c491960504252053/numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", size = 20630554 }, + { url = "https://files.pythonhosted.org/packages/1a/2e/151484f49fd03944c4a3ad9c418ed193cfd02724e138ac8a9505d056c582/numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", size = 13997127 }, + { url = "https://files.pythonhosted.org/packages/79/ae/7e5b85136806f9dadf4878bf73cf223fe5c2636818ba3ab1c585d0403164/numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", size = 14222994 }, + { url = "https://files.pythonhosted.org/packages/3a/d0/edc009c27b406c4f9cbc79274d6e46d634d139075492ad055e3d68445925/numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", size = 18252005 }, + { url = "https://files.pythonhosted.org/packages/09/bf/2b1aaf8f525f2923ff6cfcf134ae5e750e279ac65ebf386c75a0cf6da06a/numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", size = 13885297 }, + { url = "https://files.pythonhosted.org/packages/df/a0/4e0f14d847cfc2a633a1c8621d00724f3206cfeddeb66d35698c4e2cf3d2/numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", size = 18093567 }, + { url = "https://files.pythonhosted.org/packages/d2/b7/a734c733286e10a7f1a8ad1ae8c90f2d33bf604a96548e0a4a3a6739b468/numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", size = 5968812 }, + { url = "https://files.pythonhosted.org/packages/3f/6b/5610004206cf7f8e7ad91c5a85a8c71b2f2f8051a0c0c4d5916b76d6cbb2/numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", size = 15811913 }, +] + +[[package]] +name = "openpyxl" +version = "3.0.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "et-xmlfile" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2c/b8/ff77a718173fd73e49f883b4fda88f11af1fc51edb9252af3785b0cad987/openpyxl-3.0.10.tar.gz", hash = "sha256:e47805627aebcf860edb4edf7987b1309c1b3632f3750538ed962bbcc3bd7449", size = 179688 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/60/9afac4fd6feee0ac09339de4101ee452ea643d26e9ce44c7708a0023f503/openpyxl-3.0.10-py2.py3-none-any.whl", hash = "sha256:0ab6d25d01799f97a9464630abacbb34aafecdcaa0ef3cba6d6b3499867d0355", size = 242144 }, +] + +[[package]] +name = "overrides" +version = "7.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832 }, +] + +[[package]] +name = "packaging" +version = "26.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195 }, +] + +[[package]] +name = "pandas" +version = "2.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/a7/824332581e258b5aa4f3763ecb2a797e5f9a54269044ba2e50ac19936b32/pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c", size = 5284455 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/92/a5e5133421b49e901a12e02a6a7ef3a0130e10d13db8cb657fdd0cba3b90/pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8", size = 11645672 }, + { url = "https://files.pythonhosted.org/packages/8f/bb/aea1fbeed5b474cb8634364718abe9030d7cc7a30bf51f40bd494bbc89a2/pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26", size = 10693229 }, + { url = "https://files.pythonhosted.org/packages/d6/90/e7d387f1a416b14e59290baa7a454a90d719baebbf77433ff1bdcc727800/pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d", size = 11581591 }, + { url = "https://files.pythonhosted.org/packages/d0/28/88b81881c056376254618fad622a5e94b5126db8c61157ea1910cd1c040a/pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df", size = 12219370 }, + { url = "https://files.pythonhosted.org/packages/e4/a5/212b9039e25bf8ebb97e417a96660e3dc925dacd3f8653d531b8f7fd9be4/pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd", size = 9482935 }, + { url = "https://files.pythonhosted.org/packages/9e/71/756a1be6bee0209d8c0d8c5e3b9fc72c00373f384a4017095ec404aec3ad/pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b", size = 10607692 }, +] + +[[package]] +name = "pandocfilters" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663 }, +] + +[[package]] +name = "parso" +version = "0.8.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/4b/90c937815137d43ce71ba043cd3566221e9df6b9c805f24b5d138c9d40a7/parso-0.8.7.tar.gz", hash = "sha256:eaaac4c9fdd5e9e8852dc778d2d7405897ec510f2a298071453e5e3a07914bb1", size = 401824 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl", hash = "sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c", size = 107025 }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, +] + +[[package]] +name = "pillow" +version = "9.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/d5/4903f310765e0ff2b8e91ffe55031ac6af77d982f0156061e20a4d1a8b2d/Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1", size = 50488147 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/a8/3c2d737d856eb9cd8c18e78f6fe0ed08a2805bded74cbb0455584859023b/Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32", size = 3395792 }, + { url = "https://files.pythonhosted.org/packages/a9/15/310cde63cb15a091de889ded26281924cf9cfa5c000b36b06bd0c7f50261/Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c", size = 3077092 }, + { url = "https://files.pythonhosted.org/packages/17/66/20db69c0361902a2f6ee2086d3e83c70133e3fb4cb31470e59a8ed37184e/Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3", size = 3112543 }, + { url = "https://files.pythonhosted.org/packages/5c/a8/ff526cdec6b56eb20c992e7083f02c8065049ed1e62fbc159390d7a3dd5e/Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a", size = 3386654 }, + { url = "https://files.pythonhosted.org/packages/3b/70/e9a45a2e9c58c23e023fcda5af9686f5b42c718cc9bc86194e0025cf0ec5/Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1", size = 3308566 }, + { url = "https://files.pythonhosted.org/packages/61/a5/ee306d6cc53c9a30c23ba2313b43b67fdf76c611ca5afd0cdd62922cbd3e/Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99", size = 3164027 }, + { url = "https://files.pythonhosted.org/packages/3d/59/e6bd2c3715ace343d9739276ceed79657fe116923238d102cf731ab463dd/Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625", size = 3415610 }, + { url = "https://files.pythonhosted.org/packages/9a/6d/9beb596ba5a5e61081c843187bcdbb42a5c9a9ef552751b554894247da7a/Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579", size = 3350704 }, + { url = "https://files.pythonhosted.org/packages/1e/e4/de633d85be3b3c770c554a37a89e8273069bd19c34b15a419c2795600310/Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296", size = 3414604 }, + { url = "https://files.pythonhosted.org/packages/46/a0/e410f655300932308e70e883dd60c0c51e6f74bed138641ea9193e64fd7c/Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec", size = 2211929 }, + { url = "https://files.pythonhosted.org/packages/0c/02/7729c8aecbc525b560c7eb283ffa34c6f5a6d0ed6d1339570c65a3e63088/Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4", size = 2511551 }, + { url = "https://files.pythonhosted.org/packages/b9/8b/d38cc68796be4ac238db327682a1acfbc5deccf64a150aa44ee1efbaafae/Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089", size = 2489206 }, +] + +[[package]] +name = "platformdirs" +version = "4.9.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9f/4a/0883b8e3802965322523f0b200ecf33d31f10991d0401162f4b23c698b42/platformdirs-4.9.6.tar.gz", hash = "sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a", size = 29400 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348 }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, +] + +[[package]] +name = "prometheus-client" +version = "0.25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/fb/d9aa83ffe43ce1f19e557c0971d04b90561b0cfd50762aafb01968285553/prometheus_client-0.25.0.tar.gz", hash = "sha256:5e373b75c31afb3c86f1a52fa1ad470c9aace18082d39ec0d2f918d11cc9ba28", size = 86035 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/9b/d4b1e644385499c8346fa9b622a3f030dce14cd6ef8a1871c221a17a67e7/prometheus_client-0.25.0-py3-none-any.whl", hash = "sha256:d5aec89e349a6ec230805d0df882f3807f74fd6c1a2fa86864e3c2279059fed1", size = 64154 }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.52" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431 }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090 }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859 }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560 }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997 }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972 }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266 }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737 }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617 }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, +] + +[[package]] +name = "pulp" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/59/41/44d617a67407ea5db026500025b8aa7cad0b2b52621c04991b248c3b383d/PuLP-2.7.0.tar.gz", hash = "sha256:e73ee6b32d639c9b8cf4b4aded334ba158be5f8313544e056f796ace0a10ae63", size = 1400315 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/60/b91acaa7995bfcd72f1739ea2b0f5cda707329e17f0b7f921fd8acc79889/PuLP-2.7.0-py3-none-any.whl", hash = "sha256:b6de42c929e80325bf44cc7a2997f02535440800c376b9eb8cb7b4670ed53769", size = 14251631 }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, +] + +[[package]] +name = "py-cpuinfo" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/37/a8/d832f7293ebb21690860d2e01d8115e5ff6f2ae8bbdc953f0eb0fa4bd2c7/py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690", size = 104716 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335 }, +] + +[[package]] +name = "pybtex" +version = "0.26.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "latexcodec" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4d/f5/f30da9c93f0fa6d619332b2f69597219b625f35780473a05164a9981fd9a/pybtex-0.26.1.tar.gz", hash = "sha256:2e5543bea424e60e9e42eef70bff597be48649d8f68ba061a7a092b2477d5464", size = 692991 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/f6/775eb92e865b28cdb4ad1f2bed7a5446197516f76b58a950faa3be3fd08d/pybtex-0.26.1-py3-none-any.whl", hash = "sha256:e26c0412cc54f5f21b2a6d9d175762a2d2af9ccf3a8f651cdb89ec035db77aa1", size = 126134 }, +] + +[[package]] +name = "pybtex-docutils" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "pybtex" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7e/84/796ea94d26188a853660f81bded39f8de4cfe595130aef0dea1088705a11/pybtex-docutils-1.0.3.tar.gz", hash = "sha256:3a7ebdf92b593e00e8c1c538aa9a20bca5d92d84231124715acc964d51d93c6b", size = 18348 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/b1/ce1f4596211efb5410e178a803f08e59b20bedb66837dcf41e21c54f9ec1/pybtex_docutils-1.0.3-py3-none-any.whl", hash = "sha256:8fd290d2ae48e32fcb54d86b0efb8d573198653c7e2447d5bec5847095f430b9", size = 6385 }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172 }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151 }, +] + +[[package]] +name = "pyparsing" +version = "3.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781 }, +] + +[[package]] +name = "pyproj" +version = "3.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/84/2b39bbf888c753ea48b40d47511548c77aa03445465c35cc4c4e9649b643/pyproj-3.6.1.tar.gz", hash = "sha256:44aa7c704c2b7d8fb3d483bbf75af6cb2350d30a63b144279a09b75fead501bf", size = 225131 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/a6/a300c1b14b2112e966e9f90b18f9c13b586bdcf417207cee913ae9005da3/pyproj-3.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ebfbdbd0936e178091309f6cd4fcb4decd9eab12aa513cdd9add89efa3ec2882", size = 6147442 }, + { url = "https://files.pythonhosted.org/packages/30/bd/b9bd3761f08754e8dbb34c5a647db2099b348ab5da338e90980caf280e37/pyproj-3.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:447db19c7efad70ff161e5e46a54ab9cc2399acebb656b6ccf63e4bc4a04b97a", size = 4880331 }, + { url = "https://files.pythonhosted.org/packages/f4/0a/d82aeeb605b5d6870bc72307c3b5e044e632eb7720df8885e144f51a8eac/pyproj-3.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7e13c40183884ec7f94eb8e0f622f08f1d5716150b8d7a134de48c6110fee85", size = 6192425 }, + { url = "https://files.pythonhosted.org/packages/64/90/dfe5c00de1ca4dbb82606e79790659d4ed7f0ed8d372bccb3baca2a5abe0/pyproj-3.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65ad699e0c830e2b8565afe42bd58cc972b47d829b2e0e48ad9638386d994915", size = 8571478 }, + { url = "https://files.pythonhosted.org/packages/14/6d/ae373629a1723f0db80d7b8c93598b00d9ecb930ed9ebf4f35826a33e97c/pyproj-3.6.1-cp311-cp311-win32.whl", hash = "sha256:8b8acc31fb8702c54625f4d5a2a6543557bec3c28a0ef638778b7ab1d1772132", size = 5634575 }, + { url = "https://files.pythonhosted.org/packages/79/95/eb68113c5b5737c342bde1bab92705dabe69c16299c5a122616e50f1fbd6/pyproj-3.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:38a3361941eb72b82bd9a18f60c78b0df8408416f9340521df442cebfc4306e2", size = 6088494 }, +] + +[[package]] +name = "pytest" +version = "7.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/80/1f/9d8e98e4133ffb16c90f3b405c43e38d3abb715bb5d7a63a5a684f7e46a3/pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280", size = 1357116 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/ff/f6e8b8f39e08547faece4bd80f89d5a8de68a38b2d179cc1c4490ffa3286/pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8", size = 325287 }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, +] + +[[package]] +name = "python-json-logger" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/ff/3cc9165fd44106973cd7ac9facb674a65ed853494592541d339bdc9a30eb/python_json_logger-4.1.0.tar.gz", hash = "sha256:b396b9e3ed782b09ff9d6e4f1683d46c83ad0d35d2e407c09a9ebbf038f88195", size = 17573 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl", hash = "sha256:132994765cf75bf44554be9aa49b06ef2345d23661a96720262716438141b6b2", size = 15021 }, +] + +[[package]] +name = "python-pptx" +version = "0.6.22" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lxml" }, + { name = "pillow" }, + { name = "xlsxwriter" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/ec/311ca254e48c947eaa9c16cdc01a4f828b7531e7f4dfebf3cec9fd15f951/python-pptx-0.6.22.tar.gz", hash = "sha256:38f8ee92dde31d24b4562560e61b0357e5d97ecf75c4352ae6616d5a32978654", size = 10084665 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/ea/94b20a70ed151c4af20dbc3aaa275a89757964f9df5a960698e399012c5e/python_pptx-0.6.22-py3-none-any.whl", hash = "sha256:3d097c29e08de2da1fc3c6752169087065efa4153216e77fc1b27dff1bcdcb46", size = 471482 }, +] + +[[package]] +name = "pytz" +version = "2026.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141 }, +] + +[[package]] +name = "pywinpty" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/54/37c7370ba91f579235049dc26cd2c5e657d2a943e01820844ffc81f32176/pywinpty-3.0.3.tar.gz", hash = "sha256:523441dc34d231fb361b4b00f8c99d3f16de02f5005fd544a0183112bcc22412", size = 31309 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/c3/3e75075c7f71735f22b66fab0481f2c98e3a4d58cba55cb50ba29114bcf6/pywinpty-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:dff25a9a6435f527d7c65608a7e62783fc12076e7d44487a4911ee91be5a8ac8", size = 2114430 }, + { url = "https://files.pythonhosted.org/packages/8d/1e/8a54166a8c5e4f5cb516514bdf4090be4d51a71e8d9f6d98c0aa00fe45d4/pywinpty-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:fbc1e230e5b193eef4431cba3f39996a288f9958f9c9f092c8a961d930ee8f68", size = 236191 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826 }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577 }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556 }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114 }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638 }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463 }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986 }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543 }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763 }, +] + +[[package]] +name = "pyzmq" +version = "27.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86", size = 1333328 }, + { url = "https://files.pythonhosted.org/packages/bd/a0/fc7e78a23748ad5443ac3275943457e8452da67fda347e05260261108cbc/pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581", size = 908803 }, + { url = "https://files.pythonhosted.org/packages/7e/22/37d15eb05f3bdfa4abea6f6d96eb3bb58585fbd3e4e0ded4e743bc650c97/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f", size = 668836 }, + { url = "https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e", size = 857038 }, + { url = "https://files.pythonhosted.org/packages/cb/eb/bfdcb41d0db9cd233d6fb22dc131583774135505ada800ebf14dfb0a7c40/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e", size = 1657531 }, + { url = "https://files.pythonhosted.org/packages/ab/21/e3180ca269ed4a0de5c34417dfe71a8ae80421198be83ee619a8a485b0c7/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2", size = 2034786 }, + { url = "https://files.pythonhosted.org/packages/3b/b1/5e21d0b517434b7f33588ff76c177c5a167858cc38ef740608898cd329f2/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394", size = 1894220 }, + { url = "https://files.pythonhosted.org/packages/03/f2/44913a6ff6941905efc24a1acf3d3cb6146b636c546c7406c38c49c403d4/pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f", size = 567155 }, + { url = "https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97", size = 633428 }, + { url = "https://files.pythonhosted.org/packages/ae/14/01afebc96c5abbbd713ecfc7469cfb1bc801c819a74ed5c9fad9a48801cb/pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07", size = 559497 }, + { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279 }, + { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645 }, + { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574 }, + { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995 }, + { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070 }, + { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121 }, + { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550 }, + { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184 }, + { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480 }, + { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993 }, + { url = "https://files.pythonhosted.org/packages/4c/c6/c4dcdecdbaa70969ee1fdced6d7b8f60cfabe64d25361f27ac4665a70620/pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066", size = 836265 }, + { url = "https://files.pythonhosted.org/packages/3e/79/f38c92eeaeb03a2ccc2ba9866f0439593bb08c5e3b714ac1d553e5c96e25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604", size = 800208 }, + { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747 }, + { url = "https://files.pythonhosted.org/packages/a1/cf/f2b3784d536250ffd4be70e049f3b60981235d70c6e8ce7e3ef21e1adb25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271", size = 747371 }, + { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862 }, +] + +[[package]] +name = "reeds" +version = "2024.0.0" +source = { editable = "." } +dependencies = [ + { name = "bokeh" }, + { name = "click" }, + { name = "cmocean" }, + { name = "gdxpds" }, + { name = "geopandas" }, + { name = "gitpython" }, + { name = "h5py" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "openpyxl" }, + { name = "pandas" }, + { name = "pulp" }, + { name = "pytest" }, + { name = "requests" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "shapely" }, + { name = "tables" }, + { name = "tqdm" }, +] + +[package.optional-dependencies] +dev = [ + { name = "fiona" }, + { name = "folium" }, + { name = "gamspy-base" }, + { name = "ipykernel" }, + { name = "ipywidgets" }, + { name = "mapclassify" }, + { name = "myst-parser" }, + { name = "networkx" }, + { name = "notebook" }, + { name = "pyproj" }, + { name = "python-pptx" }, + { name = "sphinx" }, + { name = "sphinx-rtd-theme" }, + { name = "sphinxcontrib-bibtex" }, +] +docs = [ + { name = "myst-parser" }, + { name = "sphinx" }, + { name = "sphinx-rtd-theme" }, + { name = "sphinxcontrib-bibtex" }, +] +interactive = [ + { name = "ipykernel" }, + { name = "ipywidgets" }, + { name = "notebook" }, +] +maps = [ + { name = "fiona" }, + { name = "folium" }, + { name = "mapclassify" }, + { name = "pyproj" }, +] +network = [ + { name = "networkx" }, +] +reporting = [ + { name = "python-pptx" }, +] +testing = [ + { name = "gamspy-base" }, +] + +[package.metadata] +requires-dist = [ + { name = "bokeh", specifier = "==3.2.*" }, + { name = "click", specifier = "==8.0.*" }, + { name = "cmocean", specifier = "==3.0.3" }, + { name = "fiona", marker = "extra == 'dev'", specifier = "==1.9.5" }, + { name = "fiona", marker = "extra == 'maps'", specifier = "==1.9.5" }, + { name = "folium", marker = "extra == 'dev'", specifier = "==0.14.0" }, + { name = "folium", marker = "extra == 'maps'", specifier = "==0.14.0" }, + { name = "gamspy-base", marker = "extra == 'dev'", specifier = "==50.5.0" }, + { name = "gamspy-base", marker = "extra == 'testing'", specifier = "==50.5.0" }, + { name = "gdxpds", specifier = "==1.4.0" }, + { name = "geopandas", specifier = "==0.14.0" }, + { name = "gitpython", specifier = "==3.1.*" }, + { name = "h5py", specifier = "==3.9.*" }, + { name = "ipykernel", marker = "extra == 'dev'", specifier = "==6.25.*" }, + { name = "ipykernel", marker = "extra == 'interactive'", specifier = "==6.25.*" }, + { name = "ipywidgets", marker = "extra == 'dev'", specifier = "==8.0.*" }, + { name = "ipywidgets", marker = "extra == 'interactive'", specifier = "==8.0.*" }, + { name = "mapclassify", marker = "extra == 'dev'", specifier = "==2.5.*" }, + { name = "mapclassify", marker = "extra == 'maps'", specifier = "==2.5.*" }, + { name = "matplotlib", specifier = "==3.7.*" }, + { name = "myst-parser", marker = "extra == 'dev'", specifier = "==2.0.0" }, + { name = "myst-parser", marker = "extra == 'docs'", specifier = "==2.0.0" }, + { name = "networkx", marker = "extra == 'dev'", specifier = "==3.1.*" }, + { name = "networkx", marker = "extra == 'network'", specifier = "==3.1.*" }, + { name = "notebook", marker = "extra == 'dev'", specifier = "==6.5.*" }, + { name = "notebook", marker = "extra == 'interactive'", specifier = "==6.5.*" }, + { name = "numpy", specifier = "==1.26.*" }, + { name = "openpyxl", specifier = "==3.0.*" }, + { name = "pandas", specifier = "==2.0.*" }, + { name = "pulp", specifier = "==2.7.0" }, + { name = "pyproj", marker = "extra == 'dev'", specifier = "==3.6.1" }, + { name = "pyproj", marker = "extra == 'maps'", specifier = "==3.6.1" }, + { name = "pytest", specifier = "==7.4.*" }, + { name = "python-pptx", marker = "extra == 'dev'", specifier = "==0.6.22" }, + { name = "python-pptx", marker = "extra == 'reporting'", specifier = "==0.6.22" }, + { name = "requests", specifier = "==2.31.*" }, + { name = "scikit-learn", specifier = "==1.2.*" }, + { name = "scipy", specifier = "==1.11.*" }, + { name = "shapely", specifier = "==2.0.1" }, + { name = "sphinx", marker = "extra == 'dev'", specifier = "==7.2.6" }, + { name = "sphinx", marker = "extra == 'docs'", specifier = "==7.2.6" }, + { name = "sphinx-rtd-theme", marker = "extra == 'dev'", specifier = "==2.0.0" }, + { name = "sphinx-rtd-theme", marker = "extra == 'docs'", specifier = "==2.0.0" }, + { name = "sphinxcontrib-bibtex", marker = "extra == 'dev'", specifier = "==2.6.2" }, + { name = "sphinxcontrib-bibtex", marker = "extra == 'docs'", specifier = "==2.6.2" }, + { name = "tables", specifier = "==3.11.1" }, + { name = "tqdm", specifier = "==4.65.*" }, +] +provides-extras = ["interactive", "maps", "docs", "reporting", "network", "testing", "dev"] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766 }, +] + +[[package]] +name = "requests" +version = "2.31.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/be/10918a2eac4ae9f02f6cfe6414b7a155ccd8f7f9d4380d62fd5b955065c3/requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1", size = 110794 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", size = 62574 }, +] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490 }, +] + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/88/f270de456dd7d11dcc808abfa291ecdd3f45ff44e3b549ffa01b126464d0/rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055", size = 6760 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", size = 4242 }, +] + +[[package]] +name = "rfc3987-syntax" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lark" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2c/06/37c1a5557acf449e8e406a830a05bf885ac47d33270aec454ef78675008d/rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d", size = 14239 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f", size = 8046 }, +] + +[[package]] +name = "rpds-py" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157 }, + { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676 }, + { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938 }, + { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932 }, + { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830 }, + { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033 }, + { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828 }, + { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683 }, + { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583 }, + { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496 }, + { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669 }, + { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011 }, + { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406 }, + { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024 }, + { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069 }, + { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292 }, + { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128 }, + { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542 }, + { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004 }, + { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063 }, + { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099 }, + { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177 }, + { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015 }, + { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736 }, + { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981 }, + { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782 }, + { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191 }, +] + +[[package]] +name = "scikit-learn" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/fa/8e158d81e3602da1e7bafbd4987938bc003fe4b0f44d65681e7f8face95a/scikit-learn-1.2.2.tar.gz", hash = "sha256:8429aea30ec24e7a8c7ed8a3fa6213adf3814a6efbea09e16e0a0c71e1a1a3d7", size = 7269934 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/4a/1afe473760b07663710a75437b795ef37362aebb8bf513ff3bbf78fbd0c6/scikit_learn-1.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfeaf8be72117eb61a164ea6fc8afb6dfe08c6f90365bde2dc16456e4bc8e45f", size = 9024742 }, + { url = "https://files.pythonhosted.org/packages/2f/fd/9fcbe7fe94150e72d87120cbc462bde1971c3674e726b81f4a4c4fdfa8e1/scikit_learn-1.2.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:fe0aa1a7029ed3e1dcbf4a5bc675aa3b1bc468d9012ecf6c6f081251ca47f590", size = 8375105 }, + { url = "https://files.pythonhosted.org/packages/d7/8a/301594a8bb1cfeeb95dd86aa7dfedd31e93211940105429abddf0933cfff/scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:065e9673e24e0dc5113e2dd2b4ca30c9d8aa2fa90f4c0597241c93b63130d233", size = 9150797 }, + { url = "https://files.pythonhosted.org/packages/4c/64/a1e6e92b850b39200c82e3bc54d556b2c634b3904c39ac5cdb10b1c5765f/scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf036ea7ef66115e0d49655f16febfa547886deba20149555a41d28f56fd6d3c", size = 9562879 }, + { url = "https://files.pythonhosted.org/packages/db/98/169b46a84b48f92df2b5e163fce75d471f4df933f8b3d925a61133210776/scikit_learn-1.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:8b0670d4224a3c2d596fd572fb4fa673b2a0ccfb07152688ebd2ea0b8c61025c", size = 8261146 }, +] + +[[package]] +name = "scipy" +version = "1.11.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6e/1f/91144ba78dccea567a6466262922786ffc97be1e9b06ed9574ef0edc11e1/scipy-1.11.4.tar.gz", hash = "sha256:90a2b78e7f5733b9de748f589f09225013685f9b218275257f8a8168ededaeaa", size = 56336202 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/f2/1aefbd5e54ebd8c6163ccf7f73e5d17bc8cb38738d312befc524fce84bb4/scipy-1.11.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f313b39a7e94f296025e3cffc2c567618174c0b1dde173960cf23808f9fae4be", size = 37159197 }, + { url = "https://files.pythonhosted.org/packages/4b/48/20e77ddb1f473d4717a7d4d3fc8d15557f406f7708496054c59f635b7734/scipy-1.11.4-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1b7c3dca977f30a739e0409fb001056484661cb2541a01aba0bb0029f7b68db8", size = 29675057 }, + { url = "https://files.pythonhosted.org/packages/75/2e/a781862190d0e7e76afa74752ef363488a9a9d6ea86e46d5e5506cee8df6/scipy-1.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00150c5eae7b610c32589dda259eacc7c4f1665aedf25d921907f4d08a951b1c", size = 32882747 }, + { url = "https://files.pythonhosted.org/packages/6b/d4/d62ce38ba00dc67d7ec4ec5cc19d36958d8ed70e63778715ad626bcbc796/scipy-1.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530f9ad26440e85766509dbf78edcfe13ffd0ab7fec2560ee5c36ff74d6269ff", size = 36402732 }, + { url = "https://files.pythonhosted.org/packages/88/86/827b56aea1ed04adbb044a675672a73c84d81076a350092bbfcfc1ae723b/scipy-1.11.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5e347b14fe01003d3b78e196e84bd3f48ffe4c8a7b8a1afbcb8f5505cb710993", size = 36622138 }, + { url = "https://files.pythonhosted.org/packages/43/d0/f3cd75b62e1b90f48dbf091261b2fc7ceec14a700e308c50f6a69c83d337/scipy-1.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:acf8ed278cc03f5aff035e69cb511741e0418681d25fbbb86ca65429c4f4d9cd", size = 44095631 }, +] + +[[package]] +name = "send2trash" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/f0/184b4b5f8d00f2a92cf96eec8967a3d550b52cf94362dad1100df9e48d57/send2trash-2.1.0.tar.gz", hash = "sha256:1c72b39f09457db3c05ce1d19158c2cbef4c32b8bedd02c155e49282b7ea7459", size = 17255 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl", hash = "sha256:0da2f112e6d6bb22de6aa6daa7e144831a4febf2a87261451c4ad849fe9a873c", size = 17610 }, +] + +[[package]] +name = "setuptools" +version = "82.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223 }, +] + +[[package]] +name = "shapely" +version = "2.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/10/a7/de139da3ce303101c357a9ba801328cba85cf6ace157da31a4007bca85e4/shapely-2.0.1.tar.gz", hash = "sha256:66a6b1a3e72ece97fc85536a281476f9b7794de2e646ca8a4517e2e3c1446893", size = 275535 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/31/ad4881727b700a9320a4139ac3483972901a9fdd17bb6a599aca810dbd85/shapely-2.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:502e0a607f1dcc6dee0125aeee886379be5242c854500ea5fd2e7ac076b9ce6d", size = 2398678 }, + { url = "https://files.pythonhosted.org/packages/7b/e3/92ec80d72de8b881c52e47db1fd2f0519d49b6ad65c4c2a3fcbb9f88a91f/shapely-2.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7d3bbeefd8a6a1a1017265d2d36f8ff2d79d0162d8c141aa0d37a87063525656", size = 1358751 }, + { url = "https://files.pythonhosted.org/packages/18/a6/2e1761f21605e3562b223be7ad82f2edb5c9babdaa8b2d90979112be70f3/shapely-2.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f470a130d6ddb05b810fc1776d918659407f8d025b7f56d2742a596b6dffa6c7", size = 1195469 }, + { url = "https://files.pythonhosted.org/packages/70/21/39c2afae46154f824564d6b5b7213a84d083e243b42b5a1e76de481f91bb/shapely-2.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4641325e065fd3e07d55677849c9ddfd0cf3ee98f96475126942e746d55b17c8", size = 2254608 }, + { url = "https://files.pythonhosted.org/packages/e9/7c/76e54fa615a20ceb876e4de6b9f01a56926184bcc2076186c51c27ce39ad/shapely-2.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90cfa4144ff189a3c3de62e2f3669283c98fb760cfa2e82ff70df40f11cadb39", size = 2521453 }, + { url = "https://files.pythonhosted.org/packages/04/67/05e96af1c4ee130e12ac228da1ab86f7581809d8f008aa3a9ec19ea22eb2/shapely-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70a18fc7d6418e5aea76ac55dce33f98e75bd413c6eb39cfed6a1ba36469d7d4", size = 2336558 }, + { url = "https://files.pythonhosted.org/packages/bc/f1/c9db479170a7288d6bd2adcd1892785a3206b7a6f7972e7478714cb39e3c/shapely-2.0.1-cp311-cp311-win32.whl", hash = "sha256:09d6c7763b1bee0d0a2b84bb32a4c25c6359ad1ac582a62d8b211e89de986154", size = 1222645 }, + { url = "https://files.pythonhosted.org/packages/28/81/0239107ccd32eb30085c99fbf22da686aa72278afcc2c8fdf06fa0fa6320/shapely-2.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d8f55f355be7821dade839df785a49dc9f16d1af363134d07eb11e9207e0b189", size = 1364032 }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, +] + +[[package]] +name = "smmap" +version = "5.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/ea/49c993d6dfdd7338c9b1000a0f36817ed7ec84577ae2e52f890d1a4ff909/smmap-5.0.3.tar.gz", hash = "sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c", size = 22506 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl", hash = "sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f", size = 24390 }, +] + +[[package]] +name = "snowballstemmer" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274 }, +] + +[[package]] +name = "soupsieve" +version = "2.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/ae/2d9c981590ed9999a0d91755b47fc74f74de286b0f5cee14c9269041e6c4/soupsieve-2.8.3.tar.gz", hash = "sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349", size = 118627 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95", size = 37016 }, +] + +[[package]] +name = "sphinx" +version = "7.2.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "alabaster" }, + { name = "babel" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "docutils" }, + { name = "imagesize" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pygments" }, + { name = "requests" }, + { name = "snowballstemmer" }, + { name = "sphinxcontrib-applehelp" }, + { name = "sphinxcontrib-devhelp" }, + { name = "sphinxcontrib-htmlhelp" }, + { name = "sphinxcontrib-jsmath" }, + { name = "sphinxcontrib-qthelp" }, + { name = "sphinxcontrib-serializinghtml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/73/8e/6e51da4b26665b4b92b1944ea18b2d9c825e753e19180cc5bdc818d0ed3b/sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5", size = 7015183 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/b6/8ed35256aa530a9d3da15d20bdc0ba888d5364441bb50a5a83ee7827affe/sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560", size = 3207959 }, +] + +[[package]] +name = "sphinx-rtd-theme" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "sphinx" }, + { name = "sphinxcontrib-jquery" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fe/33/2a35a9cdbfda9086bda11457bcc872173ab3565b16b6d7f6b3efaa6dc3d6/sphinx_rtd_theme-2.0.0.tar.gz", hash = "sha256:bd5d7b80622406762073a04ef8fadc5f9151261563d47027de09910ce03afe6b", size = 2785005 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/46/00fda84467815c29951a9c91e3ae7503c409ddad04373e7cfc78daad4300/sphinx_rtd_theme-2.0.0-py2.py3-none-any.whl", hash = "sha256:ec93d0856dc280cf3aee9a4c9807c60e027c7f7b461b77aeffed682e68f0e586", size = 2824721 }, +] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300 }, +] + +[[package]] +name = "sphinxcontrib-bibtex" +version = "2.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "pybtex" }, + { name = "pybtex-docutils" }, + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/0b/318f862d69102e6c412fd4f0a78daa271616092aa02de296e9110bc67832/sphinxcontrib-bibtex-2.6.2.tar.gz", hash = "sha256:f487af694336f28bfb7d6a17070953a7d264bec43000a2379724274f5f8d70ae", size = 117459 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/f5/a15c05337929d1d19c2b6802ba196b98ac4beddf977c203661978c54e2d5/sphinxcontrib_bibtex-2.6.2-py3-none-any.whl", hash = "sha256:10d45ebbb19207c5665396c9446f8012a79b8a538cb729f895b5910ab2d0b2da", size = 40951 }, +] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530 }, +] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705 }, +] + +[[package]] +name = "sphinxcontrib-jquery" +version = "4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/f3/aa67467e051df70a6330fe7770894b3e4f09436dea6881ae0b4f3d87cad8/sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a", size = 122331 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae", size = 121104 }, +] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071 }, +] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743 }, +] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072 }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, +] + +[[package]] +name = "tables" +version = "3.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "blosc2" }, + { name = "numexpr" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "py-cpuinfo" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cc/a3/d213ebe7376d48055bd55a29cd9f99061afa0dcece608f94a5025d797b0a/tables-3.11.1.tar.gz", hash = "sha256:78abcf413091bc7c1e4e8c10fbbb438d1ac0b5a87436c5b972c3e8253871b6fb", size = 4790533 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/bb/4a9cde6628563388db26fa86c64adb0f2475a757e72af0ec185fd520b72f/tables-3.11.1-cp311-abi3-macosx_10_9_x86_64.whl", hash = "sha256:eb30684c42a77bbecdef2b9c763c4372b0ddc9cc5bd8b2a2055f2042eee67217", size = 7045977 }, + { url = "https://files.pythonhosted.org/packages/78/74/6568c8d3aabf9982ab89fe3e378afbd7aad4894bde4570991a3246169ef4/tables-3.11.1-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:f0367d2e3df0f10ea63ccf4279f3fe58e32ec481767320301a483e2b3cd83efc", size = 6264947 }, + { url = "https://files.pythonhosted.org/packages/cc/a3/ec228901fca4c996306b17f5c60a4105144df0bbd07b3a4a816f91f37b4a/tables-3.11.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56bf6fb9132ead989b7e76695d7613d6d08f071a8019038d6565ba90c66b9f3e", size = 6903733 }, + { url = "https://files.pythonhosted.org/packages/99/29/c2dc674ea70fa9a4819417289a9c0d3e4780835beeed573eb66964cfb763/tables-3.11.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e78fe190fdeb4afe430b79651bae2a4f341904eb85aa8dbafe5f1caee1c7f67", size = 7241357 }, + { url = "https://files.pythonhosted.org/packages/60/b5/a59b62af4127790c618eb11c06c106706e07509a3fb9e346b2a3ffa74419/tables-3.11.1-cp311-abi3-win_amd64.whl", hash = "sha256:7fa6cb03f6fe55ae4f85e89ec5450e5c40cc4c52d8c3b60eb157a445c2219e89", size = 6526565 }, +] + +[[package]] +name = "terminado" +version = "0.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "os_name != 'nt'" }, + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "tornado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/11/965c6fd8e5cc254f1fe142d547387da17a8ebfd75a3455f637c663fb38a0/terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e", size = 32701 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154 }, +] + +[[package]] +name = "threadpoolctl" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638 }, +] + +[[package]] +name = "tinycss2" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, +] + +[[package]] +name = "tornado" +version = "6.5.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/f1/3173dfa4a18db4a9b03e5d55325559dab51ee653763bb8745a75af491286/tornado-6.5.5.tar.gz", hash = "sha256:192b8f3ea91bd7f1f50c06955416ed76c6b72f96779b962f07f911b91e8d30e9", size = 516006 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa", size = 445983 }, + { url = "https://files.pythonhosted.org/packages/ab/5e/7625b76cd10f98f1516c36ce0346de62061156352353ef2da44e5c21523c/tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:65a7f1d46d4bb41df1ac99f5fcb685fb25c7e61613742d5108b010975a9a6521", size = 444246 }, + { url = "https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5", size = 447229 }, + { url = "https://files.pythonhosted.org/packages/34/01/74e034a30ef59afb4097ef8659515e96a39d910b712a89af76f5e4e1f93c/tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:435319e9e340276428bbdb4e7fa732c2d399386d1de5686cb331ec8eee754f07", size = 448192 }, + { url = "https://files.pythonhosted.org/packages/be/00/fe9e02c5a96429fce1a1d15a517f5d8444f9c412e0bb9eadfbe3b0fc55bf/tornado-6.5.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3f54aa540bdbfee7b9eb268ead60e7d199de5021facd276819c193c0fb28ea4e", size = 448039 }, + { url = "https://files.pythonhosted.org/packages/82/9e/656ee4cec0398b1d18d0f1eb6372c41c6b889722641d84948351ae19556d/tornado-6.5.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36abed1754faeb80fbd6e64db2758091e1320f6bba74a4cf8c09cd18ccce8aca", size = 447445 }, + { url = "https://files.pythonhosted.org/packages/5a/76/4921c00511f88af86a33de770d64141170f1cfd9c00311aea689949e274e/tornado-6.5.5-cp39-abi3-win32.whl", hash = "sha256:dd3eafaaeec1c7f2f8fdcd5f964e8907ad788fe8a5a32c4426fbbdda621223b7", size = 448582 }, + { url = "https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl", hash = "sha256:6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b", size = 448990 }, + { url = "https://files.pythonhosted.org/packages/b7/c8/876602cbc96469911f0939f703453c1157b0c826ecb05bdd32e023397d4e/tornado-6.5.5-cp39-abi3-win_arm64.whl", hash = "sha256:2c9a876e094109333f888539ddb2de4361743e5d21eece20688e3e351e4990a6", size = 448016 }, +] + +[[package]] +name = "tqdm" +version = "4.65.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/04/e65e7f457ce9a2e338366a3a873ec6994e081cf4f99becb59ab6ce19e4b5/tqdm-4.65.2.tar.gz", hash = "sha256:5f7d8b4ac76016ce9d51a7f0ea30d30984888d97c474fdc4a4148abfb5ee76aa", size = 167099 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/ab/bd9ba7f84c509c8b377628bc66696d52623e30c6c0830db3c78748eec4b4/tqdm-4.65.2-py3-none-any.whl", hash = "sha256:6c431f7dee4f57284c8f4bd2eb1d4af00d730d38cc6098bd79880bcbec676276", size = 77079 }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614 }, +] + +[[package]] +name = "tzdata" +version = "2026.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", size = 198254 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321 }, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/31/c7/0336f2bd0bcbada6ccef7aaa25e443c118a704f828a0620c6fa0207c1b64/uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", size = 21678 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363", size = 11140 }, +] + +[[package]] +name = "urllib3" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584 }, +] + +[[package]] +name = "wcwidth" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/ee/afaf0f85a9a18fe47a67f1e4422ed6cf1fe642f0ae0a2f81166231303c52/wcwidth-0.7.0.tar.gz", hash = "sha256:90e3a7ea092341c44b99562e75d09e4d5160fe7a3974c6fb842a101a95e7eed0", size = 182132 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/52/e465037f5375f43533d1a80b6923955201596a99142ed524d77b571a1418/wcwidth-0.7.0-py3-none-any.whl", hash = "sha256:5d69154c429a82910e241c738cd0e2976fac8a2dd47a1a805f4afed1c0f136f2", size = 110825 }, +] + +[[package]] +name = "webcolors" +version = "25.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/7a/eb316761ec35664ea5174709a68bbd3389de60d4a1ebab8808bfc264ed67/webcolors-25.10.0.tar.gz", hash = "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf", size = 53491 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl", hash = "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d", size = 14905 }, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, +] + +[[package]] +name = "websocket-client" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616 }, +] + +[[package]] +name = "widgetsnbextension" +version = "4.0.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/f4/c67440c7fb409a71b7404b7aefcd7569a9c0d6bd071299bf4198ae7a5d95/widgetsnbextension-4.0.15.tar.gz", hash = "sha256:de8610639996f1567952d763a5a41af8af37f2575a41f9852a38f947eb82a3b9", size = 1097402 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl", hash = "sha256:8156704e4346a571d9ce73b84bee86a29906c9abfd7223b7228a28899ccf3366", size = 2196503 }, +] + +[[package]] +name = "xlsxwriter" +version = "3.2.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315 }, +] + +[[package]] +name = "xyzservices" +version = "2026.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/08/3cb9f67a8d48021aca2a02292cc26eecd71d949ae70ad66420a8730cc302/xyzservices-2026.3.0.tar.gz", hash = "sha256:d226866a5d8e9fef337034d8da37a8298f0a1d9d1489b4018e69579eb321fea4", size = 1135736 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/a9/d23012099dc88ec69a29c6407b41d89681cb674c2043cd5b467c7e299c08/xyzservices-2026.3.0-py3-none-any.whl", hash = "sha256:503183d4b322bfebc3c50cdd21192aa3e81e36c5efbf9133d54ae82143e0576b", size = 94101 }, +] From 62860affd882f8f0e5d7a8695c16985b1878fbdd Mon Sep 17 00:00:00 2001 From: Samuel Huestis Date: Wed, 6 May 2026 16:10:06 -0600 Subject: [PATCH 02/46] update README with uv specific instructions --- README.md | 211 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 165 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 31242f4ae..7944ce9f0 100644 --- a/README.md +++ b/README.md @@ -1,78 +1,197 @@ -## ReEDS +# ReEDS + **Regional Energy Deployment System (ReEDS) Model** - [![CI](https://github.com/ReEDS-Model/ReEDS/actions/workflows/python-app.yaml/badge.svg?branch=main)](https://github.com/ReEDS-Model/ReEDS/actions/workflows/python-app.yaml) [![Documentation](https://img.shields.io/badge/Documentation-view%20online-0a7f5e?logo=readthedocs&logoColor=white&labelColor=555)](https://reeds-model.github.io/ReEDS) ![Static Badge](https://img.shields.io/badge/python-3.11-blue) ![GitHub License](https://img.shields.io/github/license/ReEDS-Model/ReEDS) [![DOI](https://zenodo.org/badge/189060033.svg)](https://doi.org/10.5281/zenodo.16943302) -
-
- This GitHub repository contains the source code for NLR's ReEDS model. + The ReEDS model source code is available at no cost from the National Laboratory of the Rockies. + The ReEDS model can be downloaded or cloned from [https://github.com/ReEDS-Model/ReEDS](https://github.com/ReEDS-Model/ReEDS). **For more information about the model, see the [ReEDS Documentation](https://reeds-model.github.io/ReEDS).** ReEDS training videos are available on the [NLR Learning YouTube channel](https://youtube.com/playlist?list=PLmIn8Hncs7bG558qNlmz2QbKhsv7QCKiC&si=NgGBaL_MxNcYiIEX). - - - - ## Introduction [ReEDS](https://www.nlr.gov/analysis/reeds/) is a capacity planning and dispatch model for the U.S. electricity system. As NLR's flagship long-term power sector model, ReEDS has served as the primary analytic tool for [many studies](https://reeds-model.github.io/ReEDS/publications.html) of electricity sector research questions. -Example model results are available in the [Scenario Viewer](https://scenarioviewer.nlr.gov/). - - - - +Example model results are available in the [Scenario Viewer](https://scenarioviewer.nlr.gov/). ## Quick-start guide The ReEDS model is written in [Python](https://www.python.org/), [GAMS](https://www.gams.com/), and [Julia](https://julialang.org/). -Python and Julia are free, open-source languages; + +Python and Julia are free, open-source languages. + GAMS requires a software license from the vendor. + A step-by-step guide for getting started with ReEDS is available [here](https://reeds-model.github.io/ReEDS/setup.html), and a quick-start guide for advanced users is outlined below. -1. Install Python using the Anaconda Distribution: -2. Set up GAMS: - 1. Install GAMS: - 2. Obtain a combined GAMS/CPLEX license: - 1. Small ReEDS systems have been solved using the open-source [COIN-OR](https://www.coin-or.org/) solver as described [here](https://www.nlr.gov/docs/fy21osti/77907.pdf), but this capability is not actively maintained. - 2. Other commercial solvers have also been successfully applied to ReEDS, but setup details and some solver tuning are specific to the CPLEX solver. -3. Install Julia version 1.12.1 as described in the [documentation](https://reeds-model.github.io/ReEDS/setup.html#reeds2pras-julia-and-stress-periods-setup): - 1. Follow the platform-dependent installation instructions at to install both `julia` and `juliaup` - 2. Specify version 1.12.1 by running: - 1. `juliaup add 1.12.1` - 2. `juliaup default 1.12.1` -4. Open a command-line interface and set up your environments: - 1. Clone the ReEDS repository: `git clone git@github.com:ReEDS-Model/ReEDS.git` or `git clone https://github.com/ReEDS-Model/ReEDS.git` - 2. Navigate to the cloned repository - 3. Create the `reeds2` [conda environment](https://docs.conda.io/projects/conda/en/stable/user-guide/tasks/manage-environments.html): `conda env create -f environment.yml` - 4. Activate the `reeds2` environment: `conda activate reeds2` - 5. Instantiate the Julia environment: `julia --project=. instantiate.jl` - 6. (Optional) Several large data files are hosted remotely. - These files are downloaded automatically as needed during a ReEDS run, but to finish all the internet-requiring steps up front, you can download them all by running `python reeds/remote.py`. - Additional details on remote files and other topics can be found in the [user guide](https://reeds-model.github.io/ReEDS/user_guide.html#large-input-files). -5. Run ReEDS on a test case from the root of the cloned repository: - 1. For interactive setup: `python runbatch.py` - 2. For one-line operation: `python runbatch.py -b v20250314_main -c test`. - In this example, "v20250314_main" is the prefix for this batch of cases, and "test" is the suffix of the cases file, in this case `cases_test.csv`, located in the root of the repository. - Run `python runbatch.py -h` for information on other optional command-line arguments for ReEDS. - - - - - +### 1. Install UV and Python + +Install UV: + +```bash +curl -LsSf https://astral.sh/uv/install.sh | sh +``` + +Restart your terminal, then install Python 3.11: + +```bash +uv python install 3.11 +``` + +### 2. Set up GAMS + +1. Install GAMS: +2. Obtain a combined GAMS/CPLEX license: + +Small ReEDS systems have been solved using the open-source [COIN-OR](https://www.coin-or.org/) solver as described [here](https://www.nlr.gov/docs/fy21osti/77907.pdf), but this capability is not actively maintained. + +Other commercial solvers have also been successfully applied to ReEDS, but setup details and some solver tuning are specific to the CPLEX solver. + +Ensure the `gams` executable is available on your PATH: + +```bash +gams +``` + +### 3. Install Julia + +Install Julia using `juliaup`: + +```bash +curl -fsSL https://install.julialang.org | sh +``` + +Install the required Julia version: + +```bash +juliaup add 1.12.1 +juliaup default 1.12.1 +``` + +Verify: + +```bash +julia --version +``` + +### 4. Set up the ReEDS environment + +Clone the repository: + +```bash +git clone https://github.com/ReEDS-Model/ReEDS.git +cd ReEDS +``` + +Pin Python 3.11 for the project: + +```bash +uv python pin 3.11 +``` + +Create the UV-managed Python environment: + +```bash +uv sync --extra dev +``` + +Instantiate the Julia environment: + +```bash +julia --project=. instantiate.jl +``` + +Optional: download remote data files up front: + +```bash +uv run python reeds/remote.py +``` + +Several large data files are hosted remotely. These files are downloaded automatically as needed during a ReEDS run, but the command above finishes all internet-requiring steps up front. + +Additional details on remote files and other topics can be found in the [user guide](https://reeds-model.github.io/ReEDS/user_guide.html#large-input-files). + +### 5. Run ReEDS + +ReEDS currently expects Conda-style environment variables. When using UV, set these variables before running ReEDS: + +```bash +export CONDA_DEFAULT_ENV=reeds2 +export CONDA_PREFIX="$PWD/.venv" +``` + +For interactive setup: + +```bash +uv run python runbatch.py +``` + +For one-line operation: + +```bash +uv run python runbatch.py -b v20250314_main -c test +``` + +In this example, `v20250314_main` is the prefix for this batch of cases, and `test` is the suffix of the cases file, in this case `cases_test.csv`, located in the root of the repository. + +Run the following for information on other optional command-line arguments: + +```bash +uv run python runbatch.py -h +``` + +## Troubleshooting + +### GAMS is not found + +Confirm that GAMS is available on your PATH: + +```bash +gams +``` + +If this fails, update your shell PATH to include the GAMS installation directory. + +### Julia setup fails + +Re-run: + +```bash +julia --project=. instantiate.jl +``` + +### Python environment issues + +Recreate the UV environment: + +```bash +rm -rf .venv uv.lock +uv sync --extra dev +``` + +### `CONDA_DEFAULT_ENV` error + +When running with UV, set: + +```bash +export CONDA_DEFAULT_ENV=reeds2 +export CONDA_PREFIX="$PWD/.venv" +``` + +Then rerun the command with `uv run`. ## Contact Us -If you have comments and/or questions, you can contact the ReEDS team at [ReEDS.Inquiries@nlr.gov](mailto:ReEDS.Inquiries@nlr.gov) or post a question on the [discussion pages](https://github.com/ReEDS-Model/ReEDS/discussions). +If you have comments and/or questions, contact the ReEDS team at [ReEDS.Inquiries@nlr.gov](mailto:ReEDS.Inquiries@nlr.gov) or post a question on the [discussion pages](https://github.com/ReEDS-Model/ReEDS/discussions). From 182e3007877b798a8c1f17ba034055aff2bccbc5 Mon Sep 17 00:00:00 2001 From: Jeffrey Sward Date: Thu, 14 May 2026 20:45:05 +0000 Subject: [PATCH 03/46] Stop tracking ReEDS.egg-info directory; update cases_small; add etoolbox to pyproject --- ReEDS.egg-info/PKG-INFO | 141 ---------------------------- ReEDS.egg-info/SOURCES.txt | 53 ----------- ReEDS.egg-info/dependency_links.txt | 1 - ReEDS.egg-info/requires.txt | 61 ------------ ReEDS.egg-info/top_level.txt | 3 - 5 files changed, 259 deletions(-) delete mode 100644 ReEDS.egg-info/PKG-INFO delete mode 100644 ReEDS.egg-info/SOURCES.txt delete mode 100644 ReEDS.egg-info/dependency_links.txt delete mode 100644 ReEDS.egg-info/requires.txt delete mode 100644 ReEDS.egg-info/top_level.txt diff --git a/ReEDS.egg-info/PKG-INFO b/ReEDS.egg-info/PKG-INFO deleted file mode 100644 index e117a0ca0..000000000 --- a/ReEDS.egg-info/PKG-INFO +++ /dev/null @@ -1,141 +0,0 @@ -Metadata-Version: 2.4 -Name: ReEDS -Version: 2024.0.0 -Summary: ReEDS-2.0 Python environment managed with uv -Requires-Python: ==3.11.* -Description-Content-Type: text/markdown -License-File: LICENSE -Requires-Dist: bokeh==3.2.* -Requires-Dist: click==8.0.* -Requires-Dist: gitpython==3.1.* -Requires-Dist: h5py==3.9.* -Requires-Dist: matplotlib==3.7.* -Requires-Dist: numpy==1.26.* -Requires-Dist: openpyxl==3.0.* -Requires-Dist: pandas==2.0.* -Requires-Dist: tables==3.11.1 -Requires-Dist: pytest==7.4.* -Requires-Dist: requests==2.31.* -Requires-Dist: scikit-learn==1.2.* -Requires-Dist: scipy==1.11.* -Requires-Dist: tqdm==4.65.* -Requires-Dist: cmocean==3.0.3 -Requires-Dist: gdxpds==1.4.0 -Requires-Dist: geopandas==0.14.0 -Requires-Dist: pulp==2.7.0 -Requires-Dist: shapely==2.0.1 -Provides-Extra: interactive -Requires-Dist: ipykernel==6.25.*; extra == "interactive" -Requires-Dist: ipywidgets==8.0.*; extra == "interactive" -Requires-Dist: notebook==6.5.*; extra == "interactive" -Provides-Extra: maps -Requires-Dist: fiona==1.9.5; extra == "maps" -Requires-Dist: folium==0.14.0; extra == "maps" -Requires-Dist: mapclassify==2.5.*; extra == "maps" -Requires-Dist: pyproj==3.6.1; extra == "maps" -Provides-Extra: docs -Requires-Dist: sphinx==7.2.6; extra == "docs" -Requires-Dist: myst-parser==2.0.0; extra == "docs" -Requires-Dist: sphinx-rtd-theme==2.0.0; extra == "docs" -Requires-Dist: sphinxcontrib-bibtex==2.6.2; extra == "docs" -Provides-Extra: reporting -Requires-Dist: python-pptx==0.6.22; extra == "reporting" -Provides-Extra: network -Requires-Dist: networkx==3.1.*; extra == "network" -Provides-Extra: testing -Requires-Dist: gamspy-base==50.5.0; extra == "testing" -Provides-Extra: dev -Requires-Dist: ipykernel==6.25.*; extra == "dev" -Requires-Dist: ipywidgets==8.0.*; extra == "dev" -Requires-Dist: notebook==6.5.*; extra == "dev" -Requires-Dist: fiona==1.9.5; extra == "dev" -Requires-Dist: folium==0.14.0; extra == "dev" -Requires-Dist: mapclassify==2.5.*; extra == "dev" -Requires-Dist: pyproj==3.6.1; extra == "dev" -Requires-Dist: sphinx==7.2.6; extra == "dev" -Requires-Dist: myst-parser==2.0.0; extra == "dev" -Requires-Dist: sphinx-rtd-theme==2.0.0; extra == "dev" -Requires-Dist: sphinxcontrib-bibtex==2.6.2; extra == "dev" -Requires-Dist: python-pptx==0.6.22; extra == "dev" -Requires-Dist: networkx==3.1.*; extra == "dev" -Requires-Dist: gamspy-base==50.5.0; extra == "dev" -Dynamic: license-file - -## ReEDS -**Regional Energy Deployment System (ReEDS) Model** - - -[![CI](https://github.com/ReEDS-Model/ReEDS/actions/workflows/python-app.yaml/badge.svg?branch=main)](https://github.com/ReEDS-Model/ReEDS/actions/workflows/python-app.yaml) -[![Documentation](https://img.shields.io/badge/Documentation-view%20online-0a7f5e?logo=readthedocs&logoColor=white&labelColor=555)](https://reeds-model.github.io/ReEDS) -![Static Badge](https://img.shields.io/badge/python-3.11-blue) -![GitHub License](https://img.shields.io/github/license/ReEDS-Model/ReEDS) -[![DOI](https://zenodo.org/badge/189060033.svg)](https://doi.org/10.5281/zenodo.16943302) - -
-
- -This GitHub repository contains the source code for NLR's ReEDS model. -The ReEDS model source code is available at no cost from the National Laboratory of the Rockies. -The ReEDS model can be downloaded or cloned from [https://github.com/ReEDS-Model/ReEDS](https://github.com/ReEDS-Model/ReEDS). - -**For more information about the model, see the [ReEDS Documentation](https://reeds-model.github.io/ReEDS).** - -ReEDS training videos are available on the [NLR Learning YouTube channel](https://youtube.com/playlist?list=PLmIn8Hncs7bG558qNlmz2QbKhsv7QCKiC&si=NgGBaL_MxNcYiIEX). - - - - - -## Introduction - -[ReEDS](https://www.nlr.gov/analysis/reeds/) is a capacity planning and dispatch model for the U.S. electricity system. - -As NLR's flagship long-term power sector model, ReEDS has served as the primary analytic tool for [many studies](https://reeds-model.github.io/ReEDS/publications.html) of electricity sector research questions. -Example model results are available in the [Scenario Viewer](https://scenarioviewer.nlr.gov/). - - - - - - -## Quick-start guide - -The ReEDS model is written in [Python](https://www.python.org/), [GAMS](https://www.gams.com/), and [Julia](https://julialang.org/). -Python and Julia are free, open-source languages; -GAMS requires a software license from the vendor. -A step-by-step guide for getting started with ReEDS is available [here](https://reeds-model.github.io/ReEDS/setup.html), and a quick-start guide for advanced users is outlined below. - -1. Install Python using the Anaconda Distribution: -2. Set up GAMS: - 1. Install GAMS: - 2. Obtain a combined GAMS/CPLEX license: - 1. Small ReEDS systems have been solved using the open-source [COIN-OR](https://www.coin-or.org/) solver as described [here](https://www.nlr.gov/docs/fy21osti/77907.pdf), but this capability is not actively maintained. - 2. Other commercial solvers have also been successfully applied to ReEDS, but setup details and some solver tuning are specific to the CPLEX solver. -3. Install Julia version 1.12.1 as described in the [documentation](https://reeds-model.github.io/ReEDS/setup.html#reeds2pras-julia-and-stress-periods-setup): - 1. Follow the platform-dependent installation instructions at to install both `julia` and `juliaup` - 2. Specify version 1.12.1 by running: - 1. `juliaup add 1.12.1` - 2. `juliaup default 1.12.1` -4. Open a command-line interface and set up your environments: - 1. Clone the ReEDS repository: `git clone git@github.com:ReEDS-Model/ReEDS.git` or `git clone https://github.com/ReEDS-Model/ReEDS.git` - 2. Navigate to the cloned repository - 3. Create the `reeds2` [conda environment](https://docs.conda.io/projects/conda/en/stable/user-guide/tasks/manage-environments.html): `conda env create -f environment.yml` - 4. Activate the `reeds2` environment: `conda activate reeds2` - 5. Instantiate the Julia environment: `julia --project=. instantiate.jl` - 6. (Optional) Several large data files are hosted remotely. - These files are downloaded automatically as needed during a ReEDS run, but to finish all the internet-requiring steps up front, you can download them all by running `python reeds/remote.py`. - Additional details on remote files and other topics can be found in the [user guide](https://reeds-model.github.io/ReEDS/user_guide.html#large-input-files). -5. Run ReEDS on a test case from the root of the cloned repository: - 1. For interactive setup: `python runbatch.py` - 2. For one-line operation: `python runbatch.py -b v20250314_main -c test`. - In this example, "v20250314_main" is the prefix for this batch of cases, and "test" is the suffix of the cases file, in this case `cases_test.csv`, located in the root of the repository. - Run `python runbatch.py -h` for information on other optional command-line arguments for ReEDS. - - - - - - -## Contact Us - -If you have comments and/or questions, you can contact the ReEDS team at [ReEDS.Inquiries@nlr.gov](mailto:ReEDS.Inquiries@nlr.gov) or post a question on the [discussion pages](https://github.com/ReEDS-Model/ReEDS/discussions). diff --git a/ReEDS.egg-info/SOURCES.txt b/ReEDS.egg-info/SOURCES.txt deleted file mode 100644 index e09b647df..000000000 --- a/ReEDS.egg-info/SOURCES.txt +++ /dev/null @@ -1,53 +0,0 @@ -LICENSE -README.md -pyproject.toml -ReEDS.egg-info/PKG-INFO -ReEDS.egg-info/SOURCES.txt -ReEDS.egg-info/dependency_links.txt -ReEDS.egg-info/requires.txt -ReEDS.egg-info/top_level.txt -ReEDS_Augur/capacity_credit.py -ReEDS_Augur/diagnostic_plots.py -ReEDS_Augur/prep_data.py -ReEDS_Augur/stress_periods.py -hourlize/load.py -hourlize/reeds_to_rev.py -hourlize/reeds_to_rev_cli.py -hourlize/resource.py -hourlize/run_hourlize.py -hourlize/simulate_PV_AC.py -hourlize/write_site_parameters.py -hourlize/agg_buildings/agg_buildings.py -hourlize/dsgrid_to_reeds/dsgrid_to_reeds.py -hourlize/dsgrid_to_reeds/eer_make_parquet.py -hourlize/qaqc/summarize_supply_curves.py -hourlize/qaqc/supply_curve_comparison.py -hourlize/tests/conftest.py -hourlize/tests/path_fix.py -hourlize/tests/test_reeds_to_rev.py -hourlize/tests/test_reeds_to_rev_cli.py -input_processing/WriteHintage.py -input_processing/__init__.py -input_processing/aggregate_regions.py -input_processing/calc_financial_inputs.py -input_processing/check_inputs.py -input_processing/climateprep.py -input_processing/copy_files.py -input_processing/forecast.py -input_processing/fuelcostprep.py -input_processing/h2_storage.py -input_processing/hourly_load.py -input_processing/hourly_plots.py -input_processing/hourly_repperiods.py -input_processing/hourly_writetimeseries.py -input_processing/hydcf.py -input_processing/mcs_sampler.py -input_processing/outage_rates.py -input_processing/plantcostprep.py -input_processing/recf.py -input_processing/transmission.py -input_processing/writecapdat.py -input_processing/writedrshift.py -input_processing/writesupplycurves.py -tests/test_outputs.py -tests/test_read_h5_files.py \ No newline at end of file diff --git a/ReEDS.egg-info/dependency_links.txt b/ReEDS.egg-info/dependency_links.txt deleted file mode 100644 index 8b1378917..000000000 --- a/ReEDS.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ReEDS.egg-info/requires.txt b/ReEDS.egg-info/requires.txt deleted file mode 100644 index 908a050eb..000000000 --- a/ReEDS.egg-info/requires.txt +++ /dev/null @@ -1,61 +0,0 @@ -bokeh==3.2.* -click==8.0.* -gitpython==3.1.* -h5py==3.9.* -matplotlib==3.7.* -numpy==1.26.* -openpyxl==3.0.* -pandas==2.0.* -tables==3.11.1 -pytest==7.4.* -requests==2.31.* -scikit-learn==1.2.* -scipy==1.11.* -tqdm==4.65.* -cmocean==3.0.3 -gdxpds==1.4.0 -geopandas==0.14.0 -pulp==2.7.0 -shapely==2.0.1 - -[dev] -ipykernel==6.25.* -ipywidgets==8.0.* -notebook==6.5.* -fiona==1.9.5 -folium==0.14.0 -mapclassify==2.5.* -pyproj==3.6.1 -sphinx==7.2.6 -myst-parser==2.0.0 -sphinx-rtd-theme==2.0.0 -sphinxcontrib-bibtex==2.6.2 -python-pptx==0.6.22 -networkx==3.1.* -gamspy-base==50.5.0 - -[docs] -sphinx==7.2.6 -myst-parser==2.0.0 -sphinx-rtd-theme==2.0.0 -sphinxcontrib-bibtex==2.6.2 - -[interactive] -ipykernel==6.25.* -ipywidgets==8.0.* -notebook==6.5.* - -[maps] -fiona==1.9.5 -folium==0.14.0 -mapclassify==2.5.* -pyproj==3.6.1 - -[network] -networkx==3.1.* - -[reporting] -python-pptx==0.6.22 - -[testing] -gamspy-base==50.5.0 diff --git a/ReEDS.egg-info/top_level.txt b/ReEDS.egg-info/top_level.txt deleted file mode 100644 index 740653512..000000000 --- a/ReEDS.egg-info/top_level.txt +++ /dev/null @@ -1,3 +0,0 @@ -ReEDS_Augur -hourlize -input_processing From 59c72c08667b9d66fdce7af8c2ac56dafc042bfe Mon Sep 17 00:00:00 2001 From: Jeffrey Sward Date: Wed, 20 May 2026 16:26:00 +0000 Subject: [PATCH 04/46] Minor update to env file and cases_small bug fix --- .gitignore | 3 + Testing.ipynb | 44 ++ cases_small.csv | 2 +- pyproject.toml | 4 + uv.lock | 1751 ++++++++++++++++++++++++++++++----------------- 5 files changed, 1177 insertions(+), 627 deletions(-) create mode 100644 Testing.ipynb diff --git a/.gitignore b/.gitignore index 67d42ca33..4533bf140 100644 --- a/.gitignore +++ b/.gitignore @@ -66,3 +66,6 @@ slurm_parallel_runs/ # documentation files docs/build/* + +# uv stuff +ReEDS.egg-info/ diff --git a/Testing.ipynb b/Testing.ipynb new file mode 100644 index 000000000..4387aaf4d --- /dev/null +++ b/Testing.ipynb @@ -0,0 +1,44 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "id": "1145f4d2", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4f4b8e3f", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "reeds (3.11.15)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/cases_small.csv b/cases_small.csv index 14ec14616..8b65a32c4 100644 --- a/cases_small.csv +++ b/cases_small.csv @@ -1,6 +1,6 @@ ,ND_small timetype,seq -endyear,2030 +endyear,2029 GSw_Region,st/ND GSw_BatteryMandate,0 GSw_Biopower,0 diff --git a/pyproject.toml b/pyproject.toml index f99526bd8..01c092d68 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,10 @@ dependencies = [ "geopandas==0.14.0", "pulp==2.7.0", "shapely==2.0.1", + # etoolbox provides a number of useful tools for working with data. It also includes + # functions and infrastructure for accessing PUDL data stored on GCS so the sqlite + # database is not requried + "rmi.etoolbox @ git+https://github.com/rmi/etoolbox.git", ] [project.optional-dependencies] diff --git a/uv.lock b/uv.lock index a39d8ddd2..03e4691e5 100644 --- a/uv.lock +++ b/uv.lock @@ -1,14 +1,114 @@ version = 1 -revision = 1 +revision = 3 requires-python = "==3.11.*" +[[package]] +name = "adlfs" +version = "2024.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "azure-core" }, + { name = "azure-datalake-store" }, + { name = "azure-identity" }, + { name = "azure-storage-blob" }, + { name = "fsspec" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/82/e30891af574fb358449fb9436aac53569814452cb88b0cba4f488171b8dc/adlfs-2024.12.0.tar.gz", hash = "sha256:04582bf7461a57365766d01a295a0a88b2b8c42c4fea06e2d673f62675cac5c6", size = 49189, upload-time = "2024-12-15T19:06:30.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/ed/d1bf75c089857d38332cf45416e419b47382b345ba5dfc4fae69397830d9/adlfs-2024.12.0-py3-none-any.whl", hash = "sha256:00aab061ddec0413b2039487e656b62e01ece8ef1ca0493f76034a596cf069e3", size = 41792, upload-time = "2024-12-15T19:06:27.718Z" }, +] + +[[package]] +name = "aiobotocore" +version = "2.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "aioitertools" }, + { name = "botocore" }, + { name = "jmespath" }, + { name = "multidict" }, + { name = "python-dateutil" }, + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4d/f8/99fa90d9c25b78292899fd4946fce97b6353838b5ecc139ad8ba1436e70c/aiobotocore-2.26.0.tar.gz", hash = "sha256:50567feaf8dfe2b653570b4491f5bc8c6e7fb9622479d66442462c021db4fadc", size = 122026, upload-time = "2025-11-28T07:54:59.956Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/58/3bf0b7d474607dc7fd67dd1365c4e0f392c8177eaf4054e5ddee3ebd53b5/aiobotocore-2.26.0-py3-none-any.whl", hash = "sha256:a793db51c07930513b74ea7a95bd79aaa42f545bdb0f011779646eafa216abec", size = 87333, upload-time = "2025-11-28T07:54:58.457Z" }, +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.13.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/77/9a/152096d4808df8e4268befa55fba462f440f14beab85e8ad9bf990516918/aiohttp-3.13.5.tar.gz", hash = "sha256:9d98cc980ecc96be6eb4c1994ce35d28d8b1f5e5208a23b421187d1209dbb7d1", size = 7858271, upload-time = "2026-03-31T22:01:03.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/f5/a20c4ac64aeaef1679e25c9983573618ff765d7aa829fa2b84ae7573169e/aiohttp-3.13.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ab7229b6f9b5c1ba4910d6c41a9eb11f543eadb3f384df1b4c293f4e73d44d6", size = 757513, upload-time = "2026-03-31T21:57:02.146Z" }, + { url = "https://files.pythonhosted.org/packages/75/0a/39fa6c6b179b53fcb3e4b3d2b6d6cad0180854eda17060c7218540102bef/aiohttp-3.13.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f14c50708bb156b3a3ca7230b3d820199d56a48e3af76fa21c2d6087190fe3d", size = 506748, upload-time = "2026-03-31T21:57:04.275Z" }, + { url = "https://files.pythonhosted.org/packages/87/ec/e38ce072e724fd7add6243613f8d1810da084f54175353d25ccf9f9c7e5a/aiohttp-3.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7d2f8616f0ff60bd332022279011776c3ac0faa0f1b463f7bb12326fbc97a1c", size = 501673, upload-time = "2026-03-31T21:57:06.208Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ba/3bc7525d7e2beaa11b309a70d48b0d3cfc3c2089ec6a7d0820d59c657053/aiohttp-3.13.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2567b72e1ffc3ab25510db43f355b29eeada56c0a622e58dcdb19530eb0a3cb", size = 1763757, upload-time = "2026-03-31T21:57:07.882Z" }, + { url = "https://files.pythonhosted.org/packages/5e/ab/e87744cf18f1bd78263aba24924d4953b41086bd3a31d22452378e9028a0/aiohttp-3.13.5-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fb0540c854ac9c0c5ad495908fdfd3e332d553ec731698c0e29b1877ba0d2ec6", size = 1720152, upload-time = "2026-03-31T21:57:09.946Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f3/ed17a6f2d742af17b50bae2d152315ed1b164b07a5fd5cc1754d99e4dfa5/aiohttp-3.13.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c9883051c6972f58bfc4ebb2116345ee2aa151178e99c3f2b2bbe2af712abd13", size = 1818010, upload-time = "2026-03-31T21:57:12.157Z" }, + { url = "https://files.pythonhosted.org/packages/53/06/ecbc63dc937192e2a5cb46df4d3edb21deb8225535818802f210a6ea5816/aiohttp-3.13.5-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2294172ce08a82fb7c7273485895de1fa1186cc8294cfeb6aef4af42ad261174", size = 1907251, upload-time = "2026-03-31T21:57:14.023Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a5/0521aa32c1ddf3aa1e71dcc466be0b7db2771907a13f18cddaa45967d97b/aiohttp-3.13.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3a807cabd5115fb55af198b98178997a5e0e57dead43eb74a93d9c07d6d4a7dc", size = 1759969, upload-time = "2026-03-31T21:57:16.146Z" }, + { url = "https://files.pythonhosted.org/packages/f6/78/a38f8c9105199dd3b9706745865a8a59d0041b6be0ca0cc4b2ccf1bab374/aiohttp-3.13.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:aa6d0d932e0f39c02b80744273cd5c388a2d9bc07760a03164f229c8e02662f6", size = 1616871, upload-time = "2026-03-31T21:57:17.856Z" }, + { url = "https://files.pythonhosted.org/packages/6f/41/27392a61ead8ab38072105c71aa44ff891e71653fe53d576a7067da2b4e8/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:60869c7ac4aaabe7110f26499f3e6e5696eae98144735b12a9c3d9eae2b51a49", size = 1739844, upload-time = "2026-03-31T21:57:19.679Z" }, + { url = "https://files.pythonhosted.org/packages/6e/55/5564e7ae26d94f3214250009a0b1c65a0c6af4bf88924ccb6fdab901de28/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:26d2f8546f1dfa75efa50c3488215a903c0168d253b75fba4210f57ab77a0fb8", size = 1731969, upload-time = "2026-03-31T21:57:22.006Z" }, + { url = "https://files.pythonhosted.org/packages/6d/c5/705a3929149865fc941bcbdd1047b238e4a72bcb215a9b16b9d7a2e8d992/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1162a1492032c82f14271e831c8f4b49f2b6078f4f5fc74de2c912fa225d51d", size = 1795193, upload-time = "2026-03-31T21:57:24.256Z" }, + { url = "https://files.pythonhosted.org/packages/a6/19/edabed62f718d02cff7231ca0db4ef1c72504235bc467f7b67adb1679f48/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:8b14eb3262fad0dc2f89c1a43b13727e709504972186ff6a99a3ecaa77102b6c", size = 1606477, upload-time = "2026-03-31T21:57:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/de/fc/76f80ef008675637d88d0b21584596dc27410a990b0918cb1e5776545b5b/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ca9ac61ac6db4eb6c2a0cd1d0f7e1357647b638ccc92f7e9d8d133e71ed3c6ac", size = 1813198, upload-time = "2026-03-31T21:57:28.316Z" }, + { url = "https://files.pythonhosted.org/packages/e5/67/5b3ac26b80adb20ea541c487f73730dc8fa107d632c998f25bbbab98fcda/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7996023b2ed59489ae4762256c8516df9820f751cf2c5da8ed2fb20ee50abab3", size = 1752321, upload-time = "2026-03-31T21:57:30.549Z" }, + { url = "https://files.pythonhosted.org/packages/88/06/e4a2e49255ea23fa4feeb5ab092d90240d927c15e47b5b5c48dff5a9ce29/aiohttp-3.13.5-cp311-cp311-win32.whl", hash = "sha256:77dfa48c9f8013271011e51c00f8ada19851f013cde2c48fca1ba5e0caf5bb06", size = 439069, upload-time = "2026-03-31T21:57:32.388Z" }, + { url = "https://files.pythonhosted.org/packages/c0/43/8c7163a596dab4f8be12c190cf467a1e07e4734cf90eebb39f7f5d53fc6a/aiohttp-3.13.5-cp311-cp311-win_amd64.whl", hash = "sha256:d3a4834f221061624b8887090637db9ad4f61752001eae37d56c52fddade2dc8", size = 462859, upload-time = "2026-03-31T21:57:34.455Z" }, +] + +[[package]] +name = "aioitertools" +version = "0.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/3c/53c4a17a05fb9ea2313ee1777ff53f5e001aefd5cc85aa2f4c2d982e1e38/aioitertools-0.13.0.tar.gz", hash = "sha256:620bd241acc0bbb9ec819f1ab215866871b4bbd1f73836a55f799200ee86950c", size = 19322, upload-time = "2025-11-06T22:17:07.609Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl", hash = "sha256:0be0292b856f08dfac90e31f4739432f4cb6d7520ab9eb73e143f4f2fa5259be", size = 24182, upload-time = "2025-11-06T22:17:06.502Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + [[package]] name = "alabaster" version = "0.7.16" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c9/3e/13dd8e5ed9094e734ac430b5d0eb4f2bb001708a8b7856cbf8e084e001ba/alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65", size = 23776 } +sdist = { url = "https://files.pythonhosted.org/packages/c9/3e/13dd8e5ed9094e734ac430b5d0eb4f2bb001708a8b7856cbf8e084e001ba/alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65", size = 23776, upload-time = "2024-01-10T00:56:10.189Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92", size = 13511 }, + { url = "https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92", size = 13511, upload-time = "2024-01-10T00:56:08.388Z" }, ] [[package]] @@ -19,18 +119,18 @@ dependencies = [ { name = "idna" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622 } +sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622, upload-time = "2026-03-24T12:59:09.671Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", size = 114353 }, + { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", size = 114353, upload-time = "2026-03-24T12:59:08.246Z" }, ] [[package]] name = "appnope" version = "0.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" }, ] [[package]] @@ -40,9 +140,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "argon2-cffi-bindings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0e/89/ce5af8a7d472a67cc819d5d998aa8c82c5d860608c4db9f46f1162d7dab9/argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1", size = 45706 } +sdist = { url = "https://files.pythonhosted.org/packages/0e/89/ce5af8a7d472a67cc819d5d998aa8c82c5d860608c4db9f46f1162d7dab9/argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1", size = 45706, upload-time = "2025-06-03T06:55:32.073Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741", size = 14657 }, + { url = "https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741", size = 14657, upload-time = "2025-06-03T06:55:30.804Z" }, ] [[package]] @@ -52,18 +152,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5c/2d/db8af0df73c1cf454f71b2bbe5e356b8c1f8041c979f505b3d3186e520a9/argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d", size = 1783441 } +sdist = { url = "https://files.pythonhosted.org/packages/5c/2d/db8af0df73c1cf454f71b2bbe5e356b8c1f8041c979f505b3d3186e520a9/argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d", size = 1783441, upload-time = "2025-07-30T10:02:05.147Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/57/96b8b9f93166147826da5f90376e784a10582dd39a393c99bb62cfcf52f0/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aecba1723ae35330a008418a91ea6cfcedf6d31e5fbaa056a166462ff066d500", size = 54121 }, - { url = "https://files.pythonhosted.org/packages/0a/08/a9bebdb2e0e602dde230bdde8021b29f71f7841bd54801bcfd514acb5dcf/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2630b6240b495dfab90aebe159ff784d08ea999aa4b0d17efa734055a07d2f44", size = 29177 }, - { url = "https://files.pythonhosted.org/packages/b6/02/d297943bcacf05e4f2a94ab6f462831dc20158614e5d067c35d4e63b9acb/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7aef0c91e2c0fbca6fc68e7555aa60ef7008a739cbe045541e438373bc54d2b0", size = 31090 }, - { url = "https://files.pythonhosted.org/packages/c1/93/44365f3d75053e53893ec6d733e4a5e3147502663554b4d864587c7828a7/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e021e87faa76ae0d413b619fe2b65ab9a037f24c60a1e6cc43457ae20de6dc6", size = 81246 }, - { url = "https://files.pythonhosted.org/packages/09/52/94108adfdd6e2ddf58be64f959a0b9c7d4ef2fa71086c38356d22dc501ea/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e924cfc503018a714f94a49a149fdc0b644eaead5d1f089330399134fa028a", size = 87126 }, - { url = "https://files.pythonhosted.org/packages/72/70/7a2993a12b0ffa2a9271259b79cc616e2389ed1a4d93842fac5a1f923ffd/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87b72589133f0346a1cb8d5ecca4b933e3c9b64656c9d175270a000e73b288d", size = 80343 }, - { url = "https://files.pythonhosted.org/packages/78/9a/4e5157d893ffc712b74dbd868c7f62365618266982b64accab26bab01edc/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1db89609c06afa1a214a69a462ea741cf735b29a57530478c06eb81dd403de99", size = 86777 }, - { url = "https://files.pythonhosted.org/packages/74/cd/15777dfde1c29d96de7f18edf4cc94c385646852e7c7b0320aa91ccca583/argon2_cffi_bindings-25.1.0-cp39-abi3-win32.whl", hash = "sha256:473bcb5f82924b1becbb637b63303ec8d10e84c8d241119419897a26116515d2", size = 27180 }, - { url = "https://files.pythonhosted.org/packages/e2/c6/a759ece8f1829d1f162261226fbfd2c6832b3ff7657384045286d2afa384/argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl", hash = "sha256:a98cd7d17e9f7ce244c0803cad3c23a7d379c301ba618a5fa76a67d116618b98", size = 31715 }, - { url = "https://files.pythonhosted.org/packages/42/b9/f8d6fa329ab25128b7e98fd83a3cb34d9db5b059a9847eddb840a0af45dd/argon2_cffi_bindings-25.1.0-cp39-abi3-win_arm64.whl", hash = "sha256:b0fdbcf513833809c882823f98dc2f931cf659d9a1429616ac3adebb49f5db94", size = 27149 }, + { url = "https://files.pythonhosted.org/packages/1d/57/96b8b9f93166147826da5f90376e784a10582dd39a393c99bb62cfcf52f0/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aecba1723ae35330a008418a91ea6cfcedf6d31e5fbaa056a166462ff066d500", size = 54121, upload-time = "2025-07-30T10:01:50.815Z" }, + { url = "https://files.pythonhosted.org/packages/0a/08/a9bebdb2e0e602dde230bdde8021b29f71f7841bd54801bcfd514acb5dcf/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2630b6240b495dfab90aebe159ff784d08ea999aa4b0d17efa734055a07d2f44", size = 29177, upload-time = "2025-07-30T10:01:51.681Z" }, + { url = "https://files.pythonhosted.org/packages/b6/02/d297943bcacf05e4f2a94ab6f462831dc20158614e5d067c35d4e63b9acb/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7aef0c91e2c0fbca6fc68e7555aa60ef7008a739cbe045541e438373bc54d2b0", size = 31090, upload-time = "2025-07-30T10:01:53.184Z" }, + { url = "https://files.pythonhosted.org/packages/c1/93/44365f3d75053e53893ec6d733e4a5e3147502663554b4d864587c7828a7/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e021e87faa76ae0d413b619fe2b65ab9a037f24c60a1e6cc43457ae20de6dc6", size = 81246, upload-time = "2025-07-30T10:01:54.145Z" }, + { url = "https://files.pythonhosted.org/packages/09/52/94108adfdd6e2ddf58be64f959a0b9c7d4ef2fa71086c38356d22dc501ea/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e924cfc503018a714f94a49a149fdc0b644eaead5d1f089330399134fa028a", size = 87126, upload-time = "2025-07-30T10:01:55.074Z" }, + { url = "https://files.pythonhosted.org/packages/72/70/7a2993a12b0ffa2a9271259b79cc616e2389ed1a4d93842fac5a1f923ffd/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87b72589133f0346a1cb8d5ecca4b933e3c9b64656c9d175270a000e73b288d", size = 80343, upload-time = "2025-07-30T10:01:56.007Z" }, + { url = "https://files.pythonhosted.org/packages/78/9a/4e5157d893ffc712b74dbd868c7f62365618266982b64accab26bab01edc/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1db89609c06afa1a214a69a462ea741cf735b29a57530478c06eb81dd403de99", size = 86777, upload-time = "2025-07-30T10:01:56.943Z" }, + { url = "https://files.pythonhosted.org/packages/74/cd/15777dfde1c29d96de7f18edf4cc94c385646852e7c7b0320aa91ccca583/argon2_cffi_bindings-25.1.0-cp39-abi3-win32.whl", hash = "sha256:473bcb5f82924b1becbb637b63303ec8d10e84c8d241119419897a26116515d2", size = 27180, upload-time = "2025-07-30T10:01:57.759Z" }, + { url = "https://files.pythonhosted.org/packages/e2/c6/a759ece8f1829d1f162261226fbfd2c6832b3ff7657384045286d2afa384/argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl", hash = "sha256:a98cd7d17e9f7ce244c0803cad3c23a7d379c301ba618a5fa76a67d116618b98", size = 31715, upload-time = "2025-07-30T10:01:58.56Z" }, + { url = "https://files.pythonhosted.org/packages/42/b9/f8d6fa329ab25128b7e98fd83a3cb34d9db5b059a9847eddb840a0af45dd/argon2_cffi_bindings-25.1.0-cp39-abi3-win_arm64.whl", hash = "sha256:b0fdbcf513833809c882823f98dc2f931cf659d9a1429616ac3adebb49f5db94", size = 27149, upload-time = "2025-07-30T10:01:59.329Z" }, ] [[package]] @@ -74,36 +174,94 @@ dependencies = [ { name = "python-dateutil" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b9/33/032cdc44182491aa708d06a68b62434140d8c50820a087fac7af37703357/arrow-1.4.0.tar.gz", hash = "sha256:ed0cc050e98001b8779e84d461b0098c4ac597e88704a655582b21d116e526d7", size = 152931 } +sdist = { url = "https://files.pythonhosted.org/packages/b9/33/032cdc44182491aa708d06a68b62434140d8c50820a087fac7af37703357/arrow-1.4.0.tar.gz", hash = "sha256:ed0cc050e98001b8779e84d461b0098c4ac597e88704a655582b21d116e526d7", size = 152931, upload-time = "2025-10-18T17:46:46.761Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl", hash = "sha256:749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205", size = 68797 }, + { url = "https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl", hash = "sha256:749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205", size = 68797, upload-time = "2025-10-18T17:46:45.663Z" }, ] [[package]] name = "asttokens" version = "3.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/be/a5/8e3f9b6771b0b408517c82d97aed8f2036509bc247d46114925e32fe33f0/asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7", size = 62308 } +sdist = { url = "https://files.pythonhosted.org/packages/be/a5/8e3f9b6771b0b408517c82d97aed8f2036509bc247d46114925e32fe33f0/asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7", size = 62308, upload-time = "2025-11-15T16:43:48.578Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a", size = 27047 }, + { url = "https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a", size = 27047, upload-time = "2025-11-15T16:43:16.109Z" }, ] [[package]] name = "attrs" version = "26.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055 } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "azure-core" +version = "1.41.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a6/f3/b416179e408990df5db0d516283022dde0f5d0111d98c1a848e41853e81c/azure_core-1.41.0.tar.gz", hash = "sha256:f46ff5dfcd230f25cf1c19e8a34b8dc08a337b2503e268bb600a16c00db8ad5a", size = 381042, upload-time = "2026-05-07T23:30:54.302Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/db/325c6d7312d2200251c52323878281045aaffcb5586612296484e4280eaa/azure_core-1.41.0-py3-none-any.whl", hash = "sha256:522b4011e8180b1a3dcd2024396a4e7fe9ac37fb8597db47163d230b5efe892d", size = 220920, upload-time = "2026-05-07T23:30:56.357Z" }, +] + +[[package]] +name = "azure-datalake-store" +version = "0.0.53" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, + { name = "msal" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/ff/61369d06422b5ac48067215ff404841342651b14a89b46c8d8e1507c8f17/azure-datalake-store-0.0.53.tar.gz", hash = "sha256:05b6de62ee3f2a0a6e6941e6933b792b800c3e7f6ffce2fc324bc19875757393", size = 71430, upload-time = "2023-05-10T21:17:05.665Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/2a/75f56b14f115189155cf12e46b366ad1fe3357af5a1a7c09f7446662d617/azure_datalake_store-0.0.53-py2.py3-none-any.whl", hash = "sha256:a30c902a6e360aa47d7f69f086b426729784e71c536f330b691647a51dc42b2b", size = 55308, upload-time = "2023-05-10T21:17:02.629Z" }, +] + +[[package]] +name = "azure-identity" +version = "1.25.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "azure-core" }, + { name = "cryptography" }, + { name = "msal" }, + { name = "msal-extensions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c5/0e/3a63efb48aa4a5ae2cfca61ee152fbcb668092134d3eb8bfda472dd5c617/azure_identity-1.25.3.tar.gz", hash = "sha256:ab23c0d63015f50b630ef6c6cf395e7262f439ce06e5d07a64e874c724f8d9e6", size = 286304, upload-time = "2026-03-13T01:12:20.892Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/9a/417b3a533e01953a7c618884df2cb05a71e7b68bdbce4fbdb62349d2a2e8/azure_identity-1.25.3-py3-none-any.whl", hash = "sha256:f4d0b956a8146f30333e071374171f3cfa7bdb8073adb8c3814b65567aa7447c", size = 192138, upload-time = "2026-03-13T01:12:22.951Z" }, +] + +[[package]] +name = "azure-storage-blob" +version = "12.28.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "azure-core" }, + { name = "cryptography" }, + { name = "isodate" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/24/072ba8e27b0e2d8fec401e9969b429d4f5fc4c8d4f0f05f4661e11f7234a/azure_storage_blob-12.28.0.tar.gz", hash = "sha256:e7d98ea108258d29aa0efbfd591b2e2075fa1722a2fae8699f0b3c9de11eff41", size = 604225, upload-time = "2026-01-06T23:48:57.282Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548 }, + { url = "https://files.pythonhosted.org/packages/d8/3a/6ef2047a072e54e1142718d433d50e9514c999a58f51abfff7902f3a72f8/azure_storage_blob-12.28.0-py3-none-any.whl", hash = "sha256:00fb1db28bf6a7b7ecaa48e3b1d5c83bfadacc5a678b77826081304bd87d6461", size = 431499, upload-time = "2026-01-06T23:48:58.995Z" }, ] [[package]] name = "babel" version = "2.18.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554 } +sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845 }, + { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, ] [[package]] @@ -114,9 +272,9 @@ dependencies = [ { name = "soupsieve" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c3/b0/1c6a16426d389813b48d95e26898aff79abbde42ad353958ad95cc8c9b21/beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86", size = 627737 } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b0/1c6a16426d389813b48d95e26898aff79abbde42ad353958ad95cc8c9b21/beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86", size = 627737, upload-time = "2025-11-30T15:08:26.084Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721 }, + { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721, upload-time = "2025-11-30T15:08:24.087Z" }, ] [[package]] @@ -126,9 +284,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/07/18/3c8523962314be6bf4c8989c79ad9531c825210dd13a8669f6b84336e8bd/bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22", size = 203533 } +sdist = { url = "https://files.pythonhosted.org/packages/07/18/3c8523962314be6bf4c8989c79ad9531c825210dd13a8669f6b84336e8bd/bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22", size = 203533, upload-time = "2025-10-27T17:57:39.211Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6", size = 164437 }, + { url = "https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6", size = 164437, upload-time = "2025-10-27T17:57:37.538Z" }, ] [package.optional-dependencies] @@ -147,13 +305,13 @@ dependencies = [ { name = "numpy" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/fa/d72f624903dad1f2e95cb97d4e3777284f7eb398792f0d3380fdd73c1fc4/blosc2-4.1.2.tar.gz", hash = "sha256:c127342d976de44fee242137e83660097e0b072779f4164a34e149ac9f693c8a", size = 4341120 } +sdist = { url = "https://files.pythonhosted.org/packages/f8/fa/d72f624903dad1f2e95cb97d4e3777284f7eb398792f0d3380fdd73c1fc4/blosc2-4.1.2.tar.gz", hash = "sha256:c127342d976de44fee242137e83660097e0b072779f4164a34e149ac9f693c8a", size = 4341120, upload-time = "2026-03-03T11:05:14.496Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/85/1240460e27c82897608df1c3f4b9c9243019a2e2345215d5f04e1a36fb15/blosc2-4.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7f8cd9d95563fbd6a76eed81ba85669d11c53385fb01ee8a91bed3b8070fa661", size = 4641818 }, - { url = "https://files.pythonhosted.org/packages/f1/51/a988a96be0cc8a7c187d26579c21770c0f679a1d12b6268629f554640e33/blosc2-4.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0dcddab7db4398c11190f21b48c2fe468d99b4a003bbacb30011c00be11d9c75", size = 4116600 }, - { url = "https://files.pythonhosted.org/packages/f2/b6/1c8b6b703d6f000df557ca594451883d18dcbe89b881fe1be75df82d76e7/blosc2-4.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09127cb9d32e2b0d04333ef9e50f7bcf00765f1a20216cede40a04f36d786069", size = 5094195 }, - { url = "https://files.pythonhosted.org/packages/2d/2a/d71c52fae9ae60337ad34f872a8537d1329be028b7449951c8f61421298f/blosc2-4.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ca2a8cdb85d6c3dc2ed19b550ee57041c9ea9230f9fa9829cfd0fe467fa6ad1d", size = 5229746 }, - { url = "https://files.pythonhosted.org/packages/50/3d/e29f14df0053c510ed75a3f8a7a1429b6e5e72f8e3928911d15f6b63fe36/blosc2-4.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:ab8e878763b8f19c284cca8854f312988cb8039181eda508a01a1174f97938c5", size = 3145620 }, + { url = "https://files.pythonhosted.org/packages/81/85/1240460e27c82897608df1c3f4b9c9243019a2e2345215d5f04e1a36fb15/blosc2-4.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7f8cd9d95563fbd6a76eed81ba85669d11c53385fb01ee8a91bed3b8070fa661", size = 4641818, upload-time = "2026-03-03T11:04:36.099Z" }, + { url = "https://files.pythonhosted.org/packages/f1/51/a988a96be0cc8a7c187d26579c21770c0f679a1d12b6268629f554640e33/blosc2-4.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0dcddab7db4398c11190f21b48c2fe468d99b4a003bbacb30011c00be11d9c75", size = 4116600, upload-time = "2026-03-03T11:04:37.505Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b6/1c8b6b703d6f000df557ca594451883d18dcbe89b881fe1be75df82d76e7/blosc2-4.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09127cb9d32e2b0d04333ef9e50f7bcf00765f1a20216cede40a04f36d786069", size = 5094195, upload-time = "2026-03-03T11:04:39.035Z" }, + { url = "https://files.pythonhosted.org/packages/2d/2a/d71c52fae9ae60337ad34f872a8537d1329be028b7449951c8f61421298f/blosc2-4.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ca2a8cdb85d6c3dc2ed19b550ee57041c9ea9230f9fa9829cfd0fe467fa6ad1d", size = 5229746, upload-time = "2026-03-03T11:04:40.669Z" }, + { url = "https://files.pythonhosted.org/packages/50/3d/e29f14df0053c510ed75a3f8a7a1429b6e5e72f8e3928911d15f6b63fe36/blosc2-4.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:ab8e878763b8f19c284cca8854f312988cb8039181eda508a01a1174f97938c5", size = 3145620, upload-time = "2026-03-03T11:04:42.262Z" }, ] [[package]] @@ -171,9 +329,23 @@ dependencies = [ { name = "tornado" }, { name = "xyzservices" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b2/b5/7b422944c31c3259ddf47c854fbdf09bc0c3a64fb9460aac046848234803/bokeh-3.2.2.tar.gz", hash = "sha256:b2959b8524d69ec4e7886bc36407445f0a92e1f19530d3bfc4045236a1b7a6ff", size = 7252097 } +sdist = { url = "https://files.pythonhosted.org/packages/b2/b5/7b422944c31c3259ddf47c854fbdf09bc0c3a64fb9460aac046848234803/bokeh-3.2.2.tar.gz", hash = "sha256:b2959b8524d69ec4e7886bc36407445f0a92e1f19530d3bfc4045236a1b7a6ff", size = 7252097, upload-time = "2023-08-14T02:42:51.701Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/60/33f23dbb15fcd785d6287bdd6fa8c9d836dacb40e21c14aad41a57a0ec0f/bokeh-3.2.2-py3-none-any.whl", hash = "sha256:e31670a013e1ff15c3d4d04f587c8162c4cc9fe1af507fd741d295e6c4e1225b", size = 7827099 }, + { url = "https://files.pythonhosted.org/packages/84/60/33f23dbb15fcd785d6287bdd6fa8c9d836dacb40e21c14aad41a57a0ec0f/bokeh-3.2.2-py3-none-any.whl", hash = "sha256:e31670a013e1ff15c3d4d04f587c8162c4cc9fe1af507fd741d295e6c4e1225b", size = 7827099, upload-time = "2023-08-14T02:42:48.92Z" }, +] + +[[package]] +name = "botocore" +version = "1.41.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jmespath" }, + { name = "python-dateutil" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/90/22/7fe08c726a2e3b11a0aef8bf177e83891c9cb2dc1809d35c9ed91a9e60e6/botocore-1.41.5.tar.gz", hash = "sha256:0367622b811597d183bfcaab4a350f0d3ede712031ce792ef183cabdee80d3bf", size = 14668152, upload-time = "2025-11-26T20:27:38.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/4e/21cd0b8f365449f1576f93de1ec8718ed18a7a3bc086dfbdeb79437bba7a/botocore-1.41.5-py3-none-any.whl", hash = "sha256:3fef7fcda30c82c27202d232cfdbd6782cb27f20f8e7e21b20606483e66ee73a", size = 14337008, upload-time = "2025-11-26T20:27:35.208Z" }, ] [[package]] @@ -183,18 +355,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jinja2" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/32/14/9d409124bda3f4ab7af3802aba07181d1fd56aa96cc4b999faea6a27a0d2/branca-0.8.2.tar.gz", hash = "sha256:e5040f4c286e973658c27de9225c1a5a7356dd0702a7c8d84c0f0dfbde388fe7", size = 27890 } +sdist = { url = "https://files.pythonhosted.org/packages/32/14/9d409124bda3f4ab7af3802aba07181d1fd56aa96cc4b999faea6a27a0d2/branca-0.8.2.tar.gz", hash = "sha256:e5040f4c286e973658c27de9225c1a5a7356dd0702a7c8d84c0f0dfbde388fe7", size = 27890, upload-time = "2025-10-06T10:28:20.305Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/50/fc9680058e63161f2f63165b84c957a0df1415431104c408e8104a3a18ef/branca-0.8.2-py3-none-any.whl", hash = "sha256:2ebaef3983e3312733c1ae2b793b0a8ba3e1c4edeb7598e10328505280cf2f7c", size = 26193 }, + { url = "https://files.pythonhosted.org/packages/7e/50/fc9680058e63161f2f63165b84c957a0df1415431104c408e8104a3a18ef/branca-0.8.2-py3-none-any.whl", hash = "sha256:2ebaef3983e3312733c1ae2b793b0a8ba3e1c4edeb7598e10328505280cf2f7c", size = 26193, upload-time = "2025-10-06T10:28:19.255Z" }, ] [[package]] name = "certifi" version = "2026.4.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580", size = 137077 } +sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580", size = 137077, upload-time = "2026-04-22T11:26:11.191Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a", size = 135707 }, + { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a", size = 135707, upload-time = "2026-04-22T11:26:09.372Z" }, ] [[package]] @@ -204,46 +376,46 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycparser", marker = "implementation_name != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588 } +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344 }, - { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560 }, - { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613 }, - { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476 }, - { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374 }, - { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597 }, - { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574 }, - { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971 }, - { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972 }, - { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078 }, - { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076 }, - { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820 }, - { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635 }, + { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, + { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, + { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, + { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, + { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, + { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, + { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, + { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, ] [[package]] name = "charset-normalizer" version = "3.4.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271 } +sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705 }, - { url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", size = 206419 }, - { url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", size = 227901 }, - { url = "https://files.pythonhosted.org/packages/fb/73/77486c4cd58f1267bf17db420e930c9afa1b3be3fe8c8b8ebbebc9624359/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", size = 222742 }, - { url = "https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", size = 214061 }, - { url = "https://files.pythonhosted.org/packages/dc/92/42bd3cefcf7687253fb86694b45f37b733c97f59af3724f356fa92b8c344/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", size = 199239 }, - { url = "https://files.pythonhosted.org/packages/4c/3d/069e7184e2aa3b3cddc700e3dd267413dc259854adc3380421c805c6a17d/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", size = 210173 }, - { url = "https://files.pythonhosted.org/packages/62/51/9d56feb5f2e7074c46f93e0ebdbe61f0848ee246e2f0d89f8e20b89ebb8f/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", size = 209841 }, - { url = "https://files.pythonhosted.org/packages/d2/59/893d8f99cc4c837dda1fe2f1139079703deb9f321aabcb032355de13b6c7/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", size = 200304 }, - { url = "https://files.pythonhosted.org/packages/7d/1d/ee6f3be3464247578d1ed5c46de545ccc3d3ff933695395c402c21fa6b77/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", size = 229455 }, - { url = "https://files.pythonhosted.org/packages/54/bb/8fb0a946296ea96a488928bdce8ef99023998c48e4713af533e9bb98ef07/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", size = 210036 }, - { url = "https://files.pythonhosted.org/packages/9a/bc/015b2387f913749f82afd4fcba07846d05b6d784dd16123cb66860e0237d/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", size = 224739 }, - { url = "https://files.pythonhosted.org/packages/17/ab/63133691f56baae417493cba6b7c641571a2130eb7bceba6773367ab9ec5/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", size = 216277 }, - { url = "https://files.pythonhosted.org/packages/06/6d/3be70e827977f20db77c12a97e6a9f973631a45b8d186c084527e53e77a4/charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad", size = 147819 }, - { url = "https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00", size = 159281 }, - { url = "https://files.pythonhosted.org/packages/ca/83/6413f36c5a34afead88ce6f66684d943d91f233d76dd083798f9602b75ae/charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1", size = 147843 }, - { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958 }, + { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705, upload-time = "2026-04-02T09:26:02.191Z" }, + { url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", size = 206419, upload-time = "2026-04-02T09:26:03.583Z" }, + { url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", size = 227901, upload-time = "2026-04-02T09:26:04.738Z" }, + { url = "https://files.pythonhosted.org/packages/fb/73/77486c4cd58f1267bf17db420e930c9afa1b3be3fe8c8b8ebbebc9624359/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", size = 222742, upload-time = "2026-04-02T09:26:06.36Z" }, + { url = "https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", size = 214061, upload-time = "2026-04-02T09:26:08.347Z" }, + { url = "https://files.pythonhosted.org/packages/dc/92/42bd3cefcf7687253fb86694b45f37b733c97f59af3724f356fa92b8c344/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", size = 199239, upload-time = "2026-04-02T09:26:09.823Z" }, + { url = "https://files.pythonhosted.org/packages/4c/3d/069e7184e2aa3b3cddc700e3dd267413dc259854adc3380421c805c6a17d/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", size = 210173, upload-time = "2026-04-02T09:26:10.953Z" }, + { url = "https://files.pythonhosted.org/packages/62/51/9d56feb5f2e7074c46f93e0ebdbe61f0848ee246e2f0d89f8e20b89ebb8f/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", size = 209841, upload-time = "2026-04-02T09:26:12.142Z" }, + { url = "https://files.pythonhosted.org/packages/d2/59/893d8f99cc4c837dda1fe2f1139079703deb9f321aabcb032355de13b6c7/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", size = 200304, upload-time = "2026-04-02T09:26:13.711Z" }, + { url = "https://files.pythonhosted.org/packages/7d/1d/ee6f3be3464247578d1ed5c46de545ccc3d3ff933695395c402c21fa6b77/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", size = 229455, upload-time = "2026-04-02T09:26:14.941Z" }, + { url = "https://files.pythonhosted.org/packages/54/bb/8fb0a946296ea96a488928bdce8ef99023998c48e4713af533e9bb98ef07/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", size = 210036, upload-time = "2026-04-02T09:26:16.478Z" }, + { url = "https://files.pythonhosted.org/packages/9a/bc/015b2387f913749f82afd4fcba07846d05b6d784dd16123cb66860e0237d/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", size = 224739, upload-time = "2026-04-02T09:26:17.751Z" }, + { url = "https://files.pythonhosted.org/packages/17/ab/63133691f56baae417493cba6b7c641571a2130eb7bceba6773367ab9ec5/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", size = 216277, upload-time = "2026-04-02T09:26:18.981Z" }, + { url = "https://files.pythonhosted.org/packages/06/6d/3be70e827977f20db77c12a97e6a9f973631a45b8d186c084527e53e77a4/charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad", size = 147819, upload-time = "2026-04-02T09:26:20.295Z" }, + { url = "https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00", size = 159281, upload-time = "2026-04-02T09:26:21.74Z" }, + { url = "https://files.pythonhosted.org/packages/ca/83/6413f36c5a34afead88ce6f66684d943d91f233d76dd083798f9602b75ae/charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1", size = 147843, upload-time = "2026-04-02T09:26:22.901Z" }, + { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, ] [[package]] @@ -253,9 +425,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/dd/cf/706c1ad49ab26abed0b77a2f867984c1341ed7387b8030a6aa914e2942a0/click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb", size = 329520 } +sdist = { url = "https://files.pythonhosted.org/packages/dd/cf/706c1ad49ab26abed0b77a2f867984c1341ed7387b8030a6aa914e2942a0/click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb", size = 329520, upload-time = "2022-02-18T20:31:30.105Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/a8/0b2ced25639fb20cc1c9784de90a8c25f9504a7f18cd8b5397bd61696d7d/click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1", size = 97486 }, + { url = "https://files.pythonhosted.org/packages/4a/a8/0b2ced25639fb20cc1c9784de90a8c25f9504a7f18cd8b5397bd61696d7d/click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1", size = 97486, upload-time = "2022-02-18T20:31:27.733Z" }, ] [[package]] @@ -265,9 +437,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c3/a4/34847b59150da33690a36da3681d6bbc2ec14ee9a846bc30a6746e5984e4/click_plugins-1.1.1.2.tar.gz", hash = "sha256:d7af3984a99d243c131aa1a828331e7630f4a88a9741fd05c927b204bcf92261", size = 8343 } +sdist = { url = "https://files.pythonhosted.org/packages/c3/a4/34847b59150da33690a36da3681d6bbc2ec14ee9a846bc30a6746e5984e4/click_plugins-1.1.1.2.tar.gz", hash = "sha256:d7af3984a99d243c131aa1a828331e7630f4a88a9741fd05c927b204bcf92261", size = 8343, upload-time = "2025-06-25T00:47:37.555Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/9a/2abecb28ae875e39c8cad711eb1186d8d14eab564705325e77e4e6ab9ae5/click_plugins-1.1.1.2-py2.py3-none-any.whl", hash = "sha256:008d65743833ffc1f5417bf0e78e8d2c23aab04d9745ba817bd3e71b0feb6aa6", size = 11051 }, + { url = "https://files.pythonhosted.org/packages/3d/9a/2abecb28ae875e39c8cad711eb1186d8d14eab564705325e77e4e6ab9ae5/click_plugins-1.1.1.2-py2.py3-none-any.whl", hash = "sha256:008d65743833ffc1f5417bf0e78e8d2c23aab04d9745ba817bd3e71b0feb6aa6", size = 11051, upload-time = "2025-06-25T00:47:36.731Z" }, ] [[package]] @@ -277,9 +449,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ea/0d/837dbd5d8430fd0f01ed72c4cfb2f548180f4c68c635df84ce87956cff32/cligj-0.7.2.tar.gz", hash = "sha256:a4bc13d623356b373c2c27c53dbd9c68cae5d526270bfa71f6c6fa69669c6b27", size = 9803 } +sdist = { url = "https://files.pythonhosted.org/packages/ea/0d/837dbd5d8430fd0f01ed72c4cfb2f548180f4c68c635df84ce87956cff32/cligj-0.7.2.tar.gz", hash = "sha256:a4bc13d623356b373c2c27c53dbd9c68cae5d526270bfa71f6c6fa69669c6b27", size = 9803, upload-time = "2021-05-28T21:23:27.935Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/73/86/43fa9f15c5b9fb6e82620428827cd3c284aa933431405d1bcf5231ae3d3e/cligj-0.7.2-py3-none-any.whl", hash = "sha256:c1ca117dbce1fe20a5809dc96f01e1c2840f6dcc939b3ddbb1111bf330ba82df", size = 7069 }, + { url = "https://files.pythonhosted.org/packages/73/86/43fa9f15c5b9fb6e82620428827cd3c284aa933431405d1bcf5231ae3d3e/cligj-0.7.2-py3-none-any.whl", hash = "sha256:c1ca117dbce1fe20a5809dc96f01e1c2840f6dcc939b3ddbb1111bf330ba82df", size = 7069, upload-time = "2021-05-28T21:23:26.877Z" }, ] [[package]] @@ -291,27 +463,27 @@ dependencies = [ { name = "numpy" }, { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/11/ee/f0704510c258d286fa75f405d16bb9ce6d6bdb3156371d02d61af1445e55/cmocean-3.0.3.tar.gz", hash = "sha256:abaf99383c1a60f52970c86052ae6c14eafa84fc16984488040283c02db77c0b", size = 6950346 } +sdist = { url = "https://files.pythonhosted.org/packages/11/ee/f0704510c258d286fa75f405d16bb9ce6d6bdb3156371d02d61af1445e55/cmocean-3.0.3.tar.gz", hash = "sha256:abaf99383c1a60f52970c86052ae6c14eafa84fc16984488040283c02db77c0b", size = 6950346, upload-time = "2023-03-20T16:09:47.278Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/33/1b5353a244ea5b8b21e2324b3e00f4983b8f1b2f48f02b61379423e0d259/cmocean-3.0.3-py3-none-any.whl", hash = "sha256:a23e4b7893e05dfd958931df53fc0e31bca09a572c13d78158a79ade47dc44bf", size = 222097 }, + { url = "https://files.pythonhosted.org/packages/eb/33/1b5353a244ea5b8b21e2324b3e00f4983b8f1b2f48f02b61379423e0d259/cmocean-3.0.3-py3-none-any.whl", hash = "sha256:a23e4b7893e05dfd958931df53fc0e31bca09a572c13d78158a79ade47dc44bf", size = 222097, upload-time = "2023-03-20T16:09:45.288Z" }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] [[package]] name = "comm" version = "0.2.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319 } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294 }, + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, ] [[package]] @@ -321,109 +493,154 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1", size = 288773 }, - { url = "https://files.pythonhosted.org/packages/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381", size = 270149 }, - { url = "https://files.pythonhosted.org/packages/30/2e/dd4ced42fefac8470661d7cb7e264808425e6c5d56d175291e93890cce09/contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7", size = 329222 }, - { url = "https://files.pythonhosted.org/packages/f2/74/cc6ec2548e3d276c71389ea4802a774b7aa3558223b7bade3f25787fafc2/contourpy-1.3.3-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1", size = 377234 }, - { url = "https://files.pythonhosted.org/packages/03/b3/64ef723029f917410f75c09da54254c5f9ea90ef89b143ccadb09df14c15/contourpy-1.3.3-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a", size = 380555 }, - { url = "https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db", size = 355238 }, - { url = "https://files.pythonhosted.org/packages/98/56/f914f0dd678480708a04cfd2206e7c382533249bc5001eb9f58aa693e200/contourpy-1.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620", size = 1326218 }, - { url = "https://files.pythonhosted.org/packages/fb/d7/4a972334a0c971acd5172389671113ae82aa7527073980c38d5868ff1161/contourpy-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f", size = 1392867 }, - { url = "https://files.pythonhosted.org/packages/75/3e/f2cc6cd56dc8cff46b1a56232eabc6feea52720083ea71ab15523daab796/contourpy-1.3.3-cp311-cp311-win32.whl", hash = "sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff", size = 183677 }, - { url = "https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42", size = 225234 }, - { url = "https://files.pythonhosted.org/packages/d9/b6/71771e02c2e004450c12b1120a5f488cad2e4d5b590b1af8bad060360fe4/contourpy-1.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470", size = 193123 }, - { url = "https://files.pythonhosted.org/packages/a5/29/8dcfe16f0107943fa92388c23f6e05cff0ba58058c4c95b00280d4c75a14/contourpy-1.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497", size = 278809 }, - { url = "https://files.pythonhosted.org/packages/85/a9/8b37ef4f7dafeb335daee3c8254645ef5725be4d9c6aa70b50ec46ef2f7e/contourpy-1.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8", size = 261593 }, - { url = "https://files.pythonhosted.org/packages/0a/59/ebfb8c677c75605cc27f7122c90313fd2f375ff3c8d19a1694bda74aaa63/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e", size = 302202 }, - { url = "https://files.pythonhosted.org/packages/3c/37/21972a15834d90bfbfb009b9d004779bd5a07a0ec0234e5ba8f64d5736f4/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989", size = 329207 }, - { url = "https://files.pythonhosted.org/packages/0c/58/bd257695f39d05594ca4ad60df5bcb7e32247f9951fd09a9b8edb82d1daa/contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77", size = 225315 }, +sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1", size = 288773, upload-time = "2025-07-26T12:01:02.277Z" }, + { url = "https://files.pythonhosted.org/packages/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381", size = 270149, upload-time = "2025-07-26T12:01:04.072Z" }, + { url = "https://files.pythonhosted.org/packages/30/2e/dd4ced42fefac8470661d7cb7e264808425e6c5d56d175291e93890cce09/contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7", size = 329222, upload-time = "2025-07-26T12:01:05.688Z" }, + { url = "https://files.pythonhosted.org/packages/f2/74/cc6ec2548e3d276c71389ea4802a774b7aa3558223b7bade3f25787fafc2/contourpy-1.3.3-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1", size = 377234, upload-time = "2025-07-26T12:01:07.054Z" }, + { url = "https://files.pythonhosted.org/packages/03/b3/64ef723029f917410f75c09da54254c5f9ea90ef89b143ccadb09df14c15/contourpy-1.3.3-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a", size = 380555, upload-time = "2025-07-26T12:01:08.801Z" }, + { url = "https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db", size = 355238, upload-time = "2025-07-26T12:01:10.319Z" }, + { url = "https://files.pythonhosted.org/packages/98/56/f914f0dd678480708a04cfd2206e7c382533249bc5001eb9f58aa693e200/contourpy-1.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620", size = 1326218, upload-time = "2025-07-26T12:01:12.659Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d7/4a972334a0c971acd5172389671113ae82aa7527073980c38d5868ff1161/contourpy-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f", size = 1392867, upload-time = "2025-07-26T12:01:15.533Z" }, + { url = "https://files.pythonhosted.org/packages/75/3e/f2cc6cd56dc8cff46b1a56232eabc6feea52720083ea71ab15523daab796/contourpy-1.3.3-cp311-cp311-win32.whl", hash = "sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff", size = 183677, upload-time = "2025-07-26T12:01:17.088Z" }, + { url = "https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42", size = 225234, upload-time = "2025-07-26T12:01:18.256Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b6/71771e02c2e004450c12b1120a5f488cad2e4d5b590b1af8bad060360fe4/contourpy-1.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470", size = 193123, upload-time = "2025-07-26T12:01:19.848Z" }, + { url = "https://files.pythonhosted.org/packages/a5/29/8dcfe16f0107943fa92388c23f6e05cff0ba58058c4c95b00280d4c75a14/contourpy-1.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497", size = 278809, upload-time = "2025-07-26T12:02:52.74Z" }, + { url = "https://files.pythonhosted.org/packages/85/a9/8b37ef4f7dafeb335daee3c8254645ef5725be4d9c6aa70b50ec46ef2f7e/contourpy-1.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8", size = 261593, upload-time = "2025-07-26T12:02:54.037Z" }, + { url = "https://files.pythonhosted.org/packages/0a/59/ebfb8c677c75605cc27f7122c90313fd2f375ff3c8d19a1694bda74aaa63/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e", size = 302202, upload-time = "2025-07-26T12:02:55.947Z" }, + { url = "https://files.pythonhosted.org/packages/3c/37/21972a15834d90bfbfb009b9d004779bd5a07a0ec0234e5ba8f64d5736f4/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989", size = 329207, upload-time = "2025-07-26T12:02:57.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/58/bd257695f39d05594ca4ad60df5bcb7e32247f9951fd09a9b8edb82d1daa/contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77", size = 225315, upload-time = "2025-07-26T12:02:58.801Z" }, +] + +[[package]] +name = "cryptography" +version = "48.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/a9/db8f313fdcd85d767d4973515e1db101f9c71f95fced83233de224673757/cryptography-48.0.0.tar.gz", hash = "sha256:5c3932f4436d1cccb036cb0eaef46e6e2db91035166f1ad6505c3c9d5a635920", size = 832984, upload-time = "2026-05-04T22:59:38.133Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/3d/01f6dd9190170a5a241e0e98c2d04be3664a9e6f5b9b872cde63aff1c3dd/cryptography-48.0.0-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:0c558d2cdffd8f4bbb30fc7134c74d2ca9a476f830bb053074498fbc86f41ed6", size = 8001587, upload-time = "2026-05-04T22:57:36.803Z" }, + { url = "https://files.pythonhosted.org/packages/b2/6e/e90527eef33f309beb811cf7c982c3aeffcce8e3edb178baa4ca3ae4a6fa/cryptography-48.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f5333311663ea94f75dd408665686aaf426563556bb5283554a3539177e03b8c", size = 4690433, upload-time = "2026-05-04T22:57:40.373Z" }, + { url = "https://files.pythonhosted.org/packages/90/04/673510ed51ddff56575f306cf1617d80411ee76831ccd3097599140efdfe/cryptography-48.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7995ef305d7165c3f11ae07f2517e5a4f1d5c18da1376a0a9ed496336b69e5f3", size = 4710620, upload-time = "2026-05-04T22:57:42.935Z" }, + { url = "https://files.pythonhosted.org/packages/14/d5/e9c4ef932c8d800490c34d8bd589d64a31d5890e27ec9e9ad532be893294/cryptography-48.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:40ba1f85eaa6959837b1d51c9767e230e14612eea4ef110ee8854ada22da1bf5", size = 4696283, upload-time = "2026-05-04T22:57:45.294Z" }, + { url = "https://files.pythonhosted.org/packages/0c/29/174b9dfb60b12d59ecfc6cfa04bc88c21b42a54f01b8aae09bb6e51e4c7f/cryptography-48.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:369a6348999f94bbd53435c894377b20ab95f25a9065c283570e70150d8abc3c", size = 5296573, upload-time = "2026-05-04T22:57:47.933Z" }, + { url = "https://files.pythonhosted.org/packages/95/38/0d29a6fd7d0d1373f0c0c88a04ba20e359b257753ac497564cd660fc1d55/cryptography-48.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a0e692c683f4df67815a2d258b324e66f4738bd7a96a218c826dce4f4bd05d8f", size = 4743677, upload-time = "2026-05-04T22:57:50.067Z" }, + { url = "https://files.pythonhosted.org/packages/30/be/eef653013d5c63b6a490529e0316f9ac14a37602965d4903efed1399f32b/cryptography-48.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:18349bbc56f4743c8b12dc32e2bccb2cf83ee8b69a3bba74ef8ae857e26b3d25", size = 4330808, upload-time = "2026-05-04T22:57:52.301Z" }, + { url = "https://files.pythonhosted.org/packages/84/9e/500463e87abb7a0a0f9f256ec21123ecde0a7b5541a15e840ea54551fd81/cryptography-48.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:7e8eac43dfca5c4cccc6dad9a80504436fca53bb9bc3100a2386d730fbe6b602", size = 4695941, upload-time = "2026-05-04T22:57:54.603Z" }, + { url = "https://files.pythonhosted.org/packages/e3/dc/7303087450c2ec9e7fbb750e17c2abfbc658f23cbd0e54009509b7cc4091/cryptography-48.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9ccdac7d40688ecb5a3b4a604b8a88c8002e3442d6c60aead1db2a89a041560c", size = 5252579, upload-time = "2026-05-04T22:57:57.207Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c0/7101d3b7215edcdc90c45da544961fd8ed2d6448f77577460fa75a8443f7/cryptography-48.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:bd72e68b06bb1e96913f97dd4901119bc17f39d4586a5adf2d3e47bc2b9d58b5", size = 4743326, upload-time = "2026-05-04T22:57:59.535Z" }, + { url = "https://files.pythonhosted.org/packages/ac/d8/5b833bad13016f562ab9d063d68199a4bd121d18458e439515601d3357ec/cryptography-48.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:59baa2cb386c4f0b9905bd6eb4c2a79a69a128408fd31d32ca4d7102d4156321", size = 4826672, upload-time = "2026-05-04T22:58:01.996Z" }, + { url = "https://files.pythonhosted.org/packages/98/e1/7074eb8bf3c135558c73fc2bcf0f5633f912e6fb87e868a55c454080ef09/cryptography-48.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9249e3cd978541d665967ac2cb2787fd6a62bddf1e75b3e347a594d7dacf4f74", size = 4972574, upload-time = "2026-05-04T22:58:03.968Z" }, + { url = "https://files.pythonhosted.org/packages/04/70/e5a1b41d325f797f39427aa44ef8baf0be500065ab6d8e10369d850d4a4f/cryptography-48.0.0-cp311-abi3-win32.whl", hash = "sha256:9c459db21422be75e2809370b829a87eb37f74cd785fc4aa9ea1e5f43b47cda4", size = 3294868, upload-time = "2026-05-04T22:58:06.467Z" }, + { url = "https://files.pythonhosted.org/packages/f4/ac/8ac51b4a5fc5932eb7ee5c517ba7dc8cd834f0048962b6b352f00f41ebf9/cryptography-48.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:5b012212e08b8dd5edc78ef54da83dd9892fd9105323b3993eff6bea65dc21d7", size = 3817107, upload-time = "2026-05-04T22:58:08.845Z" }, + { url = "https://files.pythonhosted.org/packages/f2/63/61d4a4e1c6b6bab6ce1e213cd36a24c415d90e76d78c5eb8577c5541d2e8/cryptography-48.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:58d00498e8933e4a194f3076aee1b4a97dfec1a6da444535755822fe5d8b0b86", size = 7983482, upload-time = "2026-05-04T22:58:43.769Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ac/f5b5995b87770c693e2596559ffafe195b4033a57f14a82268a2842953f3/cryptography-48.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:614d0949f4790582d2cc25553abd09dd723025f0c0e7c67376a1d77196743d6e", size = 4683266, upload-time = "2026-05-04T22:58:46.064Z" }, + { url = "https://files.pythonhosted.org/packages/ec/c6/8b14f67e18338fbc4adb76f66c001f5c3610b3e2d1837f268f47a347dbbb/cryptography-48.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7ce4bfae76319a532a2dc68f82cc32f5676ee792a983187dac07183690e5c66f", size = 4696228, upload-time = "2026-05-04T22:58:48.22Z" }, + { url = "https://files.pythonhosted.org/packages/ea/73/f808fbae9514bd91b47875b003f13e284c8c6bdfd904b7944e803937eec1/cryptography-48.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:2eb992bbd4661238c5a397594c83f5b4dc2bc5b848c365c8f991b6780efcc5c7", size = 4689097, upload-time = "2026-05-04T22:58:50.9Z" }, + { url = "https://files.pythonhosted.org/packages/93/01/d86632d7d28db8ae83221995752eeb6639ffb374c2d22955648cf8d52797/cryptography-48.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:22a5cb272895dce158b2cacdfdc3debd299019659f42947dbdac6f32d68fe832", size = 5283582, upload-time = "2026-05-04T22:58:53.017Z" }, + { url = "https://files.pythonhosted.org/packages/02/e1/50edc7a50334807cc4791fc4a0ce7468b4a1416d9138eab358bfc9a3d70b/cryptography-48.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2b4d59804e8408e2fea7d1fbaf218e5ec984325221db76e6a241a9abd6cdd95c", size = 4730479, upload-time = "2026-05-04T22:58:55.611Z" }, + { url = "https://files.pythonhosted.org/packages/6f/af/99a582b1b1641ff5911ac559beb45097cf79efd4ead4657f578ef1af2d47/cryptography-48.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:984a20b0f62a26f48a3396c72e4bc34c66e356d356bf370053066b3b6d54634a", size = 4326481, upload-time = "2026-05-04T22:58:57.607Z" }, + { url = "https://files.pythonhosted.org/packages/90/ee/89aa26a06ef0a7d7611788ffd571a7c50e368cc6a4d5eef8b4884e866edb/cryptography-48.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:5a5ed8fde7a1d09376ca0b40e68cd59c69fe23b1f9768bd5824f54681626032a", size = 4688713, upload-time = "2026-05-04T22:59:00.077Z" }, + { url = "https://files.pythonhosted.org/packages/70/ba/bcb1b0bb7a33d4c7c0c4d4c7874b4a62ae4f56113a5f4baefa362dfb1f0f/cryptography-48.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:8cd666227ef7af430aa5914a9910e0ddd703e75f039cef0825cd0da71b6b711a", size = 5238165, upload-time = "2026-05-04T22:59:02.317Z" }, + { url = "https://files.pythonhosted.org/packages/c9/70/ca4003b1ce5ca3dc3186ada51908c8a9b9ff7d5cab83cc0d43ee14ec144f/cryptography-48.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9071196d81abc88b3516ac8cdfad32e2b66dd4a5393a8e68a961e9161ddc6239", size = 4729947, upload-time = "2026-05-04T22:59:05.255Z" }, + { url = "https://files.pythonhosted.org/packages/44/a0/4ec7cf774207905aef1a8d11c3750d5a1db805eb380ee4e16df317870128/cryptography-48.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1e2d54c8be6152856a36f0882ab231e70f8ec7f14e93cf87db8a2ed056bf160c", size = 4822059, upload-time = "2026-05-04T22:59:07.802Z" }, + { url = "https://files.pythonhosted.org/packages/1e/75/a2e55f99c16fcac7b5d6c1eb19ad8e00799854d6be5ca845f9259eae1681/cryptography-48.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a5da777e32ffed6f85a7b2b3f7c5cbc88c146bfcd0a1d7baf5fcc6c52ee35dd4", size = 4960575, upload-time = "2026-05-04T22:59:09.851Z" }, + { url = "https://files.pythonhosted.org/packages/b8/23/6e6f32143ab5d8b36ca848a502c4bcd477ae75b9e1677e3530d669062578/cryptography-48.0.0-cp39-abi3-win32.whl", hash = "sha256:77a2ccbbe917f6710e05ba9adaa25fb5075620bf3ea6fb751997875aff4ae4bd", size = 3279117, upload-time = "2026-05-04T22:59:12.019Z" }, + { url = "https://files.pythonhosted.org/packages/9d/9a/0fea98a70cf1749d41d738836f6349d97945f7c89433a259a6c2642eefeb/cryptography-48.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:16cd65b9330583e4619939b3a3843eec1e6e789744bb01e7c7e2e62e33c239c8", size = 3792100, upload-time = "2026-05-04T22:59:14.884Z" }, + { url = "https://files.pythonhosted.org/packages/be/d2/024b5e06be9d44cb021fb0e1a03d34d63989cf56a0fe62f3dfbab695b9b4/cryptography-48.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:84cf79f0dc8b36ac5da873481716e87aef31fcfa0444f9e1d8b4b2cece142855", size = 3950391, upload-time = "2026-05-04T22:59:17.415Z" }, + { url = "https://files.pythonhosted.org/packages/bc/17/3861e17c56fa0fd37491a14a8673fdb77c57fc5693cafe745ea8b06dba75/cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:fdfef35d751d510fcef5252703621574364fec16418c4a1e5e1055248401054b", size = 4637126, upload-time = "2026-05-04T22:59:20.197Z" }, + { url = "https://files.pythonhosted.org/packages/f0/0a/7e226dbff530f21480727eb764973a7bff2b912f8e15cd4f129e71b56d1d/cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0890f502ddf7d9c6426129c3f49f5c0a39278ed7cd6322c8755ffca6ee675a13", size = 4667270, upload-time = "2026-05-04T22:59:22.647Z" }, + { url = "https://files.pythonhosted.org/packages/3b/f2/5a72274ca9f1b2a8b44a662ee0bf1b435909deb473d6f97bcd035bcdbc71/cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:ecde28a596bead48b0cfd2a1b4416c3d43074c2d785e3a398d7ec1fc4d0f7fbb", size = 4636797, upload-time = "2026-05-04T22:59:24.912Z" }, + { url = "https://files.pythonhosted.org/packages/b4/e1/48cedb2fe63626e91ded1edad159e2a4fb8b6906c4425eb7749673077ce7/cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:4defde8685ae324a9eb9d818717e93b4638ef67070ac9bc15b8ca85f63048355", size = 4666800, upload-time = "2026-05-04T22:59:27.474Z" }, + { url = "https://files.pythonhosted.org/packages/a2/ca/7e8365deec19afb2b2c7be7c1c0aa8f99633b54e90c570999acda93260fc/cryptography-48.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:db63bf618e5dea46c07de12e900fe1cdd2541e6dc9dbae772a70b7d4d4765f6a", size = 3739536, upload-time = "2026-05-04T22:59:29.61Z" }, ] [[package]] name = "cycler" version = "0.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, ] [[package]] name = "debugpy" version = "1.8.20" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/b7/cd8080344452e4874aae67c40d8940e2b4d47b01601a8fd9f44786c757c7/debugpy-1.8.20.tar.gz", hash = "sha256:55bc8701714969f1ab89a6d5f2f3d40c36f91b2cbe2f65d98bf8196f6a6a2c33", size = 1645207 } +sdist = { url = "https://files.pythonhosted.org/packages/e0/b7/cd8080344452e4874aae67c40d8940e2b4d47b01601a8fd9f44786c757c7/debugpy-1.8.20.tar.gz", hash = "sha256:55bc8701714969f1ab89a6d5f2f3d40c36f91b2cbe2f65d98bf8196f6a6a2c33", size = 1645207, upload-time = "2026-01-29T23:03:28.199Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/51/56/c3baf5cbe4dd77427fd9aef99fcdade259ad128feeb8a786c246adb838e5/debugpy-1.8.20-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:eada6042ad88fa1571b74bd5402ee8b86eded7a8f7b827849761700aff171f1b", size = 2208318 }, - { url = "https://files.pythonhosted.org/packages/9a/7d/4fa79a57a8e69fe0d9763e98d1110320f9ecd7f1f362572e3aafd7417c9d/debugpy-1.8.20-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:7de0b7dfeedc504421032afba845ae2a7bcc32ddfb07dae2c3ca5442f821c344", size = 3171493 }, - { url = "https://files.pythonhosted.org/packages/7d/f2/1e8f8affe51e12a26f3a8a8a4277d6e60aa89d0a66512f63b1e799d424a4/debugpy-1.8.20-cp311-cp311-win32.whl", hash = "sha256:773e839380cf459caf73cc533ea45ec2737a5cc184cf1b3b796cd4fd98504fec", size = 5209240 }, - { url = "https://files.pythonhosted.org/packages/d5/92/1cb532e88560cbee973396254b21bece8c5d7c2ece958a67afa08c9f10dc/debugpy-1.8.20-cp311-cp311-win_amd64.whl", hash = "sha256:1f7650546e0eded1902d0f6af28f787fa1f1dbdbc97ddabaf1cd963a405930cb", size = 5233481 }, - { url = "https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl", hash = "sha256:5be9bed9ae3be00665a06acaa48f8329d2b9632f15fd09f6a9a8c8d9907e54d7", size = 5337658 }, + { url = "https://files.pythonhosted.org/packages/51/56/c3baf5cbe4dd77427fd9aef99fcdade259ad128feeb8a786c246adb838e5/debugpy-1.8.20-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:eada6042ad88fa1571b74bd5402ee8b86eded7a8f7b827849761700aff171f1b", size = 2208318, upload-time = "2026-01-29T23:03:36.481Z" }, + { url = "https://files.pythonhosted.org/packages/9a/7d/4fa79a57a8e69fe0d9763e98d1110320f9ecd7f1f362572e3aafd7417c9d/debugpy-1.8.20-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:7de0b7dfeedc504421032afba845ae2a7bcc32ddfb07dae2c3ca5442f821c344", size = 3171493, upload-time = "2026-01-29T23:03:37.775Z" }, + { url = "https://files.pythonhosted.org/packages/7d/f2/1e8f8affe51e12a26f3a8a8a4277d6e60aa89d0a66512f63b1e799d424a4/debugpy-1.8.20-cp311-cp311-win32.whl", hash = "sha256:773e839380cf459caf73cc533ea45ec2737a5cc184cf1b3b796cd4fd98504fec", size = 5209240, upload-time = "2026-01-29T23:03:39.109Z" }, + { url = "https://files.pythonhosted.org/packages/d5/92/1cb532e88560cbee973396254b21bece8c5d7c2ece958a67afa08c9f10dc/debugpy-1.8.20-cp311-cp311-win_amd64.whl", hash = "sha256:1f7650546e0eded1902d0f6af28f787fa1f1dbdbc97ddabaf1cd963a405930cb", size = 5233481, upload-time = "2026-01-29T23:03:40.659Z" }, + { url = "https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl", hash = "sha256:5be9bed9ae3be00665a06acaa48f8329d2b9632f15fd09f6a9a8c8d9907e54d7", size = 5337658, upload-time = "2026-01-29T23:04:17.404Z" }, ] [[package]] name = "decorator" version = "5.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, ] [[package]] name = "defusedxml" version = "0.7.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 }, + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, ] [[package]] name = "docutils" version = "0.20.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1f/53/a5da4f2c5739cf66290fac1431ee52aff6851c7c8ffd8264f13affd7bcdd/docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b", size = 2058365 } +sdist = { url = "https://files.pythonhosted.org/packages/1f/53/a5da4f2c5739cf66290fac1431ee52aff6851c7c8ffd8264f13affd7bcdd/docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b", size = 2058365, upload-time = "2023-05-16T23:39:19.748Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/87/f238c0670b94533ac0353a4e2a1a771a0cc73277b88bff23d3ae35a256c1/docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6", size = 572666 }, + { url = "https://files.pythonhosted.org/packages/26/87/f238c0670b94533ac0353a4e2a1a771a0cc73277b88bff23d3ae35a256c1/docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6", size = 572666, upload-time = "2023-05-16T23:39:15.976Z" }, ] [[package]] name = "entrypoints" version = "0.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ea/8d/a7121ffe5f402dc015277d2d31eb82d2187334503a011c18f2e78ecbb9b2/entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4", size = 13974 } +sdist = { url = "https://files.pythonhosted.org/packages/ea/8d/a7121ffe5f402dc015277d2d31eb82d2187334503a011c18f2e78ecbb9b2/entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4", size = 13974, upload-time = "2022-02-02T21:30:28.172Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f", size = 5294 }, + { url = "https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f", size = 5294, upload-time = "2022-02-02T21:30:26.024Z" }, ] [[package]] name = "et-xmlfile" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234 } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload-time = "2024-10-25T17:25:40.039Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059 }, + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload-time = "2024-10-25T17:25:39.051Z" }, ] [[package]] name = "executing" version = "2.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488 } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488, upload-time = "2025-09-01T09:48:10.866Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317 }, + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317, upload-time = "2025-09-01T09:48:08.5Z" }, ] [[package]] name = "fastjsonschema" version = "2.21.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130 } +sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130, upload-time = "2025-08-14T18:49:36.666Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024 }, + { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024, upload-time = "2025-08-14T18:49:34.776Z" }, ] [[package]] @@ -439,12 +656,12 @@ dependencies = [ { name = "setuptools" }, { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/83/a0/6b870864ceebcd046d2e952b0d18932812ff7a48d3b05670af3f702d9c01/fiona-1.9.5.tar.gz", hash = "sha256:99e2604332caa7692855c2ae6ed91e1fffdf9b59449aa8032dd18e070e59a2f7", size = 409295 } +sdist = { url = "https://files.pythonhosted.org/packages/83/a0/6b870864ceebcd046d2e952b0d18932812ff7a48d3b05670af3f702d9c01/fiona-1.9.5.tar.gz", hash = "sha256:99e2604332caa7692855c2ae6ed91e1fffdf9b59449aa8032dd18e070e59a2f7", size = 409295, upload-time = "2023-10-12T19:17:25.885Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/40/f25a33d54825d52f8b7f53adf8cb6d8f554179feb942bf2983c8b440decf/fiona-1.9.5-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:6ad04c1877b9fd742871b11965606c6a52f40706f56a48d66a87cc3073943828", size = 18466036 }, - { url = "https://files.pythonhosted.org/packages/62/50/cc0cbc48d4f11899611edfb23a99d9d43101d3d28f2ef90a5506782cae84/fiona-1.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9fb9a24a8046c724787719e20557141b33049466145fc3e665764ac7caf5748c", size = 14042703 }, - { url = "https://files.pythonhosted.org/packages/07/ea/6674320c62a688bc1dc14201dfb7d4aeaea0939a1e733b85bae39e177325/fiona-1.9.5-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:d722d7f01a66f4ab6cd08d156df3fdb92f0669cf5f8708ddcb209352f416f241", size = 15662883 }, - { url = "https://files.pythonhosted.org/packages/7f/27/b24c1610c7ae5716709321f04d38d7b8b71ed531f80df4f697b9ad99cfc3/fiona-1.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:7ede8ddc798f3d447536080c6db9a5fb73733ad8bdb190cb65eed4e289dd4c50", size = 22911581 }, + { url = "https://files.pythonhosted.org/packages/a5/40/f25a33d54825d52f8b7f53adf8cb6d8f554179feb942bf2983c8b440decf/fiona-1.9.5-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:6ad04c1877b9fd742871b11965606c6a52f40706f56a48d66a87cc3073943828", size = 18466036, upload-time = "2023-10-12T19:16:15.883Z" }, + { url = "https://files.pythonhosted.org/packages/62/50/cc0cbc48d4f11899611edfb23a99d9d43101d3d28f2ef90a5506782cae84/fiona-1.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9fb9a24a8046c724787719e20557141b33049466145fc3e665764ac7caf5748c", size = 14042703, upload-time = "2023-10-12T19:16:19.664Z" }, + { url = "https://files.pythonhosted.org/packages/07/ea/6674320c62a688bc1dc14201dfb7d4aeaea0939a1e733b85bae39e177325/fiona-1.9.5-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:d722d7f01a66f4ab6cd08d156df3fdb92f0669cf5f8708ddcb209352f416f241", size = 15662883, upload-time = "2023-10-12T19:16:23.473Z" }, + { url = "https://files.pythonhosted.org/packages/7f/27/b24c1610c7ae5716709321f04d38d7b8b71ed531f80df4f697b9ad99cfc3/fiona-1.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:7ede8ddc798f3d447536080c6db9a5fb73733ad8bdb190cb65eed4e289dd4c50", size = 22911581, upload-time = "2023-10-12T19:16:27.125Z" }, ] [[package]] @@ -457,35 +674,69 @@ dependencies = [ { name = "numpy" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bb/d0/2d8d1a500d829caa0e6b394ee933344f7fee81cb685409e5aaf5c9492f64/folium-0.14.0.tar.gz", hash = "sha256:8ec44697d18f5932e0fdaee8b19da98625de4d0e72cb30ef56f9479f18e11b9f", size = 93500 } +sdist = { url = "https://files.pythonhosted.org/packages/bb/d0/2d8d1a500d829caa0e6b394ee933344f7fee81cb685409e5aaf5c9492f64/folium-0.14.0.tar.gz", hash = "sha256:8ec44697d18f5932e0fdaee8b19da98625de4d0e72cb30ef56f9479f18e11b9f", size = 93500, upload-time = "2022-12-12T20:38:03.241Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/0f/22068577bc5eafdcbf5521dbaed6a5317a434ad6847ad3711dee1fd1f6ba/folium-0.14.0-py2.py3-none-any.whl", hash = "sha256:c894e2c029a8ca40e043a311978a895cefe32d746a94263f807dd7b6b2e9c679", size = 102282 }, + { url = "https://files.pythonhosted.org/packages/0e/0f/22068577bc5eafdcbf5521dbaed6a5317a434ad6847ad3711dee1fd1f6ba/folium-0.14.0-py2.py3-none-any.whl", hash = "sha256:c894e2c029a8ca40e043a311978a895cefe32d746a94263f807dd7b6b2e9c679", size = 102282, upload-time = "2022-12-12T20:38:01.599Z" }, ] [[package]] name = "fonttools" version = "4.62.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9a/08/7012b00a9a5874311b639c3920270c36ee0c445b69d9989a85e5c92ebcb0/fonttools-4.62.1.tar.gz", hash = "sha256:e54c75fd6041f1122476776880f7c3c3295ffa31962dc6ebe2543c00dca58b5d", size = 3580737 } +sdist = { url = "https://files.pythonhosted.org/packages/9a/08/7012b00a9a5874311b639c3920270c36ee0c445b69d9989a85e5c92ebcb0/fonttools-4.62.1.tar.gz", hash = "sha256:e54c75fd6041f1122476776880f7c3c3295ffa31962dc6ebe2543c00dca58b5d", size = 3580737, upload-time = "2026-03-13T13:54:25.52Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/39/23ff32561ec8d45a4d48578b4d241369d9270dc50926c017570e60893701/fonttools-4.62.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:40975849bac44fb0b9253d77420c6d8b523ac4dcdcefeff6e4d706838a5b80f7", size = 2871039 }, - { url = "https://files.pythonhosted.org/packages/24/7f/66d3f8a9338a9b67fe6e1739f47e1cd5cee78bd3bc1206ef9b0b982289a5/fonttools-4.62.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9dde91633f77fa576879a0c76b1d89de373cae751a98ddf0109d54e173b40f14", size = 2416346 }, - { url = "https://files.pythonhosted.org/packages/aa/53/5276ceba7bff95da7793a07c5284e1da901cf00341ce5e2f3273056c0cca/fonttools-4.62.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6acb4109f8bee00fec985c8c7afb02299e35e9c94b57287f3ea542f28bd0b0a7", size = 5100897 }, - { url = "https://files.pythonhosted.org/packages/cc/a1/40a5c4d8e28b0851d53a8eeeb46fbd73c325a2a9a165f290a5ed90e6c597/fonttools-4.62.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1c5c25671ce8805e0d080e2ffdeca7f1e86778c5cbfbeae86d7f866d8830517b", size = 5071078 }, - { url = "https://files.pythonhosted.org/packages/e3/be/d378fca4c65ea1956fee6d90ace6e861776809cbbc5af22388a090c3c092/fonttools-4.62.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a5d8825e1140f04e6c99bb7d37a9e31c172f3bc208afbe02175339e699c710e1", size = 5076908 }, - { url = "https://files.pythonhosted.org/packages/f8/d9/ae6a1d0693a4185a84605679c8a1f719a55df87b9c6e8e817bfdd9ef5936/fonttools-4.62.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:268abb1cb221e66c014acc234e872b7870d8b5d4657a83a8f4205094c32d2416", size = 5202275 }, - { url = "https://files.pythonhosted.org/packages/54/6c/af95d9c4efb15cabff22642b608342f2bd67137eea6107202d91b5b03184/fonttools-4.62.1-cp311-cp311-win32.whl", hash = "sha256:942b03094d7edbb99bdf1ae7e9090898cad7bf9030b3d21f33d7072dbcb51a53", size = 2293075 }, - { url = "https://files.pythonhosted.org/packages/d3/97/bf54c5b3f2be34e1f143e6db838dfdc54f2ffa3e68c738934c82f3b2a08d/fonttools-4.62.1-cp311-cp311-win_amd64.whl", hash = "sha256:e8514f4924375f77084e81467e63238b095abda5107620f49421c368a6017ed2", size = 2344593 }, - { url = "https://files.pythonhosted.org/packages/fd/ba/56147c165442cc5ba7e82ecf301c9a68353cede498185869e6e02b4c264f/fonttools-4.62.1-py3-none-any.whl", hash = "sha256:7487782e2113861f4ddcc07c3436450659e3caa5e470b27dc2177cade2d8e7fd", size = 1152647 }, + { url = "https://files.pythonhosted.org/packages/88/39/23ff32561ec8d45a4d48578b4d241369d9270dc50926c017570e60893701/fonttools-4.62.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:40975849bac44fb0b9253d77420c6d8b523ac4dcdcefeff6e4d706838a5b80f7", size = 2871039, upload-time = "2026-03-13T13:52:33.127Z" }, + { url = "https://files.pythonhosted.org/packages/24/7f/66d3f8a9338a9b67fe6e1739f47e1cd5cee78bd3bc1206ef9b0b982289a5/fonttools-4.62.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9dde91633f77fa576879a0c76b1d89de373cae751a98ddf0109d54e173b40f14", size = 2416346, upload-time = "2026-03-13T13:52:35.676Z" }, + { url = "https://files.pythonhosted.org/packages/aa/53/5276ceba7bff95da7793a07c5284e1da901cf00341ce5e2f3273056c0cca/fonttools-4.62.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6acb4109f8bee00fec985c8c7afb02299e35e9c94b57287f3ea542f28bd0b0a7", size = 5100897, upload-time = "2026-03-13T13:52:38.102Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a1/40a5c4d8e28b0851d53a8eeeb46fbd73c325a2a9a165f290a5ed90e6c597/fonttools-4.62.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1c5c25671ce8805e0d080e2ffdeca7f1e86778c5cbfbeae86d7f866d8830517b", size = 5071078, upload-time = "2026-03-13T13:52:41.305Z" }, + { url = "https://files.pythonhosted.org/packages/e3/be/d378fca4c65ea1956fee6d90ace6e861776809cbbc5af22388a090c3c092/fonttools-4.62.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a5d8825e1140f04e6c99bb7d37a9e31c172f3bc208afbe02175339e699c710e1", size = 5076908, upload-time = "2026-03-13T13:52:44.122Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d9/ae6a1d0693a4185a84605679c8a1f719a55df87b9c6e8e817bfdd9ef5936/fonttools-4.62.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:268abb1cb221e66c014acc234e872b7870d8b5d4657a83a8f4205094c32d2416", size = 5202275, upload-time = "2026-03-13T13:52:46.591Z" }, + { url = "https://files.pythonhosted.org/packages/54/6c/af95d9c4efb15cabff22642b608342f2bd67137eea6107202d91b5b03184/fonttools-4.62.1-cp311-cp311-win32.whl", hash = "sha256:942b03094d7edbb99bdf1ae7e9090898cad7bf9030b3d21f33d7072dbcb51a53", size = 2293075, upload-time = "2026-03-13T13:52:48.711Z" }, + { url = "https://files.pythonhosted.org/packages/d3/97/bf54c5b3f2be34e1f143e6db838dfdc54f2ffa3e68c738934c82f3b2a08d/fonttools-4.62.1-cp311-cp311-win_amd64.whl", hash = "sha256:e8514f4924375f77084e81467e63238b095abda5107620f49421c368a6017ed2", size = 2344593, upload-time = "2026-03-13T13:52:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/fd/ba/56147c165442cc5ba7e82ecf301c9a68353cede498185869e6e02b4c264f/fonttools-4.62.1-py3-none-any.whl", hash = "sha256:7487782e2113861f4ddcc07c3436450659e3caa5e470b27dc2177cade2d8e7fd", size = 1152647, upload-time = "2026-03-13T13:54:22.735Z" }, ] [[package]] name = "fqdn" version = "1.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015 } +sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015, upload-time = "2021-03-11T07:16:29.08Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121, upload-time = "2021-03-11T07:16:28.351Z" }, +] + +[[package]] +name = "frozenlist" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, + { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, + { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, + { url = "https://files.pythonhosted.org/packages/45/7e/afe40eca3a2dc19b9904c0f5d7edfe82b5304cb831391edec0ac04af94c2/frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695", size = 233160, upload-time = "2025-10-06T05:35:51.729Z" }, + { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, + { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/65872fcf1d326a7f101ad4d86285c403c87be7d832b7470b77f6d2ed5ddc/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b", size = 230886, upload-time = "2025-10-06T05:35:57.399Z" }, + { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, + { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, + { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, + { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, + { url = "https://files.pythonhosted.org/packages/95/a3/c8fb25aac55bf5e12dae5c5aa6a98f85d436c1dc658f21c3ac73f9fa95e5/frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25", size = 39647, upload-time = "2025-10-06T05:36:03.409Z" }, + { url = "https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b", size = 44064, upload-time = "2025-10-06T05:36:04.368Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/c2c9ab44e181f043a86f9a8f84d5124b62dbcb3a02c0977ec72b9ac1d3e0/frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a", size = 39937, upload-time = "2025-10-06T05:36:05.669Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, +] + +[[package]] +name = "fsspec" +version = "2025.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8b/02/0835e6ab9cfc03916fe3f78c0956cfcdb6ff2669ffa6651065d5ebf7fc98/fsspec-2025.7.0.tar.gz", hash = "sha256:786120687ffa54b8283d942929540d8bc5ccfa820deb555a2b5d0ed2b737bf58", size = 304432, upload-time = "2025-07-15T16:05:21.19Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121 }, + { url = "https://files.pythonhosted.org/packages/2f/e0/014d5d9d7a4564cf1c40b5039bc882db69fd881111e03ab3657ac0b218e2/fsspec-2025.7.0-py3-none-any.whl", hash = "sha256:8b012e39f63c7d5f10474de957f3ab793b47b45ae7d39f2fb735f8bbe25c0e21", size = 199597, upload-time = "2025-07-15T16:05:19.529Z" }, ] [[package]] @@ -493,29 +744,29 @@ name = "gamspy-base" version = "50.5.0" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/e2/b3af9281d8a941ed18bf7db80816bb7cae5ac161f8fb5d1ddef80562a4d4/gamspy_base-50.5.0-py3-none-macosx_12_0_x86_64.whl", hash = "sha256:345784c3bc5a2adf63a21a2af7e12234b0feba429d975310fb5719c34b8b8dd1", size = 27619253 }, - { url = "https://files.pythonhosted.org/packages/db/32/71726589acbdadedfdfb45f800d66d4652587e9553d098311076d5e89e29/gamspy_base-50.5.0-py3-none-macosx_13_0_arm64.whl", hash = "sha256:64144945225fa4e4729db3c77afa545f7533101dded22384d2ff763e2f6363df", size = 21607257 }, - { url = "https://files.pythonhosted.org/packages/b6/c9/9dcd6bd6b8d51a1ec47655c30c024ccd00a983925c616f3ebada472c25a9/gamspy_base-50.5.0-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:ddddaae98b566f416e86319cbdf98aed67427d16dba41c601bc3d429545f33b2", size = 23440305 }, - { url = "https://files.pythonhosted.org/packages/1b/22/17acad56e17b6dc4a6ab973dede6c2df030fe4c259e9f12780c5cecae0a5/gamspy_base-50.5.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:a495d427929a63b1d7776c2d9bfdc6cfec3df1c6890cacebfee7cf665291c32b", size = 28557743 }, - { url = "https://files.pythonhosted.org/packages/64/05/890622fcdcb0a0d729f762a53e2578e156d3ba828137f72cbfcdaaefa062/gamspy_base-50.5.0-py3-none-win_amd64.whl", hash = "sha256:dc09d7772a15f7eea362fcfdc2a9ced7c6f45dd0e7aa786d7537c2a09ae6b719", size = 36300400 }, + { url = "https://files.pythonhosted.org/packages/4a/e2/b3af9281d8a941ed18bf7db80816bb7cae5ac161f8fb5d1ddef80562a4d4/gamspy_base-50.5.0-py3-none-macosx_12_0_x86_64.whl", hash = "sha256:345784c3bc5a2adf63a21a2af7e12234b0feba429d975310fb5719c34b8b8dd1", size = 27619253, upload-time = "2025-09-19T09:08:39.269Z" }, + { url = "https://files.pythonhosted.org/packages/db/32/71726589acbdadedfdfb45f800d66d4652587e9553d098311076d5e89e29/gamspy_base-50.5.0-py3-none-macosx_13_0_arm64.whl", hash = "sha256:64144945225fa4e4729db3c77afa545f7533101dded22384d2ff763e2f6363df", size = 21607257, upload-time = "2025-09-19T09:08:21.579Z" }, + { url = "https://files.pythonhosted.org/packages/b6/c9/9dcd6bd6b8d51a1ec47655c30c024ccd00a983925c616f3ebada472c25a9/gamspy_base-50.5.0-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:ddddaae98b566f416e86319cbdf98aed67427d16dba41c601bc3d429545f33b2", size = 23440305, upload-time = "2025-09-19T09:08:30.758Z" }, + { url = "https://files.pythonhosted.org/packages/1b/22/17acad56e17b6dc4a6ab973dede6c2df030fe4c259e9f12780c5cecae0a5/gamspy_base-50.5.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:a495d427929a63b1d7776c2d9bfdc6cfec3df1c6890cacebfee7cf665291c32b", size = 28557743, upload-time = "2025-09-19T09:08:35.025Z" }, + { url = "https://files.pythonhosted.org/packages/64/05/890622fcdcb0a0d729f762a53e2578e156d3ba828137f72cbfcdaaefa062/gamspy_base-50.5.0-py3-none-win_amd64.whl", hash = "sha256:dc09d7772a15f7eea362fcfdc2a9ced7c6f45dd0e7aa786d7537c2a09ae6b719", size = 36300400, upload-time = "2025-09-19T09:08:26.525Z" }, ] [[package]] name = "gdxcc" version = "8.33.2.post1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/e4/313721ff961d49f2422b72c41090e7da20e43d810e0ba6b82ef41b43adf3/gdxcc-8.33.2.post1.tar.gz", hash = "sha256:a4a26f0a92e04a9e90e6e8159468676a7f6bb1036b64869240659d8dd5b49053", size = 70521 } +sdist = { url = "https://files.pythonhosted.org/packages/ca/e4/313721ff961d49f2422b72c41090e7da20e43d810e0ba6b82ef41b43adf3/gdxcc-8.33.2.post1.tar.gz", hash = "sha256:a4a26f0a92e04a9e90e6e8159468676a7f6bb1036b64869240659d8dd5b49053", size = 70521, upload-time = "2021-05-21T07:22:30.064Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/85/33/7ea7496305bfd0a5ab7d29ccdbc5130aee77f9e07137f19675f183ccf4fe/gdxcc-8.33.2.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c2e13ae1cf5df31a97fe231684ea938df2679c28a00ee6e478424badc68904c5", size = 144485 }, - { url = "https://files.pythonhosted.org/packages/ed/04/8509fee5393a2dff9ae341446a8b3e8d86afc7845cd24a594f861e0cfab3/gdxcc-8.33.2.post1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75d69469dd2a110525ca3b706c01554a9d0c84135600fe82ae66bca727f0b63e", size = 138721 }, - { url = "https://files.pythonhosted.org/packages/32/4c/a42b3c5b8ab4e60df826040ad90dcd8505c02be39947ef3a1c9bb04c83d9/gdxcc-8.33.2.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5158fdb82f9f93e166cfdf7b5f953329c003f80bf454638df8c5340af06d5bf", size = 414077 }, - { url = "https://files.pythonhosted.org/packages/fb/28/9a94e168bbe78366913a8c085c672201ef4a13bba6dd1b47503100559ffa/gdxcc-8.33.2.post1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cbcd055624b17fbc6d8ec3353b7594b658df30ab40d373ad71822f856b3de1ba", size = 371571 }, - { url = "https://files.pythonhosted.org/packages/15/28/3e9ee2a8fcbc3700d8a3572771b0c42351217b3c453792eca016914fa41c/gdxcc-8.33.2.post1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7498914db3670e9644f6fbcc366e1cf7569207e44febc3e9403de4205bc100b0", size = 383702 }, - { url = "https://files.pythonhosted.org/packages/51/1c/730ffeec51acc75c9f8f999bf929ff0bab97f5fa31134465471e267a2940/gdxcc-8.33.2.post1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f5c5a174339c7c43ff1c387b0af4156fe3713c1e478b8ec10d7b9a2c6c76eb30", size = 427767 }, - { url = "https://files.pythonhosted.org/packages/60/9b/7cecc1c611e44f5a7ee221b12444daaffe52f6c8318b1024194598595151/gdxcc-8.33.2.post1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:78059bf9661de541909cc7253d1a4dec676f908388c58a956a2d504b50f97179", size = 382692 }, - { url = "https://files.pythonhosted.org/packages/61/cb/1243e0308a6b862ec0a43e467380035bc346737c6a426d29d474f7b590b7/gdxcc-8.33.2.post1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ce34ebbdcedfe24f9fd9541c218a9ed35a48cfbbb2915f5beb9fb4e376eccd10", size = 409305 }, - { url = "https://files.pythonhosted.org/packages/dd/6a/718ff373c4f034f9b0400e511decdf358440badd2757727e5238d79e55cf/gdxcc-8.33.2.post1-cp311-cp311-win32.whl", hash = "sha256:66b5058aba4bd2ba7ed89199a7bd963919061a02260288e8e56c1091caf23399", size = 129619 }, - { url = "https://files.pythonhosted.org/packages/c1/f4/c83616b01bd249af963d524b328c9387c1fbabb1e9c75fa301662f39aa66/gdxcc-8.33.2.post1-cp311-cp311-win_amd64.whl", hash = "sha256:0a49700d74bd84ee6a9211431e399b1bbe8504ee7058b0caaab5b78c86a831a7", size = 144724 }, + { url = "https://files.pythonhosted.org/packages/85/33/7ea7496305bfd0a5ab7d29ccdbc5130aee77f9e07137f19675f183ccf4fe/gdxcc-8.33.2.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c2e13ae1cf5df31a97fe231684ea938df2679c28a00ee6e478424badc68904c5", size = 144485, upload-time = "2023-03-13T20:08:51.647Z" }, + { url = "https://files.pythonhosted.org/packages/ed/04/8509fee5393a2dff9ae341446a8b3e8d86afc7845cd24a594f861e0cfab3/gdxcc-8.33.2.post1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75d69469dd2a110525ca3b706c01554a9d0c84135600fe82ae66bca727f0b63e", size = 138721, upload-time = "2024-11-21T19:07:35.781Z" }, + { url = "https://files.pythonhosted.org/packages/32/4c/a42b3c5b8ab4e60df826040ad90dcd8505c02be39947ef3a1c9bb04c83d9/gdxcc-8.33.2.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5158fdb82f9f93e166cfdf7b5f953329c003f80bf454638df8c5340af06d5bf", size = 414077, upload-time = "2023-03-13T20:08:53.759Z" }, + { url = "https://files.pythonhosted.org/packages/fb/28/9a94e168bbe78366913a8c085c672201ef4a13bba6dd1b47503100559ffa/gdxcc-8.33.2.post1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cbcd055624b17fbc6d8ec3353b7594b658df30ab40d373ad71822f856b3de1ba", size = 371571, upload-time = "2023-03-13T20:08:55.603Z" }, + { url = "https://files.pythonhosted.org/packages/15/28/3e9ee2a8fcbc3700d8a3572771b0c42351217b3c453792eca016914fa41c/gdxcc-8.33.2.post1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7498914db3670e9644f6fbcc366e1cf7569207e44febc3e9403de4205bc100b0", size = 383702, upload-time = "2023-03-13T20:08:57.477Z" }, + { url = "https://files.pythonhosted.org/packages/51/1c/730ffeec51acc75c9f8f999bf929ff0bab97f5fa31134465471e267a2940/gdxcc-8.33.2.post1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f5c5a174339c7c43ff1c387b0af4156fe3713c1e478b8ec10d7b9a2c6c76eb30", size = 427767, upload-time = "2023-03-13T20:08:59.935Z" }, + { url = "https://files.pythonhosted.org/packages/60/9b/7cecc1c611e44f5a7ee221b12444daaffe52f6c8318b1024194598595151/gdxcc-8.33.2.post1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:78059bf9661de541909cc7253d1a4dec676f908388c58a956a2d504b50f97179", size = 382692, upload-time = "2024-11-21T19:07:38.614Z" }, + { url = "https://files.pythonhosted.org/packages/61/cb/1243e0308a6b862ec0a43e467380035bc346737c6a426d29d474f7b590b7/gdxcc-8.33.2.post1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ce34ebbdcedfe24f9fd9541c218a9ed35a48cfbbb2915f5beb9fb4e376eccd10", size = 409305, upload-time = "2024-11-21T19:07:41.564Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6a/718ff373c4f034f9b0400e511decdf358440badd2757727e5238d79e55cf/gdxcc-8.33.2.post1-cp311-cp311-win32.whl", hash = "sha256:66b5058aba4bd2ba7ed89199a7bd963919061a02260288e8e56c1091caf23399", size = 129619, upload-time = "2023-03-13T20:09:01.403Z" }, + { url = "https://files.pythonhosted.org/packages/c1/f4/c83616b01bd249af963d524b328c9387c1fbabb1e9c75fa301662f39aa66/gdxcc-8.33.2.post1-cp311-cp311-win_amd64.whl", hash = "sha256:0a49700d74bd84ee6a9211431e399b1bbe8504ee7058b0caaab5b78c86a831a7", size = 144724, upload-time = "2023-03-13T20:09:03.589Z" }, ] [[package]] @@ -527,7 +778,7 @@ dependencies = [ { name = "numpy" }, { name = "pandas" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/24/8e/8cb2a5ab8118367a107a1c230e0e983ab1288e6fb960cc18a09ac9ee22dd/gdxpds-1.4.0.tar.gz", hash = "sha256:3956e9fefec844d2727b11c43f5276a25fb2540ff6e4eb3e085239422f5ef2be", size = 645945 } +sdist = { url = "https://files.pythonhosted.org/packages/24/8e/8cb2a5ab8118367a107a1c230e0e983ab1288e6fb960cc18a09ac9ee22dd/gdxpds-1.4.0.tar.gz", hash = "sha256:3956e9fefec844d2727b11c43f5276a25fb2540ff6e4eb3e085239422f5ef2be", size = 645945, upload-time = "2023-07-21T23:10:36.523Z" } [[package]] name = "geopandas" @@ -540,9 +791,9 @@ dependencies = [ { name = "pyproj" }, { name = "shapely" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f1/02/5cf0414db0922448819a05c5cbca5cd70a5e3fd2e58f08f7484e5d09c393/geopandas-0.14.0.tar.gz", hash = "sha256:ea6c031889e1e1888aecaa6e182ca620d78f63551c49b3002a998bcbb280531f", size = 1100371 } +sdist = { url = "https://files.pythonhosted.org/packages/f1/02/5cf0414db0922448819a05c5cbca5cd70a5e3fd2e58f08f7484e5d09c393/geopandas-0.14.0.tar.gz", hash = "sha256:ea6c031889e1e1888aecaa6e182ca620d78f63551c49b3002a998bcbb280531f", size = 1100371, upload-time = "2023-09-15T08:26:18.112Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/27/2687abaa2ac02b5814e2929a5033da1e5d132c19a904dc56f77f63fd6eb9/geopandas-0.14.0-py3-none-any.whl", hash = "sha256:a402a565e727642cb44a500c911f226eea26c1b1247c6586827031e3d7a9403a", size = 1103231 }, + { url = "https://files.pythonhosted.org/packages/27/27/2687abaa2ac02b5814e2929a5033da1e5d132c19a904dc56f77f63fd6eb9/geopandas-0.14.0-py3-none-any.whl", hash = "sha256:a402a565e727642cb44a500c911f226eea26c1b1247c6586827031e3d7a9403a", size = 1103231, upload-time = "2023-09-15T08:26:16.102Z" }, ] [[package]] @@ -552,9 +803,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "smmap" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684 } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload-time = "2025-01-02T07:20:46.413Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794 }, + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload-time = "2025-01-02T07:20:43.624Z" }, ] [[package]] @@ -564,9 +815,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "gitdb" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e1/63/210aaa302d6a0a78daa67c5c15bbac2cad361722841278b0209b6da20855/gitpython-3.1.49.tar.gz", hash = "sha256:42f9399c9eb33fc581014bedd76049dfbaf6375aa2a5754575966387280315e1", size = 219367 } +sdist = { url = "https://files.pythonhosted.org/packages/e1/63/210aaa302d6a0a78daa67c5c15bbac2cad361722841278b0209b6da20855/gitpython-3.1.49.tar.gz", hash = "sha256:42f9399c9eb33fc581014bedd76049dfbaf6375aa2a5754575966387280315e1", size = 219367, upload-time = "2026-04-29T00:31:20.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/6f/b842bfa6f21d6f87c57f9abf7194225e55279d96d869775e19e9f7236fc5/gitpython-3.1.49-py3-none-any.whl", hash = "sha256:024b0422d7f84d15cd794844e029ffebd4c5d42a7eb9b936b458697ef550a02c", size = 212190 }, + { url = "https://files.pythonhosted.org/packages/fd/6f/b842bfa6f21d6f87c57f9abf7194225e55279d96d869775e19e9f7236fc5/gitpython-3.1.49-py3-none-any.whl", hash = "sha256:024b0422d7f84d15cd794844e029ffebd4c5d42a7eb9b936b458697ef550a02c", size = 212190, upload-time = "2026-04-29T00:31:18.412Z" }, ] [[package]] @@ -576,40 +827,40 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/57/ea/e59bf321fdbfed5ada0b856b3ed1d319733adaebe55aeb132673b5aa8501/h5py-3.9.0.tar.gz", hash = "sha256:e604db6521c1e367c6bd7fad239c847f53cc46646f2d2651372d05ae5e95f817", size = 402856 } +sdist = { url = "https://files.pythonhosted.org/packages/57/ea/e59bf321fdbfed5ada0b856b3ed1d319733adaebe55aeb132673b5aa8501/h5py-3.9.0.tar.gz", hash = "sha256:e604db6521c1e367c6bd7fad239c847f53cc46646f2d2651372d05ae5e95f817", size = 402856, upload-time = "2023-06-20T09:18:30.106Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/06/3e/935ebbd6cccd0b7965aaaceebabce979e032f15eacfeca12276e790a3e8b/h5py-3.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:551e358db05a874a0f827b22e95b30092f2303edc4b91bb62ad2f10e0236e1a0", size = 3211045 }, - { url = "https://files.pythonhosted.org/packages/37/82/859d9fc800a316e692bd040437d45613512b43d49fb0435c5bbab9e71511/h5py-3.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6822a814b9d8b8363ff102f76ea8d026f0ca25850bb579d85376029ee3e73b93", size = 2632919 }, - { url = "https://files.pythonhosted.org/packages/a3/0e/5f727157ba25c5d48c535c8e8a88fa6ea7938c093c3bb5aa9909e8af6b7d/h5py-3.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f01202cdea754ab4227dd27014bdbd561a4bbe4b631424fd812f7c2ce9c6ac", size = 8968961 }, - { url = "https://files.pythonhosted.org/packages/a7/d9/ac660616671e30d70c091e46ed4fdc50df48ca79b1ac99df5499a45de128/h5py-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64acceaf6aff92af091a4b83f6dee3cf8d3061f924a6bb3a33eb6c4658a8348b", size = 4774189 }, - { url = "https://files.pythonhosted.org/packages/d1/93/0f4cf5058095d749d464e4f770d2bf339930e5f3374331f0d2fa6ddfbf28/h5py-3.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:804c7fb42a34c8ab3a3001901c977a5c24d2e9c586a0f3e7c0a389130b4276fc", size = 2650517 }, + { url = "https://files.pythonhosted.org/packages/06/3e/935ebbd6cccd0b7965aaaceebabce979e032f15eacfeca12276e790a3e8b/h5py-3.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:551e358db05a874a0f827b22e95b30092f2303edc4b91bb62ad2f10e0236e1a0", size = 3211045, upload-time = "2023-06-20T09:16:55.275Z" }, + { url = "https://files.pythonhosted.org/packages/37/82/859d9fc800a316e692bd040437d45613512b43d49fb0435c5bbab9e71511/h5py-3.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6822a814b9d8b8363ff102f76ea8d026f0ca25850bb579d85376029ee3e73b93", size = 2632919, upload-time = "2023-06-20T09:16:59.302Z" }, + { url = "https://files.pythonhosted.org/packages/a3/0e/5f727157ba25c5d48c535c8e8a88fa6ea7938c093c3bb5aa9909e8af6b7d/h5py-3.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f01202cdea754ab4227dd27014bdbd561a4bbe4b631424fd812f7c2ce9c6ac", size = 8968961, upload-time = "2023-06-20T09:17:08.79Z" }, + { url = "https://files.pythonhosted.org/packages/a7/d9/ac660616671e30d70c091e46ed4fdc50df48ca79b1ac99df5499a45de128/h5py-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64acceaf6aff92af091a4b83f6dee3cf8d3061f924a6bb3a33eb6c4658a8348b", size = 4774189, upload-time = "2023-06-20T09:17:20.601Z" }, + { url = "https://files.pythonhosted.org/packages/d1/93/0f4cf5058095d749d464e4f770d2bf339930e5f3374331f0d2fa6ddfbf28/h5py-3.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:804c7fb42a34c8ab3a3001901c977a5c24d2e9c586a0f3e7c0a389130b4276fc", size = 2650517, upload-time = "2023-06-20T09:17:24.934Z" }, ] [[package]] name = "idna" version = "3.13" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ce/cc/762dfb036166873f0059f3b7de4565e1b5bc3d6f28a414c13da27e442f99/idna-3.13.tar.gz", hash = "sha256:585ea8fe5d69b9181ec1afba340451fba6ba764af97026f92a91d4eef164a242", size = 194210 } +sdist = { url = "https://files.pythonhosted.org/packages/ce/cc/762dfb036166873f0059f3b7de4565e1b5bc3d6f28a414c13da27e442f99/idna-3.13.tar.gz", hash = "sha256:585ea8fe5d69b9181ec1afba340451fba6ba764af97026f92a91d4eef164a242", size = 194210, upload-time = "2026-04-22T16:42:42.314Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/13/ad7d7ca3808a898b4612b6fe93cde56b53f3034dcde235acb1f0e1df24c6/idna-3.13-py3-none-any.whl", hash = "sha256:892ea0cde124a99ce773decba204c5552b69c3c67ffd5f232eb7696135bc8bb3", size = 68629 }, + { url = "https://files.pythonhosted.org/packages/5d/13/ad7d7ca3808a898b4612b6fe93cde56b53f3034dcde235acb1f0e1df24c6/idna-3.13-py3-none-any.whl", hash = "sha256:892ea0cde124a99ce773decba204c5552b69c3c67ffd5f232eb7696135bc8bb3", size = 68629, upload-time = "2026-04-22T16:42:40.909Z" }, ] [[package]] name = "imagesize" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/e6/7bf14eeb8f8b7251141944835abd42eb20a658d89084b7e1f3e5fe394090/imagesize-2.0.0.tar.gz", hash = "sha256:8e8358c4a05c304f1fccf7ff96f036e7243a189e9e42e90851993c558cfe9ee3", size = 1773045 } +sdist = { url = "https://files.pythonhosted.org/packages/6c/e6/7bf14eeb8f8b7251141944835abd42eb20a658d89084b7e1f3e5fe394090/imagesize-2.0.0.tar.gz", hash = "sha256:8e8358c4a05c304f1fccf7ff96f036e7243a189e9e42e90851993c558cfe9ee3", size = 1773045, upload-time = "2026-03-03T14:18:29.941Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl", hash = "sha256:5667c5bbb57ab3f1fa4bc366f4fbc971db3d5ed011fd2715fd8001f782718d96", size = 9441 }, + { url = "https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl", hash = "sha256:5667c5bbb57ab3f1fa4bc366f4fbc971db3d5ed011fd2715fd8001f782718d96", size = 9441, upload-time = "2026-03-03T14:18:27.892Z" }, ] [[package]] name = "iniconfig" version = "2.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503 } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484 }, + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, ] [[package]] @@ -631,9 +882,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8b/4a/3c1ba010e1517191eefb9f2fc556a3aed146b8c4e65708aed3ad17e803c5/ipykernel-6.25.2.tar.gz", hash = "sha256:f468ddd1f17acb48c8ce67fcfa49ba6d46d4f9ac0438c1f441be7c3d1372230b", size = 156247 } +sdist = { url = "https://files.pythonhosted.org/packages/8b/4a/3c1ba010e1517191eefb9f2fc556a3aed146b8c4e65708aed3ad17e803c5/ipykernel-6.25.2.tar.gz", hash = "sha256:f468ddd1f17acb48c8ce67fcfa49ba6d46d4f9ac0438c1f441be7c3d1372230b", size = 156247, upload-time = "2023-09-04T16:37:30.39Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/e3/70fb6e6bdd42cb0586d6b6680713997d2a9dc46642aec207ca04d0df80b8/ipykernel-6.25.2-py3-none-any.whl", hash = "sha256:2e2ee359baba19f10251b99415bb39de1e97d04e1fab385646f24f0596510b77", size = 154150 }, + { url = "https://files.pythonhosted.org/packages/94/e3/70fb6e6bdd42cb0586d6b6680713997d2a9dc46642aec207ca04d0df80b8/ipykernel-6.25.2-py3-none-any.whl", hash = "sha256:2e2ee359baba19f10251b99415bb39de1e97d04e1fab385646f24f0596510b77", size = 154150, upload-time = "2023-09-04T16:37:28.022Z" }, ] [[package]] @@ -654,18 +905,18 @@ dependencies = [ { name = "traitlets" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cd/c4/87cda5842cf5c31837c06ddb588e11c3c35d8ece89b7a0108c06b8c9b00a/ipython-9.13.0.tar.gz", hash = "sha256:7e834b6afc99f020e3f05966ced34792f40267d64cb1ea9043886dab0dde5967", size = 4430549 } +sdist = { url = "https://files.pythonhosted.org/packages/cd/c4/87cda5842cf5c31837c06ddb588e11c3c35d8ece89b7a0108c06b8c9b00a/ipython-9.13.0.tar.gz", hash = "sha256:7e834b6afc99f020e3f05966ced34792f40267d64cb1ea9043886dab0dde5967", size = 4430549, upload-time = "2026-04-24T12:24:55.221Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/86/3060e8029b7cc505cce9a0137431dda81d0a3fde93a8f0f50ee0bf37a795/ipython-9.13.0-py3-none-any.whl", hash = "sha256:57f9d4639e20818d328d287c7b549af3d05f12486ea8f2e7f73e52a36ec4d201", size = 627274 }, + { url = "https://files.pythonhosted.org/packages/b9/86/3060e8029b7cc505cce9a0137431dda81d0a3fde93a8f0f50ee0bf37a795/ipython-9.13.0-py3-none-any.whl", hash = "sha256:57f9d4639e20818d328d287c7b549af3d05f12486ea8f2e7f73e52a36ec4d201", size = 627274, upload-time = "2026-04-24T12:24:53.038Z" }, ] [[package]] name = "ipython-genutils" version = "0.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/69/fbeffffc05236398ebfcfb512b6d2511c622871dca1746361006da310399/ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8", size = 22208 } +sdist = { url = "https://files.pythonhosted.org/packages/e8/69/fbeffffc05236398ebfcfb512b6d2511c622871dca1746361006da310399/ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8", size = 22208, upload-time = "2017-03-13T22:12:26.393Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/bc/9bd3b5c2b4774d5f33b2d544f1460be9df7df2fe42f352135381c347c69a/ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8", size = 26343 }, + { url = "https://files.pythonhosted.org/packages/fa/bc/9bd3b5c2b4774d5f33b2d544f1460be9df7df2fe42f352135381c347c69a/ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8", size = 26343, upload-time = "2017-03-13T22:12:25.412Z" }, ] [[package]] @@ -675,9 +926,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" }, ] [[package]] @@ -691,9 +942,18 @@ dependencies = [ { name = "traitlets" }, { name = "widgetsnbextension" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/93/7c/d88ab96dfeafdbd0669ff52879032631757a9ec51693baff17b3487d502f/ipywidgets-8.0.7.tar.gz", hash = "sha256:50ace0a8886e9a0d68b980db82f94c25d55d21ff2340ed36f802dd9365e94acf", size = 115457 } +sdist = { url = "https://files.pythonhosted.org/packages/93/7c/d88ab96dfeafdbd0669ff52879032631757a9ec51693baff17b3487d502f/ipywidgets-8.0.7.tar.gz", hash = "sha256:50ace0a8886e9a0d68b980db82f94c25d55d21ff2340ed36f802dd9365e94acf", size = 115457, upload-time = "2023-07-04T15:10:07.025Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/af/9d5f256025100b578b11d7280e76fda349255666f752b618a613785cb58d/ipywidgets-8.0.7-py3-none-any.whl", hash = "sha256:e0aed0c95a1e55b6a123f64305245578bdc09e52965a34941c2b6a578b8c64a0", size = 138302, upload-time = "2023-07-04T15:10:04.375Z" }, +] + +[[package]] +name = "isodate" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload-time = "2024-10-08T23:04:11.5Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/af/9d5f256025100b578b11d7280e76fda349255666f752b618a613785cb58d/ipywidgets-8.0.7-py3-none-any.whl", hash = "sha256:e0aed0c95a1e55b6a123f64305245578bdc09e52965a34941c2b6a578b8c64a0", size = 138302 }, + { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload-time = "2024-10-08T23:04:09.501Z" }, ] [[package]] @@ -703,9 +963,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "arrow" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7c/1a/3c8edc664e06e6bd06cce40c6b22da5f1429aa4224d0c590f3be21c91ead/isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", size = 11649 } +sdist = { url = "https://files.pythonhosted.org/packages/7c/1a/3c8edc664e06e6bd06cce40c6b22da5f1429aa4224d0c590f3be21c91ead/isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", size = 11649, upload-time = "2020-11-01T11:00:00.312Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042", size = 11321 }, + { url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042", size = 11321, upload-time = "2020-11-01T10:59:58.02Z" }, ] [[package]] @@ -715,9 +975,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "parso" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/46/b7/a3635f6a2d7cf5b5dd98064fc1d5fbbafcb25477bcea204a3a92145d158b/jedi-0.20.0.tar.gz", hash = "sha256:c3f4ccbd276696f4b19c54618d4fb18f9fc24b0aef02acf704b23f487daa1011", size = 3119416 } +sdist = { url = "https://files.pythonhosted.org/packages/46/b7/a3635f6a2d7cf5b5dd98064fc1d5fbbafcb25477bcea204a3a92145d158b/jedi-0.20.0.tar.gz", hash = "sha256:c3f4ccbd276696f4b19c54618d4fb18f9fc24b0aef02acf704b23f487daa1011", size = 3119416, upload-time = "2026-05-01T23:38:47.814Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl", hash = "sha256:7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67", size = 4884812 }, + { url = "https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl", hash = "sha256:7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67", size = 4884812, upload-time = "2026-05-01T23:38:43.919Z" }, ] [[package]] @@ -727,27 +987,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "jmespath" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/59/322338183ecda247fb5d1763a6cbe46eff7222eaeebafd9fa65d4bf5cb11/jmespath-1.1.0.tar.gz", hash = "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", size = 27377, upload-time = "2026-01-22T16:35:26.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl", hash = "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64", size = 20419, upload-time = "2026-01-22T16:35:24.919Z" }, ] [[package]] name = "joblib" version = "1.5.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/41/f2/d34e8b3a08a9cc79a50b2208a93dce981fe615b64d5a4d4abee421d898df/joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3", size = 331603 } +sdist = { url = "https://files.pythonhosted.org/packages/41/f2/d34e8b3a08a9cc79a50b2208a93dce981fe615b64d5a4d4abee421d898df/joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3", size = 331603, upload-time = "2025-12-15T08:41:46.427Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713", size = 309071 }, + { url = "https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713", size = 309071, upload-time = "2025-12-15T08:41:44.973Z" }, ] [[package]] name = "jsonpointer" version = "3.1.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/c7/af399a2e7a67fd18d63c40c5e62d3af4e67b836a2107468b6a5ea24c4304/jsonpointer-3.1.1.tar.gz", hash = "sha256:0b801c7db33a904024f6004d526dcc53bbb8a4a0f4e32bfd10beadf60adf1900", size = 9068 } +sdist = { url = "https://files.pythonhosted.org/packages/18/c7/af399a2e7a67fd18d63c40c5e62d3af4e67b836a2107468b6a5ea24c4304/jsonpointer-3.1.1.tar.gz", hash = "sha256:0b801c7db33a904024f6004d526dcc53bbb8a4a0f4e32bfd10beadf60adf1900", size = 9068, upload-time = "2026-03-23T22:32:32.458Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659 }, + { url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659, upload-time = "2026-03-23T22:32:31.568Z" }, ] [[package]] @@ -760,9 +1029,9 @@ dependencies = [ { name = "referencing" }, { name = "rpds-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583 } +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630 }, + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, ] [package.optional-dependencies] @@ -785,9 +1054,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "referencing" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855 } +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437 }, + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, ] [[package]] @@ -803,9 +1072,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1e/33/71778cdd2c69445bcd3bb6029da2e43cc9b5cbbeef4f4982ef3aaf396650/jupyter_client-7.4.9.tar.gz", hash = "sha256:52be28e04171f07aed8f20e1616a5a552ab9fee9cbbe6c1896ae170c3880d392", size = 329115 } +sdist = { url = "https://files.pythonhosted.org/packages/1e/33/71778cdd2c69445bcd3bb6029da2e43cc9b5cbbeef4f4982ef3aaf396650/jupyter_client-7.4.9.tar.gz", hash = "sha256:52be28e04171f07aed8f20e1616a5a552ab9fee9cbbe6c1896ae170c3880d392", size = 329115, upload-time = "2023-01-12T20:05:10.58Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/a7/ef3b7c8b9d6730a21febdd0809084e4cea6d2a7e43892436adecdd0acbd4/jupyter_client-7.4.9-py3-none-any.whl", hash = "sha256:214668aaea208195f4c13d28eb272ba79f945fc0cf3f11c7092c20b2ca1980e7", size = 133492 }, + { url = "https://files.pythonhosted.org/packages/fd/a7/ef3b7c8b9d6730a21febdd0809084e4cea6d2a7e43892436adecdd0acbd4/jupyter_client-7.4.9-py3-none-any.whl", hash = "sha256:214668aaea208195f4c13d28eb272ba79f945fc0cf3f11c7092c20b2ca1980e7", size = 133492, upload-time = "2023-01-12T20:05:08.044Z" }, ] [[package]] @@ -816,9 +1085,9 @@ dependencies = [ { name = "platformdirs" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814 } +sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814, upload-time = "2025-10-16T19:19:18.444Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032 }, + { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032, upload-time = "2025-10-16T19:19:16.783Z" }, ] [[package]] @@ -835,9 +1104,9 @@ dependencies = [ { name = "rfc3986-validator" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/f8/475c4241b2b75af0deaae453ed003c6c851766dbc44d332d8baf245dc931/jupyter_events-0.12.1.tar.gz", hash = "sha256:faff25f77218335752f35f23c5fe6e4a392a7bd99a5939ccb9b8fbf594636cf3", size = 62854 } +sdist = { url = "https://files.pythonhosted.org/packages/18/f8/475c4241b2b75af0deaae453ed003c6c851766dbc44d332d8baf245dc931/jupyter_events-0.12.1.tar.gz", hash = "sha256:faff25f77218335752f35f23c5fe6e4a392a7bd99a5939ccb9b8fbf594636cf3", size = 62854, upload-time = "2026-04-20T23:17:50.66Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/6c/6fcde0c8f616ed360ffd3587f7db9e225a7e62b583a04494d2f069cf64ea/jupyter_events-0.12.1-py3-none-any.whl", hash = "sha256:c366585253f537a627da52fa7ca7410c5b5301fe893f511e7b077c2d93ec8bcf", size = 19512 }, + { url = "https://files.pythonhosted.org/packages/eb/6c/6fcde0c8f616ed360ffd3587f7db9e225a7e62b583a04494d2f069cf64ea/jupyter_events-0.12.1-py3-none-any.whl", hash = "sha256:c366585253f537a627da52fa7ca7410c5b5301fe893f511e7b077c2d93ec8bcf", size = 19512, upload-time = "2026-04-20T23:17:48.927Z" }, ] [[package]] @@ -865,9 +1134,9 @@ dependencies = [ { name = "traitlets" }, { name = "websocket-client" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/33/b0/666586d557a71a58cd9960b154fb9aee0ed81dd62a50371195ab95731909/jupyter_server-2.18.1.tar.gz", hash = "sha256:f62be526369b791625e03bd658070563c1a4e9a0a2f439ea1f9dbacea5f7191a", size = 752024 } +sdist = { url = "https://files.pythonhosted.org/packages/33/b0/666586d557a71a58cd9960b154fb9aee0ed81dd62a50371195ab95731909/jupyter_server-2.18.1.tar.gz", hash = "sha256:f62be526369b791625e03bd658070563c1a4e9a0a2f439ea1f9dbacea5f7191a", size = 752024, upload-time = "2026-05-05T09:17:51.101Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/45/bfe3779fd06714a379128f2c4eaf7c99414f0eb081f9f34c135f6b3d511c/jupyter_server-2.18.1-py3-none-any.whl", hash = "sha256:db0374d52a975f88a92a7f20de44e08ef5be9763ba7e99630baf16c46ac8dbf0", size = 391844 }, + { url = "https://files.pythonhosted.org/packages/a4/45/bfe3779fd06714a379128f2c4eaf7c99414f0eb081f9f34c135f6b3d511c/jupyter_server-2.18.1-py3-none-any.whl", hash = "sha256:db0374d52a975f88a92a7f20de44e08ef5be9763ba7e99630baf16c46ac8dbf0", size = 391844, upload-time = "2026-05-05T09:17:48.521Z" }, ] [[package]] @@ -878,103 +1147,103 @@ dependencies = [ { name = "pywinpty", marker = "os_name == 'nt'" }, { name = "terminado" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f4/a7/bcd0a9b0cbba88986fe944aaaf91bfda603e5a50bda8ed15123f381a3b2f/jupyter_server_terminals-0.5.4.tar.gz", hash = "sha256:bbda128ed41d0be9020349f9f1f2a4ab9952a73ed5f5ac9f1419794761fb87f5", size = 31770 } +sdist = { url = "https://files.pythonhosted.org/packages/f4/a7/bcd0a9b0cbba88986fe944aaaf91bfda603e5a50bda8ed15123f381a3b2f/jupyter_server_terminals-0.5.4.tar.gz", hash = "sha256:bbda128ed41d0be9020349f9f1f2a4ab9952a73ed5f5ac9f1419794761fb87f5", size = 31770, upload-time = "2026-01-14T16:53:20.213Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl", hash = "sha256:55be353fc74a80bc7f3b20e6be50a55a61cd525626f578dcb66a5708e2007d14", size = 13704 }, + { url = "https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl", hash = "sha256:55be353fc74a80bc7f3b20e6be50a55a61cd525626f578dcb66a5708e2007d14", size = 13704, upload-time = "2026-01-14T16:53:18.738Z" }, ] [[package]] name = "jupyterlab-pygments" version = "0.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900 } +sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900, upload-time = "2023-11-23T09:26:37.44Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884 }, + { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884, upload-time = "2023-11-23T09:26:34.325Z" }, ] [[package]] name = "jupyterlab-widgets" version = "3.0.16" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/26/2d/ef58fed122b268c69c0aa099da20bc67657cdfb2e222688d5731bd5b971d/jupyterlab_widgets-3.0.16.tar.gz", hash = "sha256:423da05071d55cf27a9e602216d35a3a65a3e41cdf9c5d3b643b814ce38c19e0", size = 897423 } +sdist = { url = "https://files.pythonhosted.org/packages/26/2d/ef58fed122b268c69c0aa099da20bc67657cdfb2e222688d5731bd5b971d/jupyterlab_widgets-3.0.16.tar.gz", hash = "sha256:423da05071d55cf27a9e602216d35a3a65a3e41cdf9c5d3b643b814ce38c19e0", size = 897423, upload-time = "2025-11-01T21:11:29.724Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl", hash = "sha256:45fa36d9c6422cf2559198e4db481aa243c7a32d9926b500781c830c80f7ecf8", size = 914926 }, + { url = "https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl", hash = "sha256:45fa36d9c6422cf2559198e4db481aa243c7a32d9926b500781c830c80f7ecf8", size = 914926, upload-time = "2025-11-01T21:11:28.008Z" }, ] [[package]] name = "kiwisolver" version = "1.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/67/9c61eccb13f0bdca9307614e782fec49ffdde0f7a2314935d489fa93cd9c/kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a", size = 103482 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/12/dd/a495a9c104be1c476f0386e714252caf2b7eca883915422a64c50b88c6f5/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9eed0f7edbb274413b6ee781cca50541c8c0facd3d6fd289779e494340a2b85c", size = 122798 }, - { url = "https://files.pythonhosted.org/packages/11/60/37b4047a2af0cf5ef6d8b4b26e91829ae6fc6a2d1f74524bcb0e7cd28a32/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c4923e404d6bcd91b6779c009542e5647fef32e4a5d75e115e3bbac6f2335eb", size = 66216 }, - { url = "https://files.pythonhosted.org/packages/0a/aa/510dc933d87767584abfe03efa445889996c70c2990f6f87c3ebaa0a18c5/kiwisolver-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0df54df7e686afa55e6f21fb86195224a6d9beb71d637e8d7920c95cf0f89aac", size = 63911 }, - { url = "https://files.pythonhosted.org/packages/80/46/bddc13df6c2a40741e0cc7865bb1c9ed4796b6760bd04ce5fae3928ef917/kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27", size = 1438209 }, - { url = "https://files.pythonhosted.org/packages/fd/d6/76621246f5165e5372f02f5e6f3f48ea336a8f9e96e43997d45b240ed8cd/kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff710414307fefa903e0d9bdf300972f892c23477829f49504e59834f4195398", size = 1248888 }, - { url = "https://files.pythonhosted.org/packages/b2/c1/31559ec6fb39a5b48035ce29bb63ade628f321785f38c384dee3e2c08bc1/kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6176c1811d9d5a04fa391c490cc44f451e240697a16977f11c6f722efb9041db", size = 1266304 }, - { url = "https://files.pythonhosted.org/packages/5e/ef/1cb8276f2d29cc6a41e0a042f27946ca347d3a4a75acf85d0a16aa6dcc82/kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50847dca5d197fcbd389c805aa1a1cf32f25d2e7273dc47ab181a517666b68cc", size = 1319650 }, - { url = "https://files.pythonhosted.org/packages/4c/e4/5ba3cecd7ce6236ae4a80f67e5d5531287337d0e1f076ca87a5abe4cd5d0/kiwisolver-1.5.0-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:01808c6d15f4c3e8559595d6d1fe6411c68e4a3822b4b9972b44473b24f4e679", size = 970949 }, - { url = "https://files.pythonhosted.org/packages/5a/69/dc61f7ae9a2f071f26004ced87f078235b5507ab6e5acd78f40365655034/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f1f9f4121ec58628c96baa3de1a55a4e3a333c5102c8e94b64e23bf7b2083309", size = 2199125 }, - { url = "https://files.pythonhosted.org/packages/e5/7b/abbe0f1b5afa85f8d084b73e90e5f801c0939eba16ac2e49af7c61a6c28d/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b7d335370ae48a780c6e6a6bbfa97342f563744c39c35562f3f367665f5c1de2", size = 2293783 }, - { url = "https://files.pythonhosted.org/packages/8a/80/5908ae149d96d81580d604c7f8aefd0e98f4fd728cf172f477e9f2a81744/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:800ee55980c18545af444d93fdd60c56b580db5cc54867d8cbf8a1dc0829938c", size = 1960726 }, - { url = "https://files.pythonhosted.org/packages/84/08/a78cb776f8c085b7143142ce479859cfec086bd09ee638a317040b6ef420/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c438f6ca858697c9ab67eb28246c92508af972e114cac34e57a6d4ba17a3ac08", size = 2464738 }, - { url = "https://files.pythonhosted.org/packages/b1/e1/65584da5356ed6cb12c63791a10b208860ac40a83de165cb6a6751a686e3/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8c63c91f95173f9c2a67c7c526b2cea976828a0e7fced9cdcead2802dc10f8a4", size = 2270718 }, - { url = "https://files.pythonhosted.org/packages/be/6c/28f17390b62b8f2f520e2915095b3c94d88681ecf0041e75389d9667f202/kiwisolver-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:beb7f344487cdcb9e1efe4b7a29681b74d34c08f0043a327a74da852a6749e7b", size = 73480 }, - { url = "https://files.pythonhosted.org/packages/d8/0e/2ee5debc4f77a625778fec5501ff3e8036fe361b7ee28ae402a485bb9694/kiwisolver-1.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:ad4ae4ffd1ee9cd11357b4c66b612da9888f4f4daf2f36995eda64bd45370cac", size = 64930 }, - { url = "https://files.pythonhosted.org/packages/e9/eb/5fcbbbf9a0e2c3a35effb88831a483345326bbc3a030a3b5b69aee647f84/kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ec4c85dc4b687c7f7f15f553ff26a98bfe8c58f5f7f0ac8905f0ba4c7be60232", size = 59532 }, - { url = "https://files.pythonhosted.org/packages/c3/9b/e17104555bb4db148fd52327feea1e96be4b88e8e008b029002c281a21ab/kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:12e91c215a96e39f57989c8912ae761286ac5a9584d04030ceb3368a357f017a", size = 57420 }, - { url = "https://files.pythonhosted.org/packages/48/44/2b5b95b7aa39fb2d8d9d956e0f3d5d45aef2ae1d942d4c3ffac2f9cfed1a/kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be4a51a55833dc29ab5d7503e7bcb3b3af3402d266018137127450005cdfe737", size = 79892 }, - { url = "https://files.pythonhosted.org/packages/52/7d/7157f9bba6b455cfb4632ed411e199fc8b8977642c2b12082e1bd9e6d173/kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:daae526907e262de627d8f70058a0f64acc9e2641c164c99c8f594b34a799a16", size = 77603 }, - { url = "https://files.pythonhosted.org/packages/0a/dd/8050c947d435c8d4bc94e3252f4d8bb8a76cfb424f043a8680be637a57f1/kiwisolver-1.5.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:59cd8683f575d96df5bb48f6add94afc055012c29e28124fcae2b63661b9efb1", size = 73558 }, +sdist = { url = "https://files.pythonhosted.org/packages/d0/67/9c61eccb13f0bdca9307614e782fec49ffdde0f7a2314935d489fa93cd9c/kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a", size = 103482, upload-time = "2026-03-09T13:15:53.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/dd/a495a9c104be1c476f0386e714252caf2b7eca883915422a64c50b88c6f5/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9eed0f7edbb274413b6ee781cca50541c8c0facd3d6fd289779e494340a2b85c", size = 122798, upload-time = "2026-03-09T13:12:58.963Z" }, + { url = "https://files.pythonhosted.org/packages/11/60/37b4047a2af0cf5ef6d8b4b26e91829ae6fc6a2d1f74524bcb0e7cd28a32/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c4923e404d6bcd91b6779c009542e5647fef32e4a5d75e115e3bbac6f2335eb", size = 66216, upload-time = "2026-03-09T13:13:00.155Z" }, + { url = "https://files.pythonhosted.org/packages/0a/aa/510dc933d87767584abfe03efa445889996c70c2990f6f87c3ebaa0a18c5/kiwisolver-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0df54df7e686afa55e6f21fb86195224a6d9beb71d637e8d7920c95cf0f89aac", size = 63911, upload-time = "2026-03-09T13:13:01.671Z" }, + { url = "https://files.pythonhosted.org/packages/80/46/bddc13df6c2a40741e0cc7865bb1c9ed4796b6760bd04ce5fae3928ef917/kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27", size = 1438209, upload-time = "2026-03-09T13:13:03.385Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d6/76621246f5165e5372f02f5e6f3f48ea336a8f9e96e43997d45b240ed8cd/kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff710414307fefa903e0d9bdf300972f892c23477829f49504e59834f4195398", size = 1248888, upload-time = "2026-03-09T13:13:05.231Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c1/31559ec6fb39a5b48035ce29bb63ade628f321785f38c384dee3e2c08bc1/kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6176c1811d9d5a04fa391c490cc44f451e240697a16977f11c6f722efb9041db", size = 1266304, upload-time = "2026-03-09T13:13:06.743Z" }, + { url = "https://files.pythonhosted.org/packages/5e/ef/1cb8276f2d29cc6a41e0a042f27946ca347d3a4a75acf85d0a16aa6dcc82/kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50847dca5d197fcbd389c805aa1a1cf32f25d2e7273dc47ab181a517666b68cc", size = 1319650, upload-time = "2026-03-09T13:13:08.607Z" }, + { url = "https://files.pythonhosted.org/packages/4c/e4/5ba3cecd7ce6236ae4a80f67e5d5531287337d0e1f076ca87a5abe4cd5d0/kiwisolver-1.5.0-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:01808c6d15f4c3e8559595d6d1fe6411c68e4a3822b4b9972b44473b24f4e679", size = 970949, upload-time = "2026-03-09T13:13:10.299Z" }, + { url = "https://files.pythonhosted.org/packages/5a/69/dc61f7ae9a2f071f26004ced87f078235b5507ab6e5acd78f40365655034/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f1f9f4121ec58628c96baa3de1a55a4e3a333c5102c8e94b64e23bf7b2083309", size = 2199125, upload-time = "2026-03-09T13:13:11.841Z" }, + { url = "https://files.pythonhosted.org/packages/e5/7b/abbe0f1b5afa85f8d084b73e90e5f801c0939eba16ac2e49af7c61a6c28d/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b7d335370ae48a780c6e6a6bbfa97342f563744c39c35562f3f367665f5c1de2", size = 2293783, upload-time = "2026-03-09T13:13:14.399Z" }, + { url = "https://files.pythonhosted.org/packages/8a/80/5908ae149d96d81580d604c7f8aefd0e98f4fd728cf172f477e9f2a81744/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:800ee55980c18545af444d93fdd60c56b580db5cc54867d8cbf8a1dc0829938c", size = 1960726, upload-time = "2026-03-09T13:13:16.047Z" }, + { url = "https://files.pythonhosted.org/packages/84/08/a78cb776f8c085b7143142ce479859cfec086bd09ee638a317040b6ef420/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c438f6ca858697c9ab67eb28246c92508af972e114cac34e57a6d4ba17a3ac08", size = 2464738, upload-time = "2026-03-09T13:13:17.897Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e1/65584da5356ed6cb12c63791a10b208860ac40a83de165cb6a6751a686e3/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8c63c91f95173f9c2a67c7c526b2cea976828a0e7fced9cdcead2802dc10f8a4", size = 2270718, upload-time = "2026-03-09T13:13:19.421Z" }, + { url = "https://files.pythonhosted.org/packages/be/6c/28f17390b62b8f2f520e2915095b3c94d88681ecf0041e75389d9667f202/kiwisolver-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:beb7f344487cdcb9e1efe4b7a29681b74d34c08f0043a327a74da852a6749e7b", size = 73480, upload-time = "2026-03-09T13:13:20.818Z" }, + { url = "https://files.pythonhosted.org/packages/d8/0e/2ee5debc4f77a625778fec5501ff3e8036fe361b7ee28ae402a485bb9694/kiwisolver-1.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:ad4ae4ffd1ee9cd11357b4c66b612da9888f4f4daf2f36995eda64bd45370cac", size = 64930, upload-time = "2026-03-09T13:13:21.997Z" }, + { url = "https://files.pythonhosted.org/packages/e9/eb/5fcbbbf9a0e2c3a35effb88831a483345326bbc3a030a3b5b69aee647f84/kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ec4c85dc4b687c7f7f15f553ff26a98bfe8c58f5f7f0ac8905f0ba4c7be60232", size = 59532, upload-time = "2026-03-09T13:15:47.047Z" }, + { url = "https://files.pythonhosted.org/packages/c3/9b/e17104555bb4db148fd52327feea1e96be4b88e8e008b029002c281a21ab/kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:12e91c215a96e39f57989c8912ae761286ac5a9584d04030ceb3368a357f017a", size = 57420, upload-time = "2026-03-09T13:15:48.199Z" }, + { url = "https://files.pythonhosted.org/packages/48/44/2b5b95b7aa39fb2d8d9d956e0f3d5d45aef2ae1d942d4c3ffac2f9cfed1a/kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be4a51a55833dc29ab5d7503e7bcb3b3af3402d266018137127450005cdfe737", size = 79892, upload-time = "2026-03-09T13:15:49.694Z" }, + { url = "https://files.pythonhosted.org/packages/52/7d/7157f9bba6b455cfb4632ed411e199fc8b8977642c2b12082e1bd9e6d173/kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:daae526907e262de627d8f70058a0f64acc9e2641c164c99c8f594b34a799a16", size = 77603, upload-time = "2026-03-09T13:15:50.945Z" }, + { url = "https://files.pythonhosted.org/packages/0a/dd/8050c947d435c8d4bc94e3252f4d8bb8a76cfb424f043a8680be637a57f1/kiwisolver-1.5.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:59cd8683f575d96df5bb48f6add94afc055012c29e28124fcae2b63661b9efb1", size = 73558, upload-time = "2026-03-09T13:15:52.112Z" }, ] [[package]] name = "lark" version = "1.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/da/34/28fff3ab31ccff1fd4f6c7c7b0ceb2b6968d8ea4950663eadcb5720591a0/lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", size = 382732 } +sdist = { url = "https://files.pythonhosted.org/packages/da/34/28fff3ab31ccff1fd4f6c7c7b0ceb2b6968d8ea4950663eadcb5720591a0/lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", size = 382732, upload-time = "2025-10-27T18:25:56.653Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151 }, + { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151, upload-time = "2025-10-27T18:25:54.882Z" }, ] [[package]] name = "latexcodec" version = "3.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/27/dd/4270b2c5e2ee49316c3859e62293bd2ea8e382339d63ab7bbe9f39c0ec3b/latexcodec-3.0.1.tar.gz", hash = "sha256:e78a6911cd72f9dec35031c6ec23584de6842bfbc4610a9678868d14cdfb0357", size = 31222 } +sdist = { url = "https://files.pythonhosted.org/packages/27/dd/4270b2c5e2ee49316c3859e62293bd2ea8e382339d63ab7bbe9f39c0ec3b/latexcodec-3.0.1.tar.gz", hash = "sha256:e78a6911cd72f9dec35031c6ec23584de6842bfbc4610a9678868d14cdfb0357", size = 31222, upload-time = "2025-06-17T18:47:34.051Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/40/23569737873cc9637fd488606347e9dd92b9fa37ba4fcda1f98ee5219a97/latexcodec-3.0.1-py3-none-any.whl", hash = "sha256:a9eb8200bff693f0437a69581f7579eb6bca25c4193515c09900ce76451e452e", size = 18532 }, + { url = "https://files.pythonhosted.org/packages/b5/40/23569737873cc9637fd488606347e9dd92b9fa37ba4fcda1f98ee5219a97/latexcodec-3.0.1-py3-none-any.whl", hash = "sha256:a9eb8200bff693f0437a69581f7579eb6bca25c4193515c09900ce76451e452e", size = 18532, upload-time = "2025-06-17T18:47:30.726Z" }, ] [[package]] name = "lxml" version = "6.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/28/30/9abc9e34c657c33834eaf6cd02124c61bdf5944d802aa48e69be8da3585d/lxml-6.1.0.tar.gz", hash = "sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13", size = 4197006 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5e/5d/3bccad330292946f97962df9d5f2d3ae129cce6e212732a781e856b91e07/lxml-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9", size = 8526232 }, - { url = "https://files.pythonhosted.org/packages/a7/51/adc8826570a112f83bb4ddb3a2ab510bbc2ccd62c1b9fe1f34fae2d90b57/lxml-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50", size = 4595448 }, - { url = "https://files.pythonhosted.org/packages/54/84/5a9ec07cbe1d2334a6465f863b949a520d2699a755738986dcd3b6b89e3f/lxml-6.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5", size = 4923771 }, - { url = "https://files.pythonhosted.org/packages/a7/23/851cfa33b6b38adb628e45ad51fb27105fa34b2b3ba9d1d4aa7a9428dfe0/lxml-6.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e", size = 5068101 }, - { url = "https://files.pythonhosted.org/packages/b0/38/41bf99c2023c6b79916ba057d83e9db21d642f473cac210201222882d38b/lxml-6.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512", size = 5002573 }, - { url = "https://files.pythonhosted.org/packages/c2/20/053aa10bdc39747e1e923ce2d45413075e84f70a136045bb09e5eaca41d3/lxml-6.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c", size = 5202816 }, - { url = "https://files.pythonhosted.org/packages/9a/da/bc710fad8bf04b93baee752c192eaa2210cd3a84f969d0be7830fea55802/lxml-6.1.0-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5", size = 5329999 }, - { url = "https://files.pythonhosted.org/packages/b3/cb/bf035dedbdf7fab49411aa52e4236f3445e98d38647d85419e6c0d2806b9/lxml-6.1.0-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289", size = 4659643 }, - { url = "https://files.pythonhosted.org/packages/5c/4f/22be31f33727a5e4c7b01b0a874503026e50329b259d3587e0b923cf964b/lxml-6.1.0-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a", size = 5265963 }, - { url = "https://files.pythonhosted.org/packages/c8/2b/d44d0e5c79226017f4ab8c87a802ebe4f89f97e6585a8e4166dffcdd7b6e/lxml-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3", size = 5045444 }, - { url = "https://files.pythonhosted.org/packages/d3/c3/3f034fec1594c331a6dbf9491238fdcc9d66f68cc529e109ec75b97197e1/lxml-6.1.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9", size = 4712703 }, - { url = "https://files.pythonhosted.org/packages/12/16/0b83fccc158218aca75a7aa33e97441df737950734246b9fffa39301603d/lxml-6.1.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11", size = 5252745 }, - { url = "https://files.pythonhosted.org/packages/dd/ee/12e6c1b39a77666c02eaa77f94a870aaf63c4ac3a497b2d52319448b01c6/lxml-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4", size = 5226822 }, - { url = "https://files.pythonhosted.org/packages/34/20/c7852904858b4723af01d2fc14b5d38ff57cb92f01934a127ebd9a9e51aa/lxml-6.1.0-cp311-cp311-win32.whl", hash = "sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3", size = 3594026 }, - { url = "https://files.pythonhosted.org/packages/02/05/d60c732b56da5085175c07c74b2df4e6d181b0c9a61e1691474f06ef4b39/lxml-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7", size = 4025114 }, - { url = "https://files.pythonhosted.org/packages/c2/df/c84dcc175fd690823436d15b41cb920cd5ba5e14cd8bfb00949d5903b320/lxml-6.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39", size = 3667742 }, - { url = "https://files.pythonhosted.org/packages/f2/88/55143966481409b1740a3ac669e611055f49efd68087a5ce41582325db3e/lxml-6.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842", size = 3930134 }, - { url = "https://files.pythonhosted.org/packages/b5/97/28b985c2983938d3cb696dd5501423afb90a8c3e869ef5d3c62569282c0f/lxml-6.1.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c", size = 4210749 }, - { url = "https://files.pythonhosted.org/packages/29/67/dfab2b7d58214921935ccea7ce9b3df9b7d46f305d12f0f532ac7cf6b804/lxml-6.1.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de", size = 4318463 }, - { url = "https://files.pythonhosted.org/packages/32/a2/4ac7eb32a4d997dd352c32c32399aae27b3f268d440e6f9cfa405b575d2f/lxml-6.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635", size = 4251124 }, - { url = "https://files.pythonhosted.org/packages/33/ef/d6abd850bb4822f9b720cfe36b547a558e694881010ff7d012191e8769c6/lxml-6.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037", size = 4401758 }, - { url = "https://files.pythonhosted.org/packages/40/44/3ee09a5b60cb44c4f2fbc1c9015cfd6ff5afc08f991cab295d3024dcbf2d/lxml-6.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace", size = 3508860 }, +sdist = { url = "https://files.pythonhosted.org/packages/28/30/9abc9e34c657c33834eaf6cd02124c61bdf5944d802aa48e69be8da3585d/lxml-6.1.0.tar.gz", hash = "sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13", size = 4197006, upload-time = "2026-04-18T04:32:51.613Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/5d/3bccad330292946f97962df9d5f2d3ae129cce6e212732a781e856b91e07/lxml-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9", size = 8526232, upload-time = "2026-04-18T04:27:40.389Z" }, + { url = "https://files.pythonhosted.org/packages/a7/51/adc8826570a112f83bb4ddb3a2ab510bbc2ccd62c1b9fe1f34fae2d90b57/lxml-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50", size = 4595448, upload-time = "2026-04-18T04:27:44.208Z" }, + { url = "https://files.pythonhosted.org/packages/54/84/5a9ec07cbe1d2334a6465f863b949a520d2699a755738986dcd3b6b89e3f/lxml-6.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5", size = 4923771, upload-time = "2026-04-18T04:32:17.402Z" }, + { url = "https://files.pythonhosted.org/packages/a7/23/851cfa33b6b38adb628e45ad51fb27105fa34b2b3ba9d1d4aa7a9428dfe0/lxml-6.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e", size = 5068101, upload-time = "2026-04-18T04:32:21.437Z" }, + { url = "https://files.pythonhosted.org/packages/b0/38/41bf99c2023c6b79916ba057d83e9db21d642f473cac210201222882d38b/lxml-6.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512", size = 5002573, upload-time = "2026-04-18T04:32:25.373Z" }, + { url = "https://files.pythonhosted.org/packages/c2/20/053aa10bdc39747e1e923ce2d45413075e84f70a136045bb09e5eaca41d3/lxml-6.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c", size = 5202816, upload-time = "2026-04-18T04:32:29.393Z" }, + { url = "https://files.pythonhosted.org/packages/9a/da/bc710fad8bf04b93baee752c192eaa2210cd3a84f969d0be7830fea55802/lxml-6.1.0-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5", size = 5329999, upload-time = "2026-04-18T04:32:34.019Z" }, + { url = "https://files.pythonhosted.org/packages/b3/cb/bf035dedbdf7fab49411aa52e4236f3445e98d38647d85419e6c0d2806b9/lxml-6.1.0-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289", size = 4659643, upload-time = "2026-04-18T04:32:37.932Z" }, + { url = "https://files.pythonhosted.org/packages/5c/4f/22be31f33727a5e4c7b01b0a874503026e50329b259d3587e0b923cf964b/lxml-6.1.0-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a", size = 5265963, upload-time = "2026-04-18T04:32:41.881Z" }, + { url = "https://files.pythonhosted.org/packages/c8/2b/d44d0e5c79226017f4ab8c87a802ebe4f89f97e6585a8e4166dffcdd7b6e/lxml-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3", size = 5045444, upload-time = "2026-04-18T04:32:44.512Z" }, + { url = "https://files.pythonhosted.org/packages/d3/c3/3f034fec1594c331a6dbf9491238fdcc9d66f68cc529e109ec75b97197e1/lxml-6.1.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9", size = 4712703, upload-time = "2026-04-18T04:32:47.16Z" }, + { url = "https://files.pythonhosted.org/packages/12/16/0b83fccc158218aca75a7aa33e97441df737950734246b9fffa39301603d/lxml-6.1.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11", size = 5252745, upload-time = "2026-04-18T04:32:50.427Z" }, + { url = "https://files.pythonhosted.org/packages/dd/ee/12e6c1b39a77666c02eaa77f94a870aaf63c4ac3a497b2d52319448b01c6/lxml-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4", size = 5226822, upload-time = "2026-04-18T04:32:53.437Z" }, + { url = "https://files.pythonhosted.org/packages/34/20/c7852904858b4723af01d2fc14b5d38ff57cb92f01934a127ebd9a9e51aa/lxml-6.1.0-cp311-cp311-win32.whl", hash = "sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3", size = 3594026, upload-time = "2026-04-18T04:27:31.903Z" }, + { url = "https://files.pythonhosted.org/packages/02/05/d60c732b56da5085175c07c74b2df4e6d181b0c9a61e1691474f06ef4b39/lxml-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7", size = 4025114, upload-time = "2026-04-18T04:27:34.077Z" }, + { url = "https://files.pythonhosted.org/packages/c2/df/c84dcc175fd690823436d15b41cb920cd5ba5e14cd8bfb00949d5903b320/lxml-6.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39", size = 3667742, upload-time = "2026-04-18T04:27:38.45Z" }, + { url = "https://files.pythonhosted.org/packages/f2/88/55143966481409b1740a3ac669e611055f49efd68087a5ce41582325db3e/lxml-6.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842", size = 3930134, upload-time = "2026-04-18T04:32:35.008Z" }, + { url = "https://files.pythonhosted.org/packages/b5/97/28b985c2983938d3cb696dd5501423afb90a8c3e869ef5d3c62569282c0f/lxml-6.1.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c", size = 4210749, upload-time = "2026-04-18T04:36:03.626Z" }, + { url = "https://files.pythonhosted.org/packages/29/67/dfab2b7d58214921935ccea7ce9b3df9b7d46f305d12f0f532ac7cf6b804/lxml-6.1.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de", size = 4318463, upload-time = "2026-04-18T04:36:06.309Z" }, + { url = "https://files.pythonhosted.org/packages/32/a2/4ac7eb32a4d997dd352c32c32399aae27b3f268d440e6f9cfa405b575d2f/lxml-6.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635", size = 4251124, upload-time = "2026-04-18T04:36:09.056Z" }, + { url = "https://files.pythonhosted.org/packages/33/ef/d6abd850bb4822f9b720cfe36b547a558e694881010ff7d012191e8769c6/lxml-6.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037", size = 4401758, upload-time = "2026-04-18T04:36:11.803Z" }, + { url = "https://files.pythonhosted.org/packages/40/44/3ee09a5b60cb44c4f2fbc1c9015cfd6ff5afc08f991cab295d3024dcbf2d/lxml-6.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace", size = 3508860, upload-time = "2026-04-18T04:32:48.619Z" }, ] [[package]] @@ -988,9 +1257,9 @@ dependencies = [ { name = "scikit-learn" }, { name = "scipy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/63/d5cce1d7deee87721f98c5a72a563d5f5d6e616eaff647b247cdd6538062/mapclassify-2.5.0.tar.gz", hash = "sha256:5eb1f782155b5a90ec93c1dc52b300a2fad33117dcf08b7c858ed96da2a7baa0", size = 61906 } +sdist = { url = "https://files.pythonhosted.org/packages/a1/63/d5cce1d7deee87721f98c5a72a563d5f5d6e616eaff647b247cdd6538062/mapclassify-2.5.0.tar.gz", hash = "sha256:5eb1f782155b5a90ec93c1dc52b300a2fad33117dcf08b7c858ed96da2a7baa0", size = 61906, upload-time = "2023-01-14T15:50:51.764Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/e3/66416c37afce85fee750de8641314dda2a5af9457c8802ca4b173874f4e5/mapclassify-2.5.0-py3-none-any.whl", hash = "sha256:90299a8ae3a06cdb531f02ab8160a3693ff4bc710ba52c05bec0d0a192b3d608", size = 39466 }, + { url = "https://files.pythonhosted.org/packages/c0/e3/66416c37afce85fee750de8641314dda2a5af9457c8802ca4b173874f4e5/mapclassify-2.5.0-py3-none-any.whl", hash = "sha256:90299a8ae3a06cdb531f02ab8160a3693ff4bc710ba52c05bec0d0a192b3d608", size = 39466, upload-time = "2023-01-14T15:50:49.985Z" }, ] [[package]] @@ -1000,28 +1269,28 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" }, ] [[package]] name = "markupsafe" version = "3.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313 } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631 }, - { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058 }, - { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287 }, - { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940 }, - { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887 }, - { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692 }, - { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471 }, - { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923 }, - { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572 }, - { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077 }, - { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876 }, + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, ] [[package]] @@ -1039,16 +1308,16 @@ dependencies = [ { name = "pyparsing" }, { name = "python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b6/f0/3836719cc3982fbba3b840d18a59db1d0ee9ac7986f24e8c0a092851b67b/matplotlib-3.7.5.tar.gz", hash = "sha256:1e5c971558ebc811aa07f54c7b7c677d78aa518ef4c390e14673a09e0860184a", size = 38098611 } +sdist = { url = "https://files.pythonhosted.org/packages/b6/f0/3836719cc3982fbba3b840d18a59db1d0ee9ac7986f24e8c0a092851b67b/matplotlib-3.7.5.tar.gz", hash = "sha256:1e5c971558ebc811aa07f54c7b7c677d78aa518ef4c390e14673a09e0860184a", size = 38098611, upload-time = "2024-02-16T10:50:56.19Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5e/c6/45d0485e59d70b7a6a81eade5d0aed548b42cc65658c0ce0f813b9249165/matplotlib-3.7.5-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:f65342c147572673f02a4abec2d5a23ad9c3898167df9b47c149f32ce61ca078", size = 8325506 }, - { url = "https://files.pythonhosted.org/packages/0e/0a/83bd8589f3597745f624fbcc7da1140088b2f4160ca51c71553c561d0df5/matplotlib-3.7.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4ddf7fc0e0dc553891a117aa083039088d8a07686d4c93fb8a810adca68810af", size = 7439905 }, - { url = "https://files.pythonhosted.org/packages/84/c1/a7705b24f8f9b4d7ceea0002c13bae50cf9423f299f56d8c47a5cd2627d2/matplotlib-3.7.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0ccb830fc29442360d91be48527809f23a5dcaee8da5f4d9b2d5b867c1b087b8", size = 7342895 }, - { url = "https://files.pythonhosted.org/packages/94/6e/55d7d8310c96a7459c883aa4be3f5a9338a108278484cbd5c95d480d1cef/matplotlib-3.7.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efc6bb28178e844d1f408dd4d6341ee8a2e906fc9e0fa3dae497da4e0cab775d", size = 11358830 }, - { url = "https://files.pythonhosted.org/packages/55/57/3b36afe104216db1cf2f3889c394b403ea87eda77c4815227c9524462ba8/matplotlib-3.7.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b15c4c2d374f249f324f46e883340d494c01768dd5287f8bc00b65b625ab56c", size = 11462575 }, - { url = "https://files.pythonhosted.org/packages/f3/0b/fabcf5f66b12fab5c4110d06a6c0fed875c7e63bc446403f58f9dadc9999/matplotlib-3.7.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d028555421912307845e59e3de328260b26d055c5dac9b182cc9783854e98fb", size = 11584280 }, - { url = "https://files.pythonhosted.org/packages/47/a9/1ad7df27a9da70b62109584632f83fe6ef45774701199c44d5777107c240/matplotlib-3.7.5-cp311-cp311-win32.whl", hash = "sha256:fe184b4625b4052fa88ef350b815559dd90cc6cc8e97b62f966e1ca84074aafa", size = 7340429 }, - { url = "https://files.pythonhosted.org/packages/e3/b1/1b6c34b89173d6c206dc5a4028e8518b4dfee3569c13bdc0c88d0486cae7/matplotlib-3.7.5-cp311-cp311-win_amd64.whl", hash = "sha256:084f1f0f2f1010868c6f1f50b4e1c6f2fb201c58475494f1e5b66fed66093647", size = 7507112 }, + { url = "https://files.pythonhosted.org/packages/5e/c6/45d0485e59d70b7a6a81eade5d0aed548b42cc65658c0ce0f813b9249165/matplotlib-3.7.5-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:f65342c147572673f02a4abec2d5a23ad9c3898167df9b47c149f32ce61ca078", size = 8325506, upload-time = "2024-02-16T10:48:36.192Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0a/83bd8589f3597745f624fbcc7da1140088b2f4160ca51c71553c561d0df5/matplotlib-3.7.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4ddf7fc0e0dc553891a117aa083039088d8a07686d4c93fb8a810adca68810af", size = 7439905, upload-time = "2024-02-16T10:48:38.951Z" }, + { url = "https://files.pythonhosted.org/packages/84/c1/a7705b24f8f9b4d7ceea0002c13bae50cf9423f299f56d8c47a5cd2627d2/matplotlib-3.7.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0ccb830fc29442360d91be48527809f23a5dcaee8da5f4d9b2d5b867c1b087b8", size = 7342895, upload-time = "2024-02-16T10:48:41.61Z" }, + { url = "https://files.pythonhosted.org/packages/94/6e/55d7d8310c96a7459c883aa4be3f5a9338a108278484cbd5c95d480d1cef/matplotlib-3.7.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efc6bb28178e844d1f408dd4d6341ee8a2e906fc9e0fa3dae497da4e0cab775d", size = 11358830, upload-time = "2024-02-16T10:48:44.984Z" }, + { url = "https://files.pythonhosted.org/packages/55/57/3b36afe104216db1cf2f3889c394b403ea87eda77c4815227c9524462ba8/matplotlib-3.7.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b15c4c2d374f249f324f46e883340d494c01768dd5287f8bc00b65b625ab56c", size = 11462575, upload-time = "2024-02-16T10:48:48.437Z" }, + { url = "https://files.pythonhosted.org/packages/f3/0b/fabcf5f66b12fab5c4110d06a6c0fed875c7e63bc446403f58f9dadc9999/matplotlib-3.7.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d028555421912307845e59e3de328260b26d055c5dac9b182cc9783854e98fb", size = 11584280, upload-time = "2024-02-16T10:48:53.022Z" }, + { url = "https://files.pythonhosted.org/packages/47/a9/1ad7df27a9da70b62109584632f83fe6ef45774701199c44d5777107c240/matplotlib-3.7.5-cp311-cp311-win32.whl", hash = "sha256:fe184b4625b4052fa88ef350b815559dd90cc6cc8e97b62f966e1ca84074aafa", size = 7340429, upload-time = "2024-02-16T10:48:56.505Z" }, + { url = "https://files.pythonhosted.org/packages/e3/b1/1b6c34b89173d6c206dc5a4028e8518b4dfee3569c13bdc0c88d0486cae7/matplotlib-3.7.5-cp311-cp311-win_amd64.whl", hash = "sha256:084f1f0f2f1010868c6f1f50b4e1c6f2fb201c58475494f1e5b66fed66093647", size = 7507112, upload-time = "2024-02-16T10:48:59.659Z" }, ] [[package]] @@ -1058,9 +1327,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c7/74/97e72a36efd4ae2bccb3463284300f8953f199b5ffbc04cbbb0ec78f74b1/matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe", size = 8110 } +sdist = { url = "https://files.pythonhosted.org/packages/c7/74/97e72a36efd4ae2bccb3463284300f8953f199b5ffbc04cbbb0ec78f74b1/matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe", size = 8110, upload-time = "2025-10-23T09:00:22.126Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76", size = 9516 }, + { url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76", size = 9516, upload-time = "2025-10-23T09:00:20.675Z" }, ] [[package]] @@ -1070,44 +1339,97 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b2/fd/a756d36c0bfba5f6e39a1cdbdbfdd448dc02692467d83816dff4592a1ebc/mdit_py_plugins-0.5.0.tar.gz", hash = "sha256:f4918cb50119f50446560513a8e311d574ff6aaed72606ddae6d35716fe809c6", size = 44655 } +sdist = { url = "https://files.pythonhosted.org/packages/b2/fd/a756d36c0bfba5f6e39a1cdbdbfdd448dc02692467d83816dff4592a1ebc/mdit_py_plugins-0.5.0.tar.gz", hash = "sha256:f4918cb50119f50446560513a8e311d574ff6aaed72606ddae6d35716fe809c6", size = 44655, upload-time = "2025-08-11T07:25:49.083Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl", hash = "sha256:07a08422fc1936a5d26d146759e9155ea466e842f5ab2f7d2266dd084c8dab1f", size = 57205 }, + { url = "https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl", hash = "sha256:07a08422fc1936a5d26d146759e9155ea466e842f5ab2f7d2266dd084c8dab1f", size = 57205, upload-time = "2025-08-11T07:25:47.597Z" }, ] [[package]] name = "mdurl" version = "0.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, ] [[package]] name = "mistune" version = "3.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/84/620cc3f7e3adf6f5067e10f4dbae71295d8f9e16d5d3f9ef97c40f2f592c/mistune-3.2.1.tar.gz", hash = "sha256:7c8e5501d38bac1582e067e46c8343f17d57ea1aaa735823f3aba1fd59c88a28", size = 98003 } +sdist = { url = "https://files.pythonhosted.org/packages/ca/84/620cc3f7e3adf6f5067e10f4dbae71295d8f9e16d5d3f9ef97c40f2f592c/mistune-3.2.1.tar.gz", hash = "sha256:7c8e5501d38bac1582e067e46c8343f17d57ea1aaa735823f3aba1fd59c88a28", size = 98003, upload-time = "2026-05-03T14:33:22.312Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl", hash = "sha256:78cdb0ba5e938053ccf63651b352508d2efa9411dc8810bfb05f2dc5140c0048", size = 53749, upload-time = "2026-05-03T14:33:20.551Z" }, +] + +[[package]] +name = "msal" +version = "1.36.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "pyjwt", extra = ["crypto"] }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/cb/b02b0f748ac668922364ccb3c3bff5b71628a05f5adfec2ba2a5c3031483/msal-1.36.0.tar.gz", hash = "sha256:3f6a4af2b036b476a4215111c4297b4e6e236ed186cd804faefba23e4990978b", size = 174217, upload-time = "2026-04-09T10:20:33.525Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/d3/414d1f0a5f6f4fe5313c2b002c54e78a3332970feb3f5fed14237aa17064/msal-1.36.0-py3-none-any.whl", hash = "sha256:36ecac30e2ff4322d956029aabce3c82301c29f0acb1ad89b94edcabb0e58ec4", size = 121547, upload-time = "2026-04-09T10:20:32.336Z" }, +] + +[[package]] +name = "msal-extensions" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "msal" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/01/99/5d239b6156eddf761a636bded1118414d161bd6b7b37a9335549ed159396/msal_extensions-1.3.1.tar.gz", hash = "sha256:c5b0fd10f65ef62b5f1d62f4251d51cbcaf003fcedae8c91b040a488614be1a4", size = 23315, upload-time = "2025-03-14T23:51:03.902Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl", hash = "sha256:78cdb0ba5e938053ccf63651b352508d2efa9411dc8810bfb05f2dc5140c0048", size = 53749 }, + { url = "https://files.pythonhosted.org/packages/5e/75/bd9b7bb966668920f06b200e84454c8f3566b102183bc55c5473d96cb2b9/msal_extensions-1.3.1-py3-none-any.whl", hash = "sha256:96d3de4d034504e969ac5e85bae8106c8373b5c6568e4c8fa7af2eca9dbe6bca", size = 20583, upload-time = "2025-03-14T23:51:03.016Z" }, ] [[package]] name = "msgpack" version = "1.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4d/f2/bfb55a6236ed8725a96b0aa3acbd0ec17588e6a2c3b62a93eb513ed8783f/msgpack-1.1.2.tar.gz", hash = "sha256:3b60763c1373dd60f398488069bcdc703cd08a711477b5d480eecc9f9626f47e", size = 173581 } +sdist = { url = "https://files.pythonhosted.org/packages/4d/f2/bfb55a6236ed8725a96b0aa3acbd0ec17588e6a2c3b62a93eb513ed8783f/msgpack-1.1.2.tar.gz", hash = "sha256:3b60763c1373dd60f398488069bcdc703cd08a711477b5d480eecc9f9626f47e", size = 173581, upload-time = "2025-10-08T09:15:56.596Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/97/560d11202bcd537abca693fd85d81cebe2107ba17301de42b01ac1677b69/msgpack-1.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2e86a607e558d22985d856948c12a3fa7b42efad264dca8a3ebbcfa2735d786c", size = 82271 }, - { url = "https://files.pythonhosted.org/packages/83/04/28a41024ccbd67467380b6fb440ae916c1e4f25e2cd4c63abe6835ac566e/msgpack-1.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:283ae72fc89da59aa004ba147e8fc2f766647b1251500182fac0350d8af299c0", size = 84914 }, - { url = "https://files.pythonhosted.org/packages/71/46/b817349db6886d79e57a966346cf0902a426375aadc1e8e7a86a75e22f19/msgpack-1.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61c8aa3bd513d87c72ed0b37b53dd5c5a0f58f2ff9f26e1555d3bd7948fb7296", size = 416962 }, - { url = "https://files.pythonhosted.org/packages/da/e0/6cc2e852837cd6086fe7d8406af4294e66827a60a4cf60b86575a4a65ca8/msgpack-1.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:454e29e186285d2ebe65be34629fa0e8605202c60fbc7c4c650ccd41870896ef", size = 426183 }, - { url = "https://files.pythonhosted.org/packages/25/98/6a19f030b3d2ea906696cedd1eb251708e50a5891d0978b012cb6107234c/msgpack-1.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7bc8813f88417599564fafa59fd6f95be417179f76b40325b500b3c98409757c", size = 411454 }, - { url = "https://files.pythonhosted.org/packages/b7/cd/9098fcb6adb32187a70b7ecaabf6339da50553351558f37600e53a4a2a23/msgpack-1.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bafca952dc13907bdfdedfc6a5f579bf4f292bdd506fadb38389afa3ac5b208e", size = 422341 }, - { url = "https://files.pythonhosted.org/packages/e6/ae/270cecbcf36c1dc85ec086b33a51a4d7d08fc4f404bdbc15b582255d05ff/msgpack-1.1.2-cp311-cp311-win32.whl", hash = "sha256:602b6740e95ffc55bfb078172d279de3773d7b7db1f703b2f1323566b878b90e", size = 64747 }, - { url = "https://files.pythonhosted.org/packages/2a/79/309d0e637f6f37e83c711f547308b91af02b72d2326ddd860b966080ef29/msgpack-1.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:d198d275222dc54244bf3327eb8cbe00307d220241d9cec4d306d49a44e85f68", size = 71633 }, - { url = "https://files.pythonhosted.org/packages/73/4d/7c4e2b3d9b1106cd0aa6cb56cc57c6267f59fa8bfab7d91df5adc802c847/msgpack-1.1.2-cp311-cp311-win_arm64.whl", hash = "sha256:86f8136dfa5c116365a8a651a7d7484b65b13339731dd6faebb9a0242151c406", size = 64755 }, + { url = "https://files.pythonhosted.org/packages/2c/97/560d11202bcd537abca693fd85d81cebe2107ba17301de42b01ac1677b69/msgpack-1.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2e86a607e558d22985d856948c12a3fa7b42efad264dca8a3ebbcfa2735d786c", size = 82271, upload-time = "2025-10-08T09:14:49.967Z" }, + { url = "https://files.pythonhosted.org/packages/83/04/28a41024ccbd67467380b6fb440ae916c1e4f25e2cd4c63abe6835ac566e/msgpack-1.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:283ae72fc89da59aa004ba147e8fc2f766647b1251500182fac0350d8af299c0", size = 84914, upload-time = "2025-10-08T09:14:50.958Z" }, + { url = "https://files.pythonhosted.org/packages/71/46/b817349db6886d79e57a966346cf0902a426375aadc1e8e7a86a75e22f19/msgpack-1.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61c8aa3bd513d87c72ed0b37b53dd5c5a0f58f2ff9f26e1555d3bd7948fb7296", size = 416962, upload-time = "2025-10-08T09:14:51.997Z" }, + { url = "https://files.pythonhosted.org/packages/da/e0/6cc2e852837cd6086fe7d8406af4294e66827a60a4cf60b86575a4a65ca8/msgpack-1.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:454e29e186285d2ebe65be34629fa0e8605202c60fbc7c4c650ccd41870896ef", size = 426183, upload-time = "2025-10-08T09:14:53.477Z" }, + { url = "https://files.pythonhosted.org/packages/25/98/6a19f030b3d2ea906696cedd1eb251708e50a5891d0978b012cb6107234c/msgpack-1.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7bc8813f88417599564fafa59fd6f95be417179f76b40325b500b3c98409757c", size = 411454, upload-time = "2025-10-08T09:14:54.648Z" }, + { url = "https://files.pythonhosted.org/packages/b7/cd/9098fcb6adb32187a70b7ecaabf6339da50553351558f37600e53a4a2a23/msgpack-1.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bafca952dc13907bdfdedfc6a5f579bf4f292bdd506fadb38389afa3ac5b208e", size = 422341, upload-time = "2025-10-08T09:14:56.328Z" }, + { url = "https://files.pythonhosted.org/packages/e6/ae/270cecbcf36c1dc85ec086b33a51a4d7d08fc4f404bdbc15b582255d05ff/msgpack-1.1.2-cp311-cp311-win32.whl", hash = "sha256:602b6740e95ffc55bfb078172d279de3773d7b7db1f703b2f1323566b878b90e", size = 64747, upload-time = "2025-10-08T09:14:57.882Z" }, + { url = "https://files.pythonhosted.org/packages/2a/79/309d0e637f6f37e83c711f547308b91af02b72d2326ddd860b966080ef29/msgpack-1.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:d198d275222dc54244bf3327eb8cbe00307d220241d9cec4d306d49a44e85f68", size = 71633, upload-time = "2025-10-08T09:14:59.177Z" }, + { url = "https://files.pythonhosted.org/packages/73/4d/7c4e2b3d9b1106cd0aa6cb56cc57c6267f59fa8bfab7d91df5adc802c847/msgpack-1.1.2-cp311-cp311-win_arm64.whl", hash = "sha256:86f8136dfa5c116365a8a651a7d7484b65b13339731dd6faebb9a0242151c406", size = 64755, upload-time = "2025-10-08T09:15:00.48Z" }, +] + +[[package]] +name = "multidict" +version = "6.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/f1/a90635c4f88fb913fbf4ce660b83b7445b7a02615bda034b2f8eb38fd597/multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d", size = 76626, upload-time = "2026-01-26T02:43:26.485Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e", size = 44706, upload-time = "2026-01-26T02:43:27.607Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855", size = 44356, upload-time = "2026-01-26T02:43:28.661Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d2/0a36c8473f0cbaeadd5db6c8b72d15bbceeec275807772bfcd059bef487d/multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3", size = 244355, upload-time = "2026-01-26T02:43:31.165Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/8c65be997fd7dd311b7d39c7b6e71a0cb449bad093761481eccbbe4b42a2/multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e", size = 246433, upload-time = "2026-01-26T02:43:32.581Z" }, + { url = "https://files.pythonhosted.org/packages/01/fb/4dbd7e848d2799c6a026ec88ad39cf2b8416aa167fcc903baa55ecaa045c/multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a", size = 225376, upload-time = "2026-01-26T02:43:34.417Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8a/4a3a6341eac3830f6053062f8fbc9a9e54407c80755b3f05bc427295c2d0/multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8", size = 257365, upload-time = "2026-01-26T02:43:35.741Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a2/dd575a69c1aa206e12d27d0770cdf9b92434b48a9ef0cd0d1afdecaa93c4/multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0", size = 254747, upload-time = "2026-01-26T02:43:36.976Z" }, + { url = "https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144", size = 246293, upload-time = "2026-01-26T02:43:38.258Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a4/23466059dc3854763423d0ad6c0f3683a379d97673b1b89ec33826e46728/multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49", size = 242962, upload-time = "2026-01-26T02:43:40.034Z" }, + { url = "https://files.pythonhosted.org/packages/1f/67/51dd754a3524d685958001e8fa20a0f5f90a6a856e0a9dcabff69be3dbb7/multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71", size = 237360, upload-time = "2026-01-26T02:43:41.752Z" }, + { url = "https://files.pythonhosted.org/packages/64/3f/036dfc8c174934d4b55d86ff4f978e558b0e585cef70cfc1ad01adc6bf18/multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3", size = 245940, upload-time = "2026-01-26T02:43:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/3d/20/6214d3c105928ebc353a1c644a6ef1408bc5794fcb4f170bb524a3c16311/multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c", size = 253502, upload-time = "2026-01-26T02:43:44.371Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e2/c653bc4ae1be70a0f836b82172d643fcf1dade042ba2676ab08ec08bff0f/multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0", size = 247065, upload-time = "2026-01-26T02:43:45.745Z" }, + { url = "https://files.pythonhosted.org/packages/c8/11/a854b4154cd3bd8b1fd375e8a8ca9d73be37610c361543d56f764109509b/multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa", size = 241870, upload-time = "2026-01-26T02:43:47.054Z" }, + { url = "https://files.pythonhosted.org/packages/13/bf/9676c0392309b5fdae322333d22a829715b570edb9baa8016a517b55b558/multidict-6.7.1-cp311-cp311-win32.whl", hash = "sha256:d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a", size = 41302, upload-time = "2026-01-26T02:43:48.753Z" }, + { url = "https://files.pythonhosted.org/packages/c9/68/f16a3a8ba6f7b6dc92a1f19669c0810bd2c43fc5a02da13b1cbf8e253845/multidict-6.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b", size = 45981, upload-time = "2026-01-26T02:43:49.921Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/9dd5305253fa00cd3c7555dbef69d5bf4133debc53b87ab8d6a44d411665/multidict-6.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6", size = 43159, upload-time = "2026-01-26T02:43:51.635Z" }, + { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, ] [[package]] @@ -1122,9 +1444,9 @@ dependencies = [ { name = "pyyaml" }, { name = "sphinx" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e8/c1/48ea47b78ade0bb0281f34c9e343e3ea0c681fbc81464dbfd134e983954f/myst_parser-2.0.0.tar.gz", hash = "sha256:ea929a67a6a0b1683cdbe19b8d2e724cd7643f8aa3e7bb18dd65beac3483bead", size = 85800 } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c1/48ea47b78ade0bb0281f34c9e343e3ea0c681fbc81464dbfd134e983954f/myst_parser-2.0.0.tar.gz", hash = "sha256:ea929a67a6a0b1683cdbe19b8d2e724cd7643f8aa3e7bb18dd65beac3483bead", size = 85800, upload-time = "2023-06-13T16:30:30.136Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/f6/6d61a023d758f488e36638076e8a4ec4447a2cdf86938cf6c60cf1c860e6/myst_parser-2.0.0-py3-none-any.whl", hash = "sha256:7c36344ae39c8e740dad7fdabf5aa6fc4897a813083c6cc9990044eb93656b14", size = 77158 }, + { url = "https://files.pythonhosted.org/packages/1d/f6/6d61a023d758f488e36638076e8a4ec4447a2cdf86938cf6c60cf1c860e6/myst_parser-2.0.0-py3-none-any.whl", hash = "sha256:7c36344ae39c8e740dad7fdabf5aa6fc4897a813083c6cc9990044eb93656b14", size = 77158, upload-time = "2023-06-13T16:30:27.697Z" }, ] [[package]] @@ -1137,9 +1459,9 @@ dependencies = [ { name = "nest-asyncio" }, { name = "notebook-shim" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ec/cc/a495b5eb9a964b70c6ae8c861168b78386d2520fd89c68390932f96400b2/nbclassic-1.3.3.tar.gz", hash = "sha256:434228763f8cee754318cd6dfa42370db191af630dabab8e30bafc8c1aa3eee6", size = 64116062 } +sdist = { url = "https://files.pythonhosted.org/packages/ec/cc/a495b5eb9a964b70c6ae8c861168b78386d2520fd89c68390932f96400b2/nbclassic-1.3.3.tar.gz", hash = "sha256:434228763f8cee754318cd6dfa42370db191af630dabab8e30bafc8c1aa3eee6", size = 64116062, upload-time = "2025-09-16T20:33:15.967Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/fd/dfb6db427bb4e0a50c9802b11df0b69d9364192f3db999849cde9209c8d0/nbclassic-1.3.3-py3-none-any.whl", hash = "sha256:dcee5149aa6aa01846c7458d6394b29b325213b5e118ee14c80d689122e0e4f2", size = 11527229 }, + { url = "https://files.pythonhosted.org/packages/3d/fd/dfb6db427bb4e0a50c9802b11df0b69d9364192f3db999849cde9209c8d0/nbclassic-1.3.3-py3-none-any.whl", hash = "sha256:dcee5149aa6aa01846c7458d6394b29b325213b5e118ee14c80d689122e0e4f2", size = 11527229, upload-time = "2025-09-16T20:33:08.625Z" }, ] [[package]] @@ -1152,9 +1474,9 @@ dependencies = [ { name = "nbformat" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/56/91/1c1d5a4b9a9ebba2b4e32b8c852c2975c872aec1fe42ab5e516b2cecd193/nbclient-0.10.4.tar.gz", hash = "sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9", size = 62554 } +sdist = { url = "https://files.pythonhosted.org/packages/56/91/1c1d5a4b9a9ebba2b4e32b8c852c2975c872aec1fe42ab5e516b2cecd193/nbclient-0.10.4.tar.gz", hash = "sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9", size = 62554, upload-time = "2025-12-23T07:45:46.369Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl", hash = "sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440", size = 25465 }, + { url = "https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl", hash = "sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440", size = 25465, upload-time = "2025-12-23T07:45:44.51Z" }, ] [[package]] @@ -1177,9 +1499,9 @@ dependencies = [ { name = "pygments" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/01/b1/708e53fe2e429c103c6e6e159106bcf0357ac41aa4c28772bd8402339051/nbconvert-7.17.1.tar.gz", hash = "sha256:34d0d0a7e73ce3cbab6c5aae8f4f468797280b01fd8bd2ca746da8569eddd7d2", size = 865311 } +sdist = { url = "https://files.pythonhosted.org/packages/01/b1/708e53fe2e429c103c6e6e159106bcf0357ac41aa4c28772bd8402339051/nbconvert-7.17.1.tar.gz", hash = "sha256:34d0d0a7e73ce3cbab6c5aae8f4f468797280b01fd8bd2ca746da8569eddd7d2", size = 865311, upload-time = "2026-04-08T00:44:14.914Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl", hash = "sha256:aa85c087b435e7bf1ffd03319f658e285f2b89eccab33bc1ba7025495ab3e7c8", size = 261927 }, + { url = "https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl", hash = "sha256:aa85c087b435e7bf1ffd03319f658e285f2b89eccab33bc1ba7025495ab3e7c8", size = 261927, upload-time = "2026-04-08T00:44:12.845Z" }, ] [[package]] @@ -1192,43 +1514,43 @@ dependencies = [ { name = "jupyter-core" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749 } +sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749, upload-time = "2024-04-04T11:20:37.371Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454 }, + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454, upload-time = "2024-04-04T11:20:34.895Z" }, ] [[package]] name = "ndindex" version = "1.10.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f5/92/4b9d2f4e0f3eabcfc7b02b48261f6e5ad36a3e2c1bbdcc4e3b7b6c768fa6/ndindex-1.10.1.tar.gz", hash = "sha256:0f6113c1f031248f8818cbee1aa92aa3c9472b7701debcce9fddebcd2f610f11", size = 271395 } +sdist = { url = "https://files.pythonhosted.org/packages/f5/92/4b9d2f4e0f3eabcfc7b02b48261f6e5ad36a3e2c1bbdcc4e3b7b6c768fa6/ndindex-1.10.1.tar.gz", hash = "sha256:0f6113c1f031248f8818cbee1aa92aa3c9472b7701debcce9fddebcd2f610f11", size = 271395, upload-time = "2025-11-19T20:40:08.899Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8c/d9/c94ab6151c9fdd199c2b560f23e3759a9fb86a7a1275855e0b97291bf05a/ndindex-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e2ad917bcdf8dc5ba1e21f01054c991d26862d4d01c3c203a50e907096d558ac", size = 172128 }, - { url = "https://files.pythonhosted.org/packages/3a/34/880c4073750766e44492d51280d025f28e36475394ca3d741b0a4adad4b0/ndindex-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e851990a68937db5f485cd9f3e760c1fd47fa0f2a99f63a5e2cc880908faf3bb", size = 171423 }, - { url = "https://files.pythonhosted.org/packages/f0/1e/0342da55dabe4075efc2b2ab91a6a22ed3047c5bd511ef771a7a3f822c90/ndindex-1.10.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27385939f317b55773ea53f6bf9334810cf1d66206034c0a6a6f2a88f2001c3c", size = 519590 }, - { url = "https://files.pythonhosted.org/packages/fd/cb/7a02b6f29b15a16cd0002f4591d14493eff8e9236f7ca4c02ee4d4bcefbd/ndindex-1.10.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fdf3ca16efcdfbb8800aa88fbab1bc6528e6a0504bcb9cf7af4cb9d50e9f5d9", size = 516676 }, - { url = "https://files.pythonhosted.org/packages/67/d5/38da808f968a54b0fead2d7e15ca011d3df93c96a07f4914e8ef3974506e/ndindex-1.10.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3307817bdc92846b18f309fae3582856f567dd6e0742fb0b41ac68682bfc4e2a", size = 1491141 }, - { url = "https://files.pythonhosted.org/packages/bc/1f/8c66ef982a01ae4cbdabba679a2bc711f262cedf23bfb9682293146f8a98/ndindex-1.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae73cd2d66b09ef2f2a7d7f93bad396d6abf168d1ee825e403c6c5fb8ae1341c", size = 1543876 }, - { url = "https://files.pythonhosted.org/packages/05/a1/7c7e3a3c6e81b4284fd0d53cbaec51d9e5b90df26dd78e9bde06cb307217/ndindex-1.10.1-cp311-cp311-win32.whl", hash = "sha256:890bb92f0a779e6f16bdbcc8bd2e06c32bcc0239e5893ba246114eb924aecaaa", size = 149149 }, - { url = "https://files.pythonhosted.org/packages/3b/38/99e1fb0effdef74b883be615ea0053ebcea28a53fd8b896263f4e99b0113/ndindex-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:1827a40301405b44ad709e388c5b48cf35cd90a67f77e63f0f17d87f6000fa81", size = 157246 }, + { url = "https://files.pythonhosted.org/packages/8c/d9/c94ab6151c9fdd199c2b560f23e3759a9fb86a7a1275855e0b97291bf05a/ndindex-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e2ad917bcdf8dc5ba1e21f01054c991d26862d4d01c3c203a50e907096d558ac", size = 172128, upload-time = "2025-11-19T20:38:28.977Z" }, + { url = "https://files.pythonhosted.org/packages/3a/34/880c4073750766e44492d51280d025f28e36475394ca3d741b0a4adad4b0/ndindex-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e851990a68937db5f485cd9f3e760c1fd47fa0f2a99f63a5e2cc880908faf3bb", size = 171423, upload-time = "2025-11-19T20:38:30.357Z" }, + { url = "https://files.pythonhosted.org/packages/f0/1e/0342da55dabe4075efc2b2ab91a6a22ed3047c5bd511ef771a7a3f822c90/ndindex-1.10.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27385939f317b55773ea53f6bf9334810cf1d66206034c0a6a6f2a88f2001c3c", size = 519590, upload-time = "2025-11-19T20:38:32.464Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cb/7a02b6f29b15a16cd0002f4591d14493eff8e9236f7ca4c02ee4d4bcefbd/ndindex-1.10.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fdf3ca16efcdfbb8800aa88fbab1bc6528e6a0504bcb9cf7af4cb9d50e9f5d9", size = 516676, upload-time = "2025-11-19T20:38:34.276Z" }, + { url = "https://files.pythonhosted.org/packages/67/d5/38da808f968a54b0fead2d7e15ca011d3df93c96a07f4914e8ef3974506e/ndindex-1.10.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3307817bdc92846b18f309fae3582856f567dd6e0742fb0b41ac68682bfc4e2a", size = 1491141, upload-time = "2025-11-19T20:38:35.785Z" }, + { url = "https://files.pythonhosted.org/packages/bc/1f/8c66ef982a01ae4cbdabba679a2bc711f262cedf23bfb9682293146f8a98/ndindex-1.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae73cd2d66b09ef2f2a7d7f93bad396d6abf168d1ee825e403c6c5fb8ae1341c", size = 1543876, upload-time = "2025-11-19T20:38:37.456Z" }, + { url = "https://files.pythonhosted.org/packages/05/a1/7c7e3a3c6e81b4284fd0d53cbaec51d9e5b90df26dd78e9bde06cb307217/ndindex-1.10.1-cp311-cp311-win32.whl", hash = "sha256:890bb92f0a779e6f16bdbcc8bd2e06c32bcc0239e5893ba246114eb924aecaaa", size = 149149, upload-time = "2025-11-19T20:38:38.911Z" }, + { url = "https://files.pythonhosted.org/packages/3b/38/99e1fb0effdef74b883be615ea0053ebcea28a53fd8b896263f4e99b0113/ndindex-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:1827a40301405b44ad709e388c5b48cf35cd90a67f77e63f0f17d87f6000fa81", size = 157246, upload-time = "2025-11-19T20:38:40.197Z" }, ] [[package]] name = "nest-asyncio" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, ] [[package]] name = "networkx" version = "3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fd/a1/47b974da1a73f063c158a1f4cc33ed0abf7c04f98a19050e80c533c31f0c/networkx-3.1.tar.gz", hash = "sha256:de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61", size = 2021691 } +sdist = { url = "https://files.pythonhosted.org/packages/fd/a1/47b974da1a73f063c158a1f4cc33ed0abf7c04f98a19050e80c533c31f0c/networkx-3.1.tar.gz", hash = "sha256:de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61", size = 2021691, upload-time = "2023-04-04T20:07:56.693Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/05/9d4f9b78ead6b2661d6e8ea772e111fc4a9fbd866ad0c81906c11206b55e/networkx-3.1-py3-none-any.whl", hash = "sha256:4f33f68cb2afcf86f28a45f43efc27a9386b535d567d2127f8f61d51dec58d36", size = 2072251 }, + { url = "https://files.pythonhosted.org/packages/a8/05/9d4f9b78ead6b2661d6e8ea772e111fc4a9fbd866ad0c81906c11206b55e/networkx-3.1-py3-none-any.whl", hash = "sha256:4f33f68cb2afcf86f28a45f43efc27a9386b535d567d2127f8f61d51dec58d36", size = 2072251, upload-time = "2023-04-04T20:07:53.63Z" }, ] [[package]] @@ -1253,9 +1575,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/05/bc/b025bac523640c13b0c1150466475eac3d79acbf187ef6c1967596c41c43/notebook-6.5.7.tar.gz", hash = "sha256:04eb9011dfac634fbd4442adaf0a8c27cd26beef831fe1d19faf930c327768e4", size = 5786526 } +sdist = { url = "https://files.pythonhosted.org/packages/05/bc/b025bac523640c13b0c1150466475eac3d79acbf187ef6c1967596c41c43/notebook-6.5.7.tar.gz", hash = "sha256:04eb9011dfac634fbd4442adaf0a8c27cd26beef831fe1d19faf930c327768e4", size = 5786526, upload-time = "2024-05-01T17:42:26.956Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/af/9c/0620631da9d7013e95a8f985043cad229a0d8fb537a7e3f8ff8467565a8c/notebook-6.5.7-py3-none-any.whl", hash = "sha256:a6afa9a4ff4d149a0771ff8b8c881a7a73b3835f9add0606696d6e9d98ac1cd0", size = 529829 }, + { url = "https://files.pythonhosted.org/packages/af/9c/0620631da9d7013e95a8f985043cad229a0d8fb537a7e3f8ff8467565a8c/notebook-6.5.7-py3-none-any.whl", hash = "sha256:a6afa9a4ff4d149a0771ff8b8c881a7a73b3835f9add0606696d6e9d98ac1cd0", size = 529829, upload-time = "2024-05-01T17:42:22.403Z" }, ] [[package]] @@ -1265,9 +1587,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-server" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/54/d2/92fa3243712b9a3e8bafaf60aac366da1cada3639ca767ff4b5b3654ec28/notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb", size = 13167 } +sdist = { url = "https://files.pythonhosted.org/packages/54/d2/92fa3243712b9a3e8bafaf60aac366da1cada3639ca767ff4b5b3654ec28/notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb", size = 13167, upload-time = "2024-02-14T23:35:18.353Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307 }, + { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307, upload-time = "2024-02-14T23:35:16.286Z" }, ] [[package]] @@ -1277,32 +1599,32 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cb/2f/fdba158c9dbe5caca9c3eca3eaffffb251f2fb8674bf8e2d0aed5f38d319/numexpr-2.14.1.tar.gz", hash = "sha256:4be00b1086c7b7a5c32e31558122b7b80243fe098579b170967da83f3152b48b", size = 119400 } +sdist = { url = "https://files.pythonhosted.org/packages/cb/2f/fdba158c9dbe5caca9c3eca3eaffffb251f2fb8674bf8e2d0aed5f38d319/numexpr-2.14.1.tar.gz", hash = "sha256:4be00b1086c7b7a5c32e31558122b7b80243fe098579b170967da83f3152b48b", size = 119400, upload-time = "2025-10-13T16:17:27.351Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b2/a3/67999bdd1ed1f938d38f3fedd4969632f2f197b090e50505f7cc1fa82510/numexpr-2.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2d03fcb4644a12f70a14d74006f72662824da5b6128bf1bcd10cc3ed80e64c34", size = 163195 }, - { url = "https://files.pythonhosted.org/packages/25/95/d64f680ea1fc56d165457287e0851d6708800f9fcea346fc1b9957942ee6/numexpr-2.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2773ee1133f77009a1fc2f34fe236f3d9823779f5f75450e183137d49f00499f", size = 152088 }, - { url = "https://files.pythonhosted.org/packages/0e/7f/3bae417cb13ae08afd86d08bb0301c32440fe0cae4e6262b530e0819aeda/numexpr-2.14.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ebe4980f9494b9f94d10d2e526edc29e72516698d3bf95670ba79415492212a4", size = 451126 }, - { url = "https://files.pythonhosted.org/packages/4c/1a/edbe839109518364ac0bd9e918cf874c755bb2c128040e920f198c494263/numexpr-2.14.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a381e5e919a745c9503bcefffc1c7f98c972c04ec58fc8e999ed1a929e01ba6", size = 442012 }, - { url = "https://files.pythonhosted.org/packages/66/b1/be4ce99bff769a5003baddac103f34681997b31d4640d5a75c0e8ed59c78/numexpr-2.14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d08856cfc1b440eb1caaa60515235369654321995dd68eb9377577392020f6cb", size = 1415975 }, - { url = "https://files.pythonhosted.org/packages/e7/33/b33b8fdc032a05d9ebb44a51bfcd4b92c178a2572cd3e6c1b03d8a4b45b2/numexpr-2.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03130afa04edf83a7b590d207444f05a00363c9b9ea5d81c0f53b1ea13fad55a", size = 1464683 }, - { url = "https://files.pythonhosted.org/packages/d0/b2/ddcf0ac6cf0a1d605e5aecd4281507fd79a9628a67896795ab2e975de5df/numexpr-2.14.1-cp311-cp311-win32.whl", hash = "sha256:db78fa0c9fcbaded3ae7453faf060bd7a18b0dc10299d7fcd02d9362be1213ed", size = 166838 }, - { url = "https://files.pythonhosted.org/packages/64/72/4ca9bd97b2eb6dce9f5e70a3b6acec1a93e1fb9b079cb4cba2cdfbbf295d/numexpr-2.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:e9b2f957798c67a2428be96b04bce85439bed05efe78eb78e4c2ca43737578e7", size = 160069 }, + { url = "https://files.pythonhosted.org/packages/b2/a3/67999bdd1ed1f938d38f3fedd4969632f2f197b090e50505f7cc1fa82510/numexpr-2.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2d03fcb4644a12f70a14d74006f72662824da5b6128bf1bcd10cc3ed80e64c34", size = 163195, upload-time = "2025-10-13T16:16:31.212Z" }, + { url = "https://files.pythonhosted.org/packages/25/95/d64f680ea1fc56d165457287e0851d6708800f9fcea346fc1b9957942ee6/numexpr-2.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2773ee1133f77009a1fc2f34fe236f3d9823779f5f75450e183137d49f00499f", size = 152088, upload-time = "2025-10-13T16:16:33.186Z" }, + { url = "https://files.pythonhosted.org/packages/0e/7f/3bae417cb13ae08afd86d08bb0301c32440fe0cae4e6262b530e0819aeda/numexpr-2.14.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ebe4980f9494b9f94d10d2e526edc29e72516698d3bf95670ba79415492212a4", size = 451126, upload-time = "2025-10-13T16:13:22.248Z" }, + { url = "https://files.pythonhosted.org/packages/4c/1a/edbe839109518364ac0bd9e918cf874c755bb2c128040e920f198c494263/numexpr-2.14.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a381e5e919a745c9503bcefffc1c7f98c972c04ec58fc8e999ed1a929e01ba6", size = 442012, upload-time = "2025-10-13T16:14:51.416Z" }, + { url = "https://files.pythonhosted.org/packages/66/b1/be4ce99bff769a5003baddac103f34681997b31d4640d5a75c0e8ed59c78/numexpr-2.14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d08856cfc1b440eb1caaa60515235369654321995dd68eb9377577392020f6cb", size = 1415975, upload-time = "2025-10-13T16:13:26.088Z" }, + { url = "https://files.pythonhosted.org/packages/e7/33/b33b8fdc032a05d9ebb44a51bfcd4b92c178a2572cd3e6c1b03d8a4b45b2/numexpr-2.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03130afa04edf83a7b590d207444f05a00363c9b9ea5d81c0f53b1ea13fad55a", size = 1464683, upload-time = "2025-10-13T16:14:58.87Z" }, + { url = "https://files.pythonhosted.org/packages/d0/b2/ddcf0ac6cf0a1d605e5aecd4281507fd79a9628a67896795ab2e975de5df/numexpr-2.14.1-cp311-cp311-win32.whl", hash = "sha256:db78fa0c9fcbaded3ae7453faf060bd7a18b0dc10299d7fcd02d9362be1213ed", size = 166838, upload-time = "2025-10-13T16:17:06.765Z" }, + { url = "https://files.pythonhosted.org/packages/64/72/4ca9bd97b2eb6dce9f5e70a3b6acec1a93e1fb9b079cb4cba2cdfbbf295d/numexpr-2.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:e9b2f957798c67a2428be96b04bce85439bed05efe78eb78e4c2ca43737578e7", size = 160069, upload-time = "2025-10-13T16:17:08.752Z" }, ] [[package]] name = "numpy" version = "1.26.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", size = 15786129 } +sdist = { url = "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", size = 15786129, upload-time = "2024-02-06T00:26:44.495Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/57/baae43d14fe163fa0e4c47f307b6b2511ab8d7d30177c491960504252053/numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", size = 20630554 }, - { url = "https://files.pythonhosted.org/packages/1a/2e/151484f49fd03944c4a3ad9c418ed193cfd02724e138ac8a9505d056c582/numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", size = 13997127 }, - { url = "https://files.pythonhosted.org/packages/79/ae/7e5b85136806f9dadf4878bf73cf223fe5c2636818ba3ab1c585d0403164/numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", size = 14222994 }, - { url = "https://files.pythonhosted.org/packages/3a/d0/edc009c27b406c4f9cbc79274d6e46d634d139075492ad055e3d68445925/numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", size = 18252005 }, - { url = "https://files.pythonhosted.org/packages/09/bf/2b1aaf8f525f2923ff6cfcf134ae5e750e279ac65ebf386c75a0cf6da06a/numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", size = 13885297 }, - { url = "https://files.pythonhosted.org/packages/df/a0/4e0f14d847cfc2a633a1c8621d00724f3206cfeddeb66d35698c4e2cf3d2/numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", size = 18093567 }, - { url = "https://files.pythonhosted.org/packages/d2/b7/a734c733286e10a7f1a8ad1ae8c90f2d33bf604a96548e0a4a3a6739b468/numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", size = 5968812 }, - { url = "https://files.pythonhosted.org/packages/3f/6b/5610004206cf7f8e7ad91c5a85a8c71b2f2f8051a0c0c4d5916b76d6cbb2/numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", size = 15811913 }, + { url = "https://files.pythonhosted.org/packages/11/57/baae43d14fe163fa0e4c47f307b6b2511ab8d7d30177c491960504252053/numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", size = 20630554, upload-time = "2024-02-05T23:51:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/1a/2e/151484f49fd03944c4a3ad9c418ed193cfd02724e138ac8a9505d056c582/numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", size = 13997127, upload-time = "2024-02-05T23:52:15.314Z" }, + { url = "https://files.pythonhosted.org/packages/79/ae/7e5b85136806f9dadf4878bf73cf223fe5c2636818ba3ab1c585d0403164/numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", size = 14222994, upload-time = "2024-02-05T23:52:47.569Z" }, + { url = "https://files.pythonhosted.org/packages/3a/d0/edc009c27b406c4f9cbc79274d6e46d634d139075492ad055e3d68445925/numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", size = 18252005, upload-time = "2024-02-05T23:53:15.637Z" }, + { url = "https://files.pythonhosted.org/packages/09/bf/2b1aaf8f525f2923ff6cfcf134ae5e750e279ac65ebf386c75a0cf6da06a/numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", size = 13885297, upload-time = "2024-02-05T23:53:42.16Z" }, + { url = "https://files.pythonhosted.org/packages/df/a0/4e0f14d847cfc2a633a1c8621d00724f3206cfeddeb66d35698c4e2cf3d2/numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", size = 18093567, upload-time = "2024-02-05T23:54:11.696Z" }, + { url = "https://files.pythonhosted.org/packages/d2/b7/a734c733286e10a7f1a8ad1ae8c90f2d33bf604a96548e0a4a3a6739b468/numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", size = 5968812, upload-time = "2024-02-05T23:54:26.453Z" }, + { url = "https://files.pythonhosted.org/packages/3f/6b/5610004206cf7f8e7ad91c5a85a8c71b2f2f8051a0c0c4d5916b76d6cbb2/numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", size = 15811913, upload-time = "2024-02-05T23:54:53.933Z" }, ] [[package]] @@ -1312,27 +1634,50 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "et-xmlfile" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2c/b8/ff77a718173fd73e49f883b4fda88f11af1fc51edb9252af3785b0cad987/openpyxl-3.0.10.tar.gz", hash = "sha256:e47805627aebcf860edb4edf7987b1309c1b3632f3750538ed962bbcc3bd7449", size = 179688 } +sdist = { url = "https://files.pythonhosted.org/packages/2c/b8/ff77a718173fd73e49f883b4fda88f11af1fc51edb9252af3785b0cad987/openpyxl-3.0.10.tar.gz", hash = "sha256:e47805627aebcf860edb4edf7987b1309c1b3632f3750538ed962bbcc3bd7449", size = 179688, upload-time = "2022-05-19T15:43:05.252Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/60/9afac4fd6feee0ac09339de4101ee452ea643d26e9ce44c7708a0023f503/openpyxl-3.0.10-py2.py3-none-any.whl", hash = "sha256:0ab6d25d01799f97a9464630abacbb34aafecdcaa0ef3cba6d6b3499867d0355", size = 242144 }, + { url = "https://files.pythonhosted.org/packages/7b/60/9afac4fd6feee0ac09339de4101ee452ea643d26e9ce44c7708a0023f503/openpyxl-3.0.10-py2.py3-none-any.whl", hash = "sha256:0ab6d25d01799f97a9464630abacbb34aafecdcaa0ef3cba6d6b3499867d0355", size = 242144, upload-time = "2022-05-19T15:43:03.065Z" }, +] + +[[package]] +name = "orjson" +version = "3.11.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/0c/964746fcafbd16f8ff53219ad9f6b412b34f345c75f384ad434ceaadb538/orjson-3.11.9.tar.gz", hash = "sha256:4fef17e1f8722c11587a6ef18e35902450221da0028e65dbaaa543619e68e48f", size = 5599163, upload-time = "2026-05-06T15:11:08.309Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/51/3fb9e65ae76ee97bd611869a503fa3fc0a6e81dd8b737cf3003f682df7ff/orjson-3.11.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f01c4818b3fc9b0da8e096722a84318071eaa118df35f6ed2344da0e73a5444f", size = 228522, upload-time = "2026-05-06T15:09:35.362Z" }, + { url = "https://files.pythonhosted.org/packages/16/fa/9d54b07cb3f3b0bfd57841478e42d7a0ece4a9f49f9907eecf5a45461687/orjson-3.11.9-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:3ebca4179031ee716ed076ffadc29428e900512f6fccee8614c9983157fcf19c", size = 128463, upload-time = "2026-05-06T15:09:37.063Z" }, + { url = "https://files.pythonhosted.org/packages/88/b1/6ceafc2eefd0a553e3be77ce6c49d107e772485d9568629376171c50e634/orjson-3.11.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48ee05097750de0ff69ed5b7bbcf0732182fd57a24043dcc2a1da780a5ead3a5", size = 132306, upload-time = "2026-05-06T15:09:38.299Z" }, + { url = "https://files.pythonhosted.org/packages/ea/76/f11311285324a40aab1e3031385c50b635a7cd0734fdaf60c7e89a696f60/orjson-3.11.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a6082706765a95a6680d812e1daf1c0cfe8adec7831b3ff3b625693f3b461b1c", size = 127988, upload-time = "2026-05-06T15:09:39.597Z" }, + { url = "https://files.pythonhosted.org/packages/9e/85/0ef63bcf1337f44031ce9b91b1919563f62a37527b3ea4368bb15a22e5d7/orjson-3.11.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:277fefe9d76ee17eb14debf399e3533d4d63b5f677a4d3719eb763536af1f4bd", size = 135188, upload-time = "2026-05-06T15:09:40.957Z" }, + { url = "https://files.pythonhosted.org/packages/05/94/b0d27090ea8a2095db3c2bd1b1c96f96f19bbb494d7fef33130e846e613d/orjson-3.11.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03db380e3780fa0015ed776a90f20e8e20bb11dde13b216ce19e5718e3dfba62", size = 145937, upload-time = "2026-05-06T15:09:42.249Z" }, + { url = "https://files.pythonhosted.org/packages/09/eb/75d50c29c05b8054013e221e598820a365c8e64065312e75e202ed880709/orjson-3.11.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33d7d766701847dc6729846362dc27895d2f2d2251264f9d10e7cb9878194877", size = 132758, upload-time = "2026-05-06T15:09:43.945Z" }, + { url = "https://files.pythonhosted.org/packages/49/bd/360686f39348aa88827cb6fbf7dc606fd41c831a35235e1abf1db8e3a9e6/orjson-3.11.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:147302878da387104b66bb4a8b0227d1d487e976ce41a8501916161072ed87b1", size = 133971, upload-time = "2026-05-06T15:09:45.239Z" }, + { url = "https://files.pythonhosted.org/packages/0e/30/3178eb16f3221aeef068b6f1f1ebe05f656ea5c6dffe9f6c917329fe17a3/orjson-3.11.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3513550321f8c8c811a7c3297b8a630e82dc08e4c10216d07703c997776236cd", size = 141685, upload-time = "2026-05-06T15:09:46.858Z" }, + { url = "https://files.pythonhosted.org/packages/5f/f1/ff2f19ed0225f9680fafa42febca3570dd59444ebf190980738d376214c2/orjson-3.11.9-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:c5d001196b89fa9cf0a4ab79766cd835b991a166e4b621ba95089edc50c429ff", size = 415167, upload-time = "2026-05-06T15:09:48.312Z" }, + { url = "https://files.pythonhosted.org/packages/9b/61/863bddf0da6e9e586765414debd54b4e58db05f560902b6d00658cb88636/orjson-3.11.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:16969c9d369c98eb084889c6e4d2d39b77c7eb38ceccf8da2a9fff62ae908980", size = 147913, upload-time = "2026-05-06T15:09:49.733Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8a/4081492586d75b073d60c5271a8d0f05a0955cabf1e34c8473f6fcd84235/orjson-3.11.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:63e0efbc991250c0b3143488fa57d95affcabbfc63c99c48d625dd37779aafe2", size = 136959, upload-time = "2026-05-06T15:09:51.311Z" }, + { url = "https://files.pythonhosted.org/packages/0d/bd/70b6ab193594d7abb875320c0a7c8335e846f28968c432c31042409c3c8d/orjson-3.11.9-cp311-cp311-win32.whl", hash = "sha256:14ed654580c1ed2bc217352ec82f91b047aef82951aa71c7f64e0dcb03c0e180", size = 131533, upload-time = "2026-05-06T15:09:52.637Z" }, + { url = "https://files.pythonhosted.org/packages/3f/17/1a1a228183d62d1b77e2c30d210f47dd4768b310ebe1607c63e3c0e3a71e/orjson-3.11.9-cp311-cp311-win_amd64.whl", hash = "sha256:57ea77fb70a448ce87d18fca050193202a3da5e54598f6501ca5476fb66cfe02", size = 127106, upload-time = "2026-05-06T15:09:54.204Z" }, + { url = "https://files.pythonhosted.org/packages/b8/95/285de5fa296d09681ee9c546cd4a8aeb773b701cf343dc125994f4d52953/orjson-3.11.9-cp311-cp311-win_arm64.whl", hash = "sha256:19b72ed11572a2ee51a67a903afbe5af504f84ed6f529c0fe44b0ab3fb5cc697", size = 126848, upload-time = "2026-05-06T15:09:55.551Z" }, ] [[package]] name = "overrides" version = "7.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812 } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812, upload-time = "2024-01-27T21:01:33.423Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832 }, + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832, upload-time = "2024-01-27T21:01:31.393Z" }, ] [[package]] name = "packaging" version = "26.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134 } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195 }, + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, ] [[package]] @@ -1345,32 +1690,32 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/a7/824332581e258b5aa4f3763ecb2a797e5f9a54269044ba2e50ac19936b32/pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c", size = 5284455 } +sdist = { url = "https://files.pythonhosted.org/packages/b1/a7/824332581e258b5aa4f3763ecb2a797e5f9a54269044ba2e50ac19936b32/pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c", size = 5284455, upload-time = "2023-06-28T23:19:33.371Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/92/a5e5133421b49e901a12e02a6a7ef3a0130e10d13db8cb657fdd0cba3b90/pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8", size = 11645672 }, - { url = "https://files.pythonhosted.org/packages/8f/bb/aea1fbeed5b474cb8634364718abe9030d7cc7a30bf51f40bd494bbc89a2/pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26", size = 10693229 }, - { url = "https://files.pythonhosted.org/packages/d6/90/e7d387f1a416b14e59290baa7a454a90d719baebbf77433ff1bdcc727800/pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d", size = 11581591 }, - { url = "https://files.pythonhosted.org/packages/d0/28/88b81881c056376254618fad622a5e94b5126db8c61157ea1910cd1c040a/pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df", size = 12219370 }, - { url = "https://files.pythonhosted.org/packages/e4/a5/212b9039e25bf8ebb97e417a96660e3dc925dacd3f8653d531b8f7fd9be4/pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd", size = 9482935 }, - { url = "https://files.pythonhosted.org/packages/9e/71/756a1be6bee0209d8c0d8c5e3b9fc72c00373f384a4017095ec404aec3ad/pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b", size = 10607692 }, + { url = "https://files.pythonhosted.org/packages/b3/92/a5e5133421b49e901a12e02a6a7ef3a0130e10d13db8cb657fdd0cba3b90/pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8", size = 11645672, upload-time = "2023-06-28T23:16:47.601Z" }, + { url = "https://files.pythonhosted.org/packages/8f/bb/aea1fbeed5b474cb8634364718abe9030d7cc7a30bf51f40bd494bbc89a2/pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26", size = 10693229, upload-time = "2023-06-28T23:16:56.397Z" }, + { url = "https://files.pythonhosted.org/packages/d6/90/e7d387f1a416b14e59290baa7a454a90d719baebbf77433ff1bdcc727800/pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d", size = 11581591, upload-time = "2023-06-28T23:17:04.234Z" }, + { url = "https://files.pythonhosted.org/packages/d0/28/88b81881c056376254618fad622a5e94b5126db8c61157ea1910cd1c040a/pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df", size = 12219370, upload-time = "2023-06-28T23:17:11.783Z" }, + { url = "https://files.pythonhosted.org/packages/e4/a5/212b9039e25bf8ebb97e417a96660e3dc925dacd3f8653d531b8f7fd9be4/pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd", size = 9482935, upload-time = "2023-06-28T23:17:21.376Z" }, + { url = "https://files.pythonhosted.org/packages/9e/71/756a1be6bee0209d8c0d8c5e3b9fc72c00373f384a4017095ec404aec3ad/pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b", size = 10607692, upload-time = "2023-06-28T23:17:28.824Z" }, ] [[package]] name = "pandocfilters" version = "1.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454 } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454, upload-time = "2024-01-18T20:08:13.726Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663 }, + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663, upload-time = "2024-01-18T20:08:11.28Z" }, ] [[package]] name = "parso" version = "0.8.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/4b/90c937815137d43ce71ba043cd3566221e9df6b9c805f24b5d138c9d40a7/parso-0.8.7.tar.gz", hash = "sha256:eaaac4c9fdd5e9e8852dc778d2d7405897ec510f2a298071453e5e3a07914bb1", size = 401824 } +sdist = { url = "https://files.pythonhosted.org/packages/30/4b/90c937815137d43ce71ba043cd3566221e9df6b9c805f24b5d138c9d40a7/parso-0.8.7.tar.gz", hash = "sha256:eaaac4c9fdd5e9e8852dc778d2d7405897ec510f2a298071453e5e3a07914bb1", size = 401824, upload-time = "2026-05-01T23:13:02.138Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl", hash = "sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c", size = 107025 }, + { url = "https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl", hash = "sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c", size = 107025, upload-time = "2026-05-01T23:12:58.867Z" }, ] [[package]] @@ -1380,56 +1725,70 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ptyprocess" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, ] [[package]] name = "pillow" version = "9.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/00/d5/4903f310765e0ff2b8e91ffe55031ac6af77d982f0156061e20a4d1a8b2d/Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1", size = 50488147 } +sdist = { url = "https://files.pythonhosted.org/packages/00/d5/4903f310765e0ff2b8e91ffe55031ac6af77d982f0156061e20a4d1a8b2d/Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1", size = 50488147, upload-time = "2023-04-01T09:31:37.159Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/a8/3c2d737d856eb9cd8c18e78f6fe0ed08a2805bded74cbb0455584859023b/Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32", size = 3395792 }, - { url = "https://files.pythonhosted.org/packages/a9/15/310cde63cb15a091de889ded26281924cf9cfa5c000b36b06bd0c7f50261/Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c", size = 3077092 }, - { url = "https://files.pythonhosted.org/packages/17/66/20db69c0361902a2f6ee2086d3e83c70133e3fb4cb31470e59a8ed37184e/Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3", size = 3112543 }, - { url = "https://files.pythonhosted.org/packages/5c/a8/ff526cdec6b56eb20c992e7083f02c8065049ed1e62fbc159390d7a3dd5e/Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a", size = 3386654 }, - { url = "https://files.pythonhosted.org/packages/3b/70/e9a45a2e9c58c23e023fcda5af9686f5b42c718cc9bc86194e0025cf0ec5/Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1", size = 3308566 }, - { url = "https://files.pythonhosted.org/packages/61/a5/ee306d6cc53c9a30c23ba2313b43b67fdf76c611ca5afd0cdd62922cbd3e/Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99", size = 3164027 }, - { url = "https://files.pythonhosted.org/packages/3d/59/e6bd2c3715ace343d9739276ceed79657fe116923238d102cf731ab463dd/Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625", size = 3415610 }, - { url = "https://files.pythonhosted.org/packages/9a/6d/9beb596ba5a5e61081c843187bcdbb42a5c9a9ef552751b554894247da7a/Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579", size = 3350704 }, - { url = "https://files.pythonhosted.org/packages/1e/e4/de633d85be3b3c770c554a37a89e8273069bd19c34b15a419c2795600310/Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296", size = 3414604 }, - { url = "https://files.pythonhosted.org/packages/46/a0/e410f655300932308e70e883dd60c0c51e6f74bed138641ea9193e64fd7c/Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec", size = 2211929 }, - { url = "https://files.pythonhosted.org/packages/0c/02/7729c8aecbc525b560c7eb283ffa34c6f5a6d0ed6d1339570c65a3e63088/Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4", size = 2511551 }, - { url = "https://files.pythonhosted.org/packages/b9/8b/d38cc68796be4ac238db327682a1acfbc5deccf64a150aa44ee1efbaafae/Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089", size = 2489206 }, + { url = "https://files.pythonhosted.org/packages/78/a8/3c2d737d856eb9cd8c18e78f6fe0ed08a2805bded74cbb0455584859023b/Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32", size = 3395792, upload-time = "2023-04-01T09:28:38.917Z" }, + { url = "https://files.pythonhosted.org/packages/a9/15/310cde63cb15a091de889ded26281924cf9cfa5c000b36b06bd0c7f50261/Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c", size = 3077092, upload-time = "2023-04-01T09:28:41.28Z" }, + { url = "https://files.pythonhosted.org/packages/17/66/20db69c0361902a2f6ee2086d3e83c70133e3fb4cb31470e59a8ed37184e/Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3", size = 3112543, upload-time = "2023-04-01T09:28:43.89Z" }, + { url = "https://files.pythonhosted.org/packages/5c/a8/ff526cdec6b56eb20c992e7083f02c8065049ed1e62fbc159390d7a3dd5e/Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a", size = 3386654, upload-time = "2023-04-01T09:28:46.378Z" }, + { url = "https://files.pythonhosted.org/packages/3b/70/e9a45a2e9c58c23e023fcda5af9686f5b42c718cc9bc86194e0025cf0ec5/Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1", size = 3308566, upload-time = "2023-04-01T09:28:49.521Z" }, + { url = "https://files.pythonhosted.org/packages/61/a5/ee306d6cc53c9a30c23ba2313b43b67fdf76c611ca5afd0cdd62922cbd3e/Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99", size = 3164027, upload-time = "2023-04-01T09:28:52.295Z" }, + { url = "https://files.pythonhosted.org/packages/3d/59/e6bd2c3715ace343d9739276ceed79657fe116923238d102cf731ab463dd/Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625", size = 3415610, upload-time = "2023-04-01T09:28:54.667Z" }, + { url = "https://files.pythonhosted.org/packages/9a/6d/9beb596ba5a5e61081c843187bcdbb42a5c9a9ef552751b554894247da7a/Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579", size = 3350704, upload-time = "2023-04-01T09:28:57.098Z" }, + { url = "https://files.pythonhosted.org/packages/1e/e4/de633d85be3b3c770c554a37a89e8273069bd19c34b15a419c2795600310/Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296", size = 3414604, upload-time = "2023-04-01T09:29:03.375Z" }, + { url = "https://files.pythonhosted.org/packages/46/a0/e410f655300932308e70e883dd60c0c51e6f74bed138641ea9193e64fd7c/Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec", size = 2211929, upload-time = "2023-04-01T09:29:06.338Z" }, + { url = "https://files.pythonhosted.org/packages/0c/02/7729c8aecbc525b560c7eb283ffa34c6f5a6d0ed6d1339570c65a3e63088/Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4", size = 2511551, upload-time = "2023-04-01T09:29:08.636Z" }, + { url = "https://files.pythonhosted.org/packages/b9/8b/d38cc68796be4ac238db327682a1acfbc5deccf64a150aa44ee1efbaafae/Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089", size = 2489206, upload-time = "2023-04-01T20:01:51.312Z" }, ] [[package]] name = "platformdirs" -version = "4.9.6" +version = "4.3.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9f/4a/0883b8e3802965322523f0b200ecf33d31f10991d0401162f4b23c698b42/platformdirs-4.9.6.tar.gz", hash = "sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a", size = 29400 } +sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload-time = "2025-05-07T22:47:42.121Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348 }, + { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload-time = "2025-05-07T22:47:40.376Z" }, ] [[package]] name = "pluggy" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "polars" +version = "1.32.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/f2/1a76a8bd902bc4942e435a480f362c8687bba60d438ff3283191e38568fa/polars-1.32.3.tar.gz", hash = "sha256:57c500dc1b5cba49b0589034478db031815f3d57a20cb830b05ecee1a9ba56b1", size = 4838448, upload-time = "2025-08-14T17:28:10.702Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, + { url = "https://files.pythonhosted.org/packages/4c/9b/5937ab9f8fa49c8e00617aeb817a5ffa5740434d5bb8a90f2afa657875aa/polars-1.32.3-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c7c472ea1d50a5104079cb64e34f78f85774bcc69b875ba8daf21233f4c70d42", size = 37935794, upload-time = "2025-08-14T17:26:55.565Z" }, + { url = "https://files.pythonhosted.org/packages/6e/e9/88f5332001b9dd5c8e0a4fab51015f740e01715a081c41bc0f7ad2bf76a5/polars-1.32.3-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:fd87275f0cc795e72a2030b58293198cfa748d4b009cf52218e27db5397ed07f", size = 34621102, upload-time = "2025-08-14T17:27:00.521Z" }, + { url = "https://files.pythonhosted.org/packages/ab/8a/6f56af7e535c34c95decc8654786bfce4632ba32817dc2f8bad18571ef9a/polars-1.32.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a9b9668ef310e5a77a7e7daa9c753874779c8da52e93f654bfd7953eb4b60b", size = 38443071, upload-time = "2025-08-14T17:27:08.382Z" }, + { url = "https://files.pythonhosted.org/packages/46/aa/63536ea5780edc0ef6850679dc81d519f3966c7bb11a5cf10ccecb541095/polars-1.32.3-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:c8f5d2f43b80b68e39bfaa2948ce632563633466576f12e74e8560d6481f5851", size = 35639598, upload-time = "2025-08-14T17:27:12.261Z" }, + { url = "https://files.pythonhosted.org/packages/d7/c8/226953cda6cf9ae63aa9714d396a9138029e31db3c504c15d6711b618f8f/polars-1.32.3-cp39-abi3-win_amd64.whl", hash = "sha256:db56a7cb4898e173d62634e182f74bdff744c62be5470e0fe20df8d10f659af7", size = 38038192, upload-time = "2025-08-14T17:27:15.993Z" }, + { url = "https://files.pythonhosted.org/packages/ec/99/6b93c854e602927a778eabd7550204f700cc4e6c07be73372371583dda3e/polars-1.32.3-cp39-abi3-win_arm64.whl", hash = "sha256:a2e3f87c60f54eefe67b1bebd3105918d84df0fd6d59cc6b870c2f16d2d26ca1", size = 34198919, upload-time = "2025-08-14T17:27:21.423Z" }, ] [[package]] name = "prometheus-client" version = "0.25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1b/fb/d9aa83ffe43ce1f19e557c0971d04b90561b0cfd50762aafb01968285553/prometheus_client-0.25.0.tar.gz", hash = "sha256:5e373b75c31afb3c86f1a52fa1ad470c9aace18082d39ec0d2f918d11cc9ba28", size = 86035 } +sdist = { url = "https://files.pythonhosted.org/packages/1b/fb/d9aa83ffe43ce1f19e557c0971d04b90561b0cfd50762aafb01968285553/prometheus_client-0.25.0.tar.gz", hash = "sha256:5e373b75c31afb3c86f1a52fa1ad470c9aace18082d39ec0d2f918d11cc9ba28", size = 86035, upload-time = "2026-04-09T19:53:42.359Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/9b/d4b1e644385499c8346fa9b622a3f030dce14cd6ef8a1871c221a17a67e7/prometheus_client-0.25.0-py3-none-any.whl", hash = "sha256:d5aec89e349a6ec230805d0df882f3807f74fd6c1a2fa86864e3c2279059fed1", size = 64154 }, + { url = "https://files.pythonhosted.org/packages/8d/9b/d4b1e644385499c8346fa9b622a3f030dce14cd6ef8a1871c221a17a67e7/prometheus_client-0.25.0-py3-none-any.whl", hash = "sha256:d5aec89e349a6ec230805d0df882f3807f74fd6c1a2fa86864e3c2279059fed1", size = 64154, upload-time = "2026-04-09T19:53:41.324Z" }, ] [[package]] @@ -1439,61 +1798,102 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198 } +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, +] + +[[package]] +name = "propcache" +version = "0.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/44/c87281c333769159c50594f22610f77398a47ccbfbbf23074e744e86f87c/propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427", size = 50208, upload-time = "2026-05-08T21:02:12.199Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431 }, + { url = "https://files.pythonhosted.org/packages/e7/f1/8a8cc1c2c7e7934ab77e0163414f736fadbc0f5e8dd9673b952355ac175b/propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78", size = 90744, upload-time = "2026-05-08T20:59:45.799Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f4/651b1225e976bd1a2ba5cfba0c29d096581c2636b437e3a9a7ab6276270a/propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959", size = 52033, upload-time = "2026-05-08T20:59:47.408Z" }, + { url = "https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7", size = 52754, upload-time = "2026-05-08T20:59:49.202Z" }, + { url = "https://files.pythonhosted.org/packages/7d/fe/b3551b41bbc2f5b5bb088fc6920567cd43101253e68fbaa261339eb96fe1/propcache-0.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2293949b855ce597f2826452d17c2d545fb5622379c4ea6fdf525e9b8e8a2511", size = 57573, upload-time = "2026-05-08T20:59:50.778Z" }, + { url = "https://files.pythonhosted.org/packages/83/27/ab851ebd1b7172e3e161f5f8d39e315d54a91bea246f01f4d872d3376aef/propcache-0.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660", size = 60645, upload-time = "2026-05-08T20:59:52.227Z" }, + { url = "https://files.pythonhosted.org/packages/95/7d/466b3d18022e9897cbda9c735c493c5bd747d7a4c6f5ea1480b4cec434b6/propcache-0.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66", size = 61563, upload-time = "2026-05-08T20:59:53.866Z" }, + { url = "https://files.pythonhosted.org/packages/27/1b/16ab7f2cf2041da2f60d156ba64c2484eadf9168075b4ff43c3ef60045af/propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b", size = 58888, upload-time = "2026-05-08T20:59:55.457Z" }, + { url = "https://files.pythonhosted.org/packages/0a/67/bb777ffd907633563bf35fd859c4ce97b0512c32f4633cf5d1eb7c33512b/propcache-0.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67", size = 59253, upload-time = "2026-05-08T20:59:57.075Z" }, + { url = "https://files.pythonhosted.org/packages/b9/42/64f8d90b73fd9cdc1499b48057ff6d9cd2a98a25734c9bb62ecf07e87061/propcache-0.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:95f1e3f4760d404b13c9976c0229b2b49a3c8e2c62a9ce92efdd2b11ada75e3f", size = 57558, upload-time = "2026-05-08T20:59:58.602Z" }, + { url = "https://files.pythonhosted.org/packages/eb/02/dba5bc03c9041f2092ea55a449caf5dfe68352c6654511b29ba0654ddb69/propcache-0.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c", size = 55007, upload-time = "2026-05-08T20:59:59.837Z" }, + { url = "https://files.pythonhosted.org/packages/14/c0/43f649c7aa2a77a3b100d84e9dea3a483120ecb608bfe36ce49eaff517fe/propcache-0.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0", size = 60355, upload-time = "2026-05-08T21:00:01.144Z" }, + { url = "https://files.pythonhosted.org/packages/83/c0/435dafd27f1cb4a495381dae60e25883ccfe4020bb72818e8184c1678092/propcache-0.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6", size = 59057, upload-time = "2026-05-08T21:00:02.401Z" }, + { url = "https://files.pythonhosted.org/packages/53/ae/6e292df9135d659944e96cb3389258e4a663e5b2b5f6c217ef0ddc8d2f73/propcache-0.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e59bc9e66329185b93dab73f210f1a37f81cb40f321501db8017c9aea15dba27", size = 61938, upload-time = "2026-05-08T21:00:03.638Z" }, + { url = "https://files.pythonhosted.org/packages/0b/42/314ebc50d8159055411fd6b0bda322ff510e4b1f7d2e4927940ad0f6af20/propcache-0.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f", size = 59731, upload-time = "2026-05-08T21:00:04.881Z" }, + { url = "https://files.pythonhosted.org/packages/b8/9b/2da6dee38871c3c8772fabc2758325a5c9077d6d18c597737dc04dd884cd/propcache-0.5.2-cp311-cp311-win32.whl", hash = "sha256:cd416c1de191973c52ff1a12a57446bfc7642797b282d7caf2162d7d1b8aa9a0", size = 38966, upload-time = "2026-05-08T21:00:06.511Z" }, + { url = "https://files.pythonhosted.org/packages/42/4e/f17363fb58c0afe05b067361cb6d86ed2d29de6506779a27547c4d183075/propcache-0.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:44e488ef40dbb452700b2b1f8188934121f6648f52c295055662d2191959ff82", size = 42135, upload-time = "2026-05-08T21:00:08.088Z" }, + { url = "https://files.pythonhosted.org/packages/c6/eb/6af6685077d22e8b33358d3c548e3282706a0b3cd85044ffba4e5dd08e3b/propcache-0.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:54adaa85a22078d1e306304a40984dc5be99d599bf3dc0a24dc98f7daeab89ab", size = 38381, upload-time = "2026-05-08T21:00:09.692Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" }, ] [[package]] name = "psutil" version = "7.2.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740 } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090 }, - { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859 }, - { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560 }, - { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997 }, - { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972 }, - { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266 }, - { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737 }, - { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617 }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, ] [[package]] name = "ptyprocess" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, ] [[package]] name = "pulp" version = "2.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/59/41/44d617a67407ea5db026500025b8aa7cad0b2b52621c04991b248c3b383d/PuLP-2.7.0.tar.gz", hash = "sha256:e73ee6b32d639c9b8cf4b4aded334ba158be5f8313544e056f796ace0a10ae63", size = 1400315 } +sdist = { url = "https://files.pythonhosted.org/packages/59/41/44d617a67407ea5db026500025b8aa7cad0b2b52621c04991b248c3b383d/PuLP-2.7.0.tar.gz", hash = "sha256:e73ee6b32d639c9b8cf4b4aded334ba158be5f8313544e056f796ace0a10ae63", size = 1400315, upload-time = "2022-11-03T11:11:59.057Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/60/b91acaa7995bfcd72f1739ea2b0f5cda707329e17f0b7f921fd8acc79889/PuLP-2.7.0-py3-none-any.whl", hash = "sha256:b6de42c929e80325bf44cc7a2997f02535440800c376b9eb8cb7b4670ed53769", size = 14251631 }, + { url = "https://files.pythonhosted.org/packages/a6/60/b91acaa7995bfcd72f1739ea2b0f5cda707329e17f0b7f921fd8acc79889/PuLP-2.7.0-py3-none-any.whl", hash = "sha256:b6de42c929e80325bf44cc7a2997f02535440800c376b9eb8cb7b4670ed53769", size = 14251631, upload-time = "2022-11-03T11:11:56.817Z" }, ] [[package]] name = "pure-eval" version = "0.2.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, ] [[package]] name = "py-cpuinfo" version = "9.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/37/a8/d832f7293ebb21690860d2e01d8115e5ff6f2ae8bbdc953f0eb0fa4bd2c7/py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690", size = 104716 } +sdist = { url = "https://files.pythonhosted.org/packages/37/a8/d832f7293ebb21690860d2e01d8115e5ff6f2ae8bbdc953f0eb0fa4bd2c7/py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690", size = 104716, upload-time = "2022-10-25T20:38:06.303Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335 }, + { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335, upload-time = "2022-10-25T20:38:27.636Z" }, +] + +[[package]] +name = "pyarrow" +version = "21.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/c2/ea068b8f00905c06329a3dfcd40d0fcc2b7d0f2e355bdb25b65e0a0e4cd4/pyarrow-21.0.0.tar.gz", hash = "sha256:5051f2dccf0e283ff56335760cbc8622cf52264d67e359d5569541ac11b6d5bc", size = 1133487, upload-time = "2025-07-18T00:57:31.761Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/dc/80564a3071a57c20b7c32575e4a0120e8a330ef487c319b122942d665960/pyarrow-21.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c077f48aab61738c237802836fc3844f85409a46015635198761b0d6a688f87b", size = 31243234, upload-time = "2025-07-18T00:55:03.812Z" }, + { url = "https://files.pythonhosted.org/packages/ea/cc/3b51cb2db26fe535d14f74cab4c79b191ed9a8cd4cbba45e2379b5ca2746/pyarrow-21.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:689f448066781856237eca8d1975b98cace19b8dd2ab6145bf49475478bcaa10", size = 32714370, upload-time = "2025-07-18T00:55:07.495Z" }, + { url = "https://files.pythonhosted.org/packages/24/11/a4431f36d5ad7d83b87146f515c063e4d07ef0b7240876ddb885e6b44f2e/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:479ee41399fcddc46159a551705b89c05f11e8b8cb8e968f7fec64f62d91985e", size = 41135424, upload-time = "2025-07-18T00:55:11.461Z" }, + { url = "https://files.pythonhosted.org/packages/74/dc/035d54638fc5d2971cbf1e987ccd45f1091c83bcf747281cf6cc25e72c88/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:40ebfcb54a4f11bcde86bc586cbd0272bac0d516cfa539c799c2453768477569", size = 42823810, upload-time = "2025-07-18T00:55:16.301Z" }, + { url = "https://files.pythonhosted.org/packages/2e/3b/89fced102448a9e3e0d4dded1f37fa3ce4700f02cdb8665457fcc8015f5b/pyarrow-21.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8d58d8497814274d3d20214fbb24abcad2f7e351474357d552a8d53bce70c70e", size = 43391538, upload-time = "2025-07-18T00:55:23.82Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bb/ea7f1bd08978d39debd3b23611c293f64a642557e8141c80635d501e6d53/pyarrow-21.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:585e7224f21124dd57836b1530ac8f2df2afc43c861d7bf3d58a4870c42ae36c", size = 45120056, upload-time = "2025-07-18T00:55:28.231Z" }, + { url = "https://files.pythonhosted.org/packages/6e/0b/77ea0600009842b30ceebc3337639a7380cd946061b620ac1a2f3cb541e2/pyarrow-21.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:555ca6935b2cbca2c0e932bedd853e9bc523098c39636de9ad4693b5b1df86d6", size = 26220568, upload-time = "2025-07-18T00:55:32.122Z" }, ] [[package]] @@ -1504,9 +1904,9 @@ dependencies = [ { name = "latexcodec" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4d/f5/f30da9c93f0fa6d619332b2f69597219b625f35780473a05164a9981fd9a/pybtex-0.26.1.tar.gz", hash = "sha256:2e5543bea424e60e9e42eef70bff597be48649d8f68ba061a7a092b2477d5464", size = 692991 } +sdist = { url = "https://files.pythonhosted.org/packages/4d/f5/f30da9c93f0fa6d619332b2f69597219b625f35780473a05164a9981fd9a/pybtex-0.26.1.tar.gz", hash = "sha256:2e5543bea424e60e9e42eef70bff597be48649d8f68ba061a7a092b2477d5464", size = 692991, upload-time = "2026-04-03T13:05:39.014Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/f6/775eb92e865b28cdb4ad1f2bed7a5446197516f76b58a950faa3be3fd08d/pybtex-0.26.1-py3-none-any.whl", hash = "sha256:e26c0412cc54f5f21b2a6d9d175762a2d2af9ccf3a8f651cdb89ec035db77aa1", size = 126134 }, + { url = "https://files.pythonhosted.org/packages/44/f6/775eb92e865b28cdb4ad1f2bed7a5446197516f76b58a950faa3be3fd08d/pybtex-0.26.1-py3-none-any.whl", hash = "sha256:e26c0412cc54f5f21b2a6d9d175762a2d2af9ccf3a8f651cdb89ec035db77aa1", size = 126134, upload-time = "2026-04-03T13:05:40.623Z" }, ] [[package]] @@ -1517,36 +1917,50 @@ dependencies = [ { name = "docutils" }, { name = "pybtex" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7e/84/796ea94d26188a853660f81bded39f8de4cfe595130aef0dea1088705a11/pybtex-docutils-1.0.3.tar.gz", hash = "sha256:3a7ebdf92b593e00e8c1c538aa9a20bca5d92d84231124715acc964d51d93c6b", size = 18348 } +sdist = { url = "https://files.pythonhosted.org/packages/7e/84/796ea94d26188a853660f81bded39f8de4cfe595130aef0dea1088705a11/pybtex-docutils-1.0.3.tar.gz", hash = "sha256:3a7ebdf92b593e00e8c1c538aa9a20bca5d92d84231124715acc964d51d93c6b", size = 18348, upload-time = "2023-08-22T18:47:54.833Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/b1/ce1f4596211efb5410e178a803f08e59b20bedb66837dcf41e21c54f9ec1/pybtex_docutils-1.0.3-py3-none-any.whl", hash = "sha256:8fd290d2ae48e32fcb54d86b0efb8d573198653c7e2447d5bec5847095f430b9", size = 6385 }, + { url = "https://files.pythonhosted.org/packages/11/b1/ce1f4596211efb5410e178a803f08e59b20bedb66837dcf41e21c54f9ec1/pybtex_docutils-1.0.3-py3-none-any.whl", hash = "sha256:8fd290d2ae48e32fcb54d86b0efb8d573198653c7e2447d5bec5847095f430b9", size = 6385, upload-time = "2023-08-22T06:43:20.513Z" }, ] [[package]] name = "pycparser" version = "3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492 } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172 }, + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, ] [[package]] name = "pygments" version = "2.20.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991 } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151 }, + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c2/27/a3b6e5bf6ff856d2509292e95c8f57f0df7017cf5394921fc4e4ef40308a/pyjwt-2.12.1.tar.gz", hash = "sha256:c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b", size = 102564, upload-time = "2026-03-13T19:27:37.25Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/7a/8dd906bd22e79e47397a61742927f6747fe93242ef86645ee9092e610244/pyjwt-2.12.1-py3-none-any.whl", hash = "sha256:28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c", size = 29726, upload-time = "2026-03-13T19:27:35.677Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography" }, ] [[package]] name = "pyparsing" version = "3.3.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574 } +sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781 }, + { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, ] [[package]] @@ -1556,14 +1970,14 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7d/84/2b39bbf888c753ea48b40d47511548c77aa03445465c35cc4c4e9649b643/pyproj-3.6.1.tar.gz", hash = "sha256:44aa7c704c2b7d8fb3d483bbf75af6cb2350d30a63b144279a09b75fead501bf", size = 225131 } +sdist = { url = "https://files.pythonhosted.org/packages/7d/84/2b39bbf888c753ea48b40d47511548c77aa03445465c35cc4c4e9649b643/pyproj-3.6.1.tar.gz", hash = "sha256:44aa7c704c2b7d8fb3d483bbf75af6cb2350d30a63b144279a09b75fead501bf", size = 225131, upload-time = "2023-09-21T02:07:51.593Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/a6/a300c1b14b2112e966e9f90b18f9c13b586bdcf417207cee913ae9005da3/pyproj-3.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ebfbdbd0936e178091309f6cd4fcb4decd9eab12aa513cdd9add89efa3ec2882", size = 6147442 }, - { url = "https://files.pythonhosted.org/packages/30/bd/b9bd3761f08754e8dbb34c5a647db2099b348ab5da338e90980caf280e37/pyproj-3.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:447db19c7efad70ff161e5e46a54ab9cc2399acebb656b6ccf63e4bc4a04b97a", size = 4880331 }, - { url = "https://files.pythonhosted.org/packages/f4/0a/d82aeeb605b5d6870bc72307c3b5e044e632eb7720df8885e144f51a8eac/pyproj-3.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7e13c40183884ec7f94eb8e0f622f08f1d5716150b8d7a134de48c6110fee85", size = 6192425 }, - { url = "https://files.pythonhosted.org/packages/64/90/dfe5c00de1ca4dbb82606e79790659d4ed7f0ed8d372bccb3baca2a5abe0/pyproj-3.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65ad699e0c830e2b8565afe42bd58cc972b47d829b2e0e48ad9638386d994915", size = 8571478 }, - { url = "https://files.pythonhosted.org/packages/14/6d/ae373629a1723f0db80d7b8c93598b00d9ecb930ed9ebf4f35826a33e97c/pyproj-3.6.1-cp311-cp311-win32.whl", hash = "sha256:8b8acc31fb8702c54625f4d5a2a6543557bec3c28a0ef638778b7ab1d1772132", size = 5634575 }, - { url = "https://files.pythonhosted.org/packages/79/95/eb68113c5b5737c342bde1bab92705dabe69c16299c5a122616e50f1fbd6/pyproj-3.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:38a3361941eb72b82bd9a18f60c78b0df8408416f9340521df442cebfc4306e2", size = 6088494 }, + { url = "https://files.pythonhosted.org/packages/84/a6/a300c1b14b2112e966e9f90b18f9c13b586bdcf417207cee913ae9005da3/pyproj-3.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ebfbdbd0936e178091309f6cd4fcb4decd9eab12aa513cdd9add89efa3ec2882", size = 6147442, upload-time = "2023-09-21T02:07:21.879Z" }, + { url = "https://files.pythonhosted.org/packages/30/bd/b9bd3761f08754e8dbb34c5a647db2099b348ab5da338e90980caf280e37/pyproj-3.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:447db19c7efad70ff161e5e46a54ab9cc2399acebb656b6ccf63e4bc4a04b97a", size = 4880331, upload-time = "2023-09-21T02:10:40.828Z" }, + { url = "https://files.pythonhosted.org/packages/f4/0a/d82aeeb605b5d6870bc72307c3b5e044e632eb7720df8885e144f51a8eac/pyproj-3.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7e13c40183884ec7f94eb8e0f622f08f1d5716150b8d7a134de48c6110fee85", size = 6192425, upload-time = "2023-09-21T02:17:09.049Z" }, + { url = "https://files.pythonhosted.org/packages/64/90/dfe5c00de1ca4dbb82606e79790659d4ed7f0ed8d372bccb3baca2a5abe0/pyproj-3.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65ad699e0c830e2b8565afe42bd58cc972b47d829b2e0e48ad9638386d994915", size = 8571478, upload-time = "2023-09-21T02:07:23.771Z" }, + { url = "https://files.pythonhosted.org/packages/14/6d/ae373629a1723f0db80d7b8c93598b00d9ecb930ed9ebf4f35826a33e97c/pyproj-3.6.1-cp311-cp311-win32.whl", hash = "sha256:8b8acc31fb8702c54625f4d5a2a6543557bec3c28a0ef638778b7ab1d1772132", size = 5634575, upload-time = "2023-09-21T02:07:26.535Z" }, + { url = "https://files.pythonhosted.org/packages/79/95/eb68113c5b5737c342bde1bab92705dabe69c16299c5a122616e50f1fbd6/pyproj-3.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:38a3361941eb72b82bd9a18f60c78b0df8408416f9340521df442cebfc4306e2", size = 6088494, upload-time = "2023-09-21T02:07:28.75Z" }, ] [[package]] @@ -1576,9 +1990,9 @@ dependencies = [ { name = "packaging" }, { name = "pluggy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/80/1f/9d8e98e4133ffb16c90f3b405c43e38d3abb715bb5d7a63a5a684f7e46a3/pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280", size = 1357116 } +sdist = { url = "https://files.pythonhosted.org/packages/80/1f/9d8e98e4133ffb16c90f3b405c43e38d3abb715bb5d7a63a5a684f7e46a3/pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280", size = 1357116, upload-time = "2023-12-31T12:00:18.035Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/51/ff/f6e8b8f39e08547faece4bd80f89d5a8de68a38b2d179cc1c4490ffa3286/pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8", size = 325287 }, + { url = "https://files.pythonhosted.org/packages/51/ff/f6e8b8f39e08547faece4bd80f89d5a8de68a38b2d179cc1c4490ffa3286/pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8", size = 325287, upload-time = "2023-12-31T12:00:13.963Z" }, ] [[package]] @@ -1588,18 +2002,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, ] [[package]] name = "python-json-logger" version = "4.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f7/ff/3cc9165fd44106973cd7ac9facb674a65ed853494592541d339bdc9a30eb/python_json_logger-4.1.0.tar.gz", hash = "sha256:b396b9e3ed782b09ff9d6e4f1683d46c83ad0d35d2e407c09a9ebbf038f88195", size = 17573 } +sdist = { url = "https://files.pythonhosted.org/packages/f7/ff/3cc9165fd44106973cd7ac9facb674a65ed853494592541d339bdc9a30eb/python_json_logger-4.1.0.tar.gz", hash = "sha256:b396b9e3ed782b09ff9d6e4f1683d46c83ad0d35d2e407c09a9ebbf038f88195", size = 17573, upload-time = "2026-03-29T04:39:56.805Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl", hash = "sha256:132994765cf75bf44554be9aa49b06ef2345d23661a96720262716438141b6b2", size = 15021 }, + { url = "https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl", hash = "sha256:132994765cf75bf44554be9aa49b06ef2345d23661a96720262716438141b6b2", size = 15021, upload-time = "2026-03-29T04:39:55.266Z" }, ] [[package]] @@ -1611,45 +2025,45 @@ dependencies = [ { name = "pillow" }, { name = "xlsxwriter" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/74/ec/311ca254e48c947eaa9c16cdc01a4f828b7531e7f4dfebf3cec9fd15f951/python-pptx-0.6.22.tar.gz", hash = "sha256:38f8ee92dde31d24b4562560e61b0357e5d97ecf75c4352ae6616d5a32978654", size = 10084665 } +sdist = { url = "https://files.pythonhosted.org/packages/74/ec/311ca254e48c947eaa9c16cdc01a4f828b7531e7f4dfebf3cec9fd15f951/python-pptx-0.6.22.tar.gz", hash = "sha256:38f8ee92dde31d24b4562560e61b0357e5d97ecf75c4352ae6616d5a32978654", size = 10084665, upload-time = "2023-08-29T03:38:54.331Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/ea/94b20a70ed151c4af20dbc3aaa275a89757964f9df5a960698e399012c5e/python_pptx-0.6.22-py3-none-any.whl", hash = "sha256:3d097c29e08de2da1fc3c6752169087065efa4153216e77fc1b27dff1bcdcb46", size = 471482 }, + { url = "https://files.pythonhosted.org/packages/c0/ea/94b20a70ed151c4af20dbc3aaa275a89757964f9df5a960698e399012c5e/python_pptx-0.6.22-py3-none-any.whl", hash = "sha256:3d097c29e08de2da1fc3c6752169087065efa4153216e77fc1b27dff1bcdcb46", size = 471482, upload-time = "2023-08-29T03:38:45.27Z" }, ] [[package]] name = "pytz" version = "2026.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861 } +sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861, upload-time = "2026-05-04T01:35:29.667Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141 }, + { url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141, upload-time = "2026-05-04T01:35:27.408Z" }, ] [[package]] name = "pywinpty" version = "3.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f7/54/37c7370ba91f579235049dc26cd2c5e657d2a943e01820844ffc81f32176/pywinpty-3.0.3.tar.gz", hash = "sha256:523441dc34d231fb361b4b00f8c99d3f16de02f5005fd544a0183112bcc22412", size = 31309 } +sdist = { url = "https://files.pythonhosted.org/packages/f7/54/37c7370ba91f579235049dc26cd2c5e657d2a943e01820844ffc81f32176/pywinpty-3.0.3.tar.gz", hash = "sha256:523441dc34d231fb361b4b00f8c99d3f16de02f5005fd544a0183112bcc22412", size = 31309, upload-time = "2026-02-04T21:51:09.524Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/c3/3e75075c7f71735f22b66fab0481f2c98e3a4d58cba55cb50ba29114bcf6/pywinpty-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:dff25a9a6435f527d7c65608a7e62783fc12076e7d44487a4911ee91be5a8ac8", size = 2114430 }, - { url = "https://files.pythonhosted.org/packages/8d/1e/8a54166a8c5e4f5cb516514bdf4090be4d51a71e8d9f6d98c0aa00fe45d4/pywinpty-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:fbc1e230e5b193eef4431cba3f39996a288f9958f9c9f092c8a961d930ee8f68", size = 236191 }, + { url = "https://files.pythonhosted.org/packages/79/c3/3e75075c7f71735f22b66fab0481f2c98e3a4d58cba55cb50ba29114bcf6/pywinpty-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:dff25a9a6435f527d7c65608a7e62783fc12076e7d44487a4911ee91be5a8ac8", size = 2114430, upload-time = "2026-02-04T21:54:19.485Z" }, + { url = "https://files.pythonhosted.org/packages/8d/1e/8a54166a8c5e4f5cb516514bdf4090be4d51a71e8d9f6d98c0aa00fe45d4/pywinpty-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:fbc1e230e5b193eef4431cba3f39996a288f9958f9c9f092c8a961d930ee8f68", size = 236191, upload-time = "2026-02-04T21:50:36.239Z" }, ] [[package]] name = "pyyaml" version = "6.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960 } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826 }, - { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577 }, - { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556 }, - { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114 }, - { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638 }, - { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463 }, - { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986 }, - { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543 }, - { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763 }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, ] [[package]] @@ -1659,33 +2073,33 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "implementation_name == 'pypy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86", size = 1333328 }, - { url = "https://files.pythonhosted.org/packages/bd/a0/fc7e78a23748ad5443ac3275943457e8452da67fda347e05260261108cbc/pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581", size = 908803 }, - { url = "https://files.pythonhosted.org/packages/7e/22/37d15eb05f3bdfa4abea6f6d96eb3bb58585fbd3e4e0ded4e743bc650c97/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f", size = 668836 }, - { url = "https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e", size = 857038 }, - { url = "https://files.pythonhosted.org/packages/cb/eb/bfdcb41d0db9cd233d6fb22dc131583774135505ada800ebf14dfb0a7c40/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e", size = 1657531 }, - { url = "https://files.pythonhosted.org/packages/ab/21/e3180ca269ed4a0de5c34417dfe71a8ae80421198be83ee619a8a485b0c7/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2", size = 2034786 }, - { url = "https://files.pythonhosted.org/packages/3b/b1/5e21d0b517434b7f33588ff76c177c5a167858cc38ef740608898cd329f2/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394", size = 1894220 }, - { url = "https://files.pythonhosted.org/packages/03/f2/44913a6ff6941905efc24a1acf3d3cb6146b636c546c7406c38c49c403d4/pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f", size = 567155 }, - { url = "https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97", size = 633428 }, - { url = "https://files.pythonhosted.org/packages/ae/14/01afebc96c5abbbd713ecfc7469cfb1bc801c819a74ed5c9fad9a48801cb/pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07", size = 559497 }, - { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279 }, - { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645 }, - { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574 }, - { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995 }, - { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070 }, - { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121 }, - { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550 }, - { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184 }, - { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480 }, - { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993 }, - { url = "https://files.pythonhosted.org/packages/4c/c6/c4dcdecdbaa70969ee1fdced6d7b8f60cfabe64d25361f27ac4665a70620/pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066", size = 836265 }, - { url = "https://files.pythonhosted.org/packages/3e/79/f38c92eeaeb03a2ccc2ba9866f0439593bb08c5e3b714ac1d553e5c96e25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604", size = 800208 }, - { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747 }, - { url = "https://files.pythonhosted.org/packages/a1/cf/f2b3784d536250ffd4be70e049f3b60981235d70c6e8ce7e3ef21e1adb25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271", size = 747371 }, - { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862 }, +sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload-time = "2025-09-08T23:10:18.157Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86", size = 1333328, upload-time = "2025-09-08T23:07:45.946Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a0/fc7e78a23748ad5443ac3275943457e8452da67fda347e05260261108cbc/pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581", size = 908803, upload-time = "2025-09-08T23:07:47.551Z" }, + { url = "https://files.pythonhosted.org/packages/7e/22/37d15eb05f3bdfa4abea6f6d96eb3bb58585fbd3e4e0ded4e743bc650c97/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f", size = 668836, upload-time = "2025-09-08T23:07:49.436Z" }, + { url = "https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e", size = 857038, upload-time = "2025-09-08T23:07:51.234Z" }, + { url = "https://files.pythonhosted.org/packages/cb/eb/bfdcb41d0db9cd233d6fb22dc131583774135505ada800ebf14dfb0a7c40/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e", size = 1657531, upload-time = "2025-09-08T23:07:52.795Z" }, + { url = "https://files.pythonhosted.org/packages/ab/21/e3180ca269ed4a0de5c34417dfe71a8ae80421198be83ee619a8a485b0c7/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2", size = 2034786, upload-time = "2025-09-08T23:07:55.047Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b1/5e21d0b517434b7f33588ff76c177c5a167858cc38ef740608898cd329f2/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394", size = 1894220, upload-time = "2025-09-08T23:07:57.172Z" }, + { url = "https://files.pythonhosted.org/packages/03/f2/44913a6ff6941905efc24a1acf3d3cb6146b636c546c7406c38c49c403d4/pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f", size = 567155, upload-time = "2025-09-08T23:07:59.05Z" }, + { url = "https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97", size = 633428, upload-time = "2025-09-08T23:08:00.663Z" }, + { url = "https://files.pythonhosted.org/packages/ae/14/01afebc96c5abbbd713ecfc7469cfb1bc801c819a74ed5c9fad9a48801cb/pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07", size = 559497, upload-time = "2025-09-08T23:08:02.15Z" }, + { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279, upload-time = "2025-09-08T23:08:03.807Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645, upload-time = "2025-09-08T23:08:05.301Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574, upload-time = "2025-09-08T23:08:06.828Z" }, + { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995, upload-time = "2025-09-08T23:08:08.396Z" }, + { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070, upload-time = "2025-09-08T23:08:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121, upload-time = "2025-09-08T23:08:11.907Z" }, + { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550, upload-time = "2025-09-08T23:08:13.513Z" }, + { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184, upload-time = "2025-09-08T23:08:15.163Z" }, + { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480, upload-time = "2025-09-08T23:08:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993, upload-time = "2025-09-08T23:08:18.926Z" }, + { url = "https://files.pythonhosted.org/packages/4c/c6/c4dcdecdbaa70969ee1fdced6d7b8f60cfabe64d25361f27ac4665a70620/pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066", size = 836265, upload-time = "2025-09-08T23:09:49.376Z" }, + { url = "https://files.pythonhosted.org/packages/3e/79/f38c92eeaeb03a2ccc2ba9866f0439593bb08c5e3b714ac1d553e5c96e25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604", size = 800208, upload-time = "2025-09-08T23:09:51.073Z" }, + { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747, upload-time = "2025-09-08T23:09:52.698Z" }, + { url = "https://files.pythonhosted.org/packages/a1/cf/f2b3784d536250ffd4be70e049f3b60981235d70c6e8ce7e3ef21e1adb25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271", size = 747371, upload-time = "2025-09-08T23:09:54.563Z" }, + { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862, upload-time = "2025-09-08T23:09:56.509Z" }, ] [[package]] @@ -1707,6 +2121,7 @@ dependencies = [ { name = "pulp" }, { name = "pytest" }, { name = "requests" }, + { name = "rmi-etoolbox" }, { name = "scikit-learn" }, { name = "scipy" }, { name = "shapely" }, @@ -1796,6 +2211,7 @@ requires-dist = [ { name = "python-pptx", marker = "extra == 'dev'", specifier = "==0.6.22" }, { name = "python-pptx", marker = "extra == 'reporting'", specifier = "==0.6.22" }, { name = "requests", specifier = "==2.31.*" }, + { name = "rmi-etoolbox", git = "https://github.com/rmi/etoolbox.git" }, { name = "scikit-learn", specifier = "==1.2.*" }, { name = "scipy", specifier = "==1.11.*" }, { name = "shapely", specifier = "==2.0.1" }, @@ -1819,9 +2235,9 @@ dependencies = [ { name = "rpds-py" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036 } +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766 }, + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, ] [[package]] @@ -1834,9 +2250,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9d/be/10918a2eac4ae9f02f6cfe6414b7a155ccd8f7f9d4380d62fd5b955065c3/requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1", size = 110794 } +sdist = { url = "https://files.pythonhosted.org/packages/9d/be/10918a2eac4ae9f02f6cfe6414b7a155ccd8f7f9d4380d62fd5b955065c3/requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1", size = 110794, upload-time = "2023-05-22T15:12:44.175Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", size = 62574 }, + { url = "https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", size = 62574, upload-time = "2023-05-22T15:12:42.313Z" }, ] [[package]] @@ -1846,18 +2262,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513 } +sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513, upload-time = "2021-05-12T16:37:54.178Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490 }, + { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490, upload-time = "2021-05-12T16:37:52.536Z" }, ] [[package]] name = "rfc3986-validator" version = "0.1.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/da/88/f270de456dd7d11dcc808abfa291ecdd3f45ff44e3b549ffa01b126464d0/rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055", size = 6760 } +sdist = { url = "https://files.pythonhosted.org/packages/da/88/f270de456dd7d11dcc808abfa291ecdd3f45ff44e3b549ffa01b126464d0/rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055", size = 6760, upload-time = "2019-10-28T16:00:19.144Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", size = 4242 }, + { url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", size = 4242, upload-time = "2019-10-28T16:00:13.976Z" }, ] [[package]] @@ -1867,44 +2283,76 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "lark" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2c/06/37c1a5557acf449e8e406a830a05bf885ac47d33270aec454ef78675008d/rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d", size = 14239 } +sdist = { url = "https://files.pythonhosted.org/packages/2c/06/37c1a5557acf449e8e406a830a05bf885ac47d33270aec454ef78675008d/rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d", size = 14239, upload-time = "2025-07-18T01:05:05.015Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f", size = 8046 }, + { url = "https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f", size = 8046, upload-time = "2025-07-18T01:05:03.843Z" }, +] + +[[package]] +name = "rmi-etoolbox" +version = "0.4.2.dev55+gdc5d7480e" +source = { git = "https://github.com/rmi/etoolbox.git#dc5d7480ea7ee5118eb6d79dd65a186cd3943d1e" } +dependencies = [ + { name = "adlfs" }, + { name = "click" }, + { name = "fsspec" }, + { name = "orjson" }, + { name = "pandas" }, + { name = "platformdirs" }, + { name = "polars" }, + { name = "pyarrow" }, + { name = "pyyaml" }, + { name = "s3fs" }, + { name = "tzdata", marker = "sys_platform == 'win32'" }, ] [[package]] name = "rpds-py" version = "0.30.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157 }, - { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676 }, - { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938 }, - { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932 }, - { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830 }, - { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033 }, - { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828 }, - { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683 }, - { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583 }, - { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496 }, - { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669 }, - { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011 }, - { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406 }, - { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024 }, - { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069 }, - { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292 }, - { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128 }, - { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542 }, - { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004 }, - { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063 }, - { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099 }, - { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177 }, - { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015 }, - { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736 }, - { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981 }, - { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782 }, - { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191 }, +sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157, upload-time = "2025-11-30T20:21:53.789Z" }, + { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676, upload-time = "2025-11-30T20:21:55.475Z" }, + { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938, upload-time = "2025-11-30T20:21:57.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932, upload-time = "2025-11-30T20:21:58.47Z" }, + { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830, upload-time = "2025-11-30T20:21:59.699Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033, upload-time = "2025-11-30T20:22:00.991Z" }, + { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828, upload-time = "2025-11-30T20:22:02.723Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683, upload-time = "2025-11-30T20:22:04.367Z" }, + { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583, upload-time = "2025-11-30T20:22:05.814Z" }, + { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496, upload-time = "2025-11-30T20:22:07.713Z" }, + { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669, upload-time = "2025-11-30T20:22:09.312Z" }, + { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011, upload-time = "2025-11-30T20:22:11.309Z" }, + { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406, upload-time = "2025-11-30T20:22:13.101Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024, upload-time = "2025-11-30T20:22:14.853Z" }, + { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069, upload-time = "2025-11-30T20:22:16.577Z" }, + { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292, upload-time = "2025-11-30T20:24:16.537Z" }, + { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128, upload-time = "2025-11-30T20:24:18.086Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542, upload-time = "2025-11-30T20:24:20.092Z" }, + { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004, upload-time = "2025-11-30T20:24:22.231Z" }, + { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063, upload-time = "2025-11-30T20:24:24.302Z" }, + { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099, upload-time = "2025-11-30T20:24:25.916Z" }, + { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177, upload-time = "2025-11-30T20:24:27.834Z" }, + { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015, upload-time = "2025-11-30T20:24:29.457Z" }, + { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736, upload-time = "2025-11-30T20:24:31.22Z" }, + { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981, upload-time = "2025-11-30T20:24:32.934Z" }, + { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782, upload-time = "2025-11-30T20:24:35.169Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191, upload-time = "2025-11-30T20:24:36.853Z" }, +] + +[[package]] +name = "s3fs" +version = "2025.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiobotocore" }, + { name = "aiohttp" }, + { name = "fsspec" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/13/37438c4672ba1d23ec46df0e4b57e98469e5c5f4f98313cf6842b631652b/s3fs-2025.7.0.tar.gz", hash = "sha256:5e7f9ec0cad7745155e3eb86fae15b1481fa29946bf5b3a4ce3a60701ce6022d", size = 77795, upload-time = "2025-07-15T16:35:22.177Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/c7/30d13b7fd4f866ca3f30e9a6e7ae038f0c45226f6e26b3cc98d6d197f93b/s3fs-2025.7.0-py3-none-any.whl", hash = "sha256:b6b2d3f84b6aa1c2ba5e62e39dd9410cf54f10a2cce1ea6db1ba0d1a6bcce685", size = 30315, upload-time = "2025-07-15T16:35:20.734Z" }, ] [[package]] @@ -1917,13 +2365,13 @@ dependencies = [ { name = "scipy" }, { name = "threadpoolctl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c9/fa/8e158d81e3602da1e7bafbd4987938bc003fe4b0f44d65681e7f8face95a/scikit-learn-1.2.2.tar.gz", hash = "sha256:8429aea30ec24e7a8c7ed8a3fa6213adf3814a6efbea09e16e0a0c71e1a1a3d7", size = 7269934 } +sdist = { url = "https://files.pythonhosted.org/packages/c9/fa/8e158d81e3602da1e7bafbd4987938bc003fe4b0f44d65681e7f8face95a/scikit-learn-1.2.2.tar.gz", hash = "sha256:8429aea30ec24e7a8c7ed8a3fa6213adf3814a6efbea09e16e0a0c71e1a1a3d7", size = 7269934, upload-time = "2023-03-09T09:57:57.31Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/4a/1afe473760b07663710a75437b795ef37362aebb8bf513ff3bbf78fbd0c6/scikit_learn-1.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfeaf8be72117eb61a164ea6fc8afb6dfe08c6f90365bde2dc16456e4bc8e45f", size = 9024742 }, - { url = "https://files.pythonhosted.org/packages/2f/fd/9fcbe7fe94150e72d87120cbc462bde1971c3674e726b81f4a4c4fdfa8e1/scikit_learn-1.2.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:fe0aa1a7029ed3e1dcbf4a5bc675aa3b1bc468d9012ecf6c6f081251ca47f590", size = 8375105 }, - { url = "https://files.pythonhosted.org/packages/d7/8a/301594a8bb1cfeeb95dd86aa7dfedd31e93211940105429abddf0933cfff/scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:065e9673e24e0dc5113e2dd2b4ca30c9d8aa2fa90f4c0597241c93b63130d233", size = 9150797 }, - { url = "https://files.pythonhosted.org/packages/4c/64/a1e6e92b850b39200c82e3bc54d556b2c634b3904c39ac5cdb10b1c5765f/scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf036ea7ef66115e0d49655f16febfa547886deba20149555a41d28f56fd6d3c", size = 9562879 }, - { url = "https://files.pythonhosted.org/packages/db/98/169b46a84b48f92df2b5e163fce75d471f4df933f8b3d925a61133210776/scikit_learn-1.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:8b0670d4224a3c2d596fd572fb4fa673b2a0ccfb07152688ebd2ea0b8c61025c", size = 8261146 }, + { url = "https://files.pythonhosted.org/packages/27/4a/1afe473760b07663710a75437b795ef37362aebb8bf513ff3bbf78fbd0c6/scikit_learn-1.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfeaf8be72117eb61a164ea6fc8afb6dfe08c6f90365bde2dc16456e4bc8e45f", size = 9024742, upload-time = "2023-03-09T09:57:22.275Z" }, + { url = "https://files.pythonhosted.org/packages/2f/fd/9fcbe7fe94150e72d87120cbc462bde1971c3674e726b81f4a4c4fdfa8e1/scikit_learn-1.2.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:fe0aa1a7029ed3e1dcbf4a5bc675aa3b1bc468d9012ecf6c6f081251ca47f590", size = 8375105, upload-time = "2023-03-09T09:57:25.23Z" }, + { url = "https://files.pythonhosted.org/packages/d7/8a/301594a8bb1cfeeb95dd86aa7dfedd31e93211940105429abddf0933cfff/scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:065e9673e24e0dc5113e2dd2b4ca30c9d8aa2fa90f4c0597241c93b63130d233", size = 9150797, upload-time = "2023-03-09T09:57:27.291Z" }, + { url = "https://files.pythonhosted.org/packages/4c/64/a1e6e92b850b39200c82e3bc54d556b2c634b3904c39ac5cdb10b1c5765f/scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf036ea7ef66115e0d49655f16febfa547886deba20149555a41d28f56fd6d3c", size = 9562879, upload-time = "2023-03-09T09:57:30.038Z" }, + { url = "https://files.pythonhosted.org/packages/db/98/169b46a84b48f92df2b5e163fce75d471f4df933f8b3d925a61133210776/scikit_learn-1.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:8b0670d4224a3c2d596fd572fb4fa673b2a0ccfb07152688ebd2ea0b8c61025c", size = 8261146, upload-time = "2023-03-09T09:57:32.138Z" }, ] [[package]] @@ -1933,32 +2381,32 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6e/1f/91144ba78dccea567a6466262922786ffc97be1e9b06ed9574ef0edc11e1/scipy-1.11.4.tar.gz", hash = "sha256:90a2b78e7f5733b9de748f589f09225013685f9b218275257f8a8168ededaeaa", size = 56336202 } +sdist = { url = "https://files.pythonhosted.org/packages/6e/1f/91144ba78dccea567a6466262922786ffc97be1e9b06ed9574ef0edc11e1/scipy-1.11.4.tar.gz", hash = "sha256:90a2b78e7f5733b9de748f589f09225013685f9b218275257f8a8168ededaeaa", size = 56336202, upload-time = "2023-11-18T21:06:08.277Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/f2/1aefbd5e54ebd8c6163ccf7f73e5d17bc8cb38738d312befc524fce84bb4/scipy-1.11.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f313b39a7e94f296025e3cffc2c567618174c0b1dde173960cf23808f9fae4be", size = 37159197 }, - { url = "https://files.pythonhosted.org/packages/4b/48/20e77ddb1f473d4717a7d4d3fc8d15557f406f7708496054c59f635b7734/scipy-1.11.4-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1b7c3dca977f30a739e0409fb001056484661cb2541a01aba0bb0029f7b68db8", size = 29675057 }, - { url = "https://files.pythonhosted.org/packages/75/2e/a781862190d0e7e76afa74752ef363488a9a9d6ea86e46d5e5506cee8df6/scipy-1.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00150c5eae7b610c32589dda259eacc7c4f1665aedf25d921907f4d08a951b1c", size = 32882747 }, - { url = "https://files.pythonhosted.org/packages/6b/d4/d62ce38ba00dc67d7ec4ec5cc19d36958d8ed70e63778715ad626bcbc796/scipy-1.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530f9ad26440e85766509dbf78edcfe13ffd0ab7fec2560ee5c36ff74d6269ff", size = 36402732 }, - { url = "https://files.pythonhosted.org/packages/88/86/827b56aea1ed04adbb044a675672a73c84d81076a350092bbfcfc1ae723b/scipy-1.11.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5e347b14fe01003d3b78e196e84bd3f48ffe4c8a7b8a1afbcb8f5505cb710993", size = 36622138 }, - { url = "https://files.pythonhosted.org/packages/43/d0/f3cd75b62e1b90f48dbf091261b2fc7ceec14a700e308c50f6a69c83d337/scipy-1.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:acf8ed278cc03f5aff035e69cb511741e0418681d25fbbb86ca65429c4f4d9cd", size = 44095631 }, + { url = "https://files.pythonhosted.org/packages/b8/f2/1aefbd5e54ebd8c6163ccf7f73e5d17bc8cb38738d312befc524fce84bb4/scipy-1.11.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f313b39a7e94f296025e3cffc2c567618174c0b1dde173960cf23808f9fae4be", size = 37159197, upload-time = "2023-11-18T21:02:21.959Z" }, + { url = "https://files.pythonhosted.org/packages/4b/48/20e77ddb1f473d4717a7d4d3fc8d15557f406f7708496054c59f635b7734/scipy-1.11.4-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1b7c3dca977f30a739e0409fb001056484661cb2541a01aba0bb0029f7b68db8", size = 29675057, upload-time = "2023-11-18T21:02:28.169Z" }, + { url = "https://files.pythonhosted.org/packages/75/2e/a781862190d0e7e76afa74752ef363488a9a9d6ea86e46d5e5506cee8df6/scipy-1.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00150c5eae7b610c32589dda259eacc7c4f1665aedf25d921907f4d08a951b1c", size = 32882747, upload-time = "2023-11-18T21:02:33.683Z" }, + { url = "https://files.pythonhosted.org/packages/6b/d4/d62ce38ba00dc67d7ec4ec5cc19d36958d8ed70e63778715ad626bcbc796/scipy-1.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530f9ad26440e85766509dbf78edcfe13ffd0ab7fec2560ee5c36ff74d6269ff", size = 36402732, upload-time = "2023-11-18T21:02:39.762Z" }, + { url = "https://files.pythonhosted.org/packages/88/86/827b56aea1ed04adbb044a675672a73c84d81076a350092bbfcfc1ae723b/scipy-1.11.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5e347b14fe01003d3b78e196e84bd3f48ffe4c8a7b8a1afbcb8f5505cb710993", size = 36622138, upload-time = "2023-11-18T21:02:45.968Z" }, + { url = "https://files.pythonhosted.org/packages/43/d0/f3cd75b62e1b90f48dbf091261b2fc7ceec14a700e308c50f6a69c83d337/scipy-1.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:acf8ed278cc03f5aff035e69cb511741e0418681d25fbbb86ca65429c4f4d9cd", size = 44095631, upload-time = "2023-11-18T21:02:52.859Z" }, ] [[package]] name = "send2trash" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c5/f0/184b4b5f8d00f2a92cf96eec8967a3d550b52cf94362dad1100df9e48d57/send2trash-2.1.0.tar.gz", hash = "sha256:1c72b39f09457db3c05ce1d19158c2cbef4c32b8bedd02c155e49282b7ea7459", size = 17255 } +sdist = { url = "https://files.pythonhosted.org/packages/c5/f0/184b4b5f8d00f2a92cf96eec8967a3d550b52cf94362dad1100df9e48d57/send2trash-2.1.0.tar.gz", hash = "sha256:1c72b39f09457db3c05ce1d19158c2cbef4c32b8bedd02c155e49282b7ea7459", size = 17255, upload-time = "2026-01-14T06:27:36.056Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl", hash = "sha256:0da2f112e6d6bb22de6aa6daa7e144831a4febf2a87261451c4ad849fe9a873c", size = 17610 }, + { url = "https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl", hash = "sha256:0da2f112e6d6bb22de6aa6daa7e144831a4febf2a87261451c4ad849fe9a873c", size = 17610, upload-time = "2026-01-14T06:27:35.218Z" }, ] [[package]] name = "setuptools" version = "82.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316 } +sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316, upload-time = "2026-03-09T12:47:17.221Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223 }, + { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223, upload-time = "2026-03-09T12:47:15.026Z" }, ] [[package]] @@ -1968,52 +2416,52 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/10/a7/de139da3ce303101c357a9ba801328cba85cf6ace157da31a4007bca85e4/shapely-2.0.1.tar.gz", hash = "sha256:66a6b1a3e72ece97fc85536a281476f9b7794de2e646ca8a4517e2e3c1446893", size = 275535 } +sdist = { url = "https://files.pythonhosted.org/packages/10/a7/de139da3ce303101c357a9ba801328cba85cf6ace157da31a4007bca85e4/shapely-2.0.1.tar.gz", hash = "sha256:66a6b1a3e72ece97fc85536a281476f9b7794de2e646ca8a4517e2e3c1446893", size = 275535, upload-time = "2023-01-30T08:57:51.278Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/31/ad4881727b700a9320a4139ac3483972901a9fdd17bb6a599aca810dbd85/shapely-2.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:502e0a607f1dcc6dee0125aeee886379be5242c854500ea5fd2e7ac076b9ce6d", size = 2398678 }, - { url = "https://files.pythonhosted.org/packages/7b/e3/92ec80d72de8b881c52e47db1fd2f0519d49b6ad65c4c2a3fcbb9f88a91f/shapely-2.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7d3bbeefd8a6a1a1017265d2d36f8ff2d79d0162d8c141aa0d37a87063525656", size = 1358751 }, - { url = "https://files.pythonhosted.org/packages/18/a6/2e1761f21605e3562b223be7ad82f2edb5c9babdaa8b2d90979112be70f3/shapely-2.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f470a130d6ddb05b810fc1776d918659407f8d025b7f56d2742a596b6dffa6c7", size = 1195469 }, - { url = "https://files.pythonhosted.org/packages/70/21/39c2afae46154f824564d6b5b7213a84d083e243b42b5a1e76de481f91bb/shapely-2.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4641325e065fd3e07d55677849c9ddfd0cf3ee98f96475126942e746d55b17c8", size = 2254608 }, - { url = "https://files.pythonhosted.org/packages/e9/7c/76e54fa615a20ceb876e4de6b9f01a56926184bcc2076186c51c27ce39ad/shapely-2.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90cfa4144ff189a3c3de62e2f3669283c98fb760cfa2e82ff70df40f11cadb39", size = 2521453 }, - { url = "https://files.pythonhosted.org/packages/04/67/05e96af1c4ee130e12ac228da1ab86f7581809d8f008aa3a9ec19ea22eb2/shapely-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70a18fc7d6418e5aea76ac55dce33f98e75bd413c6eb39cfed6a1ba36469d7d4", size = 2336558 }, - { url = "https://files.pythonhosted.org/packages/bc/f1/c9db479170a7288d6bd2adcd1892785a3206b7a6f7972e7478714cb39e3c/shapely-2.0.1-cp311-cp311-win32.whl", hash = "sha256:09d6c7763b1bee0d0a2b84bb32a4c25c6359ad1ac582a62d8b211e89de986154", size = 1222645 }, - { url = "https://files.pythonhosted.org/packages/28/81/0239107ccd32eb30085c99fbf22da686aa72278afcc2c8fdf06fa0fa6320/shapely-2.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d8f55f355be7821dade839df785a49dc9f16d1af363134d07eb11e9207e0b189", size = 1364032 }, + { url = "https://files.pythonhosted.org/packages/8a/31/ad4881727b700a9320a4139ac3483972901a9fdd17bb6a599aca810dbd85/shapely-2.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:502e0a607f1dcc6dee0125aeee886379be5242c854500ea5fd2e7ac076b9ce6d", size = 2398678, upload-time = "2023-01-30T08:57:05.914Z" }, + { url = "https://files.pythonhosted.org/packages/7b/e3/92ec80d72de8b881c52e47db1fd2f0519d49b6ad65c4c2a3fcbb9f88a91f/shapely-2.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7d3bbeefd8a6a1a1017265d2d36f8ff2d79d0162d8c141aa0d37a87063525656", size = 1358751, upload-time = "2023-01-30T08:57:07.562Z" }, + { url = "https://files.pythonhosted.org/packages/18/a6/2e1761f21605e3562b223be7ad82f2edb5c9babdaa8b2d90979112be70f3/shapely-2.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f470a130d6ddb05b810fc1776d918659407f8d025b7f56d2742a596b6dffa6c7", size = 1195469, upload-time = "2023-01-30T08:57:09.152Z" }, + { url = "https://files.pythonhosted.org/packages/70/21/39c2afae46154f824564d6b5b7213a84d083e243b42b5a1e76de481f91bb/shapely-2.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4641325e065fd3e07d55677849c9ddfd0cf3ee98f96475126942e746d55b17c8", size = 2254608, upload-time = "2023-01-30T09:02:06.563Z" }, + { url = "https://files.pythonhosted.org/packages/e9/7c/76e54fa615a20ceb876e4de6b9f01a56926184bcc2076186c51c27ce39ad/shapely-2.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90cfa4144ff189a3c3de62e2f3669283c98fb760cfa2e82ff70df40f11cadb39", size = 2521453, upload-time = "2023-01-30T08:57:10.889Z" }, + { url = "https://files.pythonhosted.org/packages/04/67/05e96af1c4ee130e12ac228da1ab86f7581809d8f008aa3a9ec19ea22eb2/shapely-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70a18fc7d6418e5aea76ac55dce33f98e75bd413c6eb39cfed6a1ba36469d7d4", size = 2336558, upload-time = "2023-01-30T08:57:13.113Z" }, + { url = "https://files.pythonhosted.org/packages/bc/f1/c9db479170a7288d6bd2adcd1892785a3206b7a6f7972e7478714cb39e3c/shapely-2.0.1-cp311-cp311-win32.whl", hash = "sha256:09d6c7763b1bee0d0a2b84bb32a4c25c6359ad1ac582a62d8b211e89de986154", size = 1222645, upload-time = "2023-01-30T08:57:14.808Z" }, + { url = "https://files.pythonhosted.org/packages/28/81/0239107ccd32eb30085c99fbf22da686aa72278afcc2c8fdf06fa0fa6320/shapely-2.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d8f55f355be7821dade839df785a49dc9f16d1af363134d07eb11e9207e0b189", size = 1364032, upload-time = "2023-01-30T08:57:16.294Z" }, ] [[package]] name = "six" version = "1.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, ] [[package]] name = "smmap" version = "5.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1f/ea/49c993d6dfdd7338c9b1000a0f36817ed7ec84577ae2e52f890d1a4ff909/smmap-5.0.3.tar.gz", hash = "sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c", size = 22506 } +sdist = { url = "https://files.pythonhosted.org/packages/1f/ea/49c993d6dfdd7338c9b1000a0f36817ed7ec84577ae2e52f890d1a4ff909/smmap-5.0.3.tar.gz", hash = "sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c", size = 22506, upload-time = "2026-03-09T03:43:26.1Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl", hash = "sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f", size = 24390 }, + { url = "https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl", hash = "sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f", size = 24390, upload-time = "2026-03-09T03:43:24.361Z" }, ] [[package]] name = "snowballstemmer" version = "3.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575 } +sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575, upload-time = "2025-05-09T16:34:51.843Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274 }, + { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274, upload-time = "2025-05-09T16:34:50.371Z" }, ] [[package]] name = "soupsieve" version = "2.8.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7b/ae/2d9c981590ed9999a0d91755b47fc74f74de286b0f5cee14c9269041e6c4/soupsieve-2.8.3.tar.gz", hash = "sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349", size = 118627 } +sdist = { url = "https://files.pythonhosted.org/packages/7b/ae/2d9c981590ed9999a0d91755b47fc74f74de286b0f5cee14c9269041e6c4/soupsieve-2.8.3.tar.gz", hash = "sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349", size = 118627, upload-time = "2026-01-20T04:27:02.457Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95", size = 37016 }, + { url = "https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95", size = 37016, upload-time = "2026-01-20T04:27:01.012Z" }, ] [[package]] @@ -2038,9 +2486,9 @@ dependencies = [ { name = "sphinxcontrib-qthelp" }, { name = "sphinxcontrib-serializinghtml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/73/8e/6e51da4b26665b4b92b1944ea18b2d9c825e753e19180cc5bdc818d0ed3b/sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5", size = 7015183 } +sdist = { url = "https://files.pythonhosted.org/packages/73/8e/6e51da4b26665b4b92b1944ea18b2d9c825e753e19180cc5bdc818d0ed3b/sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5", size = 7015183, upload-time = "2023-09-13T23:13:25.589Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b2/b6/8ed35256aa530a9d3da15d20bdc0ba888d5364441bb50a5a83ee7827affe/sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560", size = 3207959 }, + { url = "https://files.pythonhosted.org/packages/b2/b6/8ed35256aa530a9d3da15d20bdc0ba888d5364441bb50a5a83ee7827affe/sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560", size = 3207959, upload-time = "2023-09-13T23:13:23.467Z" }, ] [[package]] @@ -2052,18 +2500,18 @@ dependencies = [ { name = "sphinx" }, { name = "sphinxcontrib-jquery" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fe/33/2a35a9cdbfda9086bda11457bcc872173ab3565b16b6d7f6b3efaa6dc3d6/sphinx_rtd_theme-2.0.0.tar.gz", hash = "sha256:bd5d7b80622406762073a04ef8fadc5f9151261563d47027de09910ce03afe6b", size = 2785005 } +sdist = { url = "https://files.pythonhosted.org/packages/fe/33/2a35a9cdbfda9086bda11457bcc872173ab3565b16b6d7f6b3efaa6dc3d6/sphinx_rtd_theme-2.0.0.tar.gz", hash = "sha256:bd5d7b80622406762073a04ef8fadc5f9151261563d47027de09910ce03afe6b", size = 2785005, upload-time = "2023-11-28T04:14:03.104Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/46/00fda84467815c29951a9c91e3ae7503c409ddad04373e7cfc78daad4300/sphinx_rtd_theme-2.0.0-py2.py3-none-any.whl", hash = "sha256:ec93d0856dc280cf3aee9a4c9807c60e027c7f7b461b77aeffed682e68f0e586", size = 2824721 }, + { url = "https://files.pythonhosted.org/packages/ea/46/00fda84467815c29951a9c91e3ae7503c409ddad04373e7cfc78daad4300/sphinx_rtd_theme-2.0.0-py2.py3-none-any.whl", hash = "sha256:ec93d0856dc280cf3aee9a4c9807c60e027c7f7b461b77aeffed682e68f0e586", size = 2824721, upload-time = "2023-11-28T04:13:59.589Z" }, ] [[package]] name = "sphinxcontrib-applehelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053 } +sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053, upload-time = "2024-07-29T01:09:00.465Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300 }, + { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300, upload-time = "2024-07-29T01:08:58.99Z" }, ] [[package]] @@ -2076,27 +2524,27 @@ dependencies = [ { name = "pybtex-docutils" }, { name = "sphinx" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/83/0b/318f862d69102e6c412fd4f0a78daa271616092aa02de296e9110bc67832/sphinxcontrib-bibtex-2.6.2.tar.gz", hash = "sha256:f487af694336f28bfb7d6a17070953a7d264bec43000a2379724274f5f8d70ae", size = 117459 } +sdist = { url = "https://files.pythonhosted.org/packages/83/0b/318f862d69102e6c412fd4f0a78daa271616092aa02de296e9110bc67832/sphinxcontrib-bibtex-2.6.2.tar.gz", hash = "sha256:f487af694336f28bfb7d6a17070953a7d264bec43000a2379724274f5f8d70ae", size = 117459, upload-time = "2024-01-10T10:36:49.307Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/f5/a15c05337929d1d19c2b6802ba196b98ac4beddf977c203661978c54e2d5/sphinxcontrib_bibtex-2.6.2-py3-none-any.whl", hash = "sha256:10d45ebbb19207c5665396c9446f8012a79b8a538cb729f895b5910ab2d0b2da", size = 40951 }, + { url = "https://files.pythonhosted.org/packages/e9/f5/a15c05337929d1d19c2b6802ba196b98ac4beddf977c203661978c54e2d5/sphinxcontrib_bibtex-2.6.2-py3-none-any.whl", hash = "sha256:10d45ebbb19207c5665396c9446f8012a79b8a538cb729f895b5910ab2d0b2da", size = 40951, upload-time = "2024-01-10T10:36:47.254Z" }, ] [[package]] name = "sphinxcontrib-devhelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967 } +sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967, upload-time = "2024-07-29T01:09:23.417Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530 }, + { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530, upload-time = "2024-07-29T01:09:21.945Z" }, ] [[package]] name = "sphinxcontrib-htmlhelp" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617 } +sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617, upload-time = "2024-07-29T01:09:37.889Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705 }, + { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705, upload-time = "2024-07-29T01:09:36.407Z" }, ] [[package]] @@ -2106,36 +2554,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "sphinx" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/de/f3/aa67467e051df70a6330fe7770894b3e4f09436dea6881ae0b4f3d87cad8/sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a", size = 122331 } +sdist = { url = "https://files.pythonhosted.org/packages/de/f3/aa67467e051df70a6330fe7770894b3e4f09436dea6881ae0b4f3d87cad8/sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a", size = 122331, upload-time = "2023-03-14T15:01:01.944Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae", size = 121104 }, + { url = "https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae", size = 121104, upload-time = "2023-03-14T15:01:00.356Z" }, ] [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787 } +sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787, upload-time = "2019-01-21T16:10:16.347Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071 }, + { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071, upload-time = "2019-01-21T16:10:14.333Z" }, ] [[package]] name = "sphinxcontrib-qthelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165 } +sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165, upload-time = "2024-07-29T01:09:56.435Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743 }, + { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743, upload-time = "2024-07-29T01:09:54.885Z" }, ] [[package]] name = "sphinxcontrib-serializinghtml" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080 } +sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080, upload-time = "2024-07-29T01:10:09.332Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072 }, + { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072, upload-time = "2024-07-29T01:10:08.203Z" }, ] [[package]] @@ -2147,9 +2595,9 @@ dependencies = [ { name = "executing" }, { name = "pure-eval" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, ] [[package]] @@ -2163,13 +2611,13 @@ dependencies = [ { name = "packaging" }, { name = "py-cpuinfo" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cc/a3/d213ebe7376d48055bd55a29cd9f99061afa0dcece608f94a5025d797b0a/tables-3.11.1.tar.gz", hash = "sha256:78abcf413091bc7c1e4e8c10fbbb438d1ac0b5a87436c5b972c3e8253871b6fb", size = 4790533 } +sdist = { url = "https://files.pythonhosted.org/packages/cc/a3/d213ebe7376d48055bd55a29cd9f99061afa0dcece608f94a5025d797b0a/tables-3.11.1.tar.gz", hash = "sha256:78abcf413091bc7c1e4e8c10fbbb438d1ac0b5a87436c5b972c3e8253871b6fb", size = 4790533, upload-time = "2026-03-01T11:43:36.036Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/bb/4a9cde6628563388db26fa86c64adb0f2475a757e72af0ec185fd520b72f/tables-3.11.1-cp311-abi3-macosx_10_9_x86_64.whl", hash = "sha256:eb30684c42a77bbecdef2b9c763c4372b0ddc9cc5bd8b2a2055f2042eee67217", size = 7045977 }, - { url = "https://files.pythonhosted.org/packages/78/74/6568c8d3aabf9982ab89fe3e378afbd7aad4894bde4570991a3246169ef4/tables-3.11.1-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:f0367d2e3df0f10ea63ccf4279f3fe58e32ec481767320301a483e2b3cd83efc", size = 6264947 }, - { url = "https://files.pythonhosted.org/packages/cc/a3/ec228901fca4c996306b17f5c60a4105144df0bbd07b3a4a816f91f37b4a/tables-3.11.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56bf6fb9132ead989b7e76695d7613d6d08f071a8019038d6565ba90c66b9f3e", size = 6903733 }, - { url = "https://files.pythonhosted.org/packages/99/29/c2dc674ea70fa9a4819417289a9c0d3e4780835beeed573eb66964cfb763/tables-3.11.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e78fe190fdeb4afe430b79651bae2a4f341904eb85aa8dbafe5f1caee1c7f67", size = 7241357 }, - { url = "https://files.pythonhosted.org/packages/60/b5/a59b62af4127790c618eb11c06c106706e07509a3fb9e346b2a3ffa74419/tables-3.11.1-cp311-abi3-win_amd64.whl", hash = "sha256:7fa6cb03f6fe55ae4f85e89ec5450e5c40cc4c52d8c3b60eb157a445c2219e89", size = 6526565 }, + { url = "https://files.pythonhosted.org/packages/fa/bb/4a9cde6628563388db26fa86c64adb0f2475a757e72af0ec185fd520b72f/tables-3.11.1-cp311-abi3-macosx_10_9_x86_64.whl", hash = "sha256:eb30684c42a77bbecdef2b9c763c4372b0ddc9cc5bd8b2a2055f2042eee67217", size = 7045977, upload-time = "2026-03-01T11:42:48.605Z" }, + { url = "https://files.pythonhosted.org/packages/78/74/6568c8d3aabf9982ab89fe3e378afbd7aad4894bde4570991a3246169ef4/tables-3.11.1-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:f0367d2e3df0f10ea63ccf4279f3fe58e32ec481767320301a483e2b3cd83efc", size = 6264947, upload-time = "2026-03-01T11:42:53.192Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a3/ec228901fca4c996306b17f5c60a4105144df0bbd07b3a4a816f91f37b4a/tables-3.11.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56bf6fb9132ead989b7e76695d7613d6d08f071a8019038d6565ba90c66b9f3e", size = 6903733, upload-time = "2026-03-01T11:42:58.349Z" }, + { url = "https://files.pythonhosted.org/packages/99/29/c2dc674ea70fa9a4819417289a9c0d3e4780835beeed573eb66964cfb763/tables-3.11.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e78fe190fdeb4afe430b79651bae2a4f341904eb85aa8dbafe5f1caee1c7f67", size = 7241357, upload-time = "2026-03-01T11:43:03.938Z" }, + { url = "https://files.pythonhosted.org/packages/60/b5/a59b62af4127790c618eb11c06c106706e07509a3fb9e346b2a3ffa74419/tables-3.11.1-cp311-abi3-win_amd64.whl", hash = "sha256:7fa6cb03f6fe55ae4f85e89ec5450e5c40cc4c52d8c3b60eb157a445c2219e89", size = 6526565, upload-time = "2026-03-01T11:43:08.58Z" }, ] [[package]] @@ -2181,18 +2629,18 @@ dependencies = [ { name = "pywinpty", marker = "os_name == 'nt'" }, { name = "tornado" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8a/11/965c6fd8e5cc254f1fe142d547387da17a8ebfd75a3455f637c663fb38a0/terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e", size = 32701 } +sdist = { url = "https://files.pythonhosted.org/packages/8a/11/965c6fd8e5cc254f1fe142d547387da17a8ebfd75a3455f637c663fb38a0/terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e", size = 32701, upload-time = "2024-03-12T14:34:39.026Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154 }, + { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154, upload-time = "2024-03-12T14:34:36.569Z" }, ] [[package]] name = "threadpoolctl" version = "3.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274 } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638 }, + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, ] [[package]] @@ -2202,26 +2650,26 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085 } +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085, upload-time = "2024-10-24T14:58:29.895Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload-time = "2024-10-24T14:58:28.029Z" }, ] [[package]] name = "tornado" version = "6.5.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f8/f1/3173dfa4a18db4a9b03e5d55325559dab51ee653763bb8745a75af491286/tornado-6.5.5.tar.gz", hash = "sha256:192b8f3ea91bd7f1f50c06955416ed76c6b72f96779b962f07f911b91e8d30e9", size = 516006 } +sdist = { url = "https://files.pythonhosted.org/packages/f8/f1/3173dfa4a18db4a9b03e5d55325559dab51ee653763bb8745a75af491286/tornado-6.5.5.tar.gz", hash = "sha256:192b8f3ea91bd7f1f50c06955416ed76c6b72f96779b962f07f911b91e8d30e9", size = 516006, upload-time = "2026-03-10T21:31:02.067Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa", size = 445983 }, - { url = "https://files.pythonhosted.org/packages/ab/5e/7625b76cd10f98f1516c36ce0346de62061156352353ef2da44e5c21523c/tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:65a7f1d46d4bb41df1ac99f5fcb685fb25c7e61613742d5108b010975a9a6521", size = 444246 }, - { url = "https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5", size = 447229 }, - { url = "https://files.pythonhosted.org/packages/34/01/74e034a30ef59afb4097ef8659515e96a39d910b712a89af76f5e4e1f93c/tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:435319e9e340276428bbdb4e7fa732c2d399386d1de5686cb331ec8eee754f07", size = 448192 }, - { url = "https://files.pythonhosted.org/packages/be/00/fe9e02c5a96429fce1a1d15a517f5d8444f9c412e0bb9eadfbe3b0fc55bf/tornado-6.5.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3f54aa540bdbfee7b9eb268ead60e7d199de5021facd276819c193c0fb28ea4e", size = 448039 }, - { url = "https://files.pythonhosted.org/packages/82/9e/656ee4cec0398b1d18d0f1eb6372c41c6b889722641d84948351ae19556d/tornado-6.5.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36abed1754faeb80fbd6e64db2758091e1320f6bba74a4cf8c09cd18ccce8aca", size = 447445 }, - { url = "https://files.pythonhosted.org/packages/5a/76/4921c00511f88af86a33de770d64141170f1cfd9c00311aea689949e274e/tornado-6.5.5-cp39-abi3-win32.whl", hash = "sha256:dd3eafaaeec1c7f2f8fdcd5f964e8907ad788fe8a5a32c4426fbbdda621223b7", size = 448582 }, - { url = "https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl", hash = "sha256:6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b", size = 448990 }, - { url = "https://files.pythonhosted.org/packages/b7/c8/876602cbc96469911f0939f703453c1157b0c826ecb05bdd32e023397d4e/tornado-6.5.5-cp39-abi3-win_arm64.whl", hash = "sha256:2c9a876e094109333f888539ddb2de4361743e5d21eece20688e3e351e4990a6", size = 448016 }, + { url = "https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa", size = 445983, upload-time = "2026-03-10T21:30:44.28Z" }, + { url = "https://files.pythonhosted.org/packages/ab/5e/7625b76cd10f98f1516c36ce0346de62061156352353ef2da44e5c21523c/tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:65a7f1d46d4bb41df1ac99f5fcb685fb25c7e61613742d5108b010975a9a6521", size = 444246, upload-time = "2026-03-10T21:30:46.571Z" }, + { url = "https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5", size = 447229, upload-time = "2026-03-10T21:30:48.273Z" }, + { url = "https://files.pythonhosted.org/packages/34/01/74e034a30ef59afb4097ef8659515e96a39d910b712a89af76f5e4e1f93c/tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:435319e9e340276428bbdb4e7fa732c2d399386d1de5686cb331ec8eee754f07", size = 448192, upload-time = "2026-03-10T21:30:51.22Z" }, + { url = "https://files.pythonhosted.org/packages/be/00/fe9e02c5a96429fce1a1d15a517f5d8444f9c412e0bb9eadfbe3b0fc55bf/tornado-6.5.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3f54aa540bdbfee7b9eb268ead60e7d199de5021facd276819c193c0fb28ea4e", size = 448039, upload-time = "2026-03-10T21:30:53.52Z" }, + { url = "https://files.pythonhosted.org/packages/82/9e/656ee4cec0398b1d18d0f1eb6372c41c6b889722641d84948351ae19556d/tornado-6.5.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36abed1754faeb80fbd6e64db2758091e1320f6bba74a4cf8c09cd18ccce8aca", size = 447445, upload-time = "2026-03-10T21:30:55.541Z" }, + { url = "https://files.pythonhosted.org/packages/5a/76/4921c00511f88af86a33de770d64141170f1cfd9c00311aea689949e274e/tornado-6.5.5-cp39-abi3-win32.whl", hash = "sha256:dd3eafaaeec1c7f2f8fdcd5f964e8907ad788fe8a5a32c4426fbbdda621223b7", size = 448582, upload-time = "2026-03-10T21:30:57.142Z" }, + { url = "https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl", hash = "sha256:6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b", size = 448990, upload-time = "2026-03-10T21:30:58.857Z" }, + { url = "https://files.pythonhosted.org/packages/b7/c8/876602cbc96469911f0939f703453c1157b0c826ecb05bdd32e023397d4e/tornado-6.5.5-cp39-abi3-win_arm64.whl", hash = "sha256:2c9a876e094109333f888539ddb2de4361743e5d21eece20688e3e351e4990a6", size = 448016, upload-time = "2026-03-10T21:31:00.43Z" }, ] [[package]] @@ -2231,115 +2679,166 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/06/04/e65e7f457ce9a2e338366a3a873ec6994e081cf4f99becb59ab6ce19e4b5/tqdm-4.65.2.tar.gz", hash = "sha256:5f7d8b4ac76016ce9d51a7f0ea30d30984888d97c474fdc4a4148abfb5ee76aa", size = 167099 } +sdist = { url = "https://files.pythonhosted.org/packages/06/04/e65e7f457ce9a2e338366a3a873ec6994e081cf4f99becb59ab6ce19e4b5/tqdm-4.65.2.tar.gz", hash = "sha256:5f7d8b4ac76016ce9d51a7f0ea30d30984888d97c474fdc4a4148abfb5ee76aa", size = 167099, upload-time = "2023-08-08T23:13:47.552Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/ab/bd9ba7f84c509c8b377628bc66696d52623e30c6c0830db3c78748eec4b4/tqdm-4.65.2-py3-none-any.whl", hash = "sha256:6c431f7dee4f57284c8f4bd2eb1d4af00d730d38cc6098bd79880bcbec676276", size = 77079 }, + { url = "https://files.pythonhosted.org/packages/c0/ab/bd9ba7f84c509c8b377628bc66696d52623e30c6c0830db3c78748eec4b4/tqdm-4.65.2-py3-none-any.whl", hash = "sha256:6c431f7dee4f57284c8f4bd2eb1d4af00d730d38cc6098bd79880bcbec676276", size = 77079, upload-time = "2023-08-08T23:13:45.303Z" }, ] [[package]] name = "traitlets" version = "5.14.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, ] [[package]] name = "typing-extensions" version = "4.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391 } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614 }, + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, ] [[package]] name = "tzdata" version = "2026.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", size = 198254 } +sdist = { url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", size = 198254, upload-time = "2026-04-24T15:22:08.651Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321 }, + { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321, upload-time = "2026-04-24T15:22:05.876Z" }, ] [[package]] name = "uri-template" version = "1.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/31/c7/0336f2bd0bcbada6ccef7aaa25e443c118a704f828a0620c6fa0207c1b64/uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", size = 21678 } +sdist = { url = "https://files.pythonhosted.org/packages/31/c7/0336f2bd0bcbada6ccef7aaa25e443c118a704f828a0620c6fa0207c1b64/uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", size = 21678, upload-time = "2023-06-21T01:49:05.374Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363", size = 11140 }, + { url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363", size = 11140, upload-time = "2023-06-21T01:49:03.467Z" }, ] [[package]] name = "urllib3" version = "2.6.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556 } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584 }, + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, ] [[package]] name = "wcwidth" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2c/ee/afaf0f85a9a18fe47a67f1e4422ed6cf1fe642f0ae0a2f81166231303c52/wcwidth-0.7.0.tar.gz", hash = "sha256:90e3a7ea092341c44b99562e75d09e4d5160fe7a3974c6fb842a101a95e7eed0", size = 182132 } +sdist = { url = "https://files.pythonhosted.org/packages/2c/ee/afaf0f85a9a18fe47a67f1e4422ed6cf1fe642f0ae0a2f81166231303c52/wcwidth-0.7.0.tar.gz", hash = "sha256:90e3a7ea092341c44b99562e75d09e4d5160fe7a3974c6fb842a101a95e7eed0", size = 182132, upload-time = "2026-05-02T16:04:12.653Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/52/e465037f5375f43533d1a80b6923955201596a99142ed524d77b571a1418/wcwidth-0.7.0-py3-none-any.whl", hash = "sha256:5d69154c429a82910e241c738cd0e2976fac8a2dd47a1a805f4afed1c0f136f2", size = 110825 }, + { url = "https://files.pythonhosted.org/packages/41/52/e465037f5375f43533d1a80b6923955201596a99142ed524d77b571a1418/wcwidth-0.7.0-py3-none-any.whl", hash = "sha256:5d69154c429a82910e241c738cd0e2976fac8a2dd47a1a805f4afed1c0f136f2", size = 110825, upload-time = "2026-05-02T16:04:11.033Z" }, ] [[package]] name = "webcolors" version = "25.10.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/7a/eb316761ec35664ea5174709a68bbd3389de60d4a1ebab8808bfc264ed67/webcolors-25.10.0.tar.gz", hash = "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf", size = 53491 } +sdist = { url = "https://files.pythonhosted.org/packages/1d/7a/eb316761ec35664ea5174709a68bbd3389de60d4a1ebab8808bfc264ed67/webcolors-25.10.0.tar.gz", hash = "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf", size = 53491, upload-time = "2025-10-31T07:51:03.977Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl", hash = "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d", size = 14905 }, + { url = "https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl", hash = "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d", size = 14905, upload-time = "2025-10-31T07:51:01.778Z" }, ] [[package]] name = "webencodings" version = "0.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721, upload-time = "2017-04-05T20:21:34.189Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload-time = "2017-04-05T20:21:32.581Z" }, ] [[package]] name = "websocket-client" version = "1.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576 } +sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576, upload-time = "2025-10-07T21:16:36.495Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616 }, + { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616, upload-time = "2025-10-07T21:16:34.951Z" }, ] [[package]] name = "widgetsnbextension" version = "4.0.15" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bd/f4/c67440c7fb409a71b7404b7aefcd7569a9c0d6bd071299bf4198ae7a5d95/widgetsnbextension-4.0.15.tar.gz", hash = "sha256:de8610639996f1567952d763a5a41af8af37f2575a41f9852a38f947eb82a3b9", size = 1097402 } +sdist = { url = "https://files.pythonhosted.org/packages/bd/f4/c67440c7fb409a71b7404b7aefcd7569a9c0d6bd071299bf4198ae7a5d95/widgetsnbextension-4.0.15.tar.gz", hash = "sha256:de8610639996f1567952d763a5a41af8af37f2575a41f9852a38f947eb82a3b9", size = 1097402, upload-time = "2025-11-01T21:15:55.178Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl", hash = "sha256:8156704e4346a571d9ce73b84bee86a29906c9abfd7223b7228a28899ccf3366", size = 2196503 }, + { url = "https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl", hash = "sha256:8156704e4346a571d9ce73b84bee86a29906c9abfd7223b7228a28899ccf3366", size = 2196503, upload-time = "2025-11-01T21:15:53.565Z" }, +] + +[[package]] +name = "wrapt" +version = "1.17.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/8f/aeb76c5b46e273670962298c23e7ddde79916cb74db802131d49a85e4b7d/wrapt-1.17.3.tar.gz", hash = "sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0", size = 55547, upload-time = "2025-08-12T05:53:21.714Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/db/00e2a219213856074a213503fdac0511203dceefff26e1daa15250cc01a0/wrapt-1.17.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:273a736c4645e63ac582c60a56b0acb529ef07f78e08dc6bfadf6a46b19c0da7", size = 53482, upload-time = "2025-08-12T05:51:45.79Z" }, + { url = "https://files.pythonhosted.org/packages/5e/30/ca3c4a5eba478408572096fe9ce36e6e915994dd26a4e9e98b4f729c06d9/wrapt-1.17.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5531d911795e3f935a9c23eb1c8c03c211661a5060aab167065896bbf62a5f85", size = 38674, upload-time = "2025-08-12T05:51:34.629Z" }, + { url = "https://files.pythonhosted.org/packages/31/25/3e8cc2c46b5329c5957cec959cb76a10718e1a513309c31399a4dad07eb3/wrapt-1.17.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f", size = 38959, upload-time = "2025-08-12T05:51:56.074Z" }, + { url = "https://files.pythonhosted.org/packages/5d/8f/a32a99fc03e4b37e31b57cb9cefc65050ea08147a8ce12f288616b05ef54/wrapt-1.17.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311", size = 82376, upload-time = "2025-08-12T05:52:32.134Z" }, + { url = "https://files.pythonhosted.org/packages/31/57/4930cb8d9d70d59c27ee1332a318c20291749b4fba31f113c2f8ac49a72e/wrapt-1.17.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1", size = 83604, upload-time = "2025-08-12T05:52:11.663Z" }, + { url = "https://files.pythonhosted.org/packages/a8/f3/1afd48de81d63dd66e01b263a6fbb86e1b5053b419b9b33d13e1f6d0f7d0/wrapt-1.17.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5", size = 82782, upload-time = "2025-08-12T05:52:12.626Z" }, + { url = "https://files.pythonhosted.org/packages/1e/d7/4ad5327612173b144998232f98a85bb24b60c352afb73bc48e3e0d2bdc4e/wrapt-1.17.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2", size = 82076, upload-time = "2025-08-12T05:52:33.168Z" }, + { url = "https://files.pythonhosted.org/packages/bb/59/e0adfc831674a65694f18ea6dc821f9fcb9ec82c2ce7e3d73a88ba2e8718/wrapt-1.17.3-cp311-cp311-win32.whl", hash = "sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89", size = 36457, upload-time = "2025-08-12T05:53:03.936Z" }, + { url = "https://files.pythonhosted.org/packages/83/88/16b7231ba49861b6f75fc309b11012ede4d6b0a9c90969d9e0db8d991aeb/wrapt-1.17.3-cp311-cp311-win_amd64.whl", hash = "sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77", size = 38745, upload-time = "2025-08-12T05:53:02.885Z" }, + { url = "https://files.pythonhosted.org/packages/9a/1e/c4d4f3398ec073012c51d1c8d87f715f56765444e1a4b11e5180577b7e6e/wrapt-1.17.3-cp311-cp311-win_arm64.whl", hash = "sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a", size = 36806, upload-time = "2025-08-12T05:52:53.368Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f6/a933bd70f98e9cf3e08167fc5cd7aaaca49147e48411c0bd5ae701bb2194/wrapt-1.17.3-py3-none-any.whl", hash = "sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22", size = 23591, upload-time = "2025-08-12T05:53:20.674Z" }, ] [[package]] name = "xlsxwriter" version = "3.2.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940 } +sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940, upload-time = "2025-09-16T00:16:21.63Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315 }, + { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315, upload-time = "2025-09-16T00:16:20.108Z" }, ] [[package]] name = "xyzservices" version = "2026.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/08/3cb9f67a8d48021aca2a02292cc26eecd71d949ae70ad66420a8730cc302/xyzservices-2026.3.0.tar.gz", hash = "sha256:d226866a5d8e9fef337034d8da37a8298f0a1d9d1489b4018e69579eb321fea4", size = 1135736 } +sdist = { url = "https://files.pythonhosted.org/packages/f6/08/3cb9f67a8d48021aca2a02292cc26eecd71d949ae70ad66420a8730cc302/xyzservices-2026.3.0.tar.gz", hash = "sha256:d226866a5d8e9fef337034d8da37a8298f0a1d9d1489b4018e69579eb321fea4", size = 1135736, upload-time = "2026-03-30T14:42:25.596Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/a9/d23012099dc88ec69a29c6407b41d89681cb674c2043cd5b467c7e299c08/xyzservices-2026.3.0-py3-none-any.whl", hash = "sha256:503183d4b322bfebc3c50cdd21192aa3e81e36c5efbf9133d54ae82143e0576b", size = 94101 }, + { url = "https://files.pythonhosted.org/packages/a8/a9/d23012099dc88ec69a29c6407b41d89681cb674c2043cd5b467c7e299c08/xyzservices-2026.3.0-py3-none-any.whl", hash = "sha256:503183d4b322bfebc3c50cdd21192aa3e81e36c5efbf9133d54ae82143e0576b", size = 94101, upload-time = "2026-03-30T14:42:24.608Z" }, +] + +[[package]] +name = "yarl" +version = "1.23.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/23/6e/beb1beec874a72f23815c1434518bfc4ed2175065173fb138c3705f658d4/yarl-1.23.0.tar.gz", hash = "sha256:53b1ea6ca88ebd4420379c330aea57e258408dd0df9af0992e5de2078dc9f5d5", size = 194676, upload-time = "2026-03-01T22:07:53.373Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/aa/60da938b8f0997ba3a911263c40d82b6f645a67902a490b46f3355e10fae/yarl-1.23.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b35d13d549077713e4414f927cdc388d62e543987c572baee613bf82f11a4b99", size = 123641, upload-time = "2026-03-01T22:04:42.841Z" }, + { url = "https://files.pythonhosted.org/packages/24/84/e237607faf4e099dbb8a4f511cfd5efcb5f75918baad200ff7380635631b/yarl-1.23.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbb0fef01f0c6b38cb0f39b1f78fc90b807e0e3c86a7ff3ce74ad77ce5c7880c", size = 86248, upload-time = "2026-03-01T22:04:44.757Z" }, + { url = "https://files.pythonhosted.org/packages/b2/0d/71ceabc14c146ba8ee3804ca7b3d42b1664c8440439de5214d366fec7d3a/yarl-1.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc52310451fc7c629e13c4e061cbe2dd01684d91f2f8ee2821b083c58bd72432", size = 85988, upload-time = "2026-03-01T22:04:46.365Z" }, + { url = "https://files.pythonhosted.org/packages/8c/6c/4a90d59c572e46b270ca132aca66954f1175abd691f74c1ef4c6711828e2/yarl-1.23.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2c6b50c7b0464165472b56b42d4c76a7b864597007d9c085e8b63e185cf4a7a", size = 100566, upload-time = "2026-03-01T22:04:47.639Z" }, + { url = "https://files.pythonhosted.org/packages/49/fb/c438fb5108047e629f6282a371e6e91cf3f97ee087c4fb748a1f32ceef55/yarl-1.23.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:aafe5dcfda86c8af00386d7781d4c2181b5011b7be3f2add5e99899ea925df05", size = 92079, upload-time = "2026-03-01T22:04:48.925Z" }, + { url = "https://files.pythonhosted.org/packages/d9/13/d269aa1aed3e4f50a5a103f96327210cc5fa5dd2d50882778f13c7a14606/yarl-1.23.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9ee33b875f0b390564c1fb7bc528abf18c8ee6073b201c6ae8524aca778e2d83", size = 108741, upload-time = "2026-03-01T22:04:50.838Z" }, + { url = "https://files.pythonhosted.org/packages/85/fb/115b16f22c37ea4437d323e472945bea97301c8ec6089868fa560abab590/yarl-1.23.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4c41e021bc6d7affb3364dc1e1e5fa9582b470f283748784bd6ea0558f87f42c", size = 108099, upload-time = "2026-03-01T22:04:52.499Z" }, + { url = "https://files.pythonhosted.org/packages/9a/64/c53487d9f4968045b8afa51aed7ca44f58b2589e772f32745f3744476c82/yarl-1.23.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99c8a9ed30f4164bc4c14b37a90208836cbf50d4ce2a57c71d0f52c7fb4f7598", size = 102678, upload-time = "2026-03-01T22:04:55.176Z" }, + { url = "https://files.pythonhosted.org/packages/85/59/cd98e556fbb2bf8fab29c1a722f67ad45c5f3447cac798ab85620d1e70af/yarl-1.23.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f2af5c81a1f124609d5f33507082fc3f739959d4719b56877ab1ee7e7b3d602b", size = 100803, upload-time = "2026-03-01T22:04:56.588Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c0/b39770b56d4a9f0bb5f77e2f1763cd2d75cc2f6c0131e3b4c360348fcd65/yarl-1.23.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6b41389c19b07c760c7e427a3462e8ab83c4bb087d127f0e854c706ce1b9215c", size = 100163, upload-time = "2026-03-01T22:04:58.492Z" }, + { url = "https://files.pythonhosted.org/packages/e7/64/6980f99ab00e1f0ff67cb84766c93d595b067eed07439cfccfc8fb28c1a6/yarl-1.23.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:1dc702e42d0684f42d6519c8d581e49c96cefaaab16691f03566d30658ee8788", size = 93859, upload-time = "2026-03-01T22:05:00.268Z" }, + { url = "https://files.pythonhosted.org/packages/38/69/912e6c5e146793e5d4b5fe39ff5b00f4d22463dfd5a162bec565ac757673/yarl-1.23.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0e40111274f340d32ebcc0a5668d54d2b552a6cca84c9475859d364b380e3222", size = 108202, upload-time = "2026-03-01T22:05:02.273Z" }, + { url = "https://files.pythonhosted.org/packages/59/97/35ca6767524687ad64e5f5c31ad54bc76d585585a9fcb40f649e7e82ffed/yarl-1.23.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:4764a6a7588561a9aef92f65bda2c4fb58fe7c675c0883862e6df97559de0bfb", size = 99866, upload-time = "2026-03-01T22:05:03.597Z" }, + { url = "https://files.pythonhosted.org/packages/d3/1c/1a3387ee6d73589f6f2a220ae06f2984f6c20b40c734989b0a44f5987308/yarl-1.23.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:03214408cfa590df47728b84c679ae4ef00be2428e11630277be0727eba2d7cc", size = 107852, upload-time = "2026-03-01T22:05:04.986Z" }, + { url = "https://files.pythonhosted.org/packages/a4/b8/35c0750fcd5a3f781058bfd954515dd4b1eab45e218cbb85cf11132215f1/yarl-1.23.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:170e26584b060879e29fac213e4228ef063f39128723807a312e5c7fec28eff2", size = 102919, upload-time = "2026-03-01T22:05:06.397Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1c/9a1979aec4a81896d597bcb2177827f2dbee3f5b7cc48b2d0dadb644b41d/yarl-1.23.0-cp311-cp311-win32.whl", hash = "sha256:51430653db848d258336cfa0244427b17d12db63d42603a55f0d4546f50f25b5", size = 82602, upload-time = "2026-03-01T22:05:08.444Z" }, + { url = "https://files.pythonhosted.org/packages/93/22/b85eca6fa2ad9491af48c973e4c8cf6b103a73dbb271fe3346949449fca0/yarl-1.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf49a3ae946a87083ef3a34c8f677ae4243f5b824bfc4c69672e72b3d6719d46", size = 87461, upload-time = "2026-03-01T22:05:10.145Z" }, + { url = "https://files.pythonhosted.org/packages/93/95/07e3553fe6f113e6864a20bdc53a78113cda3b9ced8784ee52a52c9f80d8/yarl-1.23.0-cp311-cp311-win_arm64.whl", hash = "sha256:b39cb32a6582750b6cc77bfb3c49c0f8760dc18dc96ec9fb55fbb0f04e08b928", size = 82336, upload-time = "2026-03-01T22:05:11.554Z" }, + { url = "https://files.pythonhosted.org/packages/69/68/c8739671f5699c7dc470580a4f821ef37c32c4cb0b047ce223a7f115757f/yarl-1.23.0-py3-none-any.whl", hash = "sha256:a2df6afe50dea8ae15fa34c9f824a3ee958d785fd5d089063d960bae1daa0a3f", size = 48288, upload-time = "2026-03-01T22:07:51.388Z" }, ] From 0a5ef33be057ea1c2d4366742fcd106ecc164f7e Mon Sep 17 00:00:00 2001 From: Jeffrey Sward Date: Fri, 5 Jun 2026 17:12:13 +0000 Subject: [PATCH 05/46] Updated cases file --- cases_cepm.csv | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 cases_cepm.csv diff --git a/cases_cepm.csv b/cases_cepm.csv new file mode 100644 index 000000000..d8552ea54 --- /dev/null +++ b/cases_cepm.csv @@ -0,0 +1,62 @@ +,Default Value,github_MA_county_CC,CO_county,CO_county_,WECC_county,PJM_county_CC,NYVT_mixed +ignore,1,1,1,0,1,1,1 +GSw_Region,cendiv/Pacific,st/MA,st/CO,st/CO,interconnect/western,transreg/PJM,st/NY.VT +GSw_ZoneSet,,z3109,z3109,z3109,z3109,z3109,PJMcounty +endyear,2032,2026,,,,, +yearset,,,,,,, +GSw_GasCurve,2,,,,,, +GSw_Geothermal,,,,,,, +GSw_GrowthPenalties,,,,,,, +GSw_Upstream,,,,,,, +GSw_TransHurdleRate,,,,,,, +distpvscen,,,,,,, +GSw_AnnualCap,,,,,,, +GSw_AnnualCapScen,,,,,,, +GSw_LoadProfiles,,EER2025_IRAlow,,EER2025_100by2050,,, +GSw_NG_CRF_penalty,,,,,,, +GSw_PRM_NetImportLimit,,,,,,, +GSw_RetirePenalty,,,,,,, +GSw_FakeData,,1,,,,, +GSw_PRM_CapCredit,,1,,,,1, +GSw_PRM_scenario,,,,,,static, +GSw_HourlyType,,,,,,, +GSw_InterDayLinkage,,,,,,, +GSw_HourlyWeatherYears,,,,,,, +GSw_WaterCapacity,,,,,,, +GSw_WaterMain,,,,,,, +GSw_WaterUse,,,,,,, +resource_adequacy_years,,,,,,, +GSw_HourlyClusterAlgorithm,,,,,,, +MCS_runs,,,,,,, +MCS_dist_groups,,,,,,, +GSw_PRM_StressIterateMax,,0,,,0,0, +GSw_ReducedResource,,,,,,, +GSw_SitingUPV,,limited,,,,, +GSw_SitingWindOfs,,limited,,,,, +GSw_SitingWindOns,,limited,,,,, +GSw_TransScen,,,,,,, +GSw_CO2_Detail,,,,,,, +GSw_DAC,,,,,,, +GSw_NoFossilOffsetCDR,,,,,,, +GSw_Biopower,,,,,,, +GSw_HourlyChunkLengthRep,,,,,,, +GSw_HourlyChunkLengthStress,,,,,,, +GSw_LfillGas,,,,,,, +GSw_Nuclear,,,,,,, +GSw_OpRes,,,,,,, +GSw_StartCost,,,,,,, +GSw_H2,,,,,,, +GSw_H2_PTC,,,,,,, +GSw_H2Combustion,,,,,,, +GSw_DRShed,,,,,,, +GSw_MGA_CostDelta,,,,,,, +GSw_LoadSiteCF,,,,,,, +GSw_OffshoreZones,,,,,,, +GSw_OffshoreBackbone,,,,,,, +GSw_OffshoreBackflow,,,,,,, +pras_agg_ogs_lfillgas,,,,,,, +pras_existing_unit_size,,,,,,, +pras_scheduled_outage,,,,,,, +pras_unitsize_source,,,,,,, +pras_vre_combine,,,,,,, +pras_samples,,10,,,,, From 2ea77b7b54e12e7f48444209670b98cf347ace64 Mon Sep 17 00:00:00 2001 From: Jeffrey Sward Date: Fri, 5 Jun 2026 17:22:13 +0000 Subject: [PATCH 06/46] Added changelog --- cepm_scenarios_changelog.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 cepm_scenarios_changelog.md diff --git a/cepm_scenarios_changelog.md b/cepm_scenarios_changelog.md new file mode 100644 index 000000000..3be999378 --- /dev/null +++ b/cepm_scenarios_changelog.md @@ -0,0 +1,3 @@ +# CEPM Scenarios Changelog + +Put notes on CEPM scenarios and their changes here. From 6fc4536a241e224bc5addb6bdbc116ace6a58ff2 Mon Sep 17 00:00:00 2001 From: Jeffrey Sward Date: Fri, 5 Jun 2026 17:34:22 +0000 Subject: [PATCH 07/46] Updated readme with cepm run norms. --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7944ce9f0..2c0909058 100644 --- a/README.md +++ b/README.md @@ -113,10 +113,11 @@ Instantiate the Julia environment: julia --project=. instantiate.jl ``` -Optional: download remote data files up front: +Link large data files from shared folder, so we each don't store separate instances of this ~95GB of input data. Note you cannot do this in git bash as +there are some type of strange permission issues, so use powershell: -```bash -uv run python reeds/remote.py +```powershell +New-Item -ItemType Junction -Path ".inputs\remote" -Target "C:\Users\Public\Documents\reeds_data\remote" ``` Several large data files are hosted remotely. These files are downloaded automatically as needed during a ReEDS run, but the command above finishes all internet-requiring steps up front. @@ -125,7 +126,7 @@ Additional details on remote files and other topics can be found in the [user gu ### 5. Run ReEDS -ReEDS currently expects Conda-style environment variables. When using UV, set these variables before running ReEDS: +ReEDS currently expects Conda-style environment variables. When using UV, set these variables before running ReEDS or ideally in your dotenv file, so you don't ahve to do this before every run. ```bash export CONDA_DEFAULT_ENV=reeds2 @@ -144,7 +145,7 @@ For one-line operation: uv run python runbatch.py -b v20250314_main -c test ``` -In this example, `v20250314_main` is the prefix for this batch of cases, and `test` is the suffix of the cases file, in this case `cases_test.csv`, located in the root of the repository. +In this example, `v20250314_main` is the prefix for this batch of cases, and `test` is the suffix of the cases file, in this case `cases_test.csv`, located in the root of the repository. For the batch prefix, we should follow the convention `vYYYYMMDD_`, and note that the case ID from the cases file will be appended to the batch prefix for file naming purposes. Our cases are stored in the `cases_cepm.csv` file. Run the following for information on other optional command-line arguments: From 8928c9f81f03a79dfec045ddd6f81355360dc9ef Mon Sep 17 00:00:00 2001 From: Jeffrey Sward Date: Fri, 5 Jun 2026 22:25:27 +0000 Subject: [PATCH 08/46] Added WECC county case --- cases_cepm.csv | 124 ++++++++++++++++++++++++------------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/cases_cepm.csv b/cases_cepm.csv index d8552ea54..fbf431203 100644 --- a/cases_cepm.csv +++ b/cases_cepm.csv @@ -1,62 +1,62 @@ -,Default Value,github_MA_county_CC,CO_county,CO_county_,WECC_county,PJM_county_CC,NYVT_mixed -ignore,1,1,1,0,1,1,1 -GSw_Region,cendiv/Pacific,st/MA,st/CO,st/CO,interconnect/western,transreg/PJM,st/NY.VT -GSw_ZoneSet,,z3109,z3109,z3109,z3109,z3109,PJMcounty -endyear,2032,2026,,,,, -yearset,,,,,,, -GSw_GasCurve,2,,,,,, -GSw_Geothermal,,,,,,, -GSw_GrowthPenalties,,,,,,, -GSw_Upstream,,,,,,, -GSw_TransHurdleRate,,,,,,, -distpvscen,,,,,,, -GSw_AnnualCap,,,,,,, -GSw_AnnualCapScen,,,,,,, -GSw_LoadProfiles,,EER2025_IRAlow,,EER2025_100by2050,,, -GSw_NG_CRF_penalty,,,,,,, -GSw_PRM_NetImportLimit,,,,,,, -GSw_RetirePenalty,,,,,,, -GSw_FakeData,,1,,,,, -GSw_PRM_CapCredit,,1,,,,1, -GSw_PRM_scenario,,,,,,static, -GSw_HourlyType,,,,,,, -GSw_InterDayLinkage,,,,,,, -GSw_HourlyWeatherYears,,,,,,, -GSw_WaterCapacity,,,,,,, -GSw_WaterMain,,,,,,, -GSw_WaterUse,,,,,,, -resource_adequacy_years,,,,,,, -GSw_HourlyClusterAlgorithm,,,,,,, -MCS_runs,,,,,,, -MCS_dist_groups,,,,,,, -GSw_PRM_StressIterateMax,,0,,,0,0, -GSw_ReducedResource,,,,,,, -GSw_SitingUPV,,limited,,,,, -GSw_SitingWindOfs,,limited,,,,, -GSw_SitingWindOns,,limited,,,,, -GSw_TransScen,,,,,,, -GSw_CO2_Detail,,,,,,, -GSw_DAC,,,,,,, -GSw_NoFossilOffsetCDR,,,,,,, -GSw_Biopower,,,,,,, -GSw_HourlyChunkLengthRep,,,,,,, -GSw_HourlyChunkLengthStress,,,,,,, -GSw_LfillGas,,,,,,, -GSw_Nuclear,,,,,,, -GSw_OpRes,,,,,,, -GSw_StartCost,,,,,,, -GSw_H2,,,,,,, -GSw_H2_PTC,,,,,,, -GSw_H2Combustion,,,,,,, -GSw_DRShed,,,,,,, -GSw_MGA_CostDelta,,,,,,, -GSw_LoadSiteCF,,,,,,, -GSw_OffshoreZones,,,,,,, -GSw_OffshoreBackbone,,,,,,, -GSw_OffshoreBackflow,,,,,,, -pras_agg_ogs_lfillgas,,,,,,, -pras_existing_unit_size,,,,,,, -pras_scheduled_outage,,,,,,, -pras_unitsize_source,,,,,,, -pras_vre_combine,,,,,,, -pras_samples,,10,,,,, +,Default Value,github_MA_county_CC,CO_county_IRAlow,CO_county_100by2050,WECC_county,WECC_county_100by2050,PJM_county_CC,NYVT_mixed +ignore,1,1,1,1,1,0,1,1 +GSw_Region,cendiv/Pacific,st/MA,st/CO,st/CO,interconnect/western,interconnect/western,transreg/PJM,st/NY.VT +GSw_ZoneSet,,z3109,z3109,z3109,z3109,z3109,z3109,PJMcounty +endyear,2032,2026,,,,,, +yearset,,,,,,,, +GSw_GasCurve,2,,,,,,, +GSw_Geothermal,,,,,,,, +GSw_GrowthPenalties,,,,,,,, +GSw_Upstream,,,,,,,, +GSw_TransHurdleRate,,,,,,,, +distpvscen,,,,,,,, +GSw_AnnualCap,,,,,,,, +GSw_AnnualCapScen,,,,,,,, +GSw_LoadProfiles,,EER2025_IRAlow,,EER2025_100by2050,,EER2025_100by2050,, +GSw_NG_CRF_penalty,,,,,,,, +GSw_PRM_NetImportLimit,,,,,,,, +GSw_RetirePenalty,,,,,,,, +GSw_FakeData,,1,,,,,, +GSw_PRM_CapCredit,,1,,,,,1, +GSw_PRM_scenario,,,,,,,static, +GSw_HourlyType,,,,,,,, +GSw_InterDayLinkage,,,,,,,, +GSw_HourlyWeatherYears,,,,,,,, +GSw_WaterCapacity,,,,,,,, +GSw_WaterMain,,,,,,,, +GSw_WaterUse,,,,,,,, +resource_adequacy_years,,,,,,,, +GSw_HourlyClusterAlgorithm,,,,,,,, +MCS_runs,,,,,,,, +MCS_dist_groups,,,,,,,, +GSw_PRM_StressIterateMax,,0,,,0,0,0, +GSw_ReducedResource,,,,,,,, +GSw_SitingUPV,,limited,,,,,, +GSw_SitingWindOfs,,limited,,,,,, +GSw_SitingWindOns,,limited,,,,,, +GSw_TransScen,,,,,,,, +GSw_CO2_Detail,,,,,,,, +GSw_DAC,,,,,,,, +GSw_NoFossilOffsetCDR,,,,,,,, +GSw_Biopower,,,,,,,, +GSw_HourlyChunkLengthRep,,,,,,,, +GSw_HourlyChunkLengthStress,,,,,,,, +GSw_LfillGas,,,,,,,, +GSw_Nuclear,,,,,,,, +GSw_OpRes,,,,,,,, +GSw_StartCost,,,,,,,, +GSw_H2,,,,,,,, +GSw_H2_PTC,,,,,,,, +GSw_H2Combustion,,,,,,,, +GSw_DRShed,,,,,,,, +GSw_MGA_CostDelta,,,,,,,, +GSw_LoadSiteCF,,,,,,,, +GSw_OffshoreZones,,,,,,,, +GSw_OffshoreBackbone,,,,,,,, +GSw_OffshoreBackflow,,,,,,,, +pras_agg_ogs_lfillgas,,,,,,,, +pras_existing_unit_size,,,,,,,, +pras_scheduled_outage,,,,,,,, +pras_unitsize_source,,,,,,,, +pras_vre_combine,,,,,,,, +pras_samples,,10,,,,,, From 74ddab66d9ae9bf40ae449c34ad45bc66ab981f5 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Wed, 10 Jun 2026 21:32:57 +0000 Subject: [PATCH 09/46] Update README with GAMS PATH configuration Added instructions for adding GAMS to user PATH variable in PowerShell. --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 7944ce9f0..c11552937 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,13 @@ Ensure the `gams` executable is available on your PATH: gams ``` +GAMS typically installs directly into the top level directory, with a version number. A typical way to add gams to your user PATH variable in powershell is: + +```bash +$currentPath = [Environment]::GetEnvironmentVariable("Path","User") #This gets the PATH Environment variable at the user scope +$addPath = 'C:/GAMS/53' # or wherever your gams installis +[Environment]::SetEnvironmentVariable("Path","$addPath;$currentPath","User") + ### 3. Install Julia Install Julia using `juliaup`: From 761c35294f82e748757997623d0da469790ba2dc Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Wed, 10 Jun 2026 21:33:24 +0000 Subject: [PATCH 10/46] Correct GAMS installation path description Fix typo in GAMS installation path description. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c11552937..7a03163e3 100644 --- a/README.md +++ b/README.md @@ -69,8 +69,9 @@ GAMS typically installs directly into the top level directory, with a version nu ```bash $currentPath = [Environment]::GetEnvironmentVariable("Path","User") #This gets the PATH Environment variable at the user scope -$addPath = 'C:/GAMS/53' # or wherever your gams installis +$addPath = 'C:/GAMS/53' # or wherever your gams install is [Environment]::SetEnvironmentVariable("Path","$addPath;$currentPath","User") +``` ### 3. Install Julia From b2b7ae3819a9c952d279b93e46f9033a8b13ef65 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Thu, 11 Jun 2026 17:06:05 +0000 Subject: [PATCH 11/46] Fix bokehpivot health report rendering - Normalize current health damages output columns into the schema expected by bokehpivot report processing. - Preserve CSV headers when a report source opts into downstream schema normalization. - Fix Vizit report JSON generation for NumPy values and escaped replacement strings. - Replace six.moves urllib import with stdlib urllib.parse. - Verified by py_compile and regenerating the Pacific expanded report with health sections rendering. --- AGENT.md | 249 +++++++++++++++++++++++ postprocessing/bokehpivot/core.py | 31 ++- postprocessing/bokehpivot/reeds2.py | 75 +++++-- postprocessing/bokehpivot/reeds_bokeh.py | 12 +- 4 files changed, 348 insertions(+), 19 deletions(-) create mode 100644 AGENT.md diff --git a/AGENT.md b/AGENT.md new file mode 100644 index 000000000..3083ec067 --- /dev/null +++ b/AGENT.md @@ -0,0 +1,249 @@ +# ReEDS Agent Guide + +ReEDS is a capacity planning and dispatch model for the U.S. electricity system. +The repository is a mixed Python, GAMS, and Julia codebase: Python prepares inputs, +orchestrates runs, and postprocesses outputs; GAMS contains the optimization model; +Julia translates solved ReEDS systems into PRAS resource adequacy systems. + +Use this file as the first stop for agent orientation. Deeper references: +@README.md, @docs/source/setup.md, @docs/source/user_guide.md, +@docs/source/developer_best_practices.md, @sources_documentation.md. + +## Project Structure + +- `runbatch.py`: main run orchestrator. Reads `cases*.csv`, creates + `runs/{BatchName}_{case}/`, writes scripts, copies needed code/data into the + case folder, and launches local, HPC, or AWS runs. +- `cases.csv`: canonical case/switch catalog, with descriptions, allowed values, + and defaults. Scenario files such as `cases_test.csv`, `cases_small.csv`, and + study-specific `cases_{suffix}.csv` override defaults by case column. +- `runfiles.csv`: inventory of input files and how they should be copied, + filtered, aggregated, or transformed into each run's `inputs_case/`. +- Root `*.gms`: core GAMS model files. Important stages include `b_inputs.gms` + for GAMS-readable inputs, `c_supplymodel.gms` and `c_supplyobjective.gms` for + model equations/objective, `d_solveprep.gms`, `d_solveoneyear.gms`, + `d_solveallyears.gms`, `d_solvewindow.gms`, and `e_report.gms`. +- `input_processing/`: scripts run during case setup to create files under + `runs/{case}/inputs_case/`. `copy_files.py` is the broad data copier/filter; + scripts such as `recf.py`, `hourly_repperiods.py`, `hourly_load.py`, + `writecapdat.py`, `plantcostprep.py`, and `transmission.py` derive key inputs. +- `reeds/`: shared Python utilities. Common entry points are `reeds.io`, + `reeds.inputs`, `reeds.spatial`, `reeds.techs`, `reeds.log`, + `reeds.output_calc`, and plotting modules. +- `ReEDS_Augur/` and `Augur.py`: capacity credit, PRAS, and stress-period logic + that runs between solve years when enabled. +- `reeds2pras/`: Julia package for translating ReEDS outputs to PRAS systems. +- `hourlize/`: preprocessing for resource and load profiles. Main wrapper is + `hourlize/run_hourlize.py`; `hourlize/reeds_to_rev.py` disaggregates ReEDS + investments back to reV supply curve sites. +- `postprocessing/`: reports, diagnostics, plots, run comparison, retail rates, + reValue, bokehpivot, Tableau, combine-runs, and output cleanup. +- `preprocessing/`: tools for preparing repository inputs before ReEDS runs. +- `inputs/`: checked-in model inputs plus pointers to large remote inputs. + Large files are normally downloaded into `inputs/remote/` and linked or copied + as needed. +- `runs/`: generated run folders. Treat contents as user/generated artifacts and + do not edit or delete them unless the task explicitly targets a run. +- `tests/` and `hourlize/tests/`: pytest tests. Some tests are lightweight unit + tests; `tests/test_outputs.py` requires a completed ReEDS case. +- `.github/workflows/`: CI, docs, and workflow-quality automation. + +## Environment + +- Python is pinned to `3.11` via `.python-version` and `pyproject.toml`. +- Python dependencies are managed with `uv` and locked in `uv.lock`. +- Julia `1.12.1` is the tested version for ReEDS2PRAS and stress-period flows. +- GAMS is required for model solves. CPLEX is the normal solver; small cases may + work with other solvers, but CPLEX-oriented settings are the maintained path. +- Several large inputs are remote. `reeds/remote.py` downloads them based on + `inputs/remote_files.csv`; network access may be needed. +- ReEDS still expects Conda-style environment variables even when using `uv`. + +PowerShell setup used by local agents on Windows: + +```powershell +uv sync --extra dev +julia --project=. instantiate.jl +$env:CONDA_DEFAULT_ENV = "reeds2" +$env:CONDA_PREFIX = (Resolve-Path .venv).Path +``` + +Optional remote data preload: + +```powershell +uv run python reeds/remote.py +``` + +## Build And Run Commands + +- Show runbatch options: `uv run python runbatch.py -h` +- Interactive run setup: `uv run python runbatch.py` +- Typical test batch: `uv run python runbatch.py -b vYYYYMMDD_label -c test` +- One or more named cases from a cases file: + `uv run python runbatch.py -b vYYYYMMDD_label -c test -s caseA,caseB` +- Dry run case setup without launch: `uv run python runbatch.py -b label -c test -t` +- Check run status: `uv run python runstatus.py ` +- Restart failed HPC runs: `uv run python restart_runs.py ` +- Run a completed-case output check: + `uv run python -m pytest tests/test_outputs.py --casepath runs/` +- Build docs when docs dependencies are installed: + `uv run sphinx-build docs/source docs/build/` + +Be conservative with full model runs. They can be long, need licensed GAMS, may +download large files, and write substantial data under `runs/`. + +## Testing + +- Lightweight Python IO tests: + `uv run python -m pytest tests/test_read_h5_files.py` +- Hourlize tests: + `uv run python -m pytest hourlize/tests` +- Completed-run output validation: + `uv run python -m pytest tests/test_outputs.py --casepath runs/` +- Julia ReEDS2PRAS tests from `reeds2pras/test/`: + `julia --project runtests.jl` +- CI runs a test ReEDS scenario with `python runbatch.py -b "$batch" -c test -s "$SCENARIO"` + and then validates outputs with `tests/test_outputs.py`. + +When changing GAMS objective-function inputs, check +`tests/objective_function_params.yaml`; it documents parameters that +`input_processing/check_inputs.py` validates for missing values. + +## Architecture And Run Flow + +1. A cases file is parsed by `reeds.inputs.parse_cases()`. +2. `runbatch.py` expands cases, checks switch consistency, and creates + `runs/{BatchName}_{case}/`. +3. Case setup writes `inputs_case/`, `switches.csv`, `gswitches.csv`, + `modeledyears.csv`, run metadata, and generated shell/batch scripts. +4. `input_processing/copy_files.py` and related scripts copy, filter, aggregate, + and derive inputs. Many output CSV names intentionally match GAMS parameter + names read by `b_inputs.gms`. +5. GAMS reads `b_inputs.gms`, creates `inputs.gdx`, solves according to the + chosen `timetype` (`seq`, `int`, or `win`), and writes GDX/CSV outputs. +6. `Augur.py` may run between solve years to prepare PRAS data, run Julia PRAS, + calculate capacity credit, and add stress periods. +7. `e_report.gms`, `e_report_dump.py`, bokehpivot, retail-rate, plots, Vizit, + R2X, and other postprocessors write to `runs/{case}/outputs/`. + +Useful run-folder files: + +- `gamslog.txt`: first place to inspect failures; search for `ERROR`, + `LP status`, `Status`, and `Cur_year`. +- `lstfiles/`: GAMS listing files. `1_Inputs.lst` catches input build errors; + year-specific `.lst` files catch solve failures. +- `meta.csv`: process timing and repository metadata. +- `inputs_case/`: exact inputs seen by a case. This is usually better than + guessing from repository defaults when debugging a completed run. +- `outputs/`: reported CSVs, figures, bokehpivot reports, retail outputs, etc. +- `ReEDS_Augur/augur_data/`: PRAS and capacity-credit intermediate data. + +## Code Style + +Follow the current file's style first. This repository predates some current +guidelines, so nearby conventions matter. + +Python: + +- Prefer PEP 8 for new Python. +- Use `os.path.join()` or `pathlib` rather than hard-coded separators. +- Input-processing scripts should not change working directory; pass explicit + paths such as `reeds_path` and `inputs_case`. +- Keep data transformations in Python when practical instead of adding complex + calculations in GAMS. +- Use `reeds.io` helpers for reading outputs, switches, scalars, HDF5, maps, and + case paths rather than duplicating parsing logic. +- Many scripts log through `reeds.log.makelog()` and append timings with + `reeds.log.toc()`; keep that pattern for run-step scripts. +- Avoid broad formatting-only changes. The repo recommends Ruff linting, but + does not yet enforce repo-wide autoformatting. + +GAMS: + +- Follow `docs/source/developer_best_practices.md`. +- New GAMS files use the category prefix convention, e.g. `d1_...`, + `d2_...`, `e_...`. +- Switches are `GSw_...` in `cases.csv`; numeric GAMS versions usually become + `Sw_...`. Off is `0`, on is `1`. +- Parameters are lowercase with underscores; variables are uppercase; equations + are `eq_...`. +- GAMS declarations should include units first in comments, e.g. `"--MW-- ..."` . +- Prefer blocks of declarations over many one-line declarations. +- Use braces for GAMS functions such as `sum{...}`. +- In equations, terms generally start with `+` or `-`, parameters appear to the + left of variables, and operators have surrounding spaces. +- Monetary values should be rounded to two decimal places; other plain-text + parameters should generally use no more than three significant figures. +- Avoid hard-coded numbers in equations; name them as parameters when possible. + +Inputs and CSVs: + +- Files written to `inputs_case/` should generally share the GAMS parameter name + that reads them. +- GAMS-readable CSV headers often start with `*` so GAMS treats the header as a + comment. +- Raw inputs belong under topical `inputs/` subdirectories. +- Large or optional data should not be committed casually; use the remote-file + mechanism and document sources in `sources.csv` / `sources_documentation.md`. +- Costs read into `b_inputs.gms` should already be in 2004 dollars unless the + surrounding code clearly says otherwise; use `deflator.csv` rather than + hard-coded conversions. + +## Debugging Notes + +- For run failures, start with `runs//gamslog.txt`, then the newest file + in `runs//lstfiles/`. +- For input-processing failures, inspect `inputs_case/`, `1_Inputs.lst`, and + the script call generated in `call_.bat` or `call_.sh`. +- For output/report failures, compare `outputs/`, `e_report_params.csv`, and + `postprocessing/bokehpivot` report logs. +- `runstatus.py` summarizes running/failed/finished cases for a batch prefix. +- `postprocessing/check_error.py` reads the `error_check` output for solved + cases. +- For GAMS data comparison, developer docs recommend targeted `execute unload` + statements rather than broad dumps. +- Keep `cleanup_level` at `0` while developing or debugging, because higher + cleanup levels remove files useful for restarts and diagnosis. + +## Important Subsystems + +- Remote data: `reeds.remote` reads `inputs/remote_files.csv` and manages + downloads under `inputs/remote/`. +- Monte Carlo sampling: `input_processing/mcs_sampler.py` plus YAML + distribution files described in the user guide. +- Temporal clustering and hourly data: `input_processing/hourly_repperiods.py`, + `hourly_writetimeseries.py`, `hourly_load.py`, and `inputs_case/rep/`. +- Renewable capacity factors and resources: `input_processing/recf.py`, + `writesupplycurves.py`, `hourlize/`, and `inputs_case/recf.h5`. +- Resource adequacy/stress periods: `Augur.py`, `ReEDS_Augur/`, + `reeds2pras/`, and `GSw_PRM_*` switches. +- Standard reports: `e_report.gms`, `e_report_dump.py`, + `postprocessing/bokehpivot/`, and `postprocessing/single_case_plots.py`. +- Run comparisons: `postprocessing/compare_cases.py`, + `postprocessing/combine_runs/`, and `postprocessing/uncertainty_plots.py`. +- Retail rates: `postprocessing/retail_rate_module/`. +- R2X translation: `scripts/run_r2x.py` and CI's `r2x-reeds` invocation. + +## Security And Data Handling + +- Never commit secrets, credentials, GAMS license files, local machine paths that + should remain private, or API tokens. +- Be careful with generated run folders. They may contain large files, local + paths, logs, and intermediate model data. +- Do not delete, move, or overwrite run artifacts unless explicitly asked. +- Ask before downloading large remote inputs or launching long solves. +- Preserve source documentation when adding or changing data: update + `sources.csv`, `sources_documentation.md`, and relevant docs when applicable. + +## Git Workflow For Agents + +- Expect a dirty worktree. Check `git status --short` before edits and preserve + user changes. +- Keep edits scoped to the user's request. Do not reformat unrelated files. +- Prefer small, reviewable changes with targeted tests or validation commands. +- Before claiming a model change is safe, state what was and was not run. A + Python unit test is not a substitute for a GAMS solve when model behavior is + changed. +- Do not use destructive git commands or delete generated data unless the user + asks for that specific action. + diff --git a/postprocessing/bokehpivot/core.py b/postprocessing/bokehpivot/core.py index 2a0303428..c11577fcd 100644 --- a/postprocessing/bokehpivot/core.py +++ b/postprocessing/bokehpivot/core.py @@ -27,7 +27,7 @@ import bokeh.resources as br import bokeh.embed as be import datetime -import six.moves.urllib.parse as urlp +import urllib.parse as urlp import subprocess as sp import jinja2 as ji import reeds_bokeh as rb @@ -612,15 +612,36 @@ def vizit_report(data_type, data_source, vizit_data, output_dir, auto_open): vizit_commit = '7011d363e40386264bedb3155629729b225fd22e' vizit_url = f'https://raw.githubusercontent.com/mmowers/vizit/{vizit_commit}/index.html' f_out_str = requests.get(vizit_url).text - data_str = json.dumps(data_dict, separators=(',',':')) - config_str = json.dumps(vizit_config, separators=(',',':')) - f_out_str = re.sub('let config_load = .*;\n', f'let config_load = {config_str};\n', f_out_str, 1) - f_out_str = re.sub('let rawData = .*;\n', f'let rawData = {data_str};\n', f_out_str, 1) + # Vizit report data can contain NumPy scalars/arrays from pandas outputs; + # normalize them before JSON encoding so report generation does not fail. + data_str = json.dumps(data_dict, separators=(',',':'), default=json_scalar) + config_str = json.dumps(vizit_config, separators=(',',':'), default=json_scalar) + # Use callable replacements so backslashes in generated JSON are treated as + # literal text rather than regex replacement escapes. + f_out_str = re.sub( + 'let config_load = .*;\n', + lambda _: f'let config_load = {config_str};\n', + f_out_str, + 1, + ) + f_out_str = re.sub( + 'let rawData = .*;\n', + lambda _: f'let rawData = {data_str};\n', + f_out_str, + 1, + ) with open(f'{output_dir}report_vizit.html', 'w') as f_out: f_out.write(f_out_str) if auto_open == 'Yes': sp.Popen(os.path.abspath(f'{output_dir}report_vizit.html'), shell=True) +def json_scalar(obj): + if isinstance(obj, np.generic): + return obj.item() + if isinstance(obj, np.ndarray): + return obj.tolist() + raise TypeError(f'Object of type {obj.__class__.__name__} is not JSON serializable') + def preset_wdg(preset, download_full_source=False): ''' Reset widgets and then set them to that specified in input preset diff --git a/postprocessing/bokehpivot/reeds2.py b/postprocessing/bokehpivot/reeds2.py index 7d8d0da49..ea9a46a82 100644 --- a/postprocessing/bokehpivot/reeds2.py +++ b/postprocessing/bokehpivot/reeds2.py @@ -1111,8 +1111,49 @@ def net_co2(dfs, **kw): co2['Cumulative CO2e (MMton)'] /= 1e6 return co2 +# health_damages_caused_r.csv is now written with the current 9-column schema +# from postprocessing/air_quality, while these report paths still use the older +# bokehpivot display names downstream. Keep both lists explicit at the boundary. +HEALTH_DAMAGE_SOURCE_COLUMNS = [ + 'rb', 'year', 'e', 'Emissions (thousand metric tons)', + 'model', 'cr', 'Marginal damage ($/metric ton)', + 'Health damages (billion $)', 'Health damages (lives)' +] +HEALTH_DAMAGE_LEGACY_COLUMNS = [ + 'rb', 'st', 'year', 'e', 'Emissions (thousand metric tons)', + 'model', 'cr', 'Marginal damage ($/metric ton)', + 'Health damages (billion $)', 'Health damages (lives)' +] + +def normalize_health_damage_schema(df): + # Accept either current generator headers or legacy report headers, then + # return the legacy names expected by the existing report calculations. + df = df.copy() + df.rename(columns={ + 'ba': 'rb', + 'pollutant': 'e', + 'tons': 'Emissions (thousand metric tons)', + 'md': 'Marginal damage ($/metric ton)', + 'damage_$': 'Health damages (billion $)', + 'mortality': 'Health damages (lives)', + }, inplace=True) + + if 'st' not in df.columns: + # Current health-damage outputs do not include state. Keep a placeholder + # for older bokehpivot paths; derive this from hierarchy if it is used. + df['st'] = df['rb'] if 'rb' in df.columns else '' + + required = HEALTH_DAMAGE_SOURCE_COLUMNS + ['st'] + missing = [col for col in required if col not in df.columns] + if missing: + raise KeyError('health_damages_caused_r.csv missing columns: {}'.format(missing)) + + return df[required] + # function to process health damage estimates def process_health_damage(df, **kw): + df = normalize_health_damage_schema(df) + # convert to billion $ and inflate series df['Health damages (billion $)'] = inflate_series(df['Health damages (billion $)']) * 1e-9 @@ -1135,24 +1176,27 @@ def process_health_damage(df, **kw): rows = product(*allRows.values()) df_all = pd.DataFrame.from_records(rows, columns=allRows.keys()) df_new = df.merge(df_all, how='outer', on=['model', 'cr', 'e', 'rb', 'year']) - df_new['st'] = df_new['st'].interpolate(method="ffill") + df_new['st'] = df_new['st'].ffill() # sort by category and year df_new = df_new.sort_values(['model', 'cr', 'e', 'rb', 'year']) # interpolate any missing values - df_new = df_new.groupby(['model', 'cr', 'e', 'rb']).apply(lambda group: group.interpolate(method='ffill')) + df_new = df_new.groupby( + ['model', 'cr', 'e', 'rb'], group_keys=False + ).apply(lambda group: group.interpolate(method='ffill')) # sum over rb - df_out = df_new.groupby(['model', 'cr', 'e', 'year'])[ - 'Emissions (thousand metric tons)', 'Health damages (billion $)', - 'Health damages (lives)', 'Discounted health damages (billion $)' - ].sum().reset_index() + df_out = df_new.groupby(['model', 'cr', 'e', 'year'])[[ + 'Emissions (thousand metric tons)', 'Health damages (billion $)', + 'Health damages (lives)', 'Discounted health damages (billion $)' + ]].sum().reset_index() # also sum over pollutant - df_poll_agg = df_new.groupby(['model', 'cr', 'year'])[ - 'Health damages (billion $)', 'Health damages (lives)', 'Discounted health damages (billion $)' - ].sum().reset_index() + df_poll_agg = df_new.groupby(['model', 'cr', 'year'])[[ + 'Health damages (billion $)', 'Health damages (lives)', + 'Discounted health damages (billion $)' + ]].sum().reset_index() df_poll_agg.rename(columns={'Health damages (billion $)' : 'Total health damages (billion $)', 'Health damages (lives)' : 'Total health damages (lives)', @@ -1174,7 +1218,9 @@ def process_social_costs(dfs, **kw): system_costs_agg.rename(columns={'Cost (Bil $)' : 'Cost (Bil $)-system', 'Discounted Cost (Bil $)' : 'Discounted Cost (Bil $)-system'}, inplace=True) - health_costs_agg = health_costs.groupby(['year', 'model', 'cr'])['Health damages (billion $)', 'Discounted health damages (billion $)'].sum().reset_index() + health_costs_agg = health_costs.groupby(['year', 'model', 'cr'])[[ + 'Health damages (billion $)', 'Discounted health damages (billion $)' + ]].sum().reset_index() health_costs_agg.rename(columns={'Health damages (billion $)' : 'Cost (Bil $)-health', 'Discounted health damages (billion $)' : 'Discounted Cost (Bil $)-health'}, inplace=True) @@ -2067,7 +2113,10 @@ def pre_spur(dfs, **kw): ('Health Damages from Emissions', {'file':'health_damages_caused_r.csv', - 'columns': ['rb', 'st', 'year', 'e', 'Emissions (thousand metric tons)', 'model', 'cr', 'Marginal damage ($/metric ton)', 'Health damages (billion $)', 'Health damages (lives)'], + 'columns': HEALTH_DAMAGE_LEGACY_COLUMNS, + # Preserve the CSV's real headers when the current 9-column output is + # present; process_health_damage normalizes the schema before plotting. + 'allow_mismatched_columns': True, 'preprocess': [ {'func': process_health_damage, 'args':{}}, ], @@ -2090,7 +2139,9 @@ def pre_spur(dfs, **kw): {'name': 'df_capex_init', 'file': '../inputs_case/df_capex_init.csv'}, {'name': 'sw', 'file': '../inputs_case/switches.csv', 'header':None, 'columns': ['switch', 'value']}, {'name': 'scalars', 'file': '../inputs_case/scalars.csv', 'header':None, 'columns': ['scalar', 'value', 'comment']}, - {'name': 'health_damages', 'file': 'health_damages_caused_r.csv', 'columns': ['rb', 'st', 'year', 'e', 'Emissions (thousand metric tons)', 'model', 'cr', 'Marginal damage ($/metric ton)', 'Health damages (billion $)', 'Health damages (lives)']}, + # See the Health Damages source above: keep current headers intact + # and normalize them inside process_social_costs/process_health_damage. + {'name': 'health_damages', 'file': 'health_damages_caused_r.csv', 'columns': HEALTH_DAMAGE_LEGACY_COLUMNS, 'allow_mismatched_columns': True}, ], 'preprocess': [ {'func': process_social_costs, 'args': {}}, diff --git a/postprocessing/bokehpivot/reeds_bokeh.py b/postprocessing/bokehpivot/reeds_bokeh.py index 105128d2f..c4793f34b 100644 --- a/postprocessing/bokehpivot/reeds_bokeh.py +++ b/postprocessing/bokehpivot/reeds_bokeh.py @@ -359,7 +359,15 @@ def get_src(scen, src): if 'transpose' in src and src['transpose'] is True: df_src = df_src.T if 'columns' in src: - df_src.columns = src['columns'] + if len(df_src.columns) == len(src['columns']): + df_src.columns = src['columns'] + elif not src.get('allow_mismatched_columns', False): + df_src.columns = src['columns'] + else: + # Some newer outputs are normalized in their preprocess functions. + # For those opt-in sources, preserve CSV headers when legacy report + # columns no longer match the generated file width. + pass df_src.replace('Eps',0, inplace=True) df_src.replace('Undf',0, inplace=True) df_src = df_src.apply(pd.to_numeric, errors='ignore') @@ -619,4 +627,4 @@ def df_to_lowercase(df): for col in df: if df[col].dtype == object: df[col] = df[col].str.lower() - return df \ No newline at end of file + return df From 3a356d36cc9d9e6dd8fc681e28a4dd3b3faddd08 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Thu, 11 Jun 2026 17:06:29 +0000 Subject: [PATCH 12/46] Handle disabled offshore wind recf inputs - Initialize an empty offshore wind capacity-factor frame when offshore wind processing is disabled. - Keep downstream concatenation inputs consistent with the onshore wind index. - Avoid referencing df_windofs before assignment in no-offshore-wind cases. --- input_processing/recf.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/input_processing/recf.py b/input_processing/recf.py index fc16d170f..fb736ce22 100644 --- a/input_processing/recf.py +++ b/input_processing/recf.py @@ -369,6 +369,9 @@ def main(reeds_path, inputs_case): resource_adequacy_years ) df_windofs.columns = ['wind-ofs_' + col for col in df_windofs] + else: + # Keep concat inputs consistent when offshore wind is disabled. + df_windofs = pd.DataFrame(index=df_windons.index) ### UPV df_upv = calculate_class_region_cf_hourly( From 7119af439ae50ad91f852c7b476ea99c9e5b1885 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Thu, 11 Jun 2026 17:06:48 +0000 Subject: [PATCH 13/46] Add agent, testing, and report output documentation - Add AGENT.md with repo orientation, workflow notes, and agent-facing guidance. - Add TESTING.md with pytest usage and report-log interpretation notes. - Add REPORT_OUTPUT_LOGIC.md documenting expanded report outputs, dependencies, and toggle-driven failure modes. - Add cases_categorized.csv to classify case inputs and call out pipeline toggles. --- REPORT_OUTPUT_LOGIC.md | 144 ++++++++++++++++ TESTING.md | 238 +++++++++++++++++++++++++ cases_categorized.csv | 383 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 765 insertions(+) create mode 100644 REPORT_OUTPUT_LOGIC.md create mode 100644 TESTING.md create mode 100644 cases_categorized.csv diff --git a/REPORT_OUTPUT_LOGIC.md b/REPORT_OUTPUT_LOGIC.md new file mode 100644 index 000000000..9ac1fce8e --- /dev/null +++ b/REPORT_OUTPUT_LOGIC.md @@ -0,0 +1,144 @@ +# ReEDS Report Output Logic + +This table explains the sections in the standard expanded ReEDS bokehpivot +report. It is meant for triaging `outputs/reeds-report/report.html` and +`outputs/reeds-report/report.log` after a run. + +The report template is `postprocessing/bokehpivot/reports/templates/reeds2/standard_report_expanded.py`. +Its result definitions live in `postprocessing/bokehpivot/reeds2.py`. + +## How to Read This + +- Bare source names like `cap_nat` or `systemcost` are resolved by + `reeds.io.read_output`; in current runs they commonly come from + `outputs/outputs.h5`, though some may also exist as standalone output files. +- Paths ending in `.csv` are read literally relative to `outputs/`, unless they + start with `../inputs_case/`, in which case they are read from the run's + `inputs_case/` directory. +- A section reports out when its source data exists, has the expected columns, + survives preprocessing, and is still non-empty after the section's filters. +- Map sections also need valid region/state mapping data and at least one + non-empty final-year value after filtering. +- `report.log` red-section failures are isolated by design: bokehpivot catches a + section exception, writes a red `ERROR!` header in `report.html`, logs the + traceback, and keeps building later sections. + +## Core Model Outputs + +| No. | Report section | Reads | Reports when | +| --- | --- | --- | --- | +| 1 | Error Check: shows modeled error-check values by error type. | `error_check` | The error-check table exists with `type` and `Value`. Nonzero values may be a meaningful model warning, not a plotting failure. | +| 2 | Intertemporal Capacity by Iteration (GW): capacity by tech, year, and solver iteration. | `cap_iter` | Intertemporal/iteration output was written. This is tied to intertemporal solve mode; sequential cases such as `timetype=seq` may not write `cap_iter`, so the section can fail even if the model solved. | +| 3 | Generation (TWh): national annual generation by technology. | `gen_ann_nat` | National annual generation exists with tech-year rows. | +| 4 | Capacity (GW): national installed capacity by technology. | `cap_nat` | National capacity exists with tech-year rows. | +| 5 | Energy Capacity (GWh): storage/product energy capacity by tech, vintage, region, and year. | `cap_energy_ivrt` | Energy-capacity output exists. Empty storage/product portfolios can leave little to plot. | +| 6 | New Annual Capacity (GW): national annual capacity additions by technology. | `cap_new_ann_nat` | New-build output exists with tech-year rows. | +| 7 | Annual Retirements (GW): national annual retirements by technology. | `ret_ann_nat` | Retirement output exists with tech-year rows. | +| 8 | Final Gen by timeslice (GW): final-year generation profile by modeled timeslice. | `gen_h_nat` | Timeslice generation exists, timeslices can be sorted, and final-year filtered rows are non-empty. | +| 9 | Final Gen by stress timeslice (GW): final-year generation during stress timeslices. | `gen_h_stress_nat` | Stress-period generation output exists and final-year stress timeslices are non-empty. | +| 10 | Regional Gen Final (TWh): final-year BA-level generation map by technology. | `gen_ann` via `Generation BA (TWh) [no-index]` | BA-level annual generation exists, final-year rows are non-empty, and BA geography joins succeed. | +| 11 | Operating Reserves (TW-h): annual operating reserve supply by reserve type and tech. | `opRes_supply` | Operating reserve supply exists with reserve-type, tech, region, and year. | +| 12 | Final OpRes by timeslice (GW): final-year operating reserve supply by timeslice. | `opRes_supply_h` | Timeslice reserve supply exists and the final-year filtered data has plottable reserve types/techs. `GSw_OpRes=2` enables the simplified `combo` reserve type and should not by itself suppress this output. However, the model equations are also gated by `opres_h`; if the active `inputs_case//opres_periods.csv` is empty, `opRes_supply_h.csv` can be header-only and the report can fail with a plotting index error. | +| 13 | Firm Capacity (GW): seasonal firm capacity and derived capacity credit. | `cap_firm`, `cap` | Firm-capacity and installed-capacity outputs both exist and can be joined by tech, region, season, and year. | +| 14 | Curtailment Rate: VRE curtailment rate over time. | `curt_rate` | Curtailment-rate output exists with year and `Curt Rate`. | +| 15 | Losses (fraction of load): losses normalized by load. | `losses_ann` | Loss and `load` rows exist. The `load` row is the denominator for the fraction. | +| 16 | Transmission (GW-mi): transmission capacity by type over time. | `tran_mi_out`, `tran_prm_mi_out`, `cap_new_bin_out`, `../inputs_case/spur_parameters.csv`, `../inputs_case/scalars.csv` | Transmission outputs and supporting spur-line inputs exist; preprocessing can calculate total transmission capacity. | +| 17 | Transmission (PRM) (GW-mi): PRM-attributed transmission capacity. | Same as section 16 | Same as section 16, plus the PRM transmission column is populated enough to plot. | + +## Prices, Costs, Revenues, and Emissions + +| No. | Report section | Reads | Reports when | +| --- | --- | --- | --- | +| 18 | Bulk System Electricity Price ($/MWh): stacked bulk cost components divided by load. | `reqt_price_sys`, `reqt_quant_sys` | System-level requirement prices and quantities exist, including `q_load` denominator rows and relevant price component rows. | +| 19 | National Energy Price ($/MWh): national energy price over time. | `reqt_price_sys`, `reqt_quant_sys` | Energy-price and load-quantity rows exist after price preprocessing. | +| 20 | Final National Energy Price by timeslice ($/MWh): final-year national energy price by timeslice. | `reqt_price_sys`, `reqt_quant_sys` | Final-year energy-price rows by timeslice exist and timeslices sort cleanly. | +| 21 | National Average Electricity Cost ($/MWh): annualized system cost divided by national load. | `systemcost`, `reqt_quant`, `../inputs_case/crf.csv`, `../inputs_case/val_r.csv`, `../inputs_case/df_capex_init.csv`, `../inputs_case/switches.csv`, `../inputs_case/scalars.csv` | System cost, load quantities, and financial helper files exist. Missing `df_capex_init.csv` or malformed financial inputs can break this and related cost sections. | +| 22 | National OpRes Price ($/MW-h): national operating reserve price over time. | `reqt_price_sys`, `reqt_quant_sys` | Operating reserve price and quantity rows exist after preprocessing. | +| 23 | Final National OpRes Price by timeslice ($/MW-h): final-year reserve price by timeslice. | `reqt_price_sys`, `reqt_quant_sys` | Final-year operating reserve price rows by timeslice exist and are non-empty. | +| 24 | Final Regional Energy Price ($/MWh): final-year BA energy price map. | `reqt_price`, `reqt_quant` | BA-level price and quantity rows exist, final-year load denominators exist, and BA map joins succeed. | +| 25 | National Annual Capacity Price ($/kW-yr): reserve-margin/capacity price over time. | `reqt_price_sys`, `reqt_quant_sys` | Annual capacity or reserve-margin price rows and matching quantity rows exist. | +| 26 | Annual Revenue National (Bil$/yr): revenue by technology and service. | `revenue_nat`, `cap_nat`, `gen_uncurtailed_nat` | Revenue output exists and can be joined to capacity and uncurtailed generation for derived metrics. | +| 27 | Annual Revenue per Capacity National ($/kW-yr): revenue normalized by capacity. | Same as section 26 | Same as section 26, plus capacity denominators are present and nonzero for plotted techs. | +| 28 | Annual Revenue per Generation National ($/MWh): revenue normalized by generation. | Same as section 26 | Same as section 26, plus generation denominators are present and nonzero for plotted techs. | +| 29 | Present Value of System Cost through 2050 (Bil $): discounted system cost summary. | `systemcost`, `../inputs_case/crf.csv`, `../inputs_case/val_r.csv`, `../inputs_case/df_capex_init.csv`, `../inputs_case/switches.csv`, `../inputs_case/scalars.csv` | System cost and financial helper files exist, and years overlap the report's present-value window. | +| 30 | Emissions National (metric tons): national emissions by emissions type. | `emit_nat` | National emissions output exists with emissions type, pollutant, year, and emissions value. | +| 31 | Net CO2e Emissions National (MMton): net CO2e by technology. | `emit_nat_tech` | Technology-level emissions exist and include rows usable by the net-CO2e preprocessing. | +| 32 | CO2 Abatement Cost ($/metric ton): CO2 price over time. | `co2_price` | CO2 price output exists and can be inflation-adjusted. | +| 33 | Undiscounted Annualized System Cost (Bil $): annual system cost by cost category. | Same as section 29 | Same as section 29, with annual cost rows available after preprocessing. | + +## Hydrogen and Technology Detail + +| No. | Report section | Reads | Reports when | +| --- | --- | --- | --- | +| 34 | Hydrogen Production (Million metric tons): production from hydrogen technologies. | `prod_produce_ann` | Production output exists and includes hydrogen tech rows selected by the preset. | +| 35 | Hydrogen Price ($ per kg): hydrogen product price over time. | `prod_h2_price` | Hydrogen price output exists with product-year price rows. | +| 36 | Final Wind Capacity (GW): final-year BA map for onshore and offshore wind. | `cap` filtered to `Onshore Wind`, `Offshore Wind` | Final-year BA capacity exists for wind technologies and geography joins succeed. | +| 37 | Final PV Capacity (GW): final-year BA map for UPV and DPV. | `cap` filtered to `UPV`, `DPV` | Final-year BA capacity exists for PV technologies and geography joins succeed. | +| 38 | Area used for UPV (sq. km.): UPV built area over time. | `land_use_total.csv` | Land-use postprocessing produced `outputs/land_use_total.csv` with built capacity and area columns. This is controlled by `land_use_analysis`; when `land_use_analysis=0`, the file is not expected. | +| 39 | Final CSP Capacity (GW): final-year BA map for CSP. | `cap` filtered to `CSP` | Final-year CSP capacity exists. If the filter is empty, map plotting may fail rather than render a blank chart. | +| 40 | Final Biopower Capacity (GW): final-year BA map for biopower and landfill gas. | `cap` filtered to `Biopower`, `Landfill-Gas` | Final-year capacity exists for at least one filtered biopower tech. Empty filters can trigger map plotting errors. | +| 41 | Final Geothermal Capacity (GW): final-year BA map for geothermal. | `cap` filtered to `Geothermal` | Final-year geothermal capacity exists and maps cleanly. | +| 42 | Final Hydro and Canadian Import Capacity (GW): final-year BA map for hydro/import capacity. | `cap` filtered to `Hydropower`, `Canadian Imports` | Final-year capacity exists for hydro or Canadian import categories. | +| 43 | Final Pumped-hydro Capacity (GW): final-year BA map for pumped-hydro storage. | `cap` filtered to `Pumped-Hydro`, `Pumped-Hydro-Flex` | Final-year pumped-hydro capacity exists. Empty filters can trigger map plotting errors. | +| 44 | Final Battery Storage Capacity (GW): final-year BA map for battery capacity. | `cap` filtered to `Battery` | Final-year battery capacity exists. Empty filters can trigger map plotting errors. | +| 45 | Capacity Factor - Generation: generation-weighted capacity factor by tech. | `gen_ivrt`, `cap_ivrt` | Generation and capacity by tech-vintage-region-year exist and denominators are nonzero. | +| 46 | Battery Average Duration (h): energy-capacity-weighted storage duration. | `storage_duration_out`, `cap_energy_ivrt` | Storage duration and energy capacity outputs exist for storage technologies. | +| 48 | New Tech Value Factors: value factors for new technologies. | `valnew` | New-tech value output exists and preprocessing can derive value-factor fields. | + +## Retail, Health, Reliability, and Runtime + +| No. | Report section | Reads | Reports when | +| --- | --- | --- | --- | +| 47 | Retail rate (cents/kWh): national retail rate by source over time. | `retail/retail_rate_USA_centsperkWh.csv` | Retail postprocessing completed and wrote the USA retail-rate CSV. If `retail_rate_calculations.py` fails, this section fails with `FileNotFoundError`. | +| 49 | Monetized health damages over time (billion $/year): annual health damages by air-quality model and concentration-response function. | `health_damages_caused_r.csv` | Health-damages postprocessing produced the current 9-column CSV (`ba`, `year`, `pollutant`, `tons`, `model`, `cr`, `md`, `damage_$`, `mortality`) or an equivalent schema that bokehpivot can normalize to its internal health-damage fields. | +| 50 | Mortality over time (lives/year): annual mortality impacts by model and concentration-response function. | Same as section 49 | Same as section 49. If section 49 fails during source preprocessing, later health presets may cascade with plotting-state errors. | +| 51 | Total undiscounted health damages through 2050 (billion $): cumulative undiscounted damages. | Same as section 49 | Same as section 49, with years overlapping the report's present-value start year through 2050. | +| 52 | Total discounted health damages through 2050 (billion $): cumulative discounted damages. | Same as section 49 | Same as section 49, plus discounting inputs from report defaults are valid. | +| 53 | Total mortality through 2050 (lives): cumulative mortality. | Same as section 49 | Same as section 49, with mortality rows available for the filtered year range. | +| 54 | System cost + health damages: ACS ($/MWh): average electricity cost including ACS health damages. | `systemcost`, `reqt_quant`, `../inputs_case/crf.csv`, `../inputs_case/val_r.csv`, `../inputs_case/df_capex_init.csv`, `../inputs_case/switches.csv`, `../inputs_case/scalars.csv`, `health_damages_caused_r.csv` | System cost, load quantity, financial helper files, and health damages all exist; health damages include `cr = acs` rows. | +| 55 | System cost + health damages: H6C ($/MWh): average electricity cost including H6C health damages. | Same as section 54 | Same as section 54, with `cr = h6c` rows. | +| 56 | NEUE (ppm): normalized expected unserved energy. | `neue.csv` | Resource-adequacy postprocessing produced `outputs/neue.csv` with year, iteration, and NEUE values. If PRAS/RA postprocessing is skipped, this is commonly absent. | +| 57 | Runtime (hours): process runtime by scenario. | `../meta.csv` | The run-level `meta.csv` exists and can be parsed into process time rows. | +| 58 | Runtime by year (hours): runtime split by model year/process. | `../meta.csv` | Same as section 57, with year-level process metadata available after runtime preprocessing. | + +## Notes From `v20260610_TF_ND_small` + +The current small smoke run solved far enough to produce many core outputs, but +its expanded report is not clean. The failures line up with optional or +small-case-sensitive report sections: + +- Section 2 fails because `cap_iter` is absent from `outputs/outputs.h5`. +- Section 12 reads `opRes_supply_h` but fails during plotting, likely because + the final-year/preset-filtered data is structurally empty or missing an + expected plotted series. +- Section 38 fails because `outputs/land_use_total.csv` is absent. +- Sections 39, 40, 41, 43, and 44 fail after technology filters leave no + plottable map data for the small case. +- Section 47 fails because `outputs/retail/retail_rate_USA_centsperkWh.csv` was + not written after retail postprocessing failed. +- Sections 49 through 55 fail if `health_damages_caused_r.csv` does not match + a schema that the report can normalize, or if health-damage preprocessing + fails after loading. +- Section 56 fails because `outputs/neue.csv` is absent. + +For a deliberately small smoke run, some of these can be expected gaps. For a +full standard test case, they are worth investigating unless the case settings +intentionally disable the corresponding postprocessor or technology family. + +## Notes From `v20260611_Pacific` + +This Pacific run is useful because several report failures can be traced to +specific switches or generated inputs: + +- Section 2 fails because `cap_iter` is absent. The run uses `timetype=seq`, so + the intertemporal capacity-by-iteration output is not expected for this + sequential solve. +- Section 12 fails because `opRes_supply_h.csv` exists but is header-only. + `GSw_OpRes=2` is not the direct cause; the simplified reserve formulation + activates the `combo` reserve type. In this run, the representative-period + file `inputs_case/rep/opres_periods.csv` is header-only, so `opres_h` is empty + for the main solve and the operating-reserve equations generate zero rows. + Stress-period folders have populated `opres_periods.csv`, but the standard + expanded report reads the main reported `opRes_supply_h` output. +- Section 38 fails because `land_use_analysis=0`, so + `outputs/land_use_total.csv` is not expected. diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 000000000..eb234234f --- /dev/null +++ b/TESTING.md @@ -0,0 +1,238 @@ +# Testing ReEDS + +This document collects the testing guidance that is currently spread across the +developer guide, PR template, CI workflows, and subsystem READMEs. + +Primary references: + +- `docs/source/developer_best_practices.md`, especially "Testing Guidelines" +- `.github/PULL_REQUEST_TEMPLATE.md` +- `.github/workflows/python-app.yaml` +- `reeds2pras/README.md` +- `AGENT.md` + +## Prerequisites + +Most lightweight Python tests only need the Python environment. Model runs need +the full ReEDS stack. + +- Python `3.11` +- `uv` for Python environment management +- GAMS on `PATH`, with an appropriate license and solver +- Julia `1.12.1` for ReEDS2PRAS, PRAS, and stress-period workflows +- Remote test data downloaded or available when running model cases that need it + +Typical local setup: + +```powershell +uv sync --extra dev +julia --project=. instantiate.jl +$env:CONDA_DEFAULT_ENV = "reeds2" +$env:CONDA_PREFIX = (Resolve-Path .venv).Path +``` + +Optional remote-data preload: + +```powershell +uv run python reeds/remote.py +``` + +## Quick Checks + +Run these when the change is Python-only and does not require a model solve: + +```powershell +uv run python -m pytest tests/test_read_h5_files.py +uv run python -m pytest hourlize/tests +``` + +Run ReEDS2PRAS tests when changing `reeds2pras/`, `ReEDS_Augur/`, PRAS-related +inputs, or stress-period/resource-adequacy code: + +```powershell +cd reeds2pras/test +julia --project runtests.jl +cd ../.. +``` + +Build docs when changing documentation or doc configuration: + +```powershell +uv run sphinx-build docs/source docs/build/ +``` + +## Model Run Tests + +The main model test path is to run one or more scenarios from `cases_test.csv` +and then validate the completed run folder. + +Show runbatch options: + +```powershell +uv run python runbatch.py -h +``` + +Run all non-ignored scenarios in `cases_test.csv`: + +```powershell +uv run python runbatch.py -b vYYYYMMDD_test -c test +``` + +Run selected scenarios: + +```powershell +uv run python runbatch.py -b vYYYYMMDD_test -c test -s USA_defaults +uv run python runbatch.py -b vYYYYMMDD_test -c test -s USA_defaults,USA_decarb +``` + +Validate outputs for a completed case: + +```powershell +uv run python -m pytest tests/test_outputs.py --casepath runs/vYYYYMMDD_test_USA_defaults +``` + +`tests/test_outputs.py` checks that expected reported CSVs, bokehpivot reports, +retail outputs, and selected figures exist in the completed case's `outputs/` +folder. It is not a substitute for reviewing whether model results changed in +the expected way. + +This output validation is aimed at standard `cases_test.csv` workflows. Very +small or custom smoke-test cases, such as runs based on `cases_small.csv`, can +solve successfully while still missing full-report deliverables. In that case, +`tests/test_outputs.py` may fail because a standard postprocessor did not write +one of its expected files, not because the GAMS solve failed or because model +results differ from a baseline. + +When using a small smoke test, distinguish three outcomes: + +- The model solve failed: inspect `gamslog.txt` and `lstfiles/` first. +- The solve completed but postprocessing failed: outputs exist, but report, + retail, plotting, R2X, or other postprocessor files may be missing. +- The solve and postprocessing completed enough for the intended smoke test, but + `tests/test_outputs.py` still fails because it expects standard-case + deliverables that the small case does not produce. + +## Change-Based Guidance + +Use the smallest test that gives real confidence. For model behavior changes, +that usually means at least one solved ReEDS case plus comparison outputs. + +### Post-Process Test + +Use for changes that do not affect model code or data, such as report styling, +plotting changes, or helper scripts like `runstatus.py`. + +- Run the changed post-processing workflow on outputs from a recent main-branch + run. +- Include a short demonstration or output artifact in the PR. +- Verify GitHub runner tests pass. + +### Light Test + +Use for model-code changes that are not expected to meaningfully affect model +solutions, such as rounding an input parameter, improving runtime without +changing logic, changing code behind a default-off switch, or adding a missing +`runfiles.csv` entry. + +- Compare a default test case from `cases_test.csv` against an equivalent run + from main. +- Produce and review a comparison report. +- Verify GitHub runner tests pass. + +### Regular Test + +Use for most model or data changes. + +- Run and compare either `USA_defaults` or `Mid_Case`, plus `USA_decarb`, from + `cases_test.csv` against equivalent runs from main. +- Review capacity, generation, transmission capacity, bulk system electricity + price, system cost, and runtime. +- Include the comparison report in the PR. +- Verify GitHub runner tests pass. + +The developer guide notes that `USA_defaults` should be run for most PRs. When +the right level is unclear, prefer the regular test or ask reviewers. + +### New Version Test + +Use for tagged releases. + +- Run the full set of scenarios in `cases_test.csv`. +- Note any failing cases in release notes. +- Create issues for output-processing failures and mention them in release + notes. +- Create comparison reports for the USA scenario against the previous released + version and attach them to release notes. + +## CI Reference + +The main CI workflow does the following: + +- Sets up Python, GAMS, and Julia environments. +- Downloads or restores required remote/Zenodo test files. +- Runs: + +```bash +python runbatch.py -b "$batch" -c test -s "$SCENARIO" +python -m pytest tests/test_outputs.py --casepath "$GITHUB_WORKSPACE/runs/${batch}_${SCENARIO}" +``` + +- Uploads failure diagnostics such as `gamslog.txt`, listing files, outputs, and + case inputs. +- Runs R2X conversion for selected completed runs using `r2x-reeds`. + +Workflow-quality CI also runs `zizmor` and `actionlint` on GitHub Actions files. + +## Comparison Reports + +The PR template asks for comparison reports commensurate with the change: + +- No model or data changes: Pacific test case only. +- Model or data changes: full U.S. reference case and full U.S. decarb case. +- Model structure, spatial/temporal resolution, or other large changes: all + cases in `cases_test.csv`. + +`postprocessing/compare_cases.py` is the main comparison-report script. Include +additional plots when they help explain input data, methods, or expected output +differences. + +## Debugging Failed Tests + +For failed model runs, inspect the case folder first: + +- `runs//gamslog.txt`: search for `ERROR`, `LP status`, `Status`, and + `Cur_year`. +- `runs//lstfiles/`: inspect `1_Inputs.lst` for input build failures and + year-specific `.lst` files for solve failures. +- `runs//inputs_case/`: exact inputs seen by the model. +- `runs//meta.csv`: process timing and repo metadata. +- `runs//outputs/`: reported outputs and generated reports. +- `runs//ReEDS_Augur/augur_data/`: PRAS and capacity-credit intermediate + files. +- `runs//outputs/reeds-report/report.log`: bokehpivot report build log. + The report builder intentionally catches individual section failures, marks + them as red `ERROR!` sections in `report.html`, logs the traceback, and + continues building later sections. This lets a report be partially useful, but + a standard validation report should still be checked for unexpected failed + sections. + +Useful commands: + +```powershell +uv run python runstatus.py +uv run python postprocessing/check_error.py runs/ +``` + +Keep `cleanup_level` at `0` while developing or debugging so run folders retain +the files needed for diagnosis and restarts. + +## Adding Tests + +- Prefer focused Python tests for reusable utility behavior in `reeds/`, + `hourlize/`, and input/post-processing modules. +- Add or update `tests/objective_function_params.yaml` when adding general + objective-function parameters that should be checked for missing input values. +- For ReEDS2PRAS, add new Julia test files under `reeds2pras/test/` named + `test-*.jl`; `runtests.jl` automatically includes matching files. +- For model behavior changes, document the run scenarios and comparison results + even when unit tests are also added. diff --git a/cases_categorized.csv b/cases_categorized.csv new file mode 100644 index 000000000..37ec8fd26 --- /dev/null +++ b/cases_categorized.csv @@ -0,0 +1,383 @@ +Input,Category,Description,Choices,Default Value,Ref +timetype,Temporal / solve structure,Sequential or Intertemporal,seq; int; win,seq, +ignore,Run setup / execution,"0=run this case, 1=ignore this case",0; 1,0, +AWS,Run setup / execution,Switch for when running on AWS,0; 1,0, +yearset,Temporal / solve structure,"_-delimited list of years to model OR bash-formatted year ranges (start..end..step). For example, 2010_2015_2020..2035..3_2040..2050..5 means: 2010, 2015, then 2020 through 2035 in 3-year steps, then 2040 through 2050 in 5-year steps. startyear will be prepended if it is not included. Truncated at endyear.",N/A,2010_2015_2020..2050..3, +startyear,Temporal / solve structure,First year to be modeled,N/A,2010, +endyear,Temporal / solve structure,Last year to be modeled,N/A,2050, +windows_suffix,Temporal / solve structure,Set of windows that are modeled,default; step5; step10; 2100,default, +solver,Run setup / execution,Solver for GAMS to use,CPLEX; gurobi,CPLEX, +distpvscen,Demand / load / flexibility,Setting for distpv scenario (see inputs\dgen_model_inputs),N/A,stscen2023_mid_case, +calc_csp_cc,Resource adequacy / PRM / PRAS,Switch to turn on CSP capacity credit calculations,0; 1,0, +plantchar_battery,Technology costs / performance,Battery cost and performance inputs (inputs\plant_characteristics\{plantchar_battery}.csv). The options for plantchar_battery start with 'battery_' and the switch should be set to the entire file name (ex: battery_ATB_2024_advanced),battery_ATB_(2023|2024)_(conservative|moderate|advanced),battery_ATB_2024_moderate, +plantchar_beccs,Technology costs / performance,BECCS cost and performance inputs (inputs\plant_characteristics\{plantchar_beccs}.csv) The options for plantchar_beccs start with 'beccs_' and the switch should be set to the entire file name (ex: beccs_reference),(beccs_BVRE_2021_(high|mid|low)|beccs_(reference|lowcost)),beccs_reference, +plantchar_biopower,Technology costs / performance,Biopower generators cost and performance characteristics (inputs\plant_characteristics\{plantchar_biopower}.csv). Options start with 'biopower_' and the switch should be set to the entire file name (ex: biopower_ATB_2024_moderate),biopower_ATB_(2024)_(moderate),biopower_ATB_2024_moderate, +plantchar_coal_ccs,Technology costs / performance,Coal CCS generators cost and performance characteristics (inputs\plant_characteristics\{plantchar_coal_ccs}.csv). Options start with 'coal-ccs_' and the switch should be set to the entire file name (ex: coal-ccs_ATB_2024_moderate),coal-ccs_ATB_(2024)_(conservative|moderate|advanced),coal-ccs_ATB_2024_moderate, +plantchar_coal,Technology costs / performance,Coal generators cost and performance characteristics (inputs\plant_characteristics\{plantchar_coal}.csv). Options start with 'coal_' and the switch should be set to the entire file name (ex: coal_ATB_2024_moderate),coal_ATB_(2024)_(moderate),coal_ATB_2024_moderate, +plantchar_csp,Technology costs / performance,CSP cost and performance characteristics (inputs\plant_characteristics\{plantchar_csp}.csv). The options for plantchar_csp start with 'csp_' and the switch should be set to the entire file name (ex: csp_ATB_2024_advanced),csp_ATB_(2023|2024)_(conservative|moderate|advanced),csp_ATB_2024_moderate, +plantchar_fuelcell,Technology costs / performance,Fuel cell cost and performance characteristics (inputs\plant_characteristics\{plantchar_fuelcell}.csv). The options for plantchar_fuelcell start with 'fuelcell_' and the switch should be set to the entire file name (ex: fuelcell_ATB_2024_advanced),fuelcell_ATB_2024_(moderate|advanced),fuelcell_ATB_2024_moderate, +plantchar_gas_ccs,Technology costs / performance,Natural gas CCS generator cost and performance characteristics (inputs\plant_characteristics\{plantchar_gas_ccs}.csv). Options start with 'gas-ccs' and the switch should be set to the entire file name (ex: gas-ccs_ATB_2024_moderate),gas-ccs_ATB_(2024)_(conservative|moderate|advanced),gas-ccs_ATB_2024_moderate, +plantchar_gas,Technology costs / performance,Natural gas generator cost and performance characteristics (inputs\plant_characteristics\{plantchar_gas}.csv). Options start with 'gas_' and the switch should be set to the entire file name (ex: gas_ATB_2024_moderate),gas_ATB_(2024)_(moderate),gas_ATB_2024_moderate, +plantchar_geo,Technology costs / performance,Geothermal cost setting (inputs\plant_characteristics\{plantchar_geo}.csv).The options for plantchar_geo start with 'geo_' and the switch should be set to the entire file name (ex: geo_ATB_2023_conservative),geo_ATB_(2023|2024)_(conservative|moderate|advanced),geo_ATB_2024_moderate, +plantchar_h2combustion,Technology costs / performance,H2-CT/CC cost and performance inputs (inputs/plant_characteristics/{h2combustionscen}.csv). The options for h2combustionscen start with 'h2-combustion_' and the switch should be set to the entire file name (ex: h2-combustion_ATB_2023),h2-combustion_ATB_(2024),h2-combustion_ATB_2024, +plantchar_hydro,Technology costs / performance,Hydropower cost inputs (inputs/plant_characteristics/{plantchar_hydro}.csv). The options for plantchar_hydro start with 'hydro_' and the switch should be set to the entire file name (ex: hydro_ATB_2019_low),hydro_ATB_2019_(constant|mid|low),hydro_ATB_2019_mid, +plantchar_nuclear_smr,Technology costs / performance,Small modular reactor (SMR) cost and performance characteristics (inputs\plant_characteristics\{plantchar_nuclear_smr}.csv). Options start with 'nuclear_smr' and the switch should be set to the entire file name (ex: nuclear-smr_ATB_2024_moderate),nuclear-smr_ATB_(2024)_(conservative|moderate|advanced),nuclear-smr_ATB_2024_moderate, +plantchar_nuclear,Technology costs / performance,Large nuclear cost and performance characteristics (inputs\plant_characteristics\{plantchar_nuclear}.csv). Options start with 'nuclear_' and the switch should be set to the entire file name (ex: nuclear_ATB_2024_moderate),nuclear_ATB_(2024)_(conservative|moderate|advanced),nuclear_ATB_2024_moderate, +plantchar_ofswind,Technology costs / performance,Offshore wind cost and performance inputs (inputs/plant_characteristics/{plantchar_ofswind}.csv). The options for plantchar_ofswind start with 'ofs-wind_' and the switch should be set to the entire file name (ex: ofs-wind_ATB_2023_advanced),ofs-wind_ATB_(2023|2024)_(conservative|moderate|advanced|moderate_noFloating),ofs-wind_ATB_2024_moderate, +plantchar_onswind,Technology costs / performance,Onshore wind cost and performance inputs (inputs/plant_characteristics/{plantchar_onswind}.csv). The options for plantchar_onswind start with 'ons-wind_' and the switch should be set to the entire file name (ex: ons-wind_ATB_2023_advanced).,ons-wind_ATB_(2023|2024)_(conservative|moderate|advanced),ons-wind_ATB_2024_moderate, +plantchar_other,Technology costs / performance,Cost and performance characteristics for lfill-gas and o-g-s (inputs\plant_characteristics\{plantchar_other}.csv). Options start with 'other_' and the switch should be set to the entire file name (ex: other_plantchar)',other_plantchar,other_plantchar, +plantchar_upv,Technology costs / performance,UPV cost and performance inputs (inputs/plant_characteristics/{plantchar_upv}.csv). The options for plantchar_upv start with 'upv_' and the switch should be set to the entire file name (ex: upv_ATB_2023_advanced).,upv_ATB_(2023|2024)_(conservative|moderate|advanced),upv_ATB_2024_moderate, +ccsflexscen,Hydrogen / DAC / CO2 management,"Flexible CCS scenario (inputs\plant_characteristics\{ccsflexscen}_cost/perf.csv).The options for ccsflexscen start with 'ccsflex_' and the switch should be set to the file name, dropping '_cost' or '_perf' (ex: ccsflex_ATB_2020)",ccsflex_ATB_2020,ccsflex_ATB_2020, +ccs_upgrade_cost_case,Hydrogen / DAC / CO2 management,case in upgrade_cost_ccs_coal and upgrade_cost_ccs_gas to use for ccs retrofit costs,atb22_1p2_moderate; atb22_1p2_advanced,atb22_1p2_moderate, +coalscen,Fuel / commodity prices,"Coal price scenario (inputs\fuelprices\{coalscen}.csv). The options for coalscen start with 'coal_' and the switch should be set to the file name, dropping 'coal' (ex: AEO_2025_reference)",AEO_(2023|2025)_reference,AEO_2025_reference, +demandscen,Demand / load / flexibility,Demand scenario (see inputs\load),N/A,AEO_2025_reference, +dr_shedscen,Demand / load / flexibility,DR shed scenario,demo_data_January_2025,demo_data_January_2025, +evmcscen,Demand / load / flexibility,EVMC scenario for load and supply curve and flexibility,Baseline,Baseline, +geodiscov,Renewable resource / siting,Annual discover rates for new geothermal sites,BAU; TI,BAU, +geohydrosupplycurve,Renewable resource / siting,Geohydro Supply Curve,ATB_2023,ATB_2023, +egssupplycurve,Renewable resource / siting,EGS Supply Curve,ATB_2023; reV,reV, +egsnearfieldsupplycurve,Renewable resource / siting,EGS (near field) Supply Curve,ATB_2023,ATB_2023, +ngscen,Fuel / commodity prices,Natural gas price inputs (see inputs\fuelprices),N/A,AEO_2025_reference, +pshsupplycurve,Storage / hybrid resources,PSH Supply Curve,(8|10|12)hr_(ref|wEphemeral|wExist|wEph|wExist_wEph)_(apr2025|mar2024),12hr_ref_apr2025, +pvbscen,Storage / hybrid resources,PVB cost-sharing scenario,benchmark2020,benchmark2020, +dacscen,Hydrogen / DAC / CO2 management,Electrical DAC cost and performance inputs (see inputs/consume/[dacscen].csv starting with 'dac_elec_').,BVRE_2021_(high|mid|low),BVRE_2021_mid, +h2combustionfuelscen,Hydrogen / DAC / CO2 management,H2-CT/CC Fuel Price Scenarios (only used if endogenous H2 production is turned off),10; reference; 30,reference, +upgradescen,Retirement / refurbishment / upgrades,Exogenous upgrade capital cost specification (see inputs\upgrades). 'default' calculates cost using diff between from- and to- tech,N/A,default, +retscen,Retirement / refurbishment / upgrades,Retirement Scenario,Nuke60RetireYear; Nuke80RetireYear; NukeEarlyRetireYear; NukeRefRetireYear,Nuke80RetireYear, +supplycurve,Renewable resource / siting,Wind and Solar Supply Curves,default; 0; naris; 2018,default, +uraniumscen,Fuel / commodity prices,Uranium price scenario,AEO_(2023|2025)_reference,AEO_2025_reference, +GSw_Region,Spatial scope / aggregation,Specify column from inputs/userinput/modeled_regions.csv or from {column of hierarchy.csv}/{period-delimited entries to keep from that column},N/A,country/USA, +GSw_ZoneSet,Spatial scope / aggregation,Set of geospatial zones to use as balancing areas (described in inputs/zones/README.md),^(z48|z54|z69|z132|z134|z3109|UTcounty|PJMcounty)$,z132, +capcredit_hierarchy_level,Resource adequacy / PRM / PRAS,Select level at which to aggregate net load for capacity-credit calculation,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,transreg, +construction_schedules_suffix,Technology costs / performance,File suffix for construction schedules,default,default, +construction_times_suffix,Technology costs / performance,File suffix for construction times by technology,default,default, +degrade_suffix,Technology costs / performance,File suffix for annual degredation by technology,default,default, +depreciation_schedules_suffix,Financials / incentives,File suffix for depreciation schedules,default,default, +financials_sys_suffix,Financials / incentives,File suffix for the system-wide system discount rate,ATB(2023|2024),ATB2024, +financials_tech_suffix,Financials / incentives,File suffix for technology-specific financial assumptions (see inputs\financials_tech),ATB(2023|2023_CRP20|2024),ATB2024, +financials_trans_suffix,Financials / incentives,File suffix for transmission financial assumptions,default; 30ITC_0pen_2022_2031,default, +incentives_suffix,Financials / incentives,File suffix for incentive definition,ira; obbba; obbba_conservative; annual; biennial; ira_45q_45v_extension; none,obbba, +inflation_suffix,Financials / incentives,File suffix for historical inflation schedule,default,default, +ivt_suffix,Financials / incentives,File suffix for ivt csv file,default; small; step,default, +reg_cap_cost_diff_suffix,Technology costs / performance,File suffix for regional capital cost differences,default,default, +techs_suffix,Technology availability / representation,File suffix for master list of technologies,default; subsetForTesting,default, +dollar_year,Financials / incentives,DO NOT CHANGE FROM 2004 UNTIL ALL FINANCIAL INPUTS HAVE DOLLAR YEAR ADJUSTMENT - Real dollar year for model to calculate and report,2004,2004, +sys_eval_years,Temporal / solve structure,Number of years that the model evaluates investments on,int,30, +numhintage,Retirement / refurbishment / upgrades,"number of hintage bins. Enter 'unit' for unit level bins. Enter 'group' to group by unique technology, region, and heatrate combinations",int,6, +numbins_windons,Renewable resource / siting,Number of interconnection supply curve bins for onshore wind; options are 5 and 1300 (for individual sites lite),int,10, +numbins_windofs,Renewable resource / siting,Number of interconnection supply curve bins for offshore wind; options are 5 and 1300 (for individual sites lite),int,5, +numbins_upv,Renewable resource / siting,Number of interconnection supply curve bins for upv; options are 20 and 1300 (for individual sites lite),int,40, +numbins_csp,Renewable resource / siting,Number of interconnection supply curve bins for csp,int,5, +numbins_geohydro_allkm,Renewable resource / siting,Number of interconnection supply curve bins for hydrothermal geothermal,int,10, +numbins_egs_allkm,Renewable resource / siting,Number of interconnection supply curve bins for deep enhanced geothermal,int,10, +mindev,Retirement / refurbishment / upgrades,minimum deviation for a hintage to qualify for a new bin,int,50, +unitdata,Retirement / refurbishment / upgrades,"Unit Database: ""EIA-NEMS"" for NEMS",EIA-NEMS,EIA-NEMS, +marg_vre_mw,Resource adequacy / PRM / PRAS,MW for marginal VRE curt/cc calcs,N/A,1000, +marg_stor_mw,Resource adequacy / PRM / PRAS,MW for marginal storage capacity credit,N/A,100, +marg_evmc_mw,Resource adequacy / PRM / PRAS,MW for marginal electric vehicle managed charging (EVMC) capacity credit,N/A,100, +GSw_AnnualCap,Policy / emissions constraints,CO2/CO2e emission cap. Turn off cap (0) or turn on CO2 only cap (1) or turn on CO2e cap (2) or include H2 leakage in CO2e cap (3) ,0; 1; 2; 3,0, +GSw_AnnualCapScen,Policy / emissions constraints,Scenario for CO2 cap pathway (see inputs\emission_constraints\co2_cap.csv),N/A,default, +GSw_AVG_iter,Resource adequacy / PRM / PRAS,Select method for choosing which iterations are used for CC/curt calculations,0; 1,1, +GSw_BankBorrowCap,Policy / emissions constraints,Turn on/off CO2 cap with banking and borrowing,0; 1,0, +GSw_BatteryMandate,Policy / emissions constraints,Turn on/off battery mandate constraint,0; 1,1, +GSw_BECCS,Hydrogen / DAC / CO2 management,Turn on/off BECCS technology,0; 1,1, +GSw_BinOM,Technology costs / performance,Turn on/off binned FOM and VOM for each historical binned vintage,0; 1,1, +GSw_Biopower,Technology availability / representation,Turn on/off biopower,0; 1,1, +GSw_BioSupply,Fuel / commodity prices,Multiplier to adjust total biomass supply,N/A,1, +GSw_BioTransportCost,Fuel / commodity prices,Biomass collection and transport costs ($2004 per dry ton),N/A,22, +GSw_calc_powfrac,Report calculations - Pipeline toggle,Switch to compute powfrac in e_report and e_powfrac_calc - dramatically reduces calculation times with hourly resolution,0; 1,0, +GSw_Canada,Technology availability / representation,"Turn canada off [0], or use flexible (dispatchable-hydro-like) representation [1]",0; 1,1, +GSw_CarbTax,Policy / emissions constraints,Turn on/off CO2 tax,0; 1,0, +GSw_CarbTaxOption,Policy / emissions constraints,Choose the co2_tax input csv file (see inputs\emission_constraints),,default, +GSw_CCS,Hydrogen / DAC / CO2 management,Turn on/off all inflexible CCS,0; 1,1, +GSw_CCS_NotRecTech,Policy / emissions constraints,Turn on/off removal of CCS techs from CES eligibility,0; 1,0, +GSw_CCS_Rate_New_mod,Hydrogen / DAC / CO2 management,fractional CO2 capture rate of new CCS_mod capacity,float,0.95, +GSw_CCS_Rate_New_max,Hydrogen / DAC / CO2 management,fractional CO2 capture rate of new CCS_max capacity,float,0.99, +GSw_CCS_Rate_Upgrade_mod,Hydrogen / DAC / CO2 management,fractional CO2 capture rate of retrofit CCS_mod capacity,float,0.9, +GSw_CCS_Rate_Upgrade_max,Hydrogen / DAC / CO2 management,fractional CO2 capture rate of retrofit CCS_max capacity,float,0.99, +GSw_CCSFLEX_BYP,Hydrogen / DAC / CO2 management,Turn on/off all Flexible CCS with Bypass,0; 1,0, +GSw_CCSFLEX_cap_max,Hydrogen / DAC / CO2 management,CCS maximum capture,float,90, +GSw_CCSFLEX_cost_mult,Hydrogen / DAC / CO2 management,CCS capital cost multiplier,float,1, +GSw_CCSFLEX_DAC,Hydrogen / DAC / CO2 management,Turn on/off all Flexible CCS with Direct Air Capture,0; 1,0, +GSw_CCSFLEX_STO,Hydrogen / DAC / CO2 management,Turn on/off all Flexible CCS with Storage,0; 1,0, +GSw_CCSFLEX_STO_LEVEL,Hydrogen / DAC / CO2 management,Turn on/off explicit tracking of flexible CCS storge level (1=explicit; 0=implicit),0; 1,1, +GSw_CCS_NoRetire,Hydrogen / DAC / CO2 management,Switch to prevent coal and gas from turning off CCS equipment after upgrading. 0 = can turn CCS equipment off. 1 = must keep CCS equipment on.,0; 1,0, +GSw_CheckInputs,Input validation - Pipeline toggle,Switch to turn on/off inputs checking,0; 1,1, +climateloc,Water / climate impacts,Directory for climate scenarios (change to qnap/CIRA_Inputs_R2 to use scenarios not included in inputs/climate),N/A,inputs/climate, +climatescen,Water / climate impacts,Climate scenario for climate impacts,HadGEM2-ES_rcp45_AT; HadGEM2-ES_rcp85_AT; HadGEM2-ES_RCP2p6; HadGEM2-ES_RCP4p5; HadGEM2-ES_RCP8p5; GFDL-ESM2M_RCP4p5_WM; IPSL-CM5A-LR_RCP8p5_WM,HadGEM2-ES_rcp45_AT, +GSw_Clean_Air_Act,Policy / emissions constraints,"Turn on/off the provisions under the Clean Air Act, Section 111, which regulate the emissions from existing coal plants and new gas plants.",0; 1,1, +GSw_ClimateHeuristics,Water / climate impacts,Select scenario for a variety of climate heuristics,none; 2025_2050_linear,none, +GSw_ClimateHydro,Water / climate impacts,Turn on/off climate impacts on hydropower,0; 1,0, +GSw_ClimateStartYear,Water / climate impacts,Year in which to start applying climate impacts,N/A,2022, +GSw_ClimateWater,Water / climate impacts,Turn on/off climate impacts on cooling water,0; 1,0, +GSw_CO2_Storage,Hydrogen / DAC / CO2 management,"Include costs from CO2 transport and storage. 0 includes no costs, positive values applied as $ per metric ton to captured CO2. Enter in $2004. Suggested range of values based on NETL 2019 report : 11 (base), 7 (low), 26 (high)",N/A,11, +GSw_CO2_pipeline_cost,Hydrogen / DAC / CO2 management,Set capex cost for CO2 Pipeline. 2004$/(tonne-mi)/hr. Suggested value: 2257,N/A,2257, +GSw_CO2_pipeline_fom,Hydrogen / DAC / CO2 management,Set FOM cost for CO2 Pipeline. 2004$/(tonne-mi)/hr-yr. Suggested value: 60,N/A,60, +GSw_CO2_spurline_cost,Hydrogen / DAC / CO2 management,Set capex cost for CO2 Spurline. 2004$/(tonne-mi)/hr. Suggested value: 2257,N/A,2257, +GSw_CO2_spurline_fom,Hydrogen / DAC / CO2 management,Set FOM cost for CO2 Spurline. 2004$/(tonne-mi)/hr-yr. Suggested value: 60,N/A,60, +GSw_CO2_Detail,Hydrogen / DAC / CO2 management,Switch to enable detailed representation CO2 transportation and storage,0; 1,0, +GSw_CO2_CostAdj,Hydrogen / DAC / CO2 management,multiplier for co2 infrastructure when Sw_CO2_Detail = 1,float,1, +GSw_CO2_BEC,Hydrogen / DAC / CO2 management,"Break even cost capacity factor assignment. Must be a suffix to ""bec_"" in the columns of co2_site_char.csv",N/A,70, +GSw_CoalIGCC,Technology availability / representation,Turn on/off COAL IGCC,0; 1,1, +GSw_CoalNew,Technology availability / representation,Turn on/off coal new,0; 1,1, +GSw_CofireNew,Technology availability / representation,Turn on/off cofire-new,0; 1,0, +GSw_CoolingTechMults,Water / climate impacts,Turn on/off to enable cooling tech cost/performance multipliers,0; 1,1, +GSw_CSAPR,Policy / emissions constraints,Turn on/off the CSAPR emissions regulation,0; 1,1, +GSw_CSP,Technology availability / representation,Turn on/off CSP [0=no CSP; 1=1 CSP tech; 2=2 CSP techs],0,0, +GSw_CSPRemoveLow,Renewable resource / siting, Remove the lowest quality CSP resource [0=do not remove; 1=remove],0; 1,1, +GSw_CSP_Types,Technology availability / representation,'_'-delimited CSP types to include (i.e. 1 or 1_2 or 1_2_3),(1|1_2|1_2_3),1, +GSw_CurtMarket,Model formulation / numerical controls,Price paid (in 2004$/MWh) for curtailed VRE,N/A,0, +GSw_DAC,Hydrogen / DAC / CO2 management,"Turn on or off the representation of direct air capture [0 = off, 1 = on with projection specified by dacscen]",0; 1,0, +GSw_DAC_Gas,Hydrogen / DAC / CO2 management,"Turn on or off the representation of gas fueled direct air capture [0 = off, 1 = projection specified with GSw_DAC_Gas_Case]",0; 1,0, +GSw_DAC_Gas_Case,Hydrogen / DAC / CO2 management,DAC gas parameterization case (See inputs/consume/dac_gas_[GSw_DAC_Gas_Case].csv),BVRE_2021_(high|mid|low),BVRE_2021_mid, +GSw_distpv,Demand / load / flexibility,Turn on/off distpv,0;1,1, +GSw_DRShed,Demand / load / flexibility, switch to turn on/off demand response shed resource,0;1,0, +GSw_EFS_Flex,Demand / load / flexibility,Switch for turning EFS load flexibility on or off,0,0, +GSw_EFS2_FlexCase,Demand / load / flexibility,"Case used for electrification flex_type - format is {1}_{2}, where 1 in [EFS_REFERENCE, EFS_MEDIUM, EFS_HIGH, EFS_Clean2035] and 2 in [Baseflex, Currentflex, Enhancedflex, Uberflex1, Uberflex2]",N/A,EFS_MEDIUM_EnhancedflexStretch2046, +GSw_EVMC,Demand / load / flexibility,Turn on adoptable EV managed charging,0; 1,0, +GSw_FakeData,Test data shortcut - Pipeline toggle,Use fake capacity factor profiles (for TESTING ONLY when you do not want to download the real CF data),^[0-1]$,0, +GSw_ForcePrescription,Model formulation / numerical controls,Turn on/off forced prescriptions - turning off will allow unlimited but not free builds in historical years,0; 1,1, +GSw_FuelCell,Technology availability / representation,Turn on/off fuel cells (natural gas / H2) as a technology option,0; 1,0, +GSw_FutureHydCF_RepYears,Water / climate impacts,_-delimited years of historical hydro plant data from which to calculate capacity factors representing future hydro,N/A,2007_2008_2009_2010_2011_2012_2013_2016_2017_2018_2019_2020_2021_2022, +GSw_GasCurve,Fuel / commodity prices,"Select natural gas supply curve (0 = cendiv, 1 = national + cendiv, 2 = static, 3 = national)",0; 1; 2; 3,1, +GSw_GasCC_H_1x1,Technology availability / representation,Turn on/off both gas-CC_H_1x1 and gas-CC_H_1x1-CCS_mod/max plant options,0; 1,0, +GSw_GasCC_H_2x1,Technology availability / representation,Turn on/off both gas-CC_H_2x1 and gas-CC_H_2x1-CCS_mod/max plant options,0; 1,0, +GSw_GasCT_Aero,Technology availability / representation,Turn on/off gas-CT_aeroderivative technology option,0; 1,0, +GSw_GasSector,Fuel / commodity prices,Select sector scope of gas curves,electric_sector; energy_sector,electric_sector, +GSw_GenMandate,Policy / emissions constraints,Turn on/off national Gen Requirement. 2 turns on and applies constraint at busbar.,0; 1; 2,0, +GSw_GenMandateList,Policy / emissions constraints,Select technology list for national generation standard (see inputs/national_generation/nat_gen_tech_frac.csv),RE; Nuclear; NuclearCCS,RE, +GSw_GenMandateScen,Policy / emissions constraints,Select trajectory for national generation standard (see inputs/national_generation/gen_mandate_trajectory.csv),N/A,100_2035, +GSw_Geothermal,Technology availability / representation,"Geothermal can be turned off [0], left to the default representation [1], or have an extended representation [2]",0; 1; 2,1, +GSw_gopt,Run setup / execution,Select opt file to be used,N/A,1, +GSw_GrowthAbsCon,Model formulation / numerical controls,Turn on/off absolute growth constraint,0; 1,0, +GSw_GrowthConLastYear,Model formulation / numerical controls,The last year that the growth constraint (GSw_GrowthAbsCon) is applied (if it is turned on),int,2026, +GSw_GrowthPenalties,Model formulation / numerical controls,Turn on/off relative growth penalties,0; 1,0, +GSw_GrowthPenLastYear,Model formulation / numerical controls,The last year that the growth penalty (GSw_GrowthPenalties) is applied (if it is turned on),int,2034, +GSw_GWP,Policy / emissions constraints,Global warming potential for CH4 and N2O; either a string specifying IPCC report and timeline (like AR6-100 for 100-year value from IPCC AR6) or a string in the format CH4_{value}/N2O_{value} (for example: CH4_29.8/N2O_273) for arbitrary CH4 and N2O values,AR4-100; AR4-20; AR5-100; AR5-20; AR6-100; AR6-20; CH4_\d*\.?\d+\/N2O_\d*\.?\d+,AR6-100, +GSw_H2,Hydrogen / DAC / CO2 management,Turn on/off the representation of hydrogen supply/demand balance at a national level without storage (1) or at a regional level with storage (2),0; 1; 2,2, +GSw_H2_CompressorLoad,Hydrogen / DAC / CO2 management,Turn on/off the accounting of electric loads from compressors used to operate the hydrogen transport network, 0; 1,0, +GSw_H2_Demand_Case,Hydrogen / DAC / CO2 management,H2 demand case as indicated by the column headers in inputs/consume/h2_exogenous_demand.csv,none; BAU; Aggressive; Decarb; Decarb_with_BAU; LTS,none, +GSw_H2_Inputs,Hydrogen / DAC / CO2 management,Input file suffix for H2 inputs,ref; low,ref, +GSw_H2_IntraReg_Transport,Hydrogen / DAC / CO2 management,if non-zero specifies the flat cost for intra-ReEDS BA hydrogen transport in 2004$/kg H2 produced. Recommended value is $0.32/kg per https://liftoff.energy.gov/wp-content/uploads/2023/05/20230523-Pathways-to-Commercial-Liftoff-Clean-Hydrogen.pdf pg 15 for transport costs,float,0.32, +GSw_H2_MinStorHours,Hydrogen / DAC / CO2 management,Minimum H2 storage duration required by zone (only used when GSw_H2=2),N/A,24, +GSw_H2_PTC,Financials / incentives,"Turn on/off the representation of the hydrogen production tax credit, also known as 45V in the US tax code",0; 1,1, +GSw_H2_SMR,Hydrogen / DAC / CO2 management,Turn on/off steam methane reforming (SMR) for hydrogen production,0; 1,0, +GSw_H2_StorTimestep,Hydrogen / DAC / CO2 management,Indicate resolution at which to model H2 storage level: 1=rep period; 2=timeslice,0; 1; 2,1, +GSw_H2_Transport,Hydrogen / DAC / CO2 management,Indicate whether to allow interregional H2 transport via pipelines (only has an effect if GSw_H2=2),0; 1,0, +GSw_H2_TransportLevel,Hydrogen / DAC / CO2 management,hierarchy level within which to allow H2 pipelines,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,cendiv, +GSw_H2_TransportUniform,Hydrogen / DAC / CO2 management,"Option to override H2 storage/transport costs. Value of 0 (default) defers to default tech-specific, time-varying cost settings specified via H2 inputs when GSw_H2=1 or the H2 nework costs when GSw_H2=2. Specify in $2004 per metric ton.",N/A,0, +GSw_H2Combustion,Hydrogen / DAC / CO2 management,Switch to turn on/off H2CT and H2CC techs,0; 1,1, +GSw_H2Combustionupgrade,Hydrogen / DAC / CO2 management,Indicate whether to allow gas-CC and gas-CT to upgrade to H2-CT and H2-CC,0; 1,1, +GSw_H2CombinedCycle,Hydrogen / DAC / CO2 management,Indicate whether to allow H2-CC,0; 1,1, +GSw_H2LeakageScen,Hydrogen / DAC / CO2 management,Scenarios of H2 leakage rates from upstream and process of producing electricity by technology; scenario name options from emission_constraints/h2_leakage_rate.csv,N/A,Fan_et_al_2022/Med, +GSw_HourlyChunkAggMethod,Operating reserves / hourly chronology,How to aggregate CF and load within the chunks specified by GSw_HourlyChunkLengthRep (if set to anything other than 'mean' this switch overrides GSw_PRM_StressLoadAggMethod) (ties for mid are broken by the later hour; i.e. for 4-hour chunks and a setting of 'mid' the 3rd hour is used) (if an integer is provided the index starts at 1; i.e. 1 is the 1st hour),(mean|mid|\d),mean, +GSw_HourlyChunkLengthRep,Operating reserves / hourly chronology,Length of representative-period dispatch timeslices in hours; must be divisible into 24,1; 2; 3; 4; 6; 8; 12; 24,3, +GSw_HourlyChunkLengthStress,Operating reserves / hourly chronology,Length of stress-period dispatch timeslices in hours; must be divisible into 24,1; 2; 3; 4; 6; 8; 12; 24,3, +GSw_HourlyClusterAlgorithm,Operating reserves / hourly chronology,Algorithm to use for period selection; options are 'hierarchical' or 'optimized' or 'kmeans' or 'kmedoids' or something containing the substring 'user',N/A,optimized, +GSw_HourlyClusterLoadNorm,Operating reserves / hourly chronology,Method for normalizing load profile for use in representative period selection: none = no norm; regionmax = each region divided by its max; maxmax = each region divided by max across all regions; maxmin = each region divided by smallest max across all regions; float = maxmin * float,N/A,regionmax, +GSw_HourlyClusterRegionLevel,Operating reserves / hourly chronology,Indicate the region hierarchy level at which to aggregate RE profiles for clustering,nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; ccreg,transgrp, +GSw_HourlyClusterWeights,Operating reserves / hourly chronology,/-delimited relative weights for load and RE profiles used in clustering,^load_\d*.?\d+\/upv_\d*.?\d+\/wind-ons_\d*.?\d+\/wind-ofs_\d*.?\d+$,load_1/upv_1/wind-ons_1/wind-ofs_0, +GSw_HourlyClusterYear,Operating reserves / hourly chronology,Year to use when clustering EFS and/or climate-modified data,N/A,2035, +GSw_HourlyClusterTimestep,Operating reserves / hourly chronology,Indicate the time resolution to use in clustering algorithm (period=day or wek depending on GSw_HourlyType),hour; period,period, +GSw_HourlyMinRElevel,Operating reserves / hourly chronology,Indicate the region hierarchy level at which to include minimum wind and solar capacity factor days (or False to ignore min-wind/solar CF days),false; False; FALSE; r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; ccreg,interconnect, +GSw_HourlyNormProfiles,Operating reserves / hourly chronology,Indicate whether to normalize load/wind/solar profiles before identification of representative periods,0; 1,0, +GSw_HourlyNumClusters,Operating reserves / hourly chronology,Number of clusters to create (i.e. number of representative days or weks),int,33, +GSw_HourlyPeakLevel,Operating reserves / hourly chronology,Indicate the region hierarchy level at which to include peak coincident load days (or False to ignore peaks),false; False; FALSE; r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; ccreg,interconnect, +GSw_HourlyType,Operating reserves / hourly chronology,Indicate the type of representative period modeled (day=24-hour periods; wek=24×5=120-hour periods; year=8760-hour periods),day; wek; year,day, +GSw_HourlyWeatherYears,Operating reserves / hourly chronology,_-delimited years from which to construct weather profiles for energy/representative periods,N/A,2012, +GSw_HourlyWindow,Operating reserves / hourly chronology,Number of timeslices (GSw_HourlyChunkLengthRep hours long) to consider for minloading constraint,int,2, +GSw_HourlyWindowOverlap,Operating reserves / hourly chronology,Number of overlapping timeslices between adjacent GSw_HourlyWindow,int,1, +GSw_HourlyWrap,Operating reserves / hourly chronology,Switch to enable wrapping of final hour modeled in each representative period back to the first,0; 1,1, +GSw_HourlyWrapLevel,Operating reserves / hourly chronology,Indicate whether to wrap storage over full year or over seasons (only used for chronological 8760),season; year,year, +GSw_HybridPlant,Storage / hybrid resources,"0=Ban all storage, including CSP, 1=Allow CSP, ban all other storage, 2=Allow hybrid plants, excluding CSP, 3=Allow CSP and all other hybrid plants",0; 1; 2; 3,3, +GSw_hydED,Water / climate impacts,Turn on/off other hydro technologies except for hydED,0; 1,1, +GSw_HydroAddPumpDispUpgSwitch,Technology availability / representation,Turn on/off availability of hydro upgrades to add pumping or dispatchability,0; 1,0, +GSw_HydroCapEnerUpgradeType,Technology availability / representation,"1=coupled capacity/energy upgrades, 2=independent capacity/energy upgrades",1; 2,1, +GSw_HydroCostAddDispatch,Technology availability / representation,Cost of hydro upgrade to dispatchable (2004$/MW),N/A,309000, +GSw_HydroCostAddPump,Technology availability / representation,Cost of hydro upgrade to pumped (2004$/MW),N/A,998000, +GSw_HydroCostFracCapUp,Technology availability / representation,Fraction of upgrade cost assigned to capacity (only used if GSw_HydroUpgrade=1),float,0.8, +GSw_HydroCostFracEnerUp,Technology availability / representation,Fraction of upgrade cost assigned to energy (only used if GSw_HydroUpgrade=1),float,0.8, +GSw_HydroPSHDurData,Technology availability / representation,Turn on/off use of regional storage duration for existing PSH fleet,0; 1,1, +GSw_HydroStorInMaxFrac,Technology availability / representation,"max storage_in as fraction of capacity for psh (numerical values apply to all PSH, set to 'data' to use input file)",N/A,data, +GSw_HydroStorInMinLoad,Technology availability / representation,min loading frac for storage_in for psh,N/A,0, +GSw_HydroUpgradeCapMult,Technology availability / representation,multiplier on hydro upgrade capacity,float,1, +GSw_HydroUpgradeCostMult,Technology availability / representation,multiplier on hydro upgrade cost,float,1, +GSw_HydroVarPumpCostRatio,Technology availability / representation,fractional capital cost multiplier for new PSH with variable speed pumps relative to fixed speed,float,1.1, +GSw_Int_CC,Resource adequacy / PRM / PRAS,"Select intertemporal CC method (0=average undifferentiated, 1=average differentiated , 2=marginal differentiated)",0; 1; 2,0, +GSw_Int_Curt,Resource adequacy / PRM / PRAS,"Select intertemporal Curt method (0=average undifferentiated, 1=average differentiated , 2=marginal undifferentiated, 3=marginal differentiated)",0; 1; 2; 3,0, +GSw_InterDayLinkage,Storage / hybrid resources,Turn on (1) or off (0) the ability for interday storage techs (specified in tech-subset-table.csv) to shift energy between representative days (non-interday techs are unaffected),0; 1,0, +GSw_LfillGas,Technology availability / representation,Turn on/off lfill-gas,0; 1,1, +GSw_LoadProfiles,Demand / load / flexibility,Name of demand profile matching `inputs/profiles_demand/demand_{GSw_LoadProfiles}.h5` OR an absolute filepath to an EER-formatted demand .h5 file,^(historic|EFS_REFERENCE|EFS_MEDIUM|EFS_HIGH|EFS_Clean2035|EFS_Clean2035clip1pct|EFS_Clean2035_LTS|EFS_MEDIUMStretch2040|EFS_MEDIUMStretch2046|EER2023_Baseline_AEO2022|EER2023_IRAlow|EER2023_IRAmoderate|EER2023_100by2050|EER2025_Baseline_AEO2023|EER2025_IRAlow|EER2025_100by2050|\/.+|[a-zA-Z]:[\\\/].+)$,EER2025_IRAlow, +GSw_LoadAllocationMethod,Demand / load / flexibility,"How to allocate state-level load to model regions ('population' uses each region's share of state population, 'state_lpf' uses county-state load participation factors calculated from the NARIS nodal network dataset)",population; state_lpf,population, +GSw_Loadpoint,Model formulation / numerical controls,Switch to use or disable a loadpoint for the intertemporal solve after the first iteration,0; 1,0, +GSw_LoadSiteCF,Demand / load / flexibility,Annual capacity factor of optimally sited load (if 0 then optimally sited load is turned off; if between 0 and 1 then load is flexible (obeying stress period weight); if 1 then load is inflexible),float,0, +GSw_LoadSiteRA,Resource adequacy / PRM / PRAS,Include optimally sited load in PRAS resource adequacy metrics if set to 1 and GSw_LoadSiteCF=1,0; 1,1, +GSw_LoadSiteTrajectory,Demand / load / flexibility,inputs/load/loadsite_{GSw_LoadSiteTrajectory={hierarchy level}_{identifier}}.csv file indicating load to be optimally sited (only used if GSw_LoadSiteCF>0),^(nercr|transreg|transgrp|cendiv|st|interconnect|country|usda_region)_.*$,country_test, +GSw_MaxCaptureCCSTechs,Hydrogen / DAC / CO2 management,Switch to enable max capture (_max) CCS techs in addition to _mod. Note that you’ll need to add your own cost and performance for Gas-CC-CCS_max and coal-CCS_max,0; 1,0, +GSw_MaxDailyCF,Model formulation / numerical controls,Turn on/off daily maximum capacity factor constraint,0; 1,1, +GSw_MethaneLeakageScen,Policy / emissions constraints,Fractional leakage of methane from upstream natural gas production: either float (fixed rate) or scenario name from emission_constraints/methane_leakage_rate.csv,N/A,Alvarez2018_30by2030, +GSw_MGA_CostDelta,Model formulation / numerical controls,MGA: Fraction by which to allow objective function to increase when using Modeling to Generate Alternatives (MGA is turned off if set to 0; a common choice for MGA is 0.01),float,0, +GSw_MGA_Direction,Model formulation / numerical controls,MGA: Directionality of second optimization,(min|max),min, +GSw_MGA_Objective,Model formulation / numerical controls,MGA: Objective for MGA (uses GSw_MGA_SubObjective to specify technology subset if set to capacity),(capacity|transmission|rasharing|co2),rasharing, +GSw_MGA_SubObjective,Model formulation / numerical controls,MGA: Technology subset to minimize or maximize the capacity of (only used for GSw_MGA_Objective=capacity),(battery|ccs|coal|dac|fossil|gas|geo|h2_combustion|hydro|nuclear|ofswind|onswind|pv|re|storage|upv|vre|wind),storage, +GSw_MinCF,Model formulation / numerical controls,Turn on/off regional min CF constraint (applied at i/r level),0; 1,1, +GSw_Mingen,Model formulation / numerical controls,Turn on/off min-gen constraints by r/h/szn,0; 1,0, +GSw_MingenFixed,Model formulation / numerical controls,Turn on/off fixed min-gen constraints,0; 1,1, +GSw_MinLoading,Model formulation / numerical controls,Turn on/off the min-loading constraint by i/v/r/h,0; 1,0, +GSw_MinLoadTechs,Model formulation / numerical controls,Specify collection of techs to which to apply min-gen and min-loading constraints (0=none; 1=all; 2=all except geo/csp/lfill; 3=only nuclear/hydro; 4=only steam boiler/hydro),0; 1; 2; 3; 4,4, +GSw_NewValCapShrink,Post-solve processing - Pipeline toggle,switch to shrink valcap and related conditioning sets post-solve,0; 1,0, +GSw_NG_CRF_penalty,Fuel / commodity prices,Specify the scenario used for the natural gas CRF penalty,none; ramp_2023_2035; ramp_2045; ramp_2050; reverseramp_2022_2030; reverseramp_high_2022_2030,none, +GSw_NoFossilOffsetCDR,Policy / emissions constraints,If on (=1) then CO2 removal from DAC/BECCS is only allowed to offset emissions from fossil+CCS and methane leakage,0; 1,0, +GSw_Nuclear,Technology availability / representation,Turn on/off new nuclear (existing nuclear still remains),0; 1,1, +GSw_NuclearDemo,Technology availability / representation,Turn on or off nuclear demonstration plants,0; 1,0, +GSw_NuclearSMR,Technology availability / representation,Turn on [1] / off [0] Nuclear-SMR,0; 1,1, +GSw_NukeCoalFOM,Technology availability / representation,Turn on or off nuclear and coal FOM adders similar to NEMS,0; 1,1, +GSw_NukeFlex,Technology availability / representation,"Switch to enable more flexible nuclear operations (lower mingen, higher ramp rate)",0; 1,0, +GSw_NukeNoRetire,Retirement / refurbishment / upgrades,Switch to prevent nuclear from retiring before the year in GSw_NukeNoRetireYear has passed,0; 1,1, +GSw_NukeNoRetireYear,Retirement / refurbishment / upgrades,If GSw_NukeNoRetire is enabled nuclear cannot retire through the end of this year,N/A,2032, +GSw_NukeStateBan,Policy / emissions constraints,Switch to limit nuclear with state bans. [0] off / [1] full ban / [2] cost multiplier,0; 1; 2,1, +GSw_NukeStateBanCostMult,Policy / emissions constraints,Cost multiplier to represent state nuclear bans if the cost multiplier approach is selected,float,1.5, +GSw_NumCSPclasses,Renewable resource / siting,Number of resource classes for CSP,1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12,12, +GSw_NumGeoclasses,Renewable resource / siting,Number of resource classes for Geothermal,1; 2; 3; 4; 5; 6; 7; 8; 9; 10,9, +GSw_OffshoreBackbone,Transmission / spur infrastructure,Offshore zones can connect to other offshore zones,0; 1,0, +GSw_OffshoreBackflow,Transmission / spur infrastructure,Power can flow from land zones to offshore zones (allowing use of offshore transmission independent of offshore wind generation),0; 1,0, +GSw_OffshoreZones,Spatial scope / aggregation,Add new model zones for offshore resources,0; 1,0, +GSw_OfsWind,Technology availability / representation,Turn on/off offshore wind,0; 1,1, +GSw_OfsWindForceScen,Technology availability / representation,Scenario for state offshore mandates. Select {suffix} from state_policies/offshore_req_{suffix}.csv. Only active if GSw_StateRPS is on,N/A,default, +GSw_OnsWind6to10,Technology availability / representation,Turn on/off onshore wind 6-10,0; 1,1, +GSw_OpRes,Operating reserves / hourly chronology,Turn on/off operating reserve constraints (0/1) or use simplified version (2),0; 1; 2,2, +GSw_OpResCost,Operating reserves / hourly chronology,"Case used to select values used for the cost of operating reserves (e.g. default, market)",default; market,default, +GSw_OpResPeriods,Operating reserves / hourly chronology,Indicate which periods the operating reserve constraint should apply within (representative = clustered; stress/peakload/minre refer to peak load & min-RE periods) (has no effect for GSw_HourlyType=year),representative; all; stress; peakload; minre; peak; vre,peakload, +GSw_OpResReqMult,Operating reserves / hourly chronology,Multiplier for total reserve requirement (default=1),float,1, +GSw_OpResTradeMult,Operating reserves / hourly chronology,Multiplier on opres flow in transmission constraint (default=1),float,1, +GSw_OpResTradeLevel,Operating reserves / hourly chronology,hierarchy level within which to allow opres trading,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,transreg, +GSw_OutageScen,Resource adequacy / PRM / PRAS,Scenario for forced outage rates,static; murphy2019,murphy2019, +GSw_PRM_CapCredit,Resource adequacy / PRM / PRAS,Use capacity credit formulation if 1 and stress period formulation if 0,0; 1,0, +GSw_PRM_CapCreditHours,Resource adequacy / PRM / PRAS,Number of peak net load hour per ccseason considered in capacity credit calculations,int,20, +GSw_PRM_CapCreditMulti,Resource adequacy / PRM / PRAS,Whether capacity credit is for multi-year (1) or 2012 only (0),0; 1,1, +GSw_PRM_CapCreditSeasons,Resource adequacy / PRM / PRAS,Season definition to use for capacity credit (2season is hot 4/15-10/14 and cold 10/15-4/14; 4season is meteorological seasons,2season; 4season; 12month,2season, +GSw_PRM_hierarchy_level,Resource adequacy / PRM / PRAS,hierarchy level within which to calculate peak demand,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,nercr, +GSw_PRM_NetImportLimit,Resource adequacy / PRM / PRAS,Turn on (1) or off (0) the eq_firm_transfer_limit constraint on max firm net imports (NOTE: This constraint is only applied during stress periods in ReEDS; it is not applied in PRAS),0; 1,1, +GSw_PRM_NetImportLimitScen,Resource adequacy / PRM / PRAS,/-delimited list of {year}_{max percent import OR 'hist' for historical percent OR 'histmax' for max historical percent across all regions} values to use in eq_firm_transfer_limit,N/A,2031_hist/2050_100, +GSw_PRM_scenario,Resource adequacy / PRM / PRAS,"column of inputs/reserves/prm_annual.csv from which to draw the PRM (""nerc"" means the annual values from the 2024 NERC LTRA; ""static"" means the 2024 values from the same source); or a float (like 0.12) which gets applied as a fraction to all regions in all years (0.12 means 12%)",(static|nerc|ramp2025_20by50|^\d*\.?\d+$),0.12, +GSw_PRM_StressIncrement,Resource adequacy / PRM / PRAS,How many stress periods to add per iteration,int,2, +GSw_PRM_StressIterateMax,Resource adequacy / PRM / PRAS,Max number of times to iterate on a given solve year to achieve GSw_PRM_StressThreshold when using stress periods (0 means don't iterate; 1 means 1 extra ReEDS run; etc),int,5, +GSw_PRM_StressLoadAggMethod,Resource adequacy / PRM / PRAS,How to aggregate load for stress periods within the chunks specified by GSw_HourlyChunkLengthStress (only used if GSw_HourlyChunkAggMethod=mean; otherwise GSw_HourlyChunkAggMethod is used),mean; max,max, +GSw_PRM_StressModel,Resource adequacy / PRM / PRAS,Model used to identify stress periods: pras or a string starting with 'user' which specifies a file at inputs/temporal/stressperiods_{GSw_PRM_StressModel}.csv,N/A,pras, +GSw_PRM_StressOutages,Resource adequacy / PRM / PRAS,Whether to apply the availability factor (forced + scheduled outages) during stress periods,0; 1,1, +GSw_PRM_StressSeedLoadLevel,Resource adequacy / PRM / PRAS,Region hierarchy level at which to include peak coincident load days as seeded stress periods (or False to ignore peaks),false; False; FALSE; r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; ccreg,transgrp, +GSw_PRM_StressSeedMinRElevel,Resource adequacy / PRM / PRAS,Region hierarchy level at which to include minimum wind and solar capacity factor days as seeded stress periods (or False to ignore min-wind/solar CF days),false; False; FALSE; r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; ccreg,interconnect, +GSw_PRM_StressStorageCutoff,Resource adequacy / PRM / PRAS,"How to select ""shoulder"" stress periods giving storage time to recharge before/after high-unserved-energy periods. Two-part switch separated by _. The first argument is ""EUE"" or ""capacity"" or ""absolute"". If ""EUE"" the second argument specifies a PRAS storage headspace / EUE threshold [fraction]; if ""cap"" it specifies a headspace / storage capacity threshold [fraction]; if ""abs"" it specifies absolute number of periods before/after [integer]. Turned off if set to ""off"".",N/A,EUE_0.1, +GSw_PRM_StressThreshold,Resource adequacy / PRM / PRAS,/-delimited list of annual NEUE level [ppm] above which to re-solve the latest model year with new stress periods; formulated as HierarchyLevel_NEUEppm_StressMetric_PeriodAggMethod where HierarchyLevel is a column in hierarchy.csv; NEUEppm is normalized expected unserved energy in parts per million; StressMetric is EUE or NEUE (only used in period selection); PeriodAggMethod is 'sum' or 'max' over the hours in each period (only used in period selection) (see README.md for detailed notes),N/A,transgrp_1_EUE_sum, +GSw_PRM_UpdateFraction,Resource adequacy / PRM / PRAS,Fraction to add to the PRM if a region fails RA threshold (only used if GSw_PRM_UpdateMethod = 1),float,0.02, +GSw_PRM_UpdateMethod,Resource adequacy / PRM / PRAS,Option to update PRM: (0) no update; (1) static update set by GSw_PRM_UpdateFraction; (2) dynamic update informed by PRAS; (3) dynamic update but only after all new stress periods have been added,0; 1; 2; 3,0, +GSw_PRMTRADE_level,Resource adequacy / PRM / PRAS,hierarchy level within which to allow PRM trading,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,country, +GSw_PSHfillyears,Storage / hybrid resources,switch to define the number of years it is assumed to take to fill PSH reservoirs [only relevant with water constraints active],N/A,3, +GSw_PSHwatertypes,Storage / hybrid resources,switch to define what types of water is available for filling PSH reservoirs (0=fresh surface/ground water; 1=fresh surface water; 2=all types except saline surface water) [only relevant with water constraints active],0; 1; 2,0, +GSw_PSHwatercon,Storage / hybrid resources,binary switch to turn water constraints for PSH on and off,0; 1,0, +GSw_PVB,Storage / hybrid resources,Turn on/off hybrid PV+Battery,0; 1,0, +GSw_PVB_BIR,Storage / hybrid resources,'_'-delimited battery/inverter capacity ratio for the three PVB types expressed as a percentage [e.g. 50_75_100],N/A,25, +GSw_PVB_Dur,Storage / hybrid resources,Hybrid PV+Battery duration; the battery portion will use the same inputs as battery_li,N/A,4, +GSw_PVB_ILR,Storage / hybrid resources,'_'-delimited inverter loading ratio for the three PVB types expressed as a percentage [e.g. 130_180_240],N/A,134, +GSw_PVB_BatteryITC,Financials / incentives,Switch to apply ITC to battery in PV+B.,0; 1,1, +GSw_PVB_Charge_Constraint,Storage / hybrid resources,Fraction of battery charging in PV+B that is constrained to be from coupled PV; a value of zero turns off the constraint.,N/A,0, +GSw_PVB_Types,Storage / hybrid resources,'_'-delimited PV+battery types to include (i.e. 1 or 1_2 or 1_2_3),N/A,1, +GSw_ReducedResource,Renewable resource / siting,Turn on/off switch to reduce the RE resource available,0; 1,0, +GSw_Refurb,Retirement / refurbishment / upgrades,Turn on/off refurbishments,0; 1,1, +GSw_RemoveSmallNumbers,Model formulation / numerical controls,Turn on/off rounding of variables known to cause very small values on the RHS of certain constraints (improve numerical stability),0; 1,1, +GSw_RetailAdder,Hydrogen / DAC / CO2 management,2004$/MWh adder to the cost of electricity consumed by hydrogen production and DAC facilities,float,0, +GSw_Retire,Retirement / refurbishment / upgrades,Endogenous retirement: 0 = no endogenous retirement; 1 = any existing plants can retire; 2 = only existing coal/gas can retire; 3 = new/existing nuclear/coal/gas can retire after minimum age; 4 = new/existing plants of any tech can retire; 5 = same as 3 but nuclear can only retire after 2030,0; 1; 2; 3; 4; 5,5, +GSw_RetirePenalty,Retirement / refurbishment / upgrades,Apply a penalty for retiring a power plant early to represent retirement friction,0; 1,1, +GSw_RetireYear,Retirement / refurbishment / upgrades,Year to begin endogenous retirements,N/A,2027, +GSw_RetireYears_Coal,Retirement / refurbishment / upgrades,"Adjust lifetime coal retirements [0 = coal retirements straight from EIA unit database, negative number = number of years decreased in the lifteime of currrently operating coal plants, positive number = number of years increased in the lifetime of all currently operating coal units]. This switch is ignored if GSw_RetireYears_Thermal (below) is non-zero since GSw_RetireYears_Thermal adjusts retirement years of all thermal units including coal units.",int,0, +GSw_RetireYears_Thermal,Retirement / refurbishment / upgrades,"Adjust lifetime thermal retirements [0 = thermal retirements straight from EIA unit database, negative number = number of years decreased in the lifteime of currrently operating thermal plants, positive number = number of years increased in the lifetime of all currently operating thermal units]",int,0, +GSw_RGGI,Policy / emissions constraints,Turn on/off RGGI,0; 1,1, +GSw_SitingGeo,Renewable resource / siting,Specify the Geothermal siting scenario,reference,reference, +GSw_SitingUPV,Renewable resource / siting,Specify the UPV siting scenario,open; reference; limited,reference, +GSw_SitingWindOfs,Renewable resource / siting,Specify the offshore wind siting scenario,open; reference; limited,reference, +GSw_SitingWindOns,Renewable resource / siting,Specify the onshore wind siting scenario,open; reference; limited,reference, +GSw_SkipAugurYear,Resource adequacy / PRM / PRAS,Last year in which to skip running the Augur module,N/A,2020, +GSw_SpurCostMult,Transmission / spur infrastructure,Multiplier for spur-line costs,float,1, +GSw_SpurScen,Transmission / spur infrastructure,Spur-line scenario: 0 to include in resource supply curve; 1 to model endoegenously,0; 1,0, +GSw_SpurShare,Transmission / spur infrastructure,Indicate whether wind-ons and upv are allowed to share spur line capacity,0; 1,0, +GSw_StartMarkets,Temporal / solve structure,Indicate year in which load-balance and operating-reserve constraints start to be enforced,N/A,2026, +GSw_StartCost,Model formulation / numerical controls,Technologies with startup costs (0=none; 1=nuclear; 2=nuclear/coal/ccs; 3=coal/ccs; 4=coal/cc/ccs; 5=all fuel-based except nuclear; 6=all fuel-based) (default is to leave out nuclear since it's always committed with GSw_MingenFixed=1),0; 1; 2; 3; 4; 5; 6,4, +GSw_StateCap,Policy / emissions constraints,Turn on/off state cap and trade constraints,0; 1,1, +GSw_StateRPS,Policy / emissions constraints,Turn on/off state RPS requirements,0; 1,1, +GSw_StateRPS_Carveouts,Policy / emissions constraints,Turn wind and solar carveouts off/on,0;1,0, +GSw_StateCO2ImportLevel,Policy / emissions constraints,Hierarchy level within which to calculate CO2 emissions rate [metric ton/MWh] for state CO2 caps,r; nercr; transreg; cendiv; st; interconnect; country; usda_region,interconnect, +GSw_Storage,Storage / hybrid resources,0=ban storage; 1=use all standalone storage techs,0; 1,1, +GSw_StorageBinPenalty,Resource adequacy / PRM / PRAS,Turn on/off the storage bin penalty for the PRM method (when on results in better firm capacity outputs),0; 1,1, +GSw_TCPhaseout,Financials / incentives,Switch for whether tax credit Phaseout is enabled (0=no; 1=yes),0; 1,1, +GSw_TCPhaseout_forceyear,Financials / incentives,(0=off by default) Indicate a year in which to force the start of the tax credit phaseout,N/A,2032, +GSw_TCPhaseout_ref_year,Financials / incentives,The reference year used to determine whether the trigger for the tax credit phaseout threshold has been hit (with 100by),N/A,2022, +GSw_TCPhaseout_schedule,Financials / incentives,The schedule by which the tax credits phase out. This assumes that the phaseout schedule starts on the year after the threshold is met. The phaseout may still have a period of full credit after the trigger has been met depending on the policy definition.,ira2022,ira2022, +GSw_TCPhaseout_start,Financials / incentives,Earliest allowed Applicable Year for the tax credit phaseout. The tax credit phaseout schedule starts on the year following this year; or later if the emission threshold is not met by this year,N/A,2032, +GSw_TCPhaseout_trigger_f,Financials / incentives,The fraction of emissions from the ref year used to determine whether the trigger for the tax credit phaseout has been hit,float,0.25, +GSw_TransCapMaxEachType,Transmission / spur infrastructure,[GW] maximum transmission capacity allowed across each individual BA-BA interface for each trtype (constraint is off if set to 0; must be 0 or >= existing capacity (26.13 for AC)),N/A,0, +GSw_TransCapMaxAllTypes,Transmission / spur infrastructure,[GW] maximum transmission capacity allowed across each individual BA-BA interface for all trtypes together (constraint is off if set to 0; must be 0 or >= existing capacity (26.13 for AC)),N/A,0, +GSw_TransCapMaxTypes,Transmission / spur infrastructure,Transmission types to limit according to GSw_TransCapMaxEachType and GSw_TransCapMaxAllTypes [0 = none; 1 = all; 2 = VSC; 3 = all DC],0; 1; 2; 3,1, +GSw_TransIntraCost,Transmission / spur infrastructure,[USD2004/kW] intra-zone network reinforcement cost for all technologies (100 USD2022/kW using gas cost from slide 14 of https://emp.lbl.gov/publications/generator-interconnection-costs),N/A,65, +GSw_TransInvMaxLongTerm,Transmission / spur infrastructure,[TW-mile/year] maximum transmission capacity investment per year IN/AFTER firstyear_trans_longterm (constraint is OFF if set to 0 meaning unlimited trans investment; annual max since 2009 is ~3.64),N/A,0, +GSw_TransInvMaxNearTerm,Transmission / spur infrastructure,[TW-mile/year] maximum transmission capacity investment per year BEFORE firstyear_trans_longterm (constraint is OFF if set to 0 meaning unlimited trans investment; annual mean since 2009 is ~1.4),float,1.4, +GSw_TransInvNearTerm,Transmission / spur infrastructure,Indicate whether to allow transmission investment before firstyear_trans_longterm,0; 1,0, +GSw_TransInvMaxTypes,Transmission / spur infrastructure,Types of transmission to include in annual investment limit: 0=none; 1=interzonal (r); 2=interzonal + reinforcement; 3=interzonal + reinforcement + spur,0; 1; 2; 3,1, +GSw_TransInvPRMderate,Transmission / spur infrastructure,[fraction] amount by which to derate the capacity of new transmission investments for PRM trading (0 = no derate),float,0.15, +GSw_TransCostMult,Transmission / spur infrastructure,Multiplier for bulk BA-BA transmission costs,float,1, +GSw_TransHurdleLevel1,Transmission / spur infrastructure,Apply hurdle rates from inputs/transmission/cost_hurdle_intra.csv between regions at the specified hierarchy level,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; hurdlereg,transgrp, +GSw_TransHurdleLevel2,Transmission / spur infrastructure,Apply hurdle rates from inputs/transmission/cost_hurdle_intra.csv between regions at the specified hierarchy level,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; hurdlereg,hurdlereg, +GSw_TransHurdleRate,Transmission / spur infrastructure,Turn on (1) or off (0) hurdle rates between hierarchy regions as defined by GSw_TransHurdleLevel1/GSw_TransHurdleLevel2 and inputs/transmission/cost_hurdle_intra.csv,0; 1,0, +GSw_TransNetworkSource,Transmission / spur infrastructure,Network source for the initial transmission network used in the model,NARIS2024,NARIS2024, +GSw_TransRestrict,Transmission / spur infrastructure,hierarchy level within which to allow new transmission lines,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,country, +GSw_TransScen,Transmission / spur infrastructure,Transmission expansion scenario (options in inputs/transmission),N/A,default, +GSw_TransSquiggliness,Transmission / spur infrastructure,Transmission distance multiplier to approximate the squigglier paths followed by actual lines (only applied to NEW lines),float,1, +GSw_TransUpgradeMethod,Transmission / spur infrastructure,Method for calculating AC transmission upgrade costs,500kv,500kv, +GSw_TransGroupContraint,Transmission / spur infrastructure,Indicate whether to apply flow constraint on groups of transmission interfaces,0; 1,1, +GSw_TransGroupDerate,Transmission / spur infrastructure,[fraction] amount by which to derate the capacity of grouped transmission flows for new transmission additions (0 = no derate),float,0.15, +GSw_Upgrades,Retirement / refurbishment / upgrades,Switch to turn upgrades on or off - not to be used with water constraints - value of 2 indicates persistent upgrades,0; 1; 2,1, +GSw_UpgradeLifespan,Retirement / refurbishment / upgrades,Lifespan for retirements when sw_upgrades is set to 1,N/A,50, +GSw_UpgradeYear,Retirement / refurbishment / upgrades,First year when upgrades are allowed,N/A,2028, +GSw_UpgradeChar_Year,Retirement / refurbishment / upgrades,Year from which to grab the characteristics for upgraded init-X plant characteristics,N/A,2028, +GSw_UpgradeDerate,Retirement / refurbishment / upgrades,Switch to turn upgrade degrades off/on,0; 1,1, +GSw_UpgradeHeatRateAdj,Retirement / refurbishment / upgrades,Use HeatRate for upgrades from NEMS,0; 1,1, +GSw_UpgradeATBCosts,Retirement / refurbishment / upgrades,Use ATB upgrade costs,0; 1,0, +GSw_UpgradeVOM_Nems,Retirement / refurbishment / upgrades,Use VOM for upgrades from NEMS ,0; 1,1, +GSw_UpgradeFOM_Nems,Retirement / refurbishment / upgrades,Use FOM for upgrades from NEMS,0; 1,1, +GSw_UpgradeCost_Mult,Retirement / refurbishment / upgrades,"specify scenario for controlling upgrades over time - 0=mid 1=adv 2=con, 3=1, 4=1+(1-mid), 5=1.2",0; 1; 2; 3; 4; 5,0, +GSw_Upstream,Policy / emissions constraints,Include both upstream and process emissions in CO2 and CO2e calculation if 1 and only process emission if 0,0; 1,0, +GSw_ValStr,Value streams - Pipeline toggle,Turn on/off value streams,0; 1,0, +GSw_VSC_ConverterMax,Transmission / spur infrastructure,maximum AC/DC converter capacity allowed in each BA [MW] (constraint is off if set to 0),N/A,0, +GSw_WaterCapacity,Water / climate impacts,Turn on/off the water capacity constraints,0; 1,0, +GSw_WaterMain,Water / climate impacts,Turn on/off the representation of water use and source types,0; 1,0, +GSw_WaterUse,Water / climate impacts,Turn on/off the water capacity and water use constraints,0; 1,0, +debug,Diagnostics - Pipeline toggle,Write and keep intermediate files and equation elements to help with debugging. The value of the switch is passed to `option limrow` and `option limcol` and indicates the number of equation and variable entries to print,int,0, +cleanup_level,Run setup / execution,How aggressively to clean up the case folder (see postprocessing/cleanup_files.py for explanation),int,0, +diagnose,Diagnostics - Pipeline toggle,Write A and B matrix of the model [0 = no diagnose ; 1 = diagnose ],0; 1,0, +diagnose_year,Diagnostics - Pipeline toggle,Year in which to start report diagnose,N/A,2022, +dump_alldata,Diagnostics - Pipeline toggle,switch to automatically dump data from final solve year into .gdx file,0; 1,0, +file_replacements,Run setup / execution,"List of files to replace from run folder, e.g: inputs_case/national_gen_frac.csv << //nrelnas01/ReEDS/some proj/national_gen_frac.csv || c_supplymodel.gms << //nrelnas01/ReEDS/some proj/c_supplymodel.gms",N/A,none, +input_processing_only,Run flow - Pipeline toggle,Only run input_processing scripts; stop before creating and solving model,0; 1,0, +keep_augur_files,PRAS/resource adequacy - Pipeline toggle,Indicate whether to keep (1) or delete (0) Augur csv and h5 files after Augur finishes. If you plan to run PRAS via ReEDS2PRAS then set this switch to 1.,0; 1,0, +keep_g00_files,Run setup / execution,Keep (1) or delete (0) .g00 files for completed solve years,0; 1,0, +keep_run_terminal,Run setup / execution,"0=close run terminal, 1=keep run terminal open",0; 1,0, +land_use_analysis,Postprocessing/export - Pipeline toggle,switch to turn on/off land-use analysis. Requires the `reeds_to_rev` switch also be activated,0; 1,0, +pcm,Postprocessing/dispatch - Pipeline toggle,Rerun final solve year in dispatch mode at 1-hour resolution after the CEM run finishes (submits a new bigmem job if on the HPC),0; 1,0, +plot_ba_level,Postprocessing/export - Pipeline toggle,0=do not plot or output BA-level year-by-month plots; 1=plot and output BA-level year-by-month plots.,0; 1,0, +pras,PRAS/resource adequacy - Pipeline toggle,Indicate whether to run PRAS for 2007-2013 between each pair of solve years (0=never; 1=just the final solve year; 2=always),0; 1; 2,2, +pras_agg_ogs_lfillgas,Resource adequacy / PRM / PRAS,Aggregate existing o-g-s and landfill gas units to the capacity assumed for new units (from unitsize.csv),0; 1,0, +pras_existing_unit_size,Resource adequacy / PRM / PRAS,Use the average size of existing units by tech/region when disaggregating new capacity (otherwise use capacities from unitsize.csv for all new units),0; 1,1, +pras_hydro_energylim,Resource adequacy / PRM / PRAS,Whether to model hydro as energy-limited in PRAS (1) or like a thermal generator (0),0; 1,1, +pras_include_h2dac,Resource adequacy / PRM / PRAS,Indicate whether to include (1) demand associated with H2 production & DAC in PRAS,0; 1,0, +pras_max_unitsize_prm,Resource adequacy / PRM / PRAS,Cap the upper bound of disaggregated unit size by zone at the zonal PRM in MW,0; 1,1, +pras_samples,PRAS/resource adequacy - Pipeline toggle,Indicate how many Monte Carlo samples to use in PRAS (if 0 then the .pras file is generated but PRAS is not run),int,100, +pras_scheduled_outage,Resource adequacy / PRM / PRAS,Include scheduled outages in PRAS (if 0 then a default outage rate of 0 is applied),0; 1,0, +pras_seed,Resource adequacy / PRM / PRAS,Seed to use for PRAS samples; can be any positive integer. If 0 the seed is set randomly,int,1, +pras_singlethread,Resource adequacy / PRM / PRAS,Force single-thread operation for PRAS (much slower but sometimes helps avoid Julia hangs and errors),^[0-1]$,0, +pras_trans_contingency,Resource adequacy / PRM / PRAS,Indicate whether to use n-0 (0) or n-1 (1) transmission capacities in PRAS,0; 1,0, +pras_unitsize_source,Resource adequacy / PRM / PRAS,Data source for characteristic unit sizes in ReESD2PRAS,atb; r2x,atb, +pras_vre_combine,Resource adequacy / PRM / PRAS,Combine VRE into a single VRE tech in ReEDS2PRAS,0; 1,0, +reeds_to_rev,Postprocessing/export - Pipeline toggle,switch to turn on/off ReV outputs,0; 1,1, +resource_adequacy_years,Resource adequacy / PRM / PRAS,_-delimited years to include in resource adequacy calculations,N/A,2007_2008_2009_2010_2011_2012_2013_2016_2017_2018_2019_2020_2021_2022_2023, +MCS_runs,Monte Carlo - Pipeline toggle,Number of Monte Carlo simulation runs. Set to 0 to disable MCS. Set to an integer N > 0 to run N ReEDS simulations with sampling.,int,0, +MCS_dist,Monte Carlo / sampling,Name of the `.yaml` file defining the MCS distributions. Use 'default' or a string beginning with 'user' to reference `inputs/userinput/mcs_distributions_{MCS_dist}.yaml`,N/A,default, +MCS_dist_groups,Monte Carlo / sampling,Define the distribution groups to use in a Monte Carlo Simulation. Each entry should refer to a key from `inputs/userinput/mcs_distributions_{MCS_dist}.yaml` with multiple entries separated by a dot (e.g. Example1.Example2.Example3),N/A,tech, From 5b730a94d0dd4f437ea956a24a55cda1b6fd794a Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Thu, 11 Jun 2026 17:14:39 +0000 Subject: [PATCH 14/46] Add report validation and testing guidance Update AGENT.md and TESTING.md to expand testing and report-debugging guidance. Added explicit references to README, docs, REPORT_OUTPUT_LOGIC.md and other key docs; instructions to inspect runs//outputs/reeds-report/report.log and HTML when tests/test_outputs.py passes; a py_compile suggestion for quick syntax checks of bokehpivot modules; and a reproducible command to rebuild reports manually. Notes also clarify checking runs//inputs_case/switches.csv for effective switches, common switch-driven report gaps (e.g. cap_iter with timetype=seq, land_use_total when land_use_analysis=0), OpRes failure diagnostics (rep/opres_periods.csv, opRes_supply_h.csv, Sw_OpRes and lstfiles), and that health_damages_caused_r.csv uses the air-quality schema which bokehpivot normalizes for legacy displays. --- AGENT.md | 35 ++++++++++++++++++++++--- TESTING.md | 77 +++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 103 insertions(+), 9 deletions(-) diff --git a/AGENT.md b/AGENT.md index 3083ec067..7345e394e 100644 --- a/AGENT.md +++ b/AGENT.md @@ -6,8 +6,21 @@ orchestrates runs, and postprocesses outputs; GAMS contains the optimization mod Julia translates solved ReEDS systems into PRAS resource adequacy systems. Use this file as the first stop for agent orientation. Deeper references: -@README.md, @docs/source/setup.md, @docs/source/user_guide.md, -@docs/source/developer_best_practices.md, @sources_documentation.md. + +- @README.md: repository overview, installation entry points, and basic run + instructions. +- @docs/source/setup.md: user-facing setup, dependency, and environment + instructions. +- @docs/source/user_guide.md: scenario configuration, run options, switches, + outputs, and common workflows. +- @docs/source/developer_best_practices.md: coding conventions, testing + expectations, and GAMS development guidance. +- @sources_documentation.md: data-source documentation expectations and input + provenance notes. +- @TESTING.md: local testing commands, model-run validation, and report-debugging + workflow. +- @REPORT_OUTPUT_LOGIC.md: bokehpivot report output dependencies and conditions + for sections to render. ## Project Structure @@ -105,6 +118,10 @@ download large files, and write substantial data under `runs/`. - CI runs a test ReEDS scenario with `python runbatch.py -b "$batch" -c test -s "$SCENARIO"` and then validates outputs with `tests/test_outputs.py`. +`tests/test_outputs.py` is a completed-case artifact check, not a guarantee that +every bokehpivot report section rendered cleanly. For report health, inspect +`runs//outputs/reeds-report/report.log` and the generated HTML directly. + When changing GAMS objective-function inputs, check `tests/objective_function_params.yaml`; it documents parameters that `input_processing/check_inputs.py` validates for missing values. @@ -197,6 +214,19 @@ Inputs and CSVs: the script call generated in `call_.bat` or `call_.sh`. - For output/report failures, compare `outputs/`, `e_report_params.csv`, and `postprocessing/bokehpivot` report logs. +- When an expected output is missing, first check the effective run switches in + `runs//inputs_case/switches.csv`; repository defaults in `cases.csv` + may have been overridden by `cases_test.csv`, study cases, or the case column. +- Some report gaps are switch-driven and expected. For example, sequential + `timetype=seq` runs do not produce `cap_iter`, and `land_use_analysis=0` skips + `land_use_total.csv`. +- OpRes report failures can come from empty representative reserve periods: + check `inputs_case/rep/opres_periods.csv`, `opRes_supply_h.csv`, `Sw_OpRes`, + and the generated equation counts in `lstfiles/1_Inputs.lst` or solve `.lst` + files before assuming `GSw_OpRes` itself is wrong. +- Current `health_damages_caused_r.csv` files use the air-quality postprocessor + schema (`ba`, `pollutant`, `tons`, `md`, `damage_$`, `mortality`); bokehpivot + normalizes this to legacy report display columns in `postprocessing/bokehpivot/reeds2.py`. - `runstatus.py` summarizes running/failed/finished cases for a batch prefix. - `postprocessing/check_error.py` reads the `error_check` output for solved cases. @@ -246,4 +276,3 @@ Inputs and CSVs: changed. - Do not use destructive git commands or delete generated data unless the user asks for that specific action. - diff --git a/TESTING.md b/TESTING.md index eb234234f..ff0da4099 100644 --- a/TESTING.md +++ b/TESTING.md @@ -5,11 +5,16 @@ developer guide, PR template, CI workflows, and subsystem READMEs. Primary references: -- `docs/source/developer_best_practices.md`, especially "Testing Guidelines" -- `.github/PULL_REQUEST_TEMPLATE.md` -- `.github/workflows/python-app.yaml` -- `reeds2pras/README.md` -- `AGENT.md` +- `docs/source/developer_best_practices.md`: developer testing levels, code + conventions, and GAMS change guidance. +- `.github/PULL_REQUEST_TEMPLATE.md`: expected PR test evidence and comparison + report expectations. +- `.github/workflows/python-app.yaml`: CI's concrete test-run and artifact + validation commands. +- `reeds2pras/README.md`: Julia/ReEDS2PRAS setup and test entry points. +- `AGENT.md`: repository orientation and quick debugging map. +- `REPORT_OUTPUT_LOGIC.md`: bokehpivot report sections, input files, and + conditions required for sections to render. ## Prerequisites @@ -46,6 +51,12 @@ uv run python -m pytest tests/test_read_h5_files.py uv run python -m pytest hourlize/tests ``` +For narrow Python syntax/import checks after touching postprocessing modules: + +```powershell +uv run python -m py_compile postprocessing/bokehpivot/core.py postprocessing/bokehpivot/reeds2.py postprocessing/bokehpivot/reeds_bokeh.py +``` + Run ReEDS2PRAS tests when changing `reeds2pras/`, `ReEDS_Augur/`, PRAS-related inputs, or stress-period/resource-adequacy code: @@ -94,7 +105,17 @@ uv run python -m pytest tests/test_outputs.py --casepath runs/vYYYYMMDD_test_USA `tests/test_outputs.py` checks that expected reported CSVs, bokehpivot reports, retail outputs, and selected figures exist in the completed case's `outputs/` folder. It is not a substitute for reviewing whether model results changed in -the expected way. +the expected way, and it is not a guarantee that every bokehpivot report section +rendered without errors. + +A passing run looks like this: + +```text +tests\test_outputs.py . [100%] +``` + +Dependency warnings, such as matplotlib or pyparsing deprecation warnings, do +not indicate a test failure unless pytest reports a failed test. This output validation is aimed at standard `cases_test.csv` workflows. Very small or custom smoke-test cases, such as runs based on `cases_small.csv`, can @@ -112,6 +133,50 @@ When using a small smoke test, distinguish three outcomes: `tests/test_outputs.py` still fails because it expects standard-case deliverables that the small case does not produce. +## Report Validation + +Bokehpivot reports are built section by section. The builder catches individual +section failures, writes red `ERROR!` blocks into `report.html`, logs tracebacks +in `report.log`, and continues building later sections. This means a report file +can exist, and `tests/test_outputs.py` can pass, even when some report sections +failed. + +For report-focused changes, rerun the standard expanded report against a +completed case: + +```powershell +uv run python postprocessing/bokehpivot/reports/interface_report_model.py "ReEDS 2.0" runs/ all No none postprocessing/bokehpivot/reports/templates/reeds2/standard_report_expanded.py html,excel one runs//outputs/reeds-report-manual No +``` + +Then inspect: + +- `runs//outputs/reeds-report-manual/report.log` +- `runs//outputs/reeds-report-manual/report.html` +- `runs//outputs/reeds-report-manual/report.xlsx` + +Useful PowerShell scan for report logs: + +```powershell +Select-String -Path runs//outputs/reeds-report-manual/report.log -Pattern "\*\*\*Error in section|Done building report|Traceback|FileNotFoundError|KeyError|ValueError|IndexError" -Context 0,2 +``` + +When a section fails because an output file is missing, compare the failure +against the effective switches in `runs//inputs_case/switches.csv`, not +only the default values in `cases.csv`. Case files and case columns can override +defaults. + +Known switch-driven or input-driven report gaps: + +- `cap_iter` is not produced for sequential `timetype=seq` runs. +- `land_use_total.csv` is skipped when `land_use_analysis=0`. +- OpRes sections can fail when representative operating-reserve periods are + empty. Check `inputs_case/rep/opres_periods.csv`, `outputs/opRes_supply_h.csv`, + `Sw_OpRes`, and generated equation counts in `lstfiles/`. +- Current `health_damages_caused_r.csv` outputs use the air-quality schema with + fields such as `ba`, `pollutant`, `tons`, `md`, `damage_$`, and `mortality`. + Bokehpivot normalizes these to legacy report display names in + `postprocessing/bokehpivot/reeds2.py`. + ## Change-Based Guidance Use the smallest test that gives real confidence. For model behavior changes, From c2f75fe492e18b36f9ca4b5cb984def9096e0dfb Mon Sep 17 00:00:00 2001 From: ty-fi <95767834+ty-fi@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:08:00 -0400 Subject: [PATCH 15/46] Moving informational files from git repo to workflow folder These are three files meant to be read by the user to make sense of the repo. We decided that the Sharepoint 'Workflow' folder might be a better home for these. --- REPORT_OUTPUT_LOGIC.md | 144 ---------------- TESTING.md | 303 -------------------------------- cases_categorized.csv | 383 ----------------------------------------- 3 files changed, 830 deletions(-) delete mode 100644 REPORT_OUTPUT_LOGIC.md delete mode 100644 TESTING.md delete mode 100644 cases_categorized.csv diff --git a/REPORT_OUTPUT_LOGIC.md b/REPORT_OUTPUT_LOGIC.md deleted file mode 100644 index 9ac1fce8e..000000000 --- a/REPORT_OUTPUT_LOGIC.md +++ /dev/null @@ -1,144 +0,0 @@ -# ReEDS Report Output Logic - -This table explains the sections in the standard expanded ReEDS bokehpivot -report. It is meant for triaging `outputs/reeds-report/report.html` and -`outputs/reeds-report/report.log` after a run. - -The report template is `postprocessing/bokehpivot/reports/templates/reeds2/standard_report_expanded.py`. -Its result definitions live in `postprocessing/bokehpivot/reeds2.py`. - -## How to Read This - -- Bare source names like `cap_nat` or `systemcost` are resolved by - `reeds.io.read_output`; in current runs they commonly come from - `outputs/outputs.h5`, though some may also exist as standalone output files. -- Paths ending in `.csv` are read literally relative to `outputs/`, unless they - start with `../inputs_case/`, in which case they are read from the run's - `inputs_case/` directory. -- A section reports out when its source data exists, has the expected columns, - survives preprocessing, and is still non-empty after the section's filters. -- Map sections also need valid region/state mapping data and at least one - non-empty final-year value after filtering. -- `report.log` red-section failures are isolated by design: bokehpivot catches a - section exception, writes a red `ERROR!` header in `report.html`, logs the - traceback, and keeps building later sections. - -## Core Model Outputs - -| No. | Report section | Reads | Reports when | -| --- | --- | --- | --- | -| 1 | Error Check: shows modeled error-check values by error type. | `error_check` | The error-check table exists with `type` and `Value`. Nonzero values may be a meaningful model warning, not a plotting failure. | -| 2 | Intertemporal Capacity by Iteration (GW): capacity by tech, year, and solver iteration. | `cap_iter` | Intertemporal/iteration output was written. This is tied to intertemporal solve mode; sequential cases such as `timetype=seq` may not write `cap_iter`, so the section can fail even if the model solved. | -| 3 | Generation (TWh): national annual generation by technology. | `gen_ann_nat` | National annual generation exists with tech-year rows. | -| 4 | Capacity (GW): national installed capacity by technology. | `cap_nat` | National capacity exists with tech-year rows. | -| 5 | Energy Capacity (GWh): storage/product energy capacity by tech, vintage, region, and year. | `cap_energy_ivrt` | Energy-capacity output exists. Empty storage/product portfolios can leave little to plot. | -| 6 | New Annual Capacity (GW): national annual capacity additions by technology. | `cap_new_ann_nat` | New-build output exists with tech-year rows. | -| 7 | Annual Retirements (GW): national annual retirements by technology. | `ret_ann_nat` | Retirement output exists with tech-year rows. | -| 8 | Final Gen by timeslice (GW): final-year generation profile by modeled timeslice. | `gen_h_nat` | Timeslice generation exists, timeslices can be sorted, and final-year filtered rows are non-empty. | -| 9 | Final Gen by stress timeslice (GW): final-year generation during stress timeslices. | `gen_h_stress_nat` | Stress-period generation output exists and final-year stress timeslices are non-empty. | -| 10 | Regional Gen Final (TWh): final-year BA-level generation map by technology. | `gen_ann` via `Generation BA (TWh) [no-index]` | BA-level annual generation exists, final-year rows are non-empty, and BA geography joins succeed. | -| 11 | Operating Reserves (TW-h): annual operating reserve supply by reserve type and tech. | `opRes_supply` | Operating reserve supply exists with reserve-type, tech, region, and year. | -| 12 | Final OpRes by timeslice (GW): final-year operating reserve supply by timeslice. | `opRes_supply_h` | Timeslice reserve supply exists and the final-year filtered data has plottable reserve types/techs. `GSw_OpRes=2` enables the simplified `combo` reserve type and should not by itself suppress this output. However, the model equations are also gated by `opres_h`; if the active `inputs_case//opres_periods.csv` is empty, `opRes_supply_h.csv` can be header-only and the report can fail with a plotting index error. | -| 13 | Firm Capacity (GW): seasonal firm capacity and derived capacity credit. | `cap_firm`, `cap` | Firm-capacity and installed-capacity outputs both exist and can be joined by tech, region, season, and year. | -| 14 | Curtailment Rate: VRE curtailment rate over time. | `curt_rate` | Curtailment-rate output exists with year and `Curt Rate`. | -| 15 | Losses (fraction of load): losses normalized by load. | `losses_ann` | Loss and `load` rows exist. The `load` row is the denominator for the fraction. | -| 16 | Transmission (GW-mi): transmission capacity by type over time. | `tran_mi_out`, `tran_prm_mi_out`, `cap_new_bin_out`, `../inputs_case/spur_parameters.csv`, `../inputs_case/scalars.csv` | Transmission outputs and supporting spur-line inputs exist; preprocessing can calculate total transmission capacity. | -| 17 | Transmission (PRM) (GW-mi): PRM-attributed transmission capacity. | Same as section 16 | Same as section 16, plus the PRM transmission column is populated enough to plot. | - -## Prices, Costs, Revenues, and Emissions - -| No. | Report section | Reads | Reports when | -| --- | --- | --- | --- | -| 18 | Bulk System Electricity Price ($/MWh): stacked bulk cost components divided by load. | `reqt_price_sys`, `reqt_quant_sys` | System-level requirement prices and quantities exist, including `q_load` denominator rows and relevant price component rows. | -| 19 | National Energy Price ($/MWh): national energy price over time. | `reqt_price_sys`, `reqt_quant_sys` | Energy-price and load-quantity rows exist after price preprocessing. | -| 20 | Final National Energy Price by timeslice ($/MWh): final-year national energy price by timeslice. | `reqt_price_sys`, `reqt_quant_sys` | Final-year energy-price rows by timeslice exist and timeslices sort cleanly. | -| 21 | National Average Electricity Cost ($/MWh): annualized system cost divided by national load. | `systemcost`, `reqt_quant`, `../inputs_case/crf.csv`, `../inputs_case/val_r.csv`, `../inputs_case/df_capex_init.csv`, `../inputs_case/switches.csv`, `../inputs_case/scalars.csv` | System cost, load quantities, and financial helper files exist. Missing `df_capex_init.csv` or malformed financial inputs can break this and related cost sections. | -| 22 | National OpRes Price ($/MW-h): national operating reserve price over time. | `reqt_price_sys`, `reqt_quant_sys` | Operating reserve price and quantity rows exist after preprocessing. | -| 23 | Final National OpRes Price by timeslice ($/MW-h): final-year reserve price by timeslice. | `reqt_price_sys`, `reqt_quant_sys` | Final-year operating reserve price rows by timeslice exist and are non-empty. | -| 24 | Final Regional Energy Price ($/MWh): final-year BA energy price map. | `reqt_price`, `reqt_quant` | BA-level price and quantity rows exist, final-year load denominators exist, and BA map joins succeed. | -| 25 | National Annual Capacity Price ($/kW-yr): reserve-margin/capacity price over time. | `reqt_price_sys`, `reqt_quant_sys` | Annual capacity or reserve-margin price rows and matching quantity rows exist. | -| 26 | Annual Revenue National (Bil$/yr): revenue by technology and service. | `revenue_nat`, `cap_nat`, `gen_uncurtailed_nat` | Revenue output exists and can be joined to capacity and uncurtailed generation for derived metrics. | -| 27 | Annual Revenue per Capacity National ($/kW-yr): revenue normalized by capacity. | Same as section 26 | Same as section 26, plus capacity denominators are present and nonzero for plotted techs. | -| 28 | Annual Revenue per Generation National ($/MWh): revenue normalized by generation. | Same as section 26 | Same as section 26, plus generation denominators are present and nonzero for plotted techs. | -| 29 | Present Value of System Cost through 2050 (Bil $): discounted system cost summary. | `systemcost`, `../inputs_case/crf.csv`, `../inputs_case/val_r.csv`, `../inputs_case/df_capex_init.csv`, `../inputs_case/switches.csv`, `../inputs_case/scalars.csv` | System cost and financial helper files exist, and years overlap the report's present-value window. | -| 30 | Emissions National (metric tons): national emissions by emissions type. | `emit_nat` | National emissions output exists with emissions type, pollutant, year, and emissions value. | -| 31 | Net CO2e Emissions National (MMton): net CO2e by technology. | `emit_nat_tech` | Technology-level emissions exist and include rows usable by the net-CO2e preprocessing. | -| 32 | CO2 Abatement Cost ($/metric ton): CO2 price over time. | `co2_price` | CO2 price output exists and can be inflation-adjusted. | -| 33 | Undiscounted Annualized System Cost (Bil $): annual system cost by cost category. | Same as section 29 | Same as section 29, with annual cost rows available after preprocessing. | - -## Hydrogen and Technology Detail - -| No. | Report section | Reads | Reports when | -| --- | --- | --- | --- | -| 34 | Hydrogen Production (Million metric tons): production from hydrogen technologies. | `prod_produce_ann` | Production output exists and includes hydrogen tech rows selected by the preset. | -| 35 | Hydrogen Price ($ per kg): hydrogen product price over time. | `prod_h2_price` | Hydrogen price output exists with product-year price rows. | -| 36 | Final Wind Capacity (GW): final-year BA map for onshore and offshore wind. | `cap` filtered to `Onshore Wind`, `Offshore Wind` | Final-year BA capacity exists for wind technologies and geography joins succeed. | -| 37 | Final PV Capacity (GW): final-year BA map for UPV and DPV. | `cap` filtered to `UPV`, `DPV` | Final-year BA capacity exists for PV technologies and geography joins succeed. | -| 38 | Area used for UPV (sq. km.): UPV built area over time. | `land_use_total.csv` | Land-use postprocessing produced `outputs/land_use_total.csv` with built capacity and area columns. This is controlled by `land_use_analysis`; when `land_use_analysis=0`, the file is not expected. | -| 39 | Final CSP Capacity (GW): final-year BA map for CSP. | `cap` filtered to `CSP` | Final-year CSP capacity exists. If the filter is empty, map plotting may fail rather than render a blank chart. | -| 40 | Final Biopower Capacity (GW): final-year BA map for biopower and landfill gas. | `cap` filtered to `Biopower`, `Landfill-Gas` | Final-year capacity exists for at least one filtered biopower tech. Empty filters can trigger map plotting errors. | -| 41 | Final Geothermal Capacity (GW): final-year BA map for geothermal. | `cap` filtered to `Geothermal` | Final-year geothermal capacity exists and maps cleanly. | -| 42 | Final Hydro and Canadian Import Capacity (GW): final-year BA map for hydro/import capacity. | `cap` filtered to `Hydropower`, `Canadian Imports` | Final-year capacity exists for hydro or Canadian import categories. | -| 43 | Final Pumped-hydro Capacity (GW): final-year BA map for pumped-hydro storage. | `cap` filtered to `Pumped-Hydro`, `Pumped-Hydro-Flex` | Final-year pumped-hydro capacity exists. Empty filters can trigger map plotting errors. | -| 44 | Final Battery Storage Capacity (GW): final-year BA map for battery capacity. | `cap` filtered to `Battery` | Final-year battery capacity exists. Empty filters can trigger map plotting errors. | -| 45 | Capacity Factor - Generation: generation-weighted capacity factor by tech. | `gen_ivrt`, `cap_ivrt` | Generation and capacity by tech-vintage-region-year exist and denominators are nonzero. | -| 46 | Battery Average Duration (h): energy-capacity-weighted storage duration. | `storage_duration_out`, `cap_energy_ivrt` | Storage duration and energy capacity outputs exist for storage technologies. | -| 48 | New Tech Value Factors: value factors for new technologies. | `valnew` | New-tech value output exists and preprocessing can derive value-factor fields. | - -## Retail, Health, Reliability, and Runtime - -| No. | Report section | Reads | Reports when | -| --- | --- | --- | --- | -| 47 | Retail rate (cents/kWh): national retail rate by source over time. | `retail/retail_rate_USA_centsperkWh.csv` | Retail postprocessing completed and wrote the USA retail-rate CSV. If `retail_rate_calculations.py` fails, this section fails with `FileNotFoundError`. | -| 49 | Monetized health damages over time (billion $/year): annual health damages by air-quality model and concentration-response function. | `health_damages_caused_r.csv` | Health-damages postprocessing produced the current 9-column CSV (`ba`, `year`, `pollutant`, `tons`, `model`, `cr`, `md`, `damage_$`, `mortality`) or an equivalent schema that bokehpivot can normalize to its internal health-damage fields. | -| 50 | Mortality over time (lives/year): annual mortality impacts by model and concentration-response function. | Same as section 49 | Same as section 49. If section 49 fails during source preprocessing, later health presets may cascade with plotting-state errors. | -| 51 | Total undiscounted health damages through 2050 (billion $): cumulative undiscounted damages. | Same as section 49 | Same as section 49, with years overlapping the report's present-value start year through 2050. | -| 52 | Total discounted health damages through 2050 (billion $): cumulative discounted damages. | Same as section 49 | Same as section 49, plus discounting inputs from report defaults are valid. | -| 53 | Total mortality through 2050 (lives): cumulative mortality. | Same as section 49 | Same as section 49, with mortality rows available for the filtered year range. | -| 54 | System cost + health damages: ACS ($/MWh): average electricity cost including ACS health damages. | `systemcost`, `reqt_quant`, `../inputs_case/crf.csv`, `../inputs_case/val_r.csv`, `../inputs_case/df_capex_init.csv`, `../inputs_case/switches.csv`, `../inputs_case/scalars.csv`, `health_damages_caused_r.csv` | System cost, load quantity, financial helper files, and health damages all exist; health damages include `cr = acs` rows. | -| 55 | System cost + health damages: H6C ($/MWh): average electricity cost including H6C health damages. | Same as section 54 | Same as section 54, with `cr = h6c` rows. | -| 56 | NEUE (ppm): normalized expected unserved energy. | `neue.csv` | Resource-adequacy postprocessing produced `outputs/neue.csv` with year, iteration, and NEUE values. If PRAS/RA postprocessing is skipped, this is commonly absent. | -| 57 | Runtime (hours): process runtime by scenario. | `../meta.csv` | The run-level `meta.csv` exists and can be parsed into process time rows. | -| 58 | Runtime by year (hours): runtime split by model year/process. | `../meta.csv` | Same as section 57, with year-level process metadata available after runtime preprocessing. | - -## Notes From `v20260610_TF_ND_small` - -The current small smoke run solved far enough to produce many core outputs, but -its expanded report is not clean. The failures line up with optional or -small-case-sensitive report sections: - -- Section 2 fails because `cap_iter` is absent from `outputs/outputs.h5`. -- Section 12 reads `opRes_supply_h` but fails during plotting, likely because - the final-year/preset-filtered data is structurally empty or missing an - expected plotted series. -- Section 38 fails because `outputs/land_use_total.csv` is absent. -- Sections 39, 40, 41, 43, and 44 fail after technology filters leave no - plottable map data for the small case. -- Section 47 fails because `outputs/retail/retail_rate_USA_centsperkWh.csv` was - not written after retail postprocessing failed. -- Sections 49 through 55 fail if `health_damages_caused_r.csv` does not match - a schema that the report can normalize, or if health-damage preprocessing - fails after loading. -- Section 56 fails because `outputs/neue.csv` is absent. - -For a deliberately small smoke run, some of these can be expected gaps. For a -full standard test case, they are worth investigating unless the case settings -intentionally disable the corresponding postprocessor or technology family. - -## Notes From `v20260611_Pacific` - -This Pacific run is useful because several report failures can be traced to -specific switches or generated inputs: - -- Section 2 fails because `cap_iter` is absent. The run uses `timetype=seq`, so - the intertemporal capacity-by-iteration output is not expected for this - sequential solve. -- Section 12 fails because `opRes_supply_h.csv` exists but is header-only. - `GSw_OpRes=2` is not the direct cause; the simplified reserve formulation - activates the `combo` reserve type. In this run, the representative-period - file `inputs_case/rep/opres_periods.csv` is header-only, so `opres_h` is empty - for the main solve and the operating-reserve equations generate zero rows. - Stress-period folders have populated `opres_periods.csv`, but the standard - expanded report reads the main reported `opRes_supply_h` output. -- Section 38 fails because `land_use_analysis=0`, so - `outputs/land_use_total.csv` is not expected. diff --git a/TESTING.md b/TESTING.md deleted file mode 100644 index ff0da4099..000000000 --- a/TESTING.md +++ /dev/null @@ -1,303 +0,0 @@ -# Testing ReEDS - -This document collects the testing guidance that is currently spread across the -developer guide, PR template, CI workflows, and subsystem READMEs. - -Primary references: - -- `docs/source/developer_best_practices.md`: developer testing levels, code - conventions, and GAMS change guidance. -- `.github/PULL_REQUEST_TEMPLATE.md`: expected PR test evidence and comparison - report expectations. -- `.github/workflows/python-app.yaml`: CI's concrete test-run and artifact - validation commands. -- `reeds2pras/README.md`: Julia/ReEDS2PRAS setup and test entry points. -- `AGENT.md`: repository orientation and quick debugging map. -- `REPORT_OUTPUT_LOGIC.md`: bokehpivot report sections, input files, and - conditions required for sections to render. - -## Prerequisites - -Most lightweight Python tests only need the Python environment. Model runs need -the full ReEDS stack. - -- Python `3.11` -- `uv` for Python environment management -- GAMS on `PATH`, with an appropriate license and solver -- Julia `1.12.1` for ReEDS2PRAS, PRAS, and stress-period workflows -- Remote test data downloaded or available when running model cases that need it - -Typical local setup: - -```powershell -uv sync --extra dev -julia --project=. instantiate.jl -$env:CONDA_DEFAULT_ENV = "reeds2" -$env:CONDA_PREFIX = (Resolve-Path .venv).Path -``` - -Optional remote-data preload: - -```powershell -uv run python reeds/remote.py -``` - -## Quick Checks - -Run these when the change is Python-only and does not require a model solve: - -```powershell -uv run python -m pytest tests/test_read_h5_files.py -uv run python -m pytest hourlize/tests -``` - -For narrow Python syntax/import checks after touching postprocessing modules: - -```powershell -uv run python -m py_compile postprocessing/bokehpivot/core.py postprocessing/bokehpivot/reeds2.py postprocessing/bokehpivot/reeds_bokeh.py -``` - -Run ReEDS2PRAS tests when changing `reeds2pras/`, `ReEDS_Augur/`, PRAS-related -inputs, or stress-period/resource-adequacy code: - -```powershell -cd reeds2pras/test -julia --project runtests.jl -cd ../.. -``` - -Build docs when changing documentation or doc configuration: - -```powershell -uv run sphinx-build docs/source docs/build/ -``` - -## Model Run Tests - -The main model test path is to run one or more scenarios from `cases_test.csv` -and then validate the completed run folder. - -Show runbatch options: - -```powershell -uv run python runbatch.py -h -``` - -Run all non-ignored scenarios in `cases_test.csv`: - -```powershell -uv run python runbatch.py -b vYYYYMMDD_test -c test -``` - -Run selected scenarios: - -```powershell -uv run python runbatch.py -b vYYYYMMDD_test -c test -s USA_defaults -uv run python runbatch.py -b vYYYYMMDD_test -c test -s USA_defaults,USA_decarb -``` - -Validate outputs for a completed case: - -```powershell -uv run python -m pytest tests/test_outputs.py --casepath runs/vYYYYMMDD_test_USA_defaults -``` - -`tests/test_outputs.py` checks that expected reported CSVs, bokehpivot reports, -retail outputs, and selected figures exist in the completed case's `outputs/` -folder. It is not a substitute for reviewing whether model results changed in -the expected way, and it is not a guarantee that every bokehpivot report section -rendered without errors. - -A passing run looks like this: - -```text -tests\test_outputs.py . [100%] -``` - -Dependency warnings, such as matplotlib or pyparsing deprecation warnings, do -not indicate a test failure unless pytest reports a failed test. - -This output validation is aimed at standard `cases_test.csv` workflows. Very -small or custom smoke-test cases, such as runs based on `cases_small.csv`, can -solve successfully while still missing full-report deliverables. In that case, -`tests/test_outputs.py` may fail because a standard postprocessor did not write -one of its expected files, not because the GAMS solve failed or because model -results differ from a baseline. - -When using a small smoke test, distinguish three outcomes: - -- The model solve failed: inspect `gamslog.txt` and `lstfiles/` first. -- The solve completed but postprocessing failed: outputs exist, but report, - retail, plotting, R2X, or other postprocessor files may be missing. -- The solve and postprocessing completed enough for the intended smoke test, but - `tests/test_outputs.py` still fails because it expects standard-case - deliverables that the small case does not produce. - -## Report Validation - -Bokehpivot reports are built section by section. The builder catches individual -section failures, writes red `ERROR!` blocks into `report.html`, logs tracebacks -in `report.log`, and continues building later sections. This means a report file -can exist, and `tests/test_outputs.py` can pass, even when some report sections -failed. - -For report-focused changes, rerun the standard expanded report against a -completed case: - -```powershell -uv run python postprocessing/bokehpivot/reports/interface_report_model.py "ReEDS 2.0" runs/ all No none postprocessing/bokehpivot/reports/templates/reeds2/standard_report_expanded.py html,excel one runs//outputs/reeds-report-manual No -``` - -Then inspect: - -- `runs//outputs/reeds-report-manual/report.log` -- `runs//outputs/reeds-report-manual/report.html` -- `runs//outputs/reeds-report-manual/report.xlsx` - -Useful PowerShell scan for report logs: - -```powershell -Select-String -Path runs//outputs/reeds-report-manual/report.log -Pattern "\*\*\*Error in section|Done building report|Traceback|FileNotFoundError|KeyError|ValueError|IndexError" -Context 0,2 -``` - -When a section fails because an output file is missing, compare the failure -against the effective switches in `runs//inputs_case/switches.csv`, not -only the default values in `cases.csv`. Case files and case columns can override -defaults. - -Known switch-driven or input-driven report gaps: - -- `cap_iter` is not produced for sequential `timetype=seq` runs. -- `land_use_total.csv` is skipped when `land_use_analysis=0`. -- OpRes sections can fail when representative operating-reserve periods are - empty. Check `inputs_case/rep/opres_periods.csv`, `outputs/opRes_supply_h.csv`, - `Sw_OpRes`, and generated equation counts in `lstfiles/`. -- Current `health_damages_caused_r.csv` outputs use the air-quality schema with - fields such as `ba`, `pollutant`, `tons`, `md`, `damage_$`, and `mortality`. - Bokehpivot normalizes these to legacy report display names in - `postprocessing/bokehpivot/reeds2.py`. - -## Change-Based Guidance - -Use the smallest test that gives real confidence. For model behavior changes, -that usually means at least one solved ReEDS case plus comparison outputs. - -### Post-Process Test - -Use for changes that do not affect model code or data, such as report styling, -plotting changes, or helper scripts like `runstatus.py`. - -- Run the changed post-processing workflow on outputs from a recent main-branch - run. -- Include a short demonstration or output artifact in the PR. -- Verify GitHub runner tests pass. - -### Light Test - -Use for model-code changes that are not expected to meaningfully affect model -solutions, such as rounding an input parameter, improving runtime without -changing logic, changing code behind a default-off switch, or adding a missing -`runfiles.csv` entry. - -- Compare a default test case from `cases_test.csv` against an equivalent run - from main. -- Produce and review a comparison report. -- Verify GitHub runner tests pass. - -### Regular Test - -Use for most model or data changes. - -- Run and compare either `USA_defaults` or `Mid_Case`, plus `USA_decarb`, from - `cases_test.csv` against equivalent runs from main. -- Review capacity, generation, transmission capacity, bulk system electricity - price, system cost, and runtime. -- Include the comparison report in the PR. -- Verify GitHub runner tests pass. - -The developer guide notes that `USA_defaults` should be run for most PRs. When -the right level is unclear, prefer the regular test or ask reviewers. - -### New Version Test - -Use for tagged releases. - -- Run the full set of scenarios in `cases_test.csv`. -- Note any failing cases in release notes. -- Create issues for output-processing failures and mention them in release - notes. -- Create comparison reports for the USA scenario against the previous released - version and attach them to release notes. - -## CI Reference - -The main CI workflow does the following: - -- Sets up Python, GAMS, and Julia environments. -- Downloads or restores required remote/Zenodo test files. -- Runs: - -```bash -python runbatch.py -b "$batch" -c test -s "$SCENARIO" -python -m pytest tests/test_outputs.py --casepath "$GITHUB_WORKSPACE/runs/${batch}_${SCENARIO}" -``` - -- Uploads failure diagnostics such as `gamslog.txt`, listing files, outputs, and - case inputs. -- Runs R2X conversion for selected completed runs using `r2x-reeds`. - -Workflow-quality CI also runs `zizmor` and `actionlint` on GitHub Actions files. - -## Comparison Reports - -The PR template asks for comparison reports commensurate with the change: - -- No model or data changes: Pacific test case only. -- Model or data changes: full U.S. reference case and full U.S. decarb case. -- Model structure, spatial/temporal resolution, or other large changes: all - cases in `cases_test.csv`. - -`postprocessing/compare_cases.py` is the main comparison-report script. Include -additional plots when they help explain input data, methods, or expected output -differences. - -## Debugging Failed Tests - -For failed model runs, inspect the case folder first: - -- `runs//gamslog.txt`: search for `ERROR`, `LP status`, `Status`, and - `Cur_year`. -- `runs//lstfiles/`: inspect `1_Inputs.lst` for input build failures and - year-specific `.lst` files for solve failures. -- `runs//inputs_case/`: exact inputs seen by the model. -- `runs//meta.csv`: process timing and repo metadata. -- `runs//outputs/`: reported outputs and generated reports. -- `runs//ReEDS_Augur/augur_data/`: PRAS and capacity-credit intermediate - files. -- `runs//outputs/reeds-report/report.log`: bokehpivot report build log. - The report builder intentionally catches individual section failures, marks - them as red `ERROR!` sections in `report.html`, logs the traceback, and - continues building later sections. This lets a report be partially useful, but - a standard validation report should still be checked for unexpected failed - sections. - -Useful commands: - -```powershell -uv run python runstatus.py -uv run python postprocessing/check_error.py runs/ -``` - -Keep `cleanup_level` at `0` while developing or debugging so run folders retain -the files needed for diagnosis and restarts. - -## Adding Tests - -- Prefer focused Python tests for reusable utility behavior in `reeds/`, - `hourlize/`, and input/post-processing modules. -- Add or update `tests/objective_function_params.yaml` when adding general - objective-function parameters that should be checked for missing input values. -- For ReEDS2PRAS, add new Julia test files under `reeds2pras/test/` named - `test-*.jl`; `runtests.jl` automatically includes matching files. -- For model behavior changes, document the run scenarios and comparison results - even when unit tests are also added. diff --git a/cases_categorized.csv b/cases_categorized.csv deleted file mode 100644 index 37ec8fd26..000000000 --- a/cases_categorized.csv +++ /dev/null @@ -1,383 +0,0 @@ -Input,Category,Description,Choices,Default Value,Ref -timetype,Temporal / solve structure,Sequential or Intertemporal,seq; int; win,seq, -ignore,Run setup / execution,"0=run this case, 1=ignore this case",0; 1,0, -AWS,Run setup / execution,Switch for when running on AWS,0; 1,0, -yearset,Temporal / solve structure,"_-delimited list of years to model OR bash-formatted year ranges (start..end..step). For example, 2010_2015_2020..2035..3_2040..2050..5 means: 2010, 2015, then 2020 through 2035 in 3-year steps, then 2040 through 2050 in 5-year steps. startyear will be prepended if it is not included. Truncated at endyear.",N/A,2010_2015_2020..2050..3, -startyear,Temporal / solve structure,First year to be modeled,N/A,2010, -endyear,Temporal / solve structure,Last year to be modeled,N/A,2050, -windows_suffix,Temporal / solve structure,Set of windows that are modeled,default; step5; step10; 2100,default, -solver,Run setup / execution,Solver for GAMS to use,CPLEX; gurobi,CPLEX, -distpvscen,Demand / load / flexibility,Setting for distpv scenario (see inputs\dgen_model_inputs),N/A,stscen2023_mid_case, -calc_csp_cc,Resource adequacy / PRM / PRAS,Switch to turn on CSP capacity credit calculations,0; 1,0, -plantchar_battery,Technology costs / performance,Battery cost and performance inputs (inputs\plant_characteristics\{plantchar_battery}.csv). The options for plantchar_battery start with 'battery_' and the switch should be set to the entire file name (ex: battery_ATB_2024_advanced),battery_ATB_(2023|2024)_(conservative|moderate|advanced),battery_ATB_2024_moderate, -plantchar_beccs,Technology costs / performance,BECCS cost and performance inputs (inputs\plant_characteristics\{plantchar_beccs}.csv) The options for plantchar_beccs start with 'beccs_' and the switch should be set to the entire file name (ex: beccs_reference),(beccs_BVRE_2021_(high|mid|low)|beccs_(reference|lowcost)),beccs_reference, -plantchar_biopower,Technology costs / performance,Biopower generators cost and performance characteristics (inputs\plant_characteristics\{plantchar_biopower}.csv). Options start with 'biopower_' and the switch should be set to the entire file name (ex: biopower_ATB_2024_moderate),biopower_ATB_(2024)_(moderate),biopower_ATB_2024_moderate, -plantchar_coal_ccs,Technology costs / performance,Coal CCS generators cost and performance characteristics (inputs\plant_characteristics\{plantchar_coal_ccs}.csv). Options start with 'coal-ccs_' and the switch should be set to the entire file name (ex: coal-ccs_ATB_2024_moderate),coal-ccs_ATB_(2024)_(conservative|moderate|advanced),coal-ccs_ATB_2024_moderate, -plantchar_coal,Technology costs / performance,Coal generators cost and performance characteristics (inputs\plant_characteristics\{plantchar_coal}.csv). Options start with 'coal_' and the switch should be set to the entire file name (ex: coal_ATB_2024_moderate),coal_ATB_(2024)_(moderate),coal_ATB_2024_moderate, -plantchar_csp,Technology costs / performance,CSP cost and performance characteristics (inputs\plant_characteristics\{plantchar_csp}.csv). The options for plantchar_csp start with 'csp_' and the switch should be set to the entire file name (ex: csp_ATB_2024_advanced),csp_ATB_(2023|2024)_(conservative|moderate|advanced),csp_ATB_2024_moderate, -plantchar_fuelcell,Technology costs / performance,Fuel cell cost and performance characteristics (inputs\plant_characteristics\{plantchar_fuelcell}.csv). The options for plantchar_fuelcell start with 'fuelcell_' and the switch should be set to the entire file name (ex: fuelcell_ATB_2024_advanced),fuelcell_ATB_2024_(moderate|advanced),fuelcell_ATB_2024_moderate, -plantchar_gas_ccs,Technology costs / performance,Natural gas CCS generator cost and performance characteristics (inputs\plant_characteristics\{plantchar_gas_ccs}.csv). Options start with 'gas-ccs' and the switch should be set to the entire file name (ex: gas-ccs_ATB_2024_moderate),gas-ccs_ATB_(2024)_(conservative|moderate|advanced),gas-ccs_ATB_2024_moderate, -plantchar_gas,Technology costs / performance,Natural gas generator cost and performance characteristics (inputs\plant_characteristics\{plantchar_gas}.csv). Options start with 'gas_' and the switch should be set to the entire file name (ex: gas_ATB_2024_moderate),gas_ATB_(2024)_(moderate),gas_ATB_2024_moderate, -plantchar_geo,Technology costs / performance,Geothermal cost setting (inputs\plant_characteristics\{plantchar_geo}.csv).The options for plantchar_geo start with 'geo_' and the switch should be set to the entire file name (ex: geo_ATB_2023_conservative),geo_ATB_(2023|2024)_(conservative|moderate|advanced),geo_ATB_2024_moderate, -plantchar_h2combustion,Technology costs / performance,H2-CT/CC cost and performance inputs (inputs/plant_characteristics/{h2combustionscen}.csv). The options for h2combustionscen start with 'h2-combustion_' and the switch should be set to the entire file name (ex: h2-combustion_ATB_2023),h2-combustion_ATB_(2024),h2-combustion_ATB_2024, -plantchar_hydro,Technology costs / performance,Hydropower cost inputs (inputs/plant_characteristics/{plantchar_hydro}.csv). The options for plantchar_hydro start with 'hydro_' and the switch should be set to the entire file name (ex: hydro_ATB_2019_low),hydro_ATB_2019_(constant|mid|low),hydro_ATB_2019_mid, -plantchar_nuclear_smr,Technology costs / performance,Small modular reactor (SMR) cost and performance characteristics (inputs\plant_characteristics\{plantchar_nuclear_smr}.csv). Options start with 'nuclear_smr' and the switch should be set to the entire file name (ex: nuclear-smr_ATB_2024_moderate),nuclear-smr_ATB_(2024)_(conservative|moderate|advanced),nuclear-smr_ATB_2024_moderate, -plantchar_nuclear,Technology costs / performance,Large nuclear cost and performance characteristics (inputs\plant_characteristics\{plantchar_nuclear}.csv). Options start with 'nuclear_' and the switch should be set to the entire file name (ex: nuclear_ATB_2024_moderate),nuclear_ATB_(2024)_(conservative|moderate|advanced),nuclear_ATB_2024_moderate, -plantchar_ofswind,Technology costs / performance,Offshore wind cost and performance inputs (inputs/plant_characteristics/{plantchar_ofswind}.csv). The options for plantchar_ofswind start with 'ofs-wind_' and the switch should be set to the entire file name (ex: ofs-wind_ATB_2023_advanced),ofs-wind_ATB_(2023|2024)_(conservative|moderate|advanced|moderate_noFloating),ofs-wind_ATB_2024_moderate, -plantchar_onswind,Technology costs / performance,Onshore wind cost and performance inputs (inputs/plant_characteristics/{plantchar_onswind}.csv). The options for plantchar_onswind start with 'ons-wind_' and the switch should be set to the entire file name (ex: ons-wind_ATB_2023_advanced).,ons-wind_ATB_(2023|2024)_(conservative|moderate|advanced),ons-wind_ATB_2024_moderate, -plantchar_other,Technology costs / performance,Cost and performance characteristics for lfill-gas and o-g-s (inputs\plant_characteristics\{plantchar_other}.csv). Options start with 'other_' and the switch should be set to the entire file name (ex: other_plantchar)',other_plantchar,other_plantchar, -plantchar_upv,Technology costs / performance,UPV cost and performance inputs (inputs/plant_characteristics/{plantchar_upv}.csv). The options for plantchar_upv start with 'upv_' and the switch should be set to the entire file name (ex: upv_ATB_2023_advanced).,upv_ATB_(2023|2024)_(conservative|moderate|advanced),upv_ATB_2024_moderate, -ccsflexscen,Hydrogen / DAC / CO2 management,"Flexible CCS scenario (inputs\plant_characteristics\{ccsflexscen}_cost/perf.csv).The options for ccsflexscen start with 'ccsflex_' and the switch should be set to the file name, dropping '_cost' or '_perf' (ex: ccsflex_ATB_2020)",ccsflex_ATB_2020,ccsflex_ATB_2020, -ccs_upgrade_cost_case,Hydrogen / DAC / CO2 management,case in upgrade_cost_ccs_coal and upgrade_cost_ccs_gas to use for ccs retrofit costs,atb22_1p2_moderate; atb22_1p2_advanced,atb22_1p2_moderate, -coalscen,Fuel / commodity prices,"Coal price scenario (inputs\fuelprices\{coalscen}.csv). The options for coalscen start with 'coal_' and the switch should be set to the file name, dropping 'coal' (ex: AEO_2025_reference)",AEO_(2023|2025)_reference,AEO_2025_reference, -demandscen,Demand / load / flexibility,Demand scenario (see inputs\load),N/A,AEO_2025_reference, -dr_shedscen,Demand / load / flexibility,DR shed scenario,demo_data_January_2025,demo_data_January_2025, -evmcscen,Demand / load / flexibility,EVMC scenario for load and supply curve and flexibility,Baseline,Baseline, -geodiscov,Renewable resource / siting,Annual discover rates for new geothermal sites,BAU; TI,BAU, -geohydrosupplycurve,Renewable resource / siting,Geohydro Supply Curve,ATB_2023,ATB_2023, -egssupplycurve,Renewable resource / siting,EGS Supply Curve,ATB_2023; reV,reV, -egsnearfieldsupplycurve,Renewable resource / siting,EGS (near field) Supply Curve,ATB_2023,ATB_2023, -ngscen,Fuel / commodity prices,Natural gas price inputs (see inputs\fuelprices),N/A,AEO_2025_reference, -pshsupplycurve,Storage / hybrid resources,PSH Supply Curve,(8|10|12)hr_(ref|wEphemeral|wExist|wEph|wExist_wEph)_(apr2025|mar2024),12hr_ref_apr2025, -pvbscen,Storage / hybrid resources,PVB cost-sharing scenario,benchmark2020,benchmark2020, -dacscen,Hydrogen / DAC / CO2 management,Electrical DAC cost and performance inputs (see inputs/consume/[dacscen].csv starting with 'dac_elec_').,BVRE_2021_(high|mid|low),BVRE_2021_mid, -h2combustionfuelscen,Hydrogen / DAC / CO2 management,H2-CT/CC Fuel Price Scenarios (only used if endogenous H2 production is turned off),10; reference; 30,reference, -upgradescen,Retirement / refurbishment / upgrades,Exogenous upgrade capital cost specification (see inputs\upgrades). 'default' calculates cost using diff between from- and to- tech,N/A,default, -retscen,Retirement / refurbishment / upgrades,Retirement Scenario,Nuke60RetireYear; Nuke80RetireYear; NukeEarlyRetireYear; NukeRefRetireYear,Nuke80RetireYear, -supplycurve,Renewable resource / siting,Wind and Solar Supply Curves,default; 0; naris; 2018,default, -uraniumscen,Fuel / commodity prices,Uranium price scenario,AEO_(2023|2025)_reference,AEO_2025_reference, -GSw_Region,Spatial scope / aggregation,Specify column from inputs/userinput/modeled_regions.csv or from {column of hierarchy.csv}/{period-delimited entries to keep from that column},N/A,country/USA, -GSw_ZoneSet,Spatial scope / aggregation,Set of geospatial zones to use as balancing areas (described in inputs/zones/README.md),^(z48|z54|z69|z132|z134|z3109|UTcounty|PJMcounty)$,z132, -capcredit_hierarchy_level,Resource adequacy / PRM / PRAS,Select level at which to aggregate net load for capacity-credit calculation,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,transreg, -construction_schedules_suffix,Technology costs / performance,File suffix for construction schedules,default,default, -construction_times_suffix,Technology costs / performance,File suffix for construction times by technology,default,default, -degrade_suffix,Technology costs / performance,File suffix for annual degredation by technology,default,default, -depreciation_schedules_suffix,Financials / incentives,File suffix for depreciation schedules,default,default, -financials_sys_suffix,Financials / incentives,File suffix for the system-wide system discount rate,ATB(2023|2024),ATB2024, -financials_tech_suffix,Financials / incentives,File suffix for technology-specific financial assumptions (see inputs\financials_tech),ATB(2023|2023_CRP20|2024),ATB2024, -financials_trans_suffix,Financials / incentives,File suffix for transmission financial assumptions,default; 30ITC_0pen_2022_2031,default, -incentives_suffix,Financials / incentives,File suffix for incentive definition,ira; obbba; obbba_conservative; annual; biennial; ira_45q_45v_extension; none,obbba, -inflation_suffix,Financials / incentives,File suffix for historical inflation schedule,default,default, -ivt_suffix,Financials / incentives,File suffix for ivt csv file,default; small; step,default, -reg_cap_cost_diff_suffix,Technology costs / performance,File suffix for regional capital cost differences,default,default, -techs_suffix,Technology availability / representation,File suffix for master list of technologies,default; subsetForTesting,default, -dollar_year,Financials / incentives,DO NOT CHANGE FROM 2004 UNTIL ALL FINANCIAL INPUTS HAVE DOLLAR YEAR ADJUSTMENT - Real dollar year for model to calculate and report,2004,2004, -sys_eval_years,Temporal / solve structure,Number of years that the model evaluates investments on,int,30, -numhintage,Retirement / refurbishment / upgrades,"number of hintage bins. Enter 'unit' for unit level bins. Enter 'group' to group by unique technology, region, and heatrate combinations",int,6, -numbins_windons,Renewable resource / siting,Number of interconnection supply curve bins for onshore wind; options are 5 and 1300 (for individual sites lite),int,10, -numbins_windofs,Renewable resource / siting,Number of interconnection supply curve bins for offshore wind; options are 5 and 1300 (for individual sites lite),int,5, -numbins_upv,Renewable resource / siting,Number of interconnection supply curve bins for upv; options are 20 and 1300 (for individual sites lite),int,40, -numbins_csp,Renewable resource / siting,Number of interconnection supply curve bins for csp,int,5, -numbins_geohydro_allkm,Renewable resource / siting,Number of interconnection supply curve bins for hydrothermal geothermal,int,10, -numbins_egs_allkm,Renewable resource / siting,Number of interconnection supply curve bins for deep enhanced geothermal,int,10, -mindev,Retirement / refurbishment / upgrades,minimum deviation for a hintage to qualify for a new bin,int,50, -unitdata,Retirement / refurbishment / upgrades,"Unit Database: ""EIA-NEMS"" for NEMS",EIA-NEMS,EIA-NEMS, -marg_vre_mw,Resource adequacy / PRM / PRAS,MW for marginal VRE curt/cc calcs,N/A,1000, -marg_stor_mw,Resource adequacy / PRM / PRAS,MW for marginal storage capacity credit,N/A,100, -marg_evmc_mw,Resource adequacy / PRM / PRAS,MW for marginal electric vehicle managed charging (EVMC) capacity credit,N/A,100, -GSw_AnnualCap,Policy / emissions constraints,CO2/CO2e emission cap. Turn off cap (0) or turn on CO2 only cap (1) or turn on CO2e cap (2) or include H2 leakage in CO2e cap (3) ,0; 1; 2; 3,0, -GSw_AnnualCapScen,Policy / emissions constraints,Scenario for CO2 cap pathway (see inputs\emission_constraints\co2_cap.csv),N/A,default, -GSw_AVG_iter,Resource adequacy / PRM / PRAS,Select method for choosing which iterations are used for CC/curt calculations,0; 1,1, -GSw_BankBorrowCap,Policy / emissions constraints,Turn on/off CO2 cap with banking and borrowing,0; 1,0, -GSw_BatteryMandate,Policy / emissions constraints,Turn on/off battery mandate constraint,0; 1,1, -GSw_BECCS,Hydrogen / DAC / CO2 management,Turn on/off BECCS technology,0; 1,1, -GSw_BinOM,Technology costs / performance,Turn on/off binned FOM and VOM for each historical binned vintage,0; 1,1, -GSw_Biopower,Technology availability / representation,Turn on/off biopower,0; 1,1, -GSw_BioSupply,Fuel / commodity prices,Multiplier to adjust total biomass supply,N/A,1, -GSw_BioTransportCost,Fuel / commodity prices,Biomass collection and transport costs ($2004 per dry ton),N/A,22, -GSw_calc_powfrac,Report calculations - Pipeline toggle,Switch to compute powfrac in e_report and e_powfrac_calc - dramatically reduces calculation times with hourly resolution,0; 1,0, -GSw_Canada,Technology availability / representation,"Turn canada off [0], or use flexible (dispatchable-hydro-like) representation [1]",0; 1,1, -GSw_CarbTax,Policy / emissions constraints,Turn on/off CO2 tax,0; 1,0, -GSw_CarbTaxOption,Policy / emissions constraints,Choose the co2_tax input csv file (see inputs\emission_constraints),,default, -GSw_CCS,Hydrogen / DAC / CO2 management,Turn on/off all inflexible CCS,0; 1,1, -GSw_CCS_NotRecTech,Policy / emissions constraints,Turn on/off removal of CCS techs from CES eligibility,0; 1,0, -GSw_CCS_Rate_New_mod,Hydrogen / DAC / CO2 management,fractional CO2 capture rate of new CCS_mod capacity,float,0.95, -GSw_CCS_Rate_New_max,Hydrogen / DAC / CO2 management,fractional CO2 capture rate of new CCS_max capacity,float,0.99, -GSw_CCS_Rate_Upgrade_mod,Hydrogen / DAC / CO2 management,fractional CO2 capture rate of retrofit CCS_mod capacity,float,0.9, -GSw_CCS_Rate_Upgrade_max,Hydrogen / DAC / CO2 management,fractional CO2 capture rate of retrofit CCS_max capacity,float,0.99, -GSw_CCSFLEX_BYP,Hydrogen / DAC / CO2 management,Turn on/off all Flexible CCS with Bypass,0; 1,0, -GSw_CCSFLEX_cap_max,Hydrogen / DAC / CO2 management,CCS maximum capture,float,90, -GSw_CCSFLEX_cost_mult,Hydrogen / DAC / CO2 management,CCS capital cost multiplier,float,1, -GSw_CCSFLEX_DAC,Hydrogen / DAC / CO2 management,Turn on/off all Flexible CCS with Direct Air Capture,0; 1,0, -GSw_CCSFLEX_STO,Hydrogen / DAC / CO2 management,Turn on/off all Flexible CCS with Storage,0; 1,0, -GSw_CCSFLEX_STO_LEVEL,Hydrogen / DAC / CO2 management,Turn on/off explicit tracking of flexible CCS storge level (1=explicit; 0=implicit),0; 1,1, -GSw_CCS_NoRetire,Hydrogen / DAC / CO2 management,Switch to prevent coal and gas from turning off CCS equipment after upgrading. 0 = can turn CCS equipment off. 1 = must keep CCS equipment on.,0; 1,0, -GSw_CheckInputs,Input validation - Pipeline toggle,Switch to turn on/off inputs checking,0; 1,1, -climateloc,Water / climate impacts,Directory for climate scenarios (change to qnap/CIRA_Inputs_R2 to use scenarios not included in inputs/climate),N/A,inputs/climate, -climatescen,Water / climate impacts,Climate scenario for climate impacts,HadGEM2-ES_rcp45_AT; HadGEM2-ES_rcp85_AT; HadGEM2-ES_RCP2p6; HadGEM2-ES_RCP4p5; HadGEM2-ES_RCP8p5; GFDL-ESM2M_RCP4p5_WM; IPSL-CM5A-LR_RCP8p5_WM,HadGEM2-ES_rcp45_AT, -GSw_Clean_Air_Act,Policy / emissions constraints,"Turn on/off the provisions under the Clean Air Act, Section 111, which regulate the emissions from existing coal plants and new gas plants.",0; 1,1, -GSw_ClimateHeuristics,Water / climate impacts,Select scenario for a variety of climate heuristics,none; 2025_2050_linear,none, -GSw_ClimateHydro,Water / climate impacts,Turn on/off climate impacts on hydropower,0; 1,0, -GSw_ClimateStartYear,Water / climate impacts,Year in which to start applying climate impacts,N/A,2022, -GSw_ClimateWater,Water / climate impacts,Turn on/off climate impacts on cooling water,0; 1,0, -GSw_CO2_Storage,Hydrogen / DAC / CO2 management,"Include costs from CO2 transport and storage. 0 includes no costs, positive values applied as $ per metric ton to captured CO2. Enter in $2004. Suggested range of values based on NETL 2019 report : 11 (base), 7 (low), 26 (high)",N/A,11, -GSw_CO2_pipeline_cost,Hydrogen / DAC / CO2 management,Set capex cost for CO2 Pipeline. 2004$/(tonne-mi)/hr. Suggested value: 2257,N/A,2257, -GSw_CO2_pipeline_fom,Hydrogen / DAC / CO2 management,Set FOM cost for CO2 Pipeline. 2004$/(tonne-mi)/hr-yr. Suggested value: 60,N/A,60, -GSw_CO2_spurline_cost,Hydrogen / DAC / CO2 management,Set capex cost for CO2 Spurline. 2004$/(tonne-mi)/hr. Suggested value: 2257,N/A,2257, -GSw_CO2_spurline_fom,Hydrogen / DAC / CO2 management,Set FOM cost for CO2 Spurline. 2004$/(tonne-mi)/hr-yr. Suggested value: 60,N/A,60, -GSw_CO2_Detail,Hydrogen / DAC / CO2 management,Switch to enable detailed representation CO2 transportation and storage,0; 1,0, -GSw_CO2_CostAdj,Hydrogen / DAC / CO2 management,multiplier for co2 infrastructure when Sw_CO2_Detail = 1,float,1, -GSw_CO2_BEC,Hydrogen / DAC / CO2 management,"Break even cost capacity factor assignment. Must be a suffix to ""bec_"" in the columns of co2_site_char.csv",N/A,70, -GSw_CoalIGCC,Technology availability / representation,Turn on/off COAL IGCC,0; 1,1, -GSw_CoalNew,Technology availability / representation,Turn on/off coal new,0; 1,1, -GSw_CofireNew,Technology availability / representation,Turn on/off cofire-new,0; 1,0, -GSw_CoolingTechMults,Water / climate impacts,Turn on/off to enable cooling tech cost/performance multipliers,0; 1,1, -GSw_CSAPR,Policy / emissions constraints,Turn on/off the CSAPR emissions regulation,0; 1,1, -GSw_CSP,Technology availability / representation,Turn on/off CSP [0=no CSP; 1=1 CSP tech; 2=2 CSP techs],0,0, -GSw_CSPRemoveLow,Renewable resource / siting, Remove the lowest quality CSP resource [0=do not remove; 1=remove],0; 1,1, -GSw_CSP_Types,Technology availability / representation,'_'-delimited CSP types to include (i.e. 1 or 1_2 or 1_2_3),(1|1_2|1_2_3),1, -GSw_CurtMarket,Model formulation / numerical controls,Price paid (in 2004$/MWh) for curtailed VRE,N/A,0, -GSw_DAC,Hydrogen / DAC / CO2 management,"Turn on or off the representation of direct air capture [0 = off, 1 = on with projection specified by dacscen]",0; 1,0, -GSw_DAC_Gas,Hydrogen / DAC / CO2 management,"Turn on or off the representation of gas fueled direct air capture [0 = off, 1 = projection specified with GSw_DAC_Gas_Case]",0; 1,0, -GSw_DAC_Gas_Case,Hydrogen / DAC / CO2 management,DAC gas parameterization case (See inputs/consume/dac_gas_[GSw_DAC_Gas_Case].csv),BVRE_2021_(high|mid|low),BVRE_2021_mid, -GSw_distpv,Demand / load / flexibility,Turn on/off distpv,0;1,1, -GSw_DRShed,Demand / load / flexibility, switch to turn on/off demand response shed resource,0;1,0, -GSw_EFS_Flex,Demand / load / flexibility,Switch for turning EFS load flexibility on or off,0,0, -GSw_EFS2_FlexCase,Demand / load / flexibility,"Case used for electrification flex_type - format is {1}_{2}, where 1 in [EFS_REFERENCE, EFS_MEDIUM, EFS_HIGH, EFS_Clean2035] and 2 in [Baseflex, Currentflex, Enhancedflex, Uberflex1, Uberflex2]",N/A,EFS_MEDIUM_EnhancedflexStretch2046, -GSw_EVMC,Demand / load / flexibility,Turn on adoptable EV managed charging,0; 1,0, -GSw_FakeData,Test data shortcut - Pipeline toggle,Use fake capacity factor profiles (for TESTING ONLY when you do not want to download the real CF data),^[0-1]$,0, -GSw_ForcePrescription,Model formulation / numerical controls,Turn on/off forced prescriptions - turning off will allow unlimited but not free builds in historical years,0; 1,1, -GSw_FuelCell,Technology availability / representation,Turn on/off fuel cells (natural gas / H2) as a technology option,0; 1,0, -GSw_FutureHydCF_RepYears,Water / climate impacts,_-delimited years of historical hydro plant data from which to calculate capacity factors representing future hydro,N/A,2007_2008_2009_2010_2011_2012_2013_2016_2017_2018_2019_2020_2021_2022, -GSw_GasCurve,Fuel / commodity prices,"Select natural gas supply curve (0 = cendiv, 1 = national + cendiv, 2 = static, 3 = national)",0; 1; 2; 3,1, -GSw_GasCC_H_1x1,Technology availability / representation,Turn on/off both gas-CC_H_1x1 and gas-CC_H_1x1-CCS_mod/max plant options,0; 1,0, -GSw_GasCC_H_2x1,Technology availability / representation,Turn on/off both gas-CC_H_2x1 and gas-CC_H_2x1-CCS_mod/max plant options,0; 1,0, -GSw_GasCT_Aero,Technology availability / representation,Turn on/off gas-CT_aeroderivative technology option,0; 1,0, -GSw_GasSector,Fuel / commodity prices,Select sector scope of gas curves,electric_sector; energy_sector,electric_sector, -GSw_GenMandate,Policy / emissions constraints,Turn on/off national Gen Requirement. 2 turns on and applies constraint at busbar.,0; 1; 2,0, -GSw_GenMandateList,Policy / emissions constraints,Select technology list for national generation standard (see inputs/national_generation/nat_gen_tech_frac.csv),RE; Nuclear; NuclearCCS,RE, -GSw_GenMandateScen,Policy / emissions constraints,Select trajectory for national generation standard (see inputs/national_generation/gen_mandate_trajectory.csv),N/A,100_2035, -GSw_Geothermal,Technology availability / representation,"Geothermal can be turned off [0], left to the default representation [1], or have an extended representation [2]",0; 1; 2,1, -GSw_gopt,Run setup / execution,Select opt file to be used,N/A,1, -GSw_GrowthAbsCon,Model formulation / numerical controls,Turn on/off absolute growth constraint,0; 1,0, -GSw_GrowthConLastYear,Model formulation / numerical controls,The last year that the growth constraint (GSw_GrowthAbsCon) is applied (if it is turned on),int,2026, -GSw_GrowthPenalties,Model formulation / numerical controls,Turn on/off relative growth penalties,0; 1,0, -GSw_GrowthPenLastYear,Model formulation / numerical controls,The last year that the growth penalty (GSw_GrowthPenalties) is applied (if it is turned on),int,2034, -GSw_GWP,Policy / emissions constraints,Global warming potential for CH4 and N2O; either a string specifying IPCC report and timeline (like AR6-100 for 100-year value from IPCC AR6) or a string in the format CH4_{value}/N2O_{value} (for example: CH4_29.8/N2O_273) for arbitrary CH4 and N2O values,AR4-100; AR4-20; AR5-100; AR5-20; AR6-100; AR6-20; CH4_\d*\.?\d+\/N2O_\d*\.?\d+,AR6-100, -GSw_H2,Hydrogen / DAC / CO2 management,Turn on/off the representation of hydrogen supply/demand balance at a national level without storage (1) or at a regional level with storage (2),0; 1; 2,2, -GSw_H2_CompressorLoad,Hydrogen / DAC / CO2 management,Turn on/off the accounting of electric loads from compressors used to operate the hydrogen transport network, 0; 1,0, -GSw_H2_Demand_Case,Hydrogen / DAC / CO2 management,H2 demand case as indicated by the column headers in inputs/consume/h2_exogenous_demand.csv,none; BAU; Aggressive; Decarb; Decarb_with_BAU; LTS,none, -GSw_H2_Inputs,Hydrogen / DAC / CO2 management,Input file suffix for H2 inputs,ref; low,ref, -GSw_H2_IntraReg_Transport,Hydrogen / DAC / CO2 management,if non-zero specifies the flat cost for intra-ReEDS BA hydrogen transport in 2004$/kg H2 produced. Recommended value is $0.32/kg per https://liftoff.energy.gov/wp-content/uploads/2023/05/20230523-Pathways-to-Commercial-Liftoff-Clean-Hydrogen.pdf pg 15 for transport costs,float,0.32, -GSw_H2_MinStorHours,Hydrogen / DAC / CO2 management,Minimum H2 storage duration required by zone (only used when GSw_H2=2),N/A,24, -GSw_H2_PTC,Financials / incentives,"Turn on/off the representation of the hydrogen production tax credit, also known as 45V in the US tax code",0; 1,1, -GSw_H2_SMR,Hydrogen / DAC / CO2 management,Turn on/off steam methane reforming (SMR) for hydrogen production,0; 1,0, -GSw_H2_StorTimestep,Hydrogen / DAC / CO2 management,Indicate resolution at which to model H2 storage level: 1=rep period; 2=timeslice,0; 1; 2,1, -GSw_H2_Transport,Hydrogen / DAC / CO2 management,Indicate whether to allow interregional H2 transport via pipelines (only has an effect if GSw_H2=2),0; 1,0, -GSw_H2_TransportLevel,Hydrogen / DAC / CO2 management,hierarchy level within which to allow H2 pipelines,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,cendiv, -GSw_H2_TransportUniform,Hydrogen / DAC / CO2 management,"Option to override H2 storage/transport costs. Value of 0 (default) defers to default tech-specific, time-varying cost settings specified via H2 inputs when GSw_H2=1 or the H2 nework costs when GSw_H2=2. Specify in $2004 per metric ton.",N/A,0, -GSw_H2Combustion,Hydrogen / DAC / CO2 management,Switch to turn on/off H2CT and H2CC techs,0; 1,1, -GSw_H2Combustionupgrade,Hydrogen / DAC / CO2 management,Indicate whether to allow gas-CC and gas-CT to upgrade to H2-CT and H2-CC,0; 1,1, -GSw_H2CombinedCycle,Hydrogen / DAC / CO2 management,Indicate whether to allow H2-CC,0; 1,1, -GSw_H2LeakageScen,Hydrogen / DAC / CO2 management,Scenarios of H2 leakage rates from upstream and process of producing electricity by technology; scenario name options from emission_constraints/h2_leakage_rate.csv,N/A,Fan_et_al_2022/Med, -GSw_HourlyChunkAggMethod,Operating reserves / hourly chronology,How to aggregate CF and load within the chunks specified by GSw_HourlyChunkLengthRep (if set to anything other than 'mean' this switch overrides GSw_PRM_StressLoadAggMethod) (ties for mid are broken by the later hour; i.e. for 4-hour chunks and a setting of 'mid' the 3rd hour is used) (if an integer is provided the index starts at 1; i.e. 1 is the 1st hour),(mean|mid|\d),mean, -GSw_HourlyChunkLengthRep,Operating reserves / hourly chronology,Length of representative-period dispatch timeslices in hours; must be divisible into 24,1; 2; 3; 4; 6; 8; 12; 24,3, -GSw_HourlyChunkLengthStress,Operating reserves / hourly chronology,Length of stress-period dispatch timeslices in hours; must be divisible into 24,1; 2; 3; 4; 6; 8; 12; 24,3, -GSw_HourlyClusterAlgorithm,Operating reserves / hourly chronology,Algorithm to use for period selection; options are 'hierarchical' or 'optimized' or 'kmeans' or 'kmedoids' or something containing the substring 'user',N/A,optimized, -GSw_HourlyClusterLoadNorm,Operating reserves / hourly chronology,Method for normalizing load profile for use in representative period selection: none = no norm; regionmax = each region divided by its max; maxmax = each region divided by max across all regions; maxmin = each region divided by smallest max across all regions; float = maxmin * float,N/A,regionmax, -GSw_HourlyClusterRegionLevel,Operating reserves / hourly chronology,Indicate the region hierarchy level at which to aggregate RE profiles for clustering,nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; ccreg,transgrp, -GSw_HourlyClusterWeights,Operating reserves / hourly chronology,/-delimited relative weights for load and RE profiles used in clustering,^load_\d*.?\d+\/upv_\d*.?\d+\/wind-ons_\d*.?\d+\/wind-ofs_\d*.?\d+$,load_1/upv_1/wind-ons_1/wind-ofs_0, -GSw_HourlyClusterYear,Operating reserves / hourly chronology,Year to use when clustering EFS and/or climate-modified data,N/A,2035, -GSw_HourlyClusterTimestep,Operating reserves / hourly chronology,Indicate the time resolution to use in clustering algorithm (period=day or wek depending on GSw_HourlyType),hour; period,period, -GSw_HourlyMinRElevel,Operating reserves / hourly chronology,Indicate the region hierarchy level at which to include minimum wind and solar capacity factor days (or False to ignore min-wind/solar CF days),false; False; FALSE; r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; ccreg,interconnect, -GSw_HourlyNormProfiles,Operating reserves / hourly chronology,Indicate whether to normalize load/wind/solar profiles before identification of representative periods,0; 1,0, -GSw_HourlyNumClusters,Operating reserves / hourly chronology,Number of clusters to create (i.e. number of representative days or weks),int,33, -GSw_HourlyPeakLevel,Operating reserves / hourly chronology,Indicate the region hierarchy level at which to include peak coincident load days (or False to ignore peaks),false; False; FALSE; r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; ccreg,interconnect, -GSw_HourlyType,Operating reserves / hourly chronology,Indicate the type of representative period modeled (day=24-hour periods; wek=24×5=120-hour periods; year=8760-hour periods),day; wek; year,day, -GSw_HourlyWeatherYears,Operating reserves / hourly chronology,_-delimited years from which to construct weather profiles for energy/representative periods,N/A,2012, -GSw_HourlyWindow,Operating reserves / hourly chronology,Number of timeslices (GSw_HourlyChunkLengthRep hours long) to consider for minloading constraint,int,2, -GSw_HourlyWindowOverlap,Operating reserves / hourly chronology,Number of overlapping timeslices between adjacent GSw_HourlyWindow,int,1, -GSw_HourlyWrap,Operating reserves / hourly chronology,Switch to enable wrapping of final hour modeled in each representative period back to the first,0; 1,1, -GSw_HourlyWrapLevel,Operating reserves / hourly chronology,Indicate whether to wrap storage over full year or over seasons (only used for chronological 8760),season; year,year, -GSw_HybridPlant,Storage / hybrid resources,"0=Ban all storage, including CSP, 1=Allow CSP, ban all other storage, 2=Allow hybrid plants, excluding CSP, 3=Allow CSP and all other hybrid plants",0; 1; 2; 3,3, -GSw_hydED,Water / climate impacts,Turn on/off other hydro technologies except for hydED,0; 1,1, -GSw_HydroAddPumpDispUpgSwitch,Technology availability / representation,Turn on/off availability of hydro upgrades to add pumping or dispatchability,0; 1,0, -GSw_HydroCapEnerUpgradeType,Technology availability / representation,"1=coupled capacity/energy upgrades, 2=independent capacity/energy upgrades",1; 2,1, -GSw_HydroCostAddDispatch,Technology availability / representation,Cost of hydro upgrade to dispatchable (2004$/MW),N/A,309000, -GSw_HydroCostAddPump,Technology availability / representation,Cost of hydro upgrade to pumped (2004$/MW),N/A,998000, -GSw_HydroCostFracCapUp,Technology availability / representation,Fraction of upgrade cost assigned to capacity (only used if GSw_HydroUpgrade=1),float,0.8, -GSw_HydroCostFracEnerUp,Technology availability / representation,Fraction of upgrade cost assigned to energy (only used if GSw_HydroUpgrade=1),float,0.8, -GSw_HydroPSHDurData,Technology availability / representation,Turn on/off use of regional storage duration for existing PSH fleet,0; 1,1, -GSw_HydroStorInMaxFrac,Technology availability / representation,"max storage_in as fraction of capacity for psh (numerical values apply to all PSH, set to 'data' to use input file)",N/A,data, -GSw_HydroStorInMinLoad,Technology availability / representation,min loading frac for storage_in for psh,N/A,0, -GSw_HydroUpgradeCapMult,Technology availability / representation,multiplier on hydro upgrade capacity,float,1, -GSw_HydroUpgradeCostMult,Technology availability / representation,multiplier on hydro upgrade cost,float,1, -GSw_HydroVarPumpCostRatio,Technology availability / representation,fractional capital cost multiplier for new PSH with variable speed pumps relative to fixed speed,float,1.1, -GSw_Int_CC,Resource adequacy / PRM / PRAS,"Select intertemporal CC method (0=average undifferentiated, 1=average differentiated , 2=marginal differentiated)",0; 1; 2,0, -GSw_Int_Curt,Resource adequacy / PRM / PRAS,"Select intertemporal Curt method (0=average undifferentiated, 1=average differentiated , 2=marginal undifferentiated, 3=marginal differentiated)",0; 1; 2; 3,0, -GSw_InterDayLinkage,Storage / hybrid resources,Turn on (1) or off (0) the ability for interday storage techs (specified in tech-subset-table.csv) to shift energy between representative days (non-interday techs are unaffected),0; 1,0, -GSw_LfillGas,Technology availability / representation,Turn on/off lfill-gas,0; 1,1, -GSw_LoadProfiles,Demand / load / flexibility,Name of demand profile matching `inputs/profiles_demand/demand_{GSw_LoadProfiles}.h5` OR an absolute filepath to an EER-formatted demand .h5 file,^(historic|EFS_REFERENCE|EFS_MEDIUM|EFS_HIGH|EFS_Clean2035|EFS_Clean2035clip1pct|EFS_Clean2035_LTS|EFS_MEDIUMStretch2040|EFS_MEDIUMStretch2046|EER2023_Baseline_AEO2022|EER2023_IRAlow|EER2023_IRAmoderate|EER2023_100by2050|EER2025_Baseline_AEO2023|EER2025_IRAlow|EER2025_100by2050|\/.+|[a-zA-Z]:[\\\/].+)$,EER2025_IRAlow, -GSw_LoadAllocationMethod,Demand / load / flexibility,"How to allocate state-level load to model regions ('population' uses each region's share of state population, 'state_lpf' uses county-state load participation factors calculated from the NARIS nodal network dataset)",population; state_lpf,population, -GSw_Loadpoint,Model formulation / numerical controls,Switch to use or disable a loadpoint for the intertemporal solve after the first iteration,0; 1,0, -GSw_LoadSiteCF,Demand / load / flexibility,Annual capacity factor of optimally sited load (if 0 then optimally sited load is turned off; if between 0 and 1 then load is flexible (obeying stress period weight); if 1 then load is inflexible),float,0, -GSw_LoadSiteRA,Resource adequacy / PRM / PRAS,Include optimally sited load in PRAS resource adequacy metrics if set to 1 and GSw_LoadSiteCF=1,0; 1,1, -GSw_LoadSiteTrajectory,Demand / load / flexibility,inputs/load/loadsite_{GSw_LoadSiteTrajectory={hierarchy level}_{identifier}}.csv file indicating load to be optimally sited (only used if GSw_LoadSiteCF>0),^(nercr|transreg|transgrp|cendiv|st|interconnect|country|usda_region)_.*$,country_test, -GSw_MaxCaptureCCSTechs,Hydrogen / DAC / CO2 management,Switch to enable max capture (_max) CCS techs in addition to _mod. Note that you’ll need to add your own cost and performance for Gas-CC-CCS_max and coal-CCS_max,0; 1,0, -GSw_MaxDailyCF,Model formulation / numerical controls,Turn on/off daily maximum capacity factor constraint,0; 1,1, -GSw_MethaneLeakageScen,Policy / emissions constraints,Fractional leakage of methane from upstream natural gas production: either float (fixed rate) or scenario name from emission_constraints/methane_leakage_rate.csv,N/A,Alvarez2018_30by2030, -GSw_MGA_CostDelta,Model formulation / numerical controls,MGA: Fraction by which to allow objective function to increase when using Modeling to Generate Alternatives (MGA is turned off if set to 0; a common choice for MGA is 0.01),float,0, -GSw_MGA_Direction,Model formulation / numerical controls,MGA: Directionality of second optimization,(min|max),min, -GSw_MGA_Objective,Model formulation / numerical controls,MGA: Objective for MGA (uses GSw_MGA_SubObjective to specify technology subset if set to capacity),(capacity|transmission|rasharing|co2),rasharing, -GSw_MGA_SubObjective,Model formulation / numerical controls,MGA: Technology subset to minimize or maximize the capacity of (only used for GSw_MGA_Objective=capacity),(battery|ccs|coal|dac|fossil|gas|geo|h2_combustion|hydro|nuclear|ofswind|onswind|pv|re|storage|upv|vre|wind),storage, -GSw_MinCF,Model formulation / numerical controls,Turn on/off regional min CF constraint (applied at i/r level),0; 1,1, -GSw_Mingen,Model formulation / numerical controls,Turn on/off min-gen constraints by r/h/szn,0; 1,0, -GSw_MingenFixed,Model formulation / numerical controls,Turn on/off fixed min-gen constraints,0; 1,1, -GSw_MinLoading,Model formulation / numerical controls,Turn on/off the min-loading constraint by i/v/r/h,0; 1,0, -GSw_MinLoadTechs,Model formulation / numerical controls,Specify collection of techs to which to apply min-gen and min-loading constraints (0=none; 1=all; 2=all except geo/csp/lfill; 3=only nuclear/hydro; 4=only steam boiler/hydro),0; 1; 2; 3; 4,4, -GSw_NewValCapShrink,Post-solve processing - Pipeline toggle,switch to shrink valcap and related conditioning sets post-solve,0; 1,0, -GSw_NG_CRF_penalty,Fuel / commodity prices,Specify the scenario used for the natural gas CRF penalty,none; ramp_2023_2035; ramp_2045; ramp_2050; reverseramp_2022_2030; reverseramp_high_2022_2030,none, -GSw_NoFossilOffsetCDR,Policy / emissions constraints,If on (=1) then CO2 removal from DAC/BECCS is only allowed to offset emissions from fossil+CCS and methane leakage,0; 1,0, -GSw_Nuclear,Technology availability / representation,Turn on/off new nuclear (existing nuclear still remains),0; 1,1, -GSw_NuclearDemo,Technology availability / representation,Turn on or off nuclear demonstration plants,0; 1,0, -GSw_NuclearSMR,Technology availability / representation,Turn on [1] / off [0] Nuclear-SMR,0; 1,1, -GSw_NukeCoalFOM,Technology availability / representation,Turn on or off nuclear and coal FOM adders similar to NEMS,0; 1,1, -GSw_NukeFlex,Technology availability / representation,"Switch to enable more flexible nuclear operations (lower mingen, higher ramp rate)",0; 1,0, -GSw_NukeNoRetire,Retirement / refurbishment / upgrades,Switch to prevent nuclear from retiring before the year in GSw_NukeNoRetireYear has passed,0; 1,1, -GSw_NukeNoRetireYear,Retirement / refurbishment / upgrades,If GSw_NukeNoRetire is enabled nuclear cannot retire through the end of this year,N/A,2032, -GSw_NukeStateBan,Policy / emissions constraints,Switch to limit nuclear with state bans. [0] off / [1] full ban / [2] cost multiplier,0; 1; 2,1, -GSw_NukeStateBanCostMult,Policy / emissions constraints,Cost multiplier to represent state nuclear bans if the cost multiplier approach is selected,float,1.5, -GSw_NumCSPclasses,Renewable resource / siting,Number of resource classes for CSP,1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12,12, -GSw_NumGeoclasses,Renewable resource / siting,Number of resource classes for Geothermal,1; 2; 3; 4; 5; 6; 7; 8; 9; 10,9, -GSw_OffshoreBackbone,Transmission / spur infrastructure,Offshore zones can connect to other offshore zones,0; 1,0, -GSw_OffshoreBackflow,Transmission / spur infrastructure,Power can flow from land zones to offshore zones (allowing use of offshore transmission independent of offshore wind generation),0; 1,0, -GSw_OffshoreZones,Spatial scope / aggregation,Add new model zones for offshore resources,0; 1,0, -GSw_OfsWind,Technology availability / representation,Turn on/off offshore wind,0; 1,1, -GSw_OfsWindForceScen,Technology availability / representation,Scenario for state offshore mandates. Select {suffix} from state_policies/offshore_req_{suffix}.csv. Only active if GSw_StateRPS is on,N/A,default, -GSw_OnsWind6to10,Technology availability / representation,Turn on/off onshore wind 6-10,0; 1,1, -GSw_OpRes,Operating reserves / hourly chronology,Turn on/off operating reserve constraints (0/1) or use simplified version (2),0; 1; 2,2, -GSw_OpResCost,Operating reserves / hourly chronology,"Case used to select values used for the cost of operating reserves (e.g. default, market)",default; market,default, -GSw_OpResPeriods,Operating reserves / hourly chronology,Indicate which periods the operating reserve constraint should apply within (representative = clustered; stress/peakload/minre refer to peak load & min-RE periods) (has no effect for GSw_HourlyType=year),representative; all; stress; peakload; minre; peak; vre,peakload, -GSw_OpResReqMult,Operating reserves / hourly chronology,Multiplier for total reserve requirement (default=1),float,1, -GSw_OpResTradeMult,Operating reserves / hourly chronology,Multiplier on opres flow in transmission constraint (default=1),float,1, -GSw_OpResTradeLevel,Operating reserves / hourly chronology,hierarchy level within which to allow opres trading,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,transreg, -GSw_OutageScen,Resource adequacy / PRM / PRAS,Scenario for forced outage rates,static; murphy2019,murphy2019, -GSw_PRM_CapCredit,Resource adequacy / PRM / PRAS,Use capacity credit formulation if 1 and stress period formulation if 0,0; 1,0, -GSw_PRM_CapCreditHours,Resource adequacy / PRM / PRAS,Number of peak net load hour per ccseason considered in capacity credit calculations,int,20, -GSw_PRM_CapCreditMulti,Resource adequacy / PRM / PRAS,Whether capacity credit is for multi-year (1) or 2012 only (0),0; 1,1, -GSw_PRM_CapCreditSeasons,Resource adequacy / PRM / PRAS,Season definition to use for capacity credit (2season is hot 4/15-10/14 and cold 10/15-4/14; 4season is meteorological seasons,2season; 4season; 12month,2season, -GSw_PRM_hierarchy_level,Resource adequacy / PRM / PRAS,hierarchy level within which to calculate peak demand,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,nercr, -GSw_PRM_NetImportLimit,Resource adequacy / PRM / PRAS,Turn on (1) or off (0) the eq_firm_transfer_limit constraint on max firm net imports (NOTE: This constraint is only applied during stress periods in ReEDS; it is not applied in PRAS),0; 1,1, -GSw_PRM_NetImportLimitScen,Resource adequacy / PRM / PRAS,/-delimited list of {year}_{max percent import OR 'hist' for historical percent OR 'histmax' for max historical percent across all regions} values to use in eq_firm_transfer_limit,N/A,2031_hist/2050_100, -GSw_PRM_scenario,Resource adequacy / PRM / PRAS,"column of inputs/reserves/prm_annual.csv from which to draw the PRM (""nerc"" means the annual values from the 2024 NERC LTRA; ""static"" means the 2024 values from the same source); or a float (like 0.12) which gets applied as a fraction to all regions in all years (0.12 means 12%)",(static|nerc|ramp2025_20by50|^\d*\.?\d+$),0.12, -GSw_PRM_StressIncrement,Resource adequacy / PRM / PRAS,How many stress periods to add per iteration,int,2, -GSw_PRM_StressIterateMax,Resource adequacy / PRM / PRAS,Max number of times to iterate on a given solve year to achieve GSw_PRM_StressThreshold when using stress periods (0 means don't iterate; 1 means 1 extra ReEDS run; etc),int,5, -GSw_PRM_StressLoadAggMethod,Resource adequacy / PRM / PRAS,How to aggregate load for stress periods within the chunks specified by GSw_HourlyChunkLengthStress (only used if GSw_HourlyChunkAggMethod=mean; otherwise GSw_HourlyChunkAggMethod is used),mean; max,max, -GSw_PRM_StressModel,Resource adequacy / PRM / PRAS,Model used to identify stress periods: pras or a string starting with 'user' which specifies a file at inputs/temporal/stressperiods_{GSw_PRM_StressModel}.csv,N/A,pras, -GSw_PRM_StressOutages,Resource adequacy / PRM / PRAS,Whether to apply the availability factor (forced + scheduled outages) during stress periods,0; 1,1, -GSw_PRM_StressSeedLoadLevel,Resource adequacy / PRM / PRAS,Region hierarchy level at which to include peak coincident load days as seeded stress periods (or False to ignore peaks),false; False; FALSE; r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; ccreg,transgrp, -GSw_PRM_StressSeedMinRElevel,Resource adequacy / PRM / PRAS,Region hierarchy level at which to include minimum wind and solar capacity factor days as seeded stress periods (or False to ignore min-wind/solar CF days),false; False; FALSE; r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; ccreg,interconnect, -GSw_PRM_StressStorageCutoff,Resource adequacy / PRM / PRAS,"How to select ""shoulder"" stress periods giving storage time to recharge before/after high-unserved-energy periods. Two-part switch separated by _. The first argument is ""EUE"" or ""capacity"" or ""absolute"". If ""EUE"" the second argument specifies a PRAS storage headspace / EUE threshold [fraction]; if ""cap"" it specifies a headspace / storage capacity threshold [fraction]; if ""abs"" it specifies absolute number of periods before/after [integer]. Turned off if set to ""off"".",N/A,EUE_0.1, -GSw_PRM_StressThreshold,Resource adequacy / PRM / PRAS,/-delimited list of annual NEUE level [ppm] above which to re-solve the latest model year with new stress periods; formulated as HierarchyLevel_NEUEppm_StressMetric_PeriodAggMethod where HierarchyLevel is a column in hierarchy.csv; NEUEppm is normalized expected unserved energy in parts per million; StressMetric is EUE or NEUE (only used in period selection); PeriodAggMethod is 'sum' or 'max' over the hours in each period (only used in period selection) (see README.md for detailed notes),N/A,transgrp_1_EUE_sum, -GSw_PRM_UpdateFraction,Resource adequacy / PRM / PRAS,Fraction to add to the PRM if a region fails RA threshold (only used if GSw_PRM_UpdateMethod = 1),float,0.02, -GSw_PRM_UpdateMethod,Resource adequacy / PRM / PRAS,Option to update PRM: (0) no update; (1) static update set by GSw_PRM_UpdateFraction; (2) dynamic update informed by PRAS; (3) dynamic update but only after all new stress periods have been added,0; 1; 2; 3,0, -GSw_PRMTRADE_level,Resource adequacy / PRM / PRAS,hierarchy level within which to allow PRM trading,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,country, -GSw_PSHfillyears,Storage / hybrid resources,switch to define the number of years it is assumed to take to fill PSH reservoirs [only relevant with water constraints active],N/A,3, -GSw_PSHwatertypes,Storage / hybrid resources,switch to define what types of water is available for filling PSH reservoirs (0=fresh surface/ground water; 1=fresh surface water; 2=all types except saline surface water) [only relevant with water constraints active],0; 1; 2,0, -GSw_PSHwatercon,Storage / hybrid resources,binary switch to turn water constraints for PSH on and off,0; 1,0, -GSw_PVB,Storage / hybrid resources,Turn on/off hybrid PV+Battery,0; 1,0, -GSw_PVB_BIR,Storage / hybrid resources,'_'-delimited battery/inverter capacity ratio for the three PVB types expressed as a percentage [e.g. 50_75_100],N/A,25, -GSw_PVB_Dur,Storage / hybrid resources,Hybrid PV+Battery duration; the battery portion will use the same inputs as battery_li,N/A,4, -GSw_PVB_ILR,Storage / hybrid resources,'_'-delimited inverter loading ratio for the three PVB types expressed as a percentage [e.g. 130_180_240],N/A,134, -GSw_PVB_BatteryITC,Financials / incentives,Switch to apply ITC to battery in PV+B.,0; 1,1, -GSw_PVB_Charge_Constraint,Storage / hybrid resources,Fraction of battery charging in PV+B that is constrained to be from coupled PV; a value of zero turns off the constraint.,N/A,0, -GSw_PVB_Types,Storage / hybrid resources,'_'-delimited PV+battery types to include (i.e. 1 or 1_2 or 1_2_3),N/A,1, -GSw_ReducedResource,Renewable resource / siting,Turn on/off switch to reduce the RE resource available,0; 1,0, -GSw_Refurb,Retirement / refurbishment / upgrades,Turn on/off refurbishments,0; 1,1, -GSw_RemoveSmallNumbers,Model formulation / numerical controls,Turn on/off rounding of variables known to cause very small values on the RHS of certain constraints (improve numerical stability),0; 1,1, -GSw_RetailAdder,Hydrogen / DAC / CO2 management,2004$/MWh adder to the cost of electricity consumed by hydrogen production and DAC facilities,float,0, -GSw_Retire,Retirement / refurbishment / upgrades,Endogenous retirement: 0 = no endogenous retirement; 1 = any existing plants can retire; 2 = only existing coal/gas can retire; 3 = new/existing nuclear/coal/gas can retire after minimum age; 4 = new/existing plants of any tech can retire; 5 = same as 3 but nuclear can only retire after 2030,0; 1; 2; 3; 4; 5,5, -GSw_RetirePenalty,Retirement / refurbishment / upgrades,Apply a penalty for retiring a power plant early to represent retirement friction,0; 1,1, -GSw_RetireYear,Retirement / refurbishment / upgrades,Year to begin endogenous retirements,N/A,2027, -GSw_RetireYears_Coal,Retirement / refurbishment / upgrades,"Adjust lifetime coal retirements [0 = coal retirements straight from EIA unit database, negative number = number of years decreased in the lifteime of currrently operating coal plants, positive number = number of years increased in the lifetime of all currently operating coal units]. This switch is ignored if GSw_RetireYears_Thermal (below) is non-zero since GSw_RetireYears_Thermal adjusts retirement years of all thermal units including coal units.",int,0, -GSw_RetireYears_Thermal,Retirement / refurbishment / upgrades,"Adjust lifetime thermal retirements [0 = thermal retirements straight from EIA unit database, negative number = number of years decreased in the lifteime of currrently operating thermal plants, positive number = number of years increased in the lifetime of all currently operating thermal units]",int,0, -GSw_RGGI,Policy / emissions constraints,Turn on/off RGGI,0; 1,1, -GSw_SitingGeo,Renewable resource / siting,Specify the Geothermal siting scenario,reference,reference, -GSw_SitingUPV,Renewable resource / siting,Specify the UPV siting scenario,open; reference; limited,reference, -GSw_SitingWindOfs,Renewable resource / siting,Specify the offshore wind siting scenario,open; reference; limited,reference, -GSw_SitingWindOns,Renewable resource / siting,Specify the onshore wind siting scenario,open; reference; limited,reference, -GSw_SkipAugurYear,Resource adequacy / PRM / PRAS,Last year in which to skip running the Augur module,N/A,2020, -GSw_SpurCostMult,Transmission / spur infrastructure,Multiplier for spur-line costs,float,1, -GSw_SpurScen,Transmission / spur infrastructure,Spur-line scenario: 0 to include in resource supply curve; 1 to model endoegenously,0; 1,0, -GSw_SpurShare,Transmission / spur infrastructure,Indicate whether wind-ons and upv are allowed to share spur line capacity,0; 1,0, -GSw_StartMarkets,Temporal / solve structure,Indicate year in which load-balance and operating-reserve constraints start to be enforced,N/A,2026, -GSw_StartCost,Model formulation / numerical controls,Technologies with startup costs (0=none; 1=nuclear; 2=nuclear/coal/ccs; 3=coal/ccs; 4=coal/cc/ccs; 5=all fuel-based except nuclear; 6=all fuel-based) (default is to leave out nuclear since it's always committed with GSw_MingenFixed=1),0; 1; 2; 3; 4; 5; 6,4, -GSw_StateCap,Policy / emissions constraints,Turn on/off state cap and trade constraints,0; 1,1, -GSw_StateRPS,Policy / emissions constraints,Turn on/off state RPS requirements,0; 1,1, -GSw_StateRPS_Carveouts,Policy / emissions constraints,Turn wind and solar carveouts off/on,0;1,0, -GSw_StateCO2ImportLevel,Policy / emissions constraints,Hierarchy level within which to calculate CO2 emissions rate [metric ton/MWh] for state CO2 caps,r; nercr; transreg; cendiv; st; interconnect; country; usda_region,interconnect, -GSw_Storage,Storage / hybrid resources,0=ban storage; 1=use all standalone storage techs,0; 1,1, -GSw_StorageBinPenalty,Resource adequacy / PRM / PRAS,Turn on/off the storage bin penalty for the PRM method (when on results in better firm capacity outputs),0; 1,1, -GSw_TCPhaseout,Financials / incentives,Switch for whether tax credit Phaseout is enabled (0=no; 1=yes),0; 1,1, -GSw_TCPhaseout_forceyear,Financials / incentives,(0=off by default) Indicate a year in which to force the start of the tax credit phaseout,N/A,2032, -GSw_TCPhaseout_ref_year,Financials / incentives,The reference year used to determine whether the trigger for the tax credit phaseout threshold has been hit (with 100by),N/A,2022, -GSw_TCPhaseout_schedule,Financials / incentives,The schedule by which the tax credits phase out. This assumes that the phaseout schedule starts on the year after the threshold is met. The phaseout may still have a period of full credit after the trigger has been met depending on the policy definition.,ira2022,ira2022, -GSw_TCPhaseout_start,Financials / incentives,Earliest allowed Applicable Year for the tax credit phaseout. The tax credit phaseout schedule starts on the year following this year; or later if the emission threshold is not met by this year,N/A,2032, -GSw_TCPhaseout_trigger_f,Financials / incentives,The fraction of emissions from the ref year used to determine whether the trigger for the tax credit phaseout has been hit,float,0.25, -GSw_TransCapMaxEachType,Transmission / spur infrastructure,[GW] maximum transmission capacity allowed across each individual BA-BA interface for each trtype (constraint is off if set to 0; must be 0 or >= existing capacity (26.13 for AC)),N/A,0, -GSw_TransCapMaxAllTypes,Transmission / spur infrastructure,[GW] maximum transmission capacity allowed across each individual BA-BA interface for all trtypes together (constraint is off if set to 0; must be 0 or >= existing capacity (26.13 for AC)),N/A,0, -GSw_TransCapMaxTypes,Transmission / spur infrastructure,Transmission types to limit according to GSw_TransCapMaxEachType and GSw_TransCapMaxAllTypes [0 = none; 1 = all; 2 = VSC; 3 = all DC],0; 1; 2; 3,1, -GSw_TransIntraCost,Transmission / spur infrastructure,[USD2004/kW] intra-zone network reinforcement cost for all technologies (100 USD2022/kW using gas cost from slide 14 of https://emp.lbl.gov/publications/generator-interconnection-costs),N/A,65, -GSw_TransInvMaxLongTerm,Transmission / spur infrastructure,[TW-mile/year] maximum transmission capacity investment per year IN/AFTER firstyear_trans_longterm (constraint is OFF if set to 0 meaning unlimited trans investment; annual max since 2009 is ~3.64),N/A,0, -GSw_TransInvMaxNearTerm,Transmission / spur infrastructure,[TW-mile/year] maximum transmission capacity investment per year BEFORE firstyear_trans_longterm (constraint is OFF if set to 0 meaning unlimited trans investment; annual mean since 2009 is ~1.4),float,1.4, -GSw_TransInvNearTerm,Transmission / spur infrastructure,Indicate whether to allow transmission investment before firstyear_trans_longterm,0; 1,0, -GSw_TransInvMaxTypes,Transmission / spur infrastructure,Types of transmission to include in annual investment limit: 0=none; 1=interzonal (r); 2=interzonal + reinforcement; 3=interzonal + reinforcement + spur,0; 1; 2; 3,1, -GSw_TransInvPRMderate,Transmission / spur infrastructure,[fraction] amount by which to derate the capacity of new transmission investments for PRM trading (0 = no derate),float,0.15, -GSw_TransCostMult,Transmission / spur infrastructure,Multiplier for bulk BA-BA transmission costs,float,1, -GSw_TransHurdleLevel1,Transmission / spur infrastructure,Apply hurdle rates from inputs/transmission/cost_hurdle_intra.csv between regions at the specified hierarchy level,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; hurdlereg,transgrp, -GSw_TransHurdleLevel2,Transmission / spur infrastructure,Apply hurdle rates from inputs/transmission/cost_hurdle_intra.csv between regions at the specified hierarchy level,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; hurdlereg,hurdlereg, -GSw_TransHurdleRate,Transmission / spur infrastructure,Turn on (1) or off (0) hurdle rates between hierarchy regions as defined by GSw_TransHurdleLevel1/GSw_TransHurdleLevel2 and inputs/transmission/cost_hurdle_intra.csv,0; 1,0, -GSw_TransNetworkSource,Transmission / spur infrastructure,Network source for the initial transmission network used in the model,NARIS2024,NARIS2024, -GSw_TransRestrict,Transmission / spur infrastructure,hierarchy level within which to allow new transmission lines,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,country, -GSw_TransScen,Transmission / spur infrastructure,Transmission expansion scenario (options in inputs/transmission),N/A,default, -GSw_TransSquiggliness,Transmission / spur infrastructure,Transmission distance multiplier to approximate the squigglier paths followed by actual lines (only applied to NEW lines),float,1, -GSw_TransUpgradeMethod,Transmission / spur infrastructure,Method for calculating AC transmission upgrade costs,500kv,500kv, -GSw_TransGroupContraint,Transmission / spur infrastructure,Indicate whether to apply flow constraint on groups of transmission interfaces,0; 1,1, -GSw_TransGroupDerate,Transmission / spur infrastructure,[fraction] amount by which to derate the capacity of grouped transmission flows for new transmission additions (0 = no derate),float,0.15, -GSw_Upgrades,Retirement / refurbishment / upgrades,Switch to turn upgrades on or off - not to be used with water constraints - value of 2 indicates persistent upgrades,0; 1; 2,1, -GSw_UpgradeLifespan,Retirement / refurbishment / upgrades,Lifespan for retirements when sw_upgrades is set to 1,N/A,50, -GSw_UpgradeYear,Retirement / refurbishment / upgrades,First year when upgrades are allowed,N/A,2028, -GSw_UpgradeChar_Year,Retirement / refurbishment / upgrades,Year from which to grab the characteristics for upgraded init-X plant characteristics,N/A,2028, -GSw_UpgradeDerate,Retirement / refurbishment / upgrades,Switch to turn upgrade degrades off/on,0; 1,1, -GSw_UpgradeHeatRateAdj,Retirement / refurbishment / upgrades,Use HeatRate for upgrades from NEMS,0; 1,1, -GSw_UpgradeATBCosts,Retirement / refurbishment / upgrades,Use ATB upgrade costs,0; 1,0, -GSw_UpgradeVOM_Nems,Retirement / refurbishment / upgrades,Use VOM for upgrades from NEMS ,0; 1,1, -GSw_UpgradeFOM_Nems,Retirement / refurbishment / upgrades,Use FOM for upgrades from NEMS,0; 1,1, -GSw_UpgradeCost_Mult,Retirement / refurbishment / upgrades,"specify scenario for controlling upgrades over time - 0=mid 1=adv 2=con, 3=1, 4=1+(1-mid), 5=1.2",0; 1; 2; 3; 4; 5,0, -GSw_Upstream,Policy / emissions constraints,Include both upstream and process emissions in CO2 and CO2e calculation if 1 and only process emission if 0,0; 1,0, -GSw_ValStr,Value streams - Pipeline toggle,Turn on/off value streams,0; 1,0, -GSw_VSC_ConverterMax,Transmission / spur infrastructure,maximum AC/DC converter capacity allowed in each BA [MW] (constraint is off if set to 0),N/A,0, -GSw_WaterCapacity,Water / climate impacts,Turn on/off the water capacity constraints,0; 1,0, -GSw_WaterMain,Water / climate impacts,Turn on/off the representation of water use and source types,0; 1,0, -GSw_WaterUse,Water / climate impacts,Turn on/off the water capacity and water use constraints,0; 1,0, -debug,Diagnostics - Pipeline toggle,Write and keep intermediate files and equation elements to help with debugging. The value of the switch is passed to `option limrow` and `option limcol` and indicates the number of equation and variable entries to print,int,0, -cleanup_level,Run setup / execution,How aggressively to clean up the case folder (see postprocessing/cleanup_files.py for explanation),int,0, -diagnose,Diagnostics - Pipeline toggle,Write A and B matrix of the model [0 = no diagnose ; 1 = diagnose ],0; 1,0, -diagnose_year,Diagnostics - Pipeline toggle,Year in which to start report diagnose,N/A,2022, -dump_alldata,Diagnostics - Pipeline toggle,switch to automatically dump data from final solve year into .gdx file,0; 1,0, -file_replacements,Run setup / execution,"List of files to replace from run folder, e.g: inputs_case/national_gen_frac.csv << //nrelnas01/ReEDS/some proj/national_gen_frac.csv || c_supplymodel.gms << //nrelnas01/ReEDS/some proj/c_supplymodel.gms",N/A,none, -input_processing_only,Run flow - Pipeline toggle,Only run input_processing scripts; stop before creating and solving model,0; 1,0, -keep_augur_files,PRAS/resource adequacy - Pipeline toggle,Indicate whether to keep (1) or delete (0) Augur csv and h5 files after Augur finishes. If you plan to run PRAS via ReEDS2PRAS then set this switch to 1.,0; 1,0, -keep_g00_files,Run setup / execution,Keep (1) or delete (0) .g00 files for completed solve years,0; 1,0, -keep_run_terminal,Run setup / execution,"0=close run terminal, 1=keep run terminal open",0; 1,0, -land_use_analysis,Postprocessing/export - Pipeline toggle,switch to turn on/off land-use analysis. Requires the `reeds_to_rev` switch also be activated,0; 1,0, -pcm,Postprocessing/dispatch - Pipeline toggle,Rerun final solve year in dispatch mode at 1-hour resolution after the CEM run finishes (submits a new bigmem job if on the HPC),0; 1,0, -plot_ba_level,Postprocessing/export - Pipeline toggle,0=do not plot or output BA-level year-by-month plots; 1=plot and output BA-level year-by-month plots.,0; 1,0, -pras,PRAS/resource adequacy - Pipeline toggle,Indicate whether to run PRAS for 2007-2013 between each pair of solve years (0=never; 1=just the final solve year; 2=always),0; 1; 2,2, -pras_agg_ogs_lfillgas,Resource adequacy / PRM / PRAS,Aggregate existing o-g-s and landfill gas units to the capacity assumed for new units (from unitsize.csv),0; 1,0, -pras_existing_unit_size,Resource adequacy / PRM / PRAS,Use the average size of existing units by tech/region when disaggregating new capacity (otherwise use capacities from unitsize.csv for all new units),0; 1,1, -pras_hydro_energylim,Resource adequacy / PRM / PRAS,Whether to model hydro as energy-limited in PRAS (1) or like a thermal generator (0),0; 1,1, -pras_include_h2dac,Resource adequacy / PRM / PRAS,Indicate whether to include (1) demand associated with H2 production & DAC in PRAS,0; 1,0, -pras_max_unitsize_prm,Resource adequacy / PRM / PRAS,Cap the upper bound of disaggregated unit size by zone at the zonal PRM in MW,0; 1,1, -pras_samples,PRAS/resource adequacy - Pipeline toggle,Indicate how many Monte Carlo samples to use in PRAS (if 0 then the .pras file is generated but PRAS is not run),int,100, -pras_scheduled_outage,Resource adequacy / PRM / PRAS,Include scheduled outages in PRAS (if 0 then a default outage rate of 0 is applied),0; 1,0, -pras_seed,Resource adequacy / PRM / PRAS,Seed to use for PRAS samples; can be any positive integer. If 0 the seed is set randomly,int,1, -pras_singlethread,Resource adequacy / PRM / PRAS,Force single-thread operation for PRAS (much slower but sometimes helps avoid Julia hangs and errors),^[0-1]$,0, -pras_trans_contingency,Resource adequacy / PRM / PRAS,Indicate whether to use n-0 (0) or n-1 (1) transmission capacities in PRAS,0; 1,0, -pras_unitsize_source,Resource adequacy / PRM / PRAS,Data source for characteristic unit sizes in ReESD2PRAS,atb; r2x,atb, -pras_vre_combine,Resource adequacy / PRM / PRAS,Combine VRE into a single VRE tech in ReEDS2PRAS,0; 1,0, -reeds_to_rev,Postprocessing/export - Pipeline toggle,switch to turn on/off ReV outputs,0; 1,1, -resource_adequacy_years,Resource adequacy / PRM / PRAS,_-delimited years to include in resource adequacy calculations,N/A,2007_2008_2009_2010_2011_2012_2013_2016_2017_2018_2019_2020_2021_2022_2023, -MCS_runs,Monte Carlo - Pipeline toggle,Number of Monte Carlo simulation runs. Set to 0 to disable MCS. Set to an integer N > 0 to run N ReEDS simulations with sampling.,int,0, -MCS_dist,Monte Carlo / sampling,Name of the `.yaml` file defining the MCS distributions. Use 'default' or a string beginning with 'user' to reference `inputs/userinput/mcs_distributions_{MCS_dist}.yaml`,N/A,default, -MCS_dist_groups,Monte Carlo / sampling,Define the distribution groups to use in a Monte Carlo Simulation. Each entry should refer to a key from `inputs/userinput/mcs_distributions_{MCS_dist}.yaml` with multiple entries separated by a dot (e.g. Example1.Example2.Example3),N/A,tech, From 7893634757a4a5fc5e7477841d6de10ee10ba81c Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Thu, 11 Jun 2026 20:01:25 +0000 Subject: [PATCH 16/46] Add AGENT.md ReEDS agent guide Add a comprehensive AGENT.md as the primary orientation guide for agents working on ReEDS. The document summarizes repository structure, environment/setup (Python/Julia/GAMS), build and run commands, testing workflows, architecture and run flow, etc. --- AGENT.md | 274 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 274 insertions(+) create mode 100644 AGENT.md diff --git a/AGENT.md b/AGENT.md new file mode 100644 index 000000000..a540433a6 --- /dev/null +++ b/AGENT.md @@ -0,0 +1,274 @@ +# ReEDS Agent Guide + +ReEDS is a capacity planning and dispatch model for the U.S. electricity system. +The repository is a mixed Python, GAMS, and Julia codebase: Python prepares inputs, +orchestrates runs, and postprocesses outputs; GAMS contains the optimization model; +Julia translates solved ReEDS systems into PRAS resource adequacy systems. + +Use this file as the first stop for agent orientation. Deeper references: + +- @README.md: repository overview, installation entry points, and basic run + instructions. +- @docs/source/setup.md: user-facing setup, dependency, and environment + instructions. +- @docs/source/user_guide.md: scenario configuration, run options, switches, + outputs, and common workflows. +- @docs/source/developer_best_practices.md: coding conventions, testing + expectations, and GAMS development guidance. +- @sources_documentation.md: data-source documentation expectations and input + provenance notes. + +## Project Structure + +- `runbatch.py`: main run orchestrator. Reads `cases*.csv`, creates + `runs/{BatchName}_{case}/`, writes scripts, copies needed code/data into the + case folder, and launches local, HPC, or AWS runs. +- `cases.csv`: canonical case/switch catalog, with descriptions, allowed values, + and defaults. Scenario files such as `cases_test.csv`, `cases_small.csv`, and + study-specific `cases_{suffix}.csv` override defaults by case column. +- `runfiles.csv`: inventory of input files and how they should be copied, + filtered, aggregated, or transformed into each run's `inputs_case/`. +- Root `*.gms`: core GAMS model files. Important stages include `b_inputs.gms` + for GAMS-readable inputs, `c_supplymodel.gms` and `c_supplyobjective.gms` for + model equations/objective, `d_solveprep.gms`, `d_solveoneyear.gms`, + `d_solveallyears.gms`, `d_solvewindow.gms`, and `e_report.gms`. +- `input_processing/`: scripts run during case setup to create files under + `runs/{case}/inputs_case/`. `copy_files.py` is the broad data copier/filter; + scripts such as `recf.py`, `hourly_repperiods.py`, `hourly_load.py`, + `writecapdat.py`, `plantcostprep.py`, and `transmission.py` derive key inputs. +- `reeds/`: shared Python utilities. Common entry points are `reeds.io`, + `reeds.inputs`, `reeds.spatial`, `reeds.techs`, `reeds.log`, + `reeds.output_calc`, and plotting modules. +- `ReEDS_Augur/` and `Augur.py`: capacity credit, PRAS, and stress-period logic + that runs between solve years when enabled. +- `reeds2pras/`: Julia package for translating ReEDS outputs to PRAS systems. +- `hourlize/`: preprocessing for resource and load profiles. Main wrapper is + `hourlize/run_hourlize.py`; `hourlize/reeds_to_rev.py` disaggregates ReEDS + investments back to reV supply curve sites. +- `postprocessing/`: reports, diagnostics, plots, run comparison, retail rates, + reValue, bokehpivot, Tableau, combine-runs, and output cleanup. +- `preprocessing/`: tools for preparing repository inputs before ReEDS runs. +- `inputs/`: checked-in model inputs plus pointers to large remote inputs. + Large files are normally downloaded into `inputs/remote/` and linked or copied + as needed. +- `runs/`: generated run folders. Treat contents as user/generated artifacts and + do not edit or delete them unless the task explicitly targets a run. +- `tests/` and `hourlize/tests/`: pytest tests. Some tests are lightweight unit + tests; `tests/test_outputs.py` requires a completed ReEDS case. +- `.github/workflows/`: CI, docs, and workflow-quality automation. + +## Environment + +- Python is pinned to `3.11` via `.python-version` and `pyproject.toml`. +- Python dependencies are managed with `uv` and locked in `uv.lock`. +- Julia `1.12.1` is the tested version for ReEDS2PRAS and stress-period flows. +- GAMS is required for model solves. CPLEX is the normal solver; small cases may + work with other solvers, but CPLEX-oriented settings are the maintained path. +- Several large inputs are remote. `reeds/remote.py` downloads them based on + `inputs/remote_files.csv`; network access may be needed. +- ReEDS still expects Conda-style environment variables even when using `uv`. + +PowerShell setup used by local agents on Windows: + +```powershell +uv sync --extra dev +julia --project=. instantiate.jl +$env:CONDA_DEFAULT_ENV = "reeds2" +$env:CONDA_PREFIX = (Resolve-Path .venv).Path +``` + +Optional remote data preload: + +```powershell +uv run python reeds/remote.py +``` + +## Build And Run Commands + +- Show runbatch options: `uv run python runbatch.py -h` +- Interactive run setup: `uv run python runbatch.py` +- Typical test batch: `uv run python runbatch.py -b vYYYYMMDD_label -c test` +- One or more named cases from a cases file: + `uv run python runbatch.py -b vYYYYMMDD_label -c test -s caseA,caseB` +- Dry run case setup without launch: `uv run python runbatch.py -b label -c test -t` +- Check run status: `uv run python runstatus.py ` +- Restart failed HPC runs: `uv run python restart_runs.py ` +- Run a completed-case output check: + `uv run python -m pytest tests/test_outputs.py --casepath runs/` +- Build docs when docs dependencies are installed: + `uv run sphinx-build docs/source docs/build/` + +Be conservative with full model runs. They can be long, need licensed GAMS, may +download large files, and write substantial data under `runs/`. + +## Testing + +- Lightweight Python IO tests: + `uv run python -m pytest tests/test_read_h5_files.py` +- Hourlize tests: + `uv run python -m pytest hourlize/tests` +- Completed-run output validation: + `uv run python -m pytest tests/test_outputs.py --casepath runs/` +- Julia ReEDS2PRAS tests from `reeds2pras/test/`: + `julia --project runtests.jl` +- CI runs a test ReEDS scenario with `python runbatch.py -b "$batch" -c test -s "$SCENARIO"` + and then validates outputs with `tests/test_outputs.py`. + +`tests/test_outputs.py` is a completed-case artifact check, not a guarantee that +every bokehpivot report section rendered cleanly. For report health, inspect +`runs//outputs/reeds-report/report.log` and the generated HTML directly. + +When changing GAMS objective-function inputs, check +`tests/objective_function_params.yaml`; it documents parameters that +`input_processing/check_inputs.py` validates for missing values. + +## Architecture And Run Flow + +1. A cases file is parsed by `reeds.inputs.parse_cases()`. +2. `runbatch.py` expands cases, checks switch consistency, and creates + `runs/{BatchName}_{case}/`. +3. Case setup writes `inputs_case/`, `switches.csv`, `gswitches.csv`, + `modeledyears.csv`, run metadata, and generated shell/batch scripts. +4. `input_processing/copy_files.py` and related scripts copy, filter, aggregate, + and derive inputs. Many output CSV names intentionally match GAMS parameter + names read by `b_inputs.gms`. +5. GAMS reads `b_inputs.gms`, creates `inputs.gdx`, solves according to the + chosen `timetype` (`seq`, `int`, or `win`), and writes GDX/CSV outputs. +6. `Augur.py` may run between solve years to prepare PRAS data, run Julia PRAS, + calculate capacity credit, and add stress periods. +7. `e_report.gms`, `e_report_dump.py`, bokehpivot, retail-rate, plots, Vizit, + R2X, and other postprocessors write to `runs/{case}/outputs/`. + +Useful run-folder files: + +- `gamslog.txt`: first place to inspect failures; search for `ERROR`, + `LP status`, `Status`, and `Cur_year`. +- `lstfiles/`: GAMS listing files. `1_Inputs.lst` catches input build errors; + year-specific `.lst` files catch solve failures. +- `meta.csv`: process timing and repository metadata. +- `inputs_case/`: exact inputs seen by a case. This is usually better than + guessing from repository defaults when debugging a completed run. +- `outputs/`: reported CSVs, figures, bokehpivot reports, retail outputs, etc. +- `ReEDS_Augur/augur_data/`: PRAS and capacity-credit intermediate data. + +## Code Style + +Follow the current file's style first. This repository predates some current +guidelines, so nearby conventions matter. + +Python: + +- Prefer PEP 8 for new Python. +- Use `os.path.join()` or `pathlib` rather than hard-coded separators. +- Input-processing scripts should not change working directory; pass explicit + paths such as `reeds_path` and `inputs_case`. +- Keep data transformations in Python when practical instead of adding complex + calculations in GAMS. +- Use `reeds.io` helpers for reading outputs, switches, scalars, HDF5, maps, and + case paths rather than duplicating parsing logic. +- Many scripts log through `reeds.log.makelog()` and append timings with + `reeds.log.toc()`; keep that pattern for run-step scripts. +- Avoid broad formatting-only changes. The repo recommends Ruff linting, but + does not yet enforce repo-wide autoformatting. + +GAMS: + +- Follow `docs/source/developer_best_practices.md`. +- New GAMS files use the category prefix convention, e.g. `d1_...`, + `d2_...`, `e_...`. +- Switches are `GSw_...` in `cases.csv`; numeric GAMS versions usually become + `Sw_...`. Off is `0`, on is `1`. +- Parameters are lowercase with underscores; variables are uppercase; equations + are `eq_...`. +- GAMS declarations should include units first in comments, e.g. `"--MW-- ..."` . +- Prefer blocks of declarations over many one-line declarations. +- Use braces for GAMS functions such as `sum{...}`. +- In equations, terms generally start with `+` or `-`, parameters appear to the + left of variables, and operators have surrounding spaces. +- Monetary values should be rounded to two decimal places; other plain-text + parameters should generally use no more than three significant figures. +- Avoid hard-coded numbers in equations; name them as parameters when possible. + +Inputs and CSVs: + +- Files written to `inputs_case/` should generally share the GAMS parameter name + that reads them. +- GAMS-readable CSV headers often start with `*` so GAMS treats the header as a + comment. +- Raw inputs belong under topical `inputs/` subdirectories. +- Large or optional data should not be committed casually; use the remote-file + mechanism and document sources in `sources.csv` / `sources_documentation.md`. +- Costs read into `b_inputs.gms` should already be in 2004 dollars unless the + surrounding code clearly says otherwise; use `deflator.csv` rather than + hard-coded conversions. + +## Debugging Notes + +- For run failures, start with `runs//gamslog.txt`, then the newest file + in `runs//lstfiles/`. +- For input-processing failures, inspect `inputs_case/`, `1_Inputs.lst`, and + the script call generated in `call_.bat` or `call_.sh`. +- For output/report failures, compare `outputs/`, `e_report_params.csv`, and + `postprocessing/bokehpivot` report logs. +- When an expected output is missing, first check the effective run switches in + `runs//inputs_case/switches.csv`; repository defaults in `cases.csv` + may have been overridden by `cases_test.csv`, study cases, or the case column. +- Some report gaps are switch-driven and expected. For example, sequential + `timetype=seq` runs do not produce `cap_iter`, and `land_use_analysis=0` skips + `land_use_total.csv`. +- OpRes report failures can come from empty representative reserve periods: + check `inputs_case/rep/opres_periods.csv`, `opRes_supply_h.csv`, `Sw_OpRes`, + and the generated equation counts in `lstfiles/1_Inputs.lst` or solve `.lst` + files before assuming `GSw_OpRes` itself is wrong. +- Current `health_damages_caused_r.csv` files use the air-quality postprocessor + schema (`ba`, `pollutant`, `tons`, `md`, `damage_$`, `mortality`); bokehpivot + normalizes this to legacy report display columns in `postprocessing/bokehpivot/reeds2.py`. +- `runstatus.py` summarizes running/failed/finished cases for a batch prefix. +- `postprocessing/check_error.py` reads the `error_check` output for solved + cases. +- For GAMS data comparison, developer docs recommend targeted `execute unload` + statements rather than broad dumps. +- Keep `cleanup_level` at `0` while developing or debugging, because higher + cleanup levels remove files useful for restarts and diagnosis. + +## Important Subsystems + +- Remote data: `reeds.remote` reads `inputs/remote_files.csv` and manages + downloads under `inputs/remote/`. +- Monte Carlo sampling: `input_processing/mcs_sampler.py` plus YAML + distribution files described in the user guide. +- Temporal clustering and hourly data: `input_processing/hourly_repperiods.py`, + `hourly_writetimeseries.py`, `hourly_load.py`, and `inputs_case/rep/`. +- Renewable capacity factors and resources: `input_processing/recf.py`, + `writesupplycurves.py`, `hourlize/`, and `inputs_case/recf.h5`. +- Resource adequacy/stress periods: `Augur.py`, `ReEDS_Augur/`, + `reeds2pras/`, and `GSw_PRM_*` switches. +- Standard reports: `e_report.gms`, `e_report_dump.py`, + `postprocessing/bokehpivot/`, and `postprocessing/single_case_plots.py`. +- Run comparisons: `postprocessing/compare_cases.py`, + `postprocessing/combine_runs/`, and `postprocessing/uncertainty_plots.py`. +- Retail rates: `postprocessing/retail_rate_module/`. +- R2X translation: `scripts/run_r2x.py` and CI's `r2x-reeds` invocation. + +## Security And Data Handling + +- Never commit secrets, credentials, GAMS license files, local machine paths that + should remain private, or API tokens. +- Be careful with generated run folders. They may contain large files, local + paths, logs, and intermediate model data. +- Do not delete, move, or overwrite run artifacts unless explicitly asked. +- Ask before downloading large remote inputs or launching long solves. +- Preserve source documentation when adding or changing data: update + `sources.csv`, `sources_documentation.md`, and relevant docs when applicable. + +## Git Workflow For Agents + +- Expect a dirty worktree. Check `git status --short` before edits and preserve + user changes. +- Keep edits scoped to the user's request. Do not reformat unrelated files. +- Prefer small, reviewable changes with targeted tests or validation commands. +- Before claiming a model change is safe, state what was and was not run. A + Python unit test is not a substitute for a GAMS solve when model behavior is + changed. +- Do not use destructive git commands or delete generated data unless the user + asks for that specific action. From 1371484b6e7f1d57f03377c72df633f53d58a986 Mon Sep 17 00:00:00 2001 From: ty-fi <95767834+ty-fi@users.noreply.github.com> Date: Wed, 17 Jun 2026 11:29:18 -0400 Subject: [PATCH 17/46] Rename AGENT.md to AGENTS.md Rename AGENT.md to AGENTS.md to correct filename pluralization and improve consistency. No content changes were made to the file. --- AGENT.md => AGENTS.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename AGENT.md => AGENTS.md (100%) diff --git a/AGENT.md b/AGENTS.md similarity index 100% rename from AGENT.md rename to AGENTS.md From 06fad56b4cf2a7551ad6ced6bfd7ed885170ed76 Mon Sep 17 00:00:00 2001 From: ty-fi <95767834+ty-fi@users.noreply.github.com> Date: Wed, 17 Jun 2026 11:36:42 -0400 Subject: [PATCH 18/46] Revert changes to health report rendering and offshore wind recf inputs This commit reverts earlier commits 3a356d3 and b2b7ae3 -- which were themselves content fixes to issues in the earlier version of ReEDS that we were using. --- input_processing/recf.py | 3 - postprocessing/bokehpivot/core.py | 31 ++-------- postprocessing/bokehpivot/reeds2.py | 75 ++++-------------------- postprocessing/bokehpivot/reeds_bokeh.py | 12 +--- 4 files changed, 19 insertions(+), 102 deletions(-) diff --git a/input_processing/recf.py b/input_processing/recf.py index fb736ce22..fc16d170f 100644 --- a/input_processing/recf.py +++ b/input_processing/recf.py @@ -369,9 +369,6 @@ def main(reeds_path, inputs_case): resource_adequacy_years ) df_windofs.columns = ['wind-ofs_' + col for col in df_windofs] - else: - # Keep concat inputs consistent when offshore wind is disabled. - df_windofs = pd.DataFrame(index=df_windons.index) ### UPV df_upv = calculate_class_region_cf_hourly( diff --git a/postprocessing/bokehpivot/core.py b/postprocessing/bokehpivot/core.py index c11577fcd..2a0303428 100644 --- a/postprocessing/bokehpivot/core.py +++ b/postprocessing/bokehpivot/core.py @@ -27,7 +27,7 @@ import bokeh.resources as br import bokeh.embed as be import datetime -import urllib.parse as urlp +import six.moves.urllib.parse as urlp import subprocess as sp import jinja2 as ji import reeds_bokeh as rb @@ -612,36 +612,15 @@ def vizit_report(data_type, data_source, vizit_data, output_dir, auto_open): vizit_commit = '7011d363e40386264bedb3155629729b225fd22e' vizit_url = f'https://raw.githubusercontent.com/mmowers/vizit/{vizit_commit}/index.html' f_out_str = requests.get(vizit_url).text - # Vizit report data can contain NumPy scalars/arrays from pandas outputs; - # normalize them before JSON encoding so report generation does not fail. - data_str = json.dumps(data_dict, separators=(',',':'), default=json_scalar) - config_str = json.dumps(vizit_config, separators=(',',':'), default=json_scalar) - # Use callable replacements so backslashes in generated JSON are treated as - # literal text rather than regex replacement escapes. - f_out_str = re.sub( - 'let config_load = .*;\n', - lambda _: f'let config_load = {config_str};\n', - f_out_str, - 1, - ) - f_out_str = re.sub( - 'let rawData = .*;\n', - lambda _: f'let rawData = {data_str};\n', - f_out_str, - 1, - ) + data_str = json.dumps(data_dict, separators=(',',':')) + config_str = json.dumps(vizit_config, separators=(',',':')) + f_out_str = re.sub('let config_load = .*;\n', f'let config_load = {config_str};\n', f_out_str, 1) + f_out_str = re.sub('let rawData = .*;\n', f'let rawData = {data_str};\n', f_out_str, 1) with open(f'{output_dir}report_vizit.html', 'w') as f_out: f_out.write(f_out_str) if auto_open == 'Yes': sp.Popen(os.path.abspath(f'{output_dir}report_vizit.html'), shell=True) -def json_scalar(obj): - if isinstance(obj, np.generic): - return obj.item() - if isinstance(obj, np.ndarray): - return obj.tolist() - raise TypeError(f'Object of type {obj.__class__.__name__} is not JSON serializable') - def preset_wdg(preset, download_full_source=False): ''' Reset widgets and then set them to that specified in input preset diff --git a/postprocessing/bokehpivot/reeds2.py b/postprocessing/bokehpivot/reeds2.py index ea9a46a82..7d8d0da49 100644 --- a/postprocessing/bokehpivot/reeds2.py +++ b/postprocessing/bokehpivot/reeds2.py @@ -1111,49 +1111,8 @@ def net_co2(dfs, **kw): co2['Cumulative CO2e (MMton)'] /= 1e6 return co2 -# health_damages_caused_r.csv is now written with the current 9-column schema -# from postprocessing/air_quality, while these report paths still use the older -# bokehpivot display names downstream. Keep both lists explicit at the boundary. -HEALTH_DAMAGE_SOURCE_COLUMNS = [ - 'rb', 'year', 'e', 'Emissions (thousand metric tons)', - 'model', 'cr', 'Marginal damage ($/metric ton)', - 'Health damages (billion $)', 'Health damages (lives)' -] -HEALTH_DAMAGE_LEGACY_COLUMNS = [ - 'rb', 'st', 'year', 'e', 'Emissions (thousand metric tons)', - 'model', 'cr', 'Marginal damage ($/metric ton)', - 'Health damages (billion $)', 'Health damages (lives)' -] - -def normalize_health_damage_schema(df): - # Accept either current generator headers or legacy report headers, then - # return the legacy names expected by the existing report calculations. - df = df.copy() - df.rename(columns={ - 'ba': 'rb', - 'pollutant': 'e', - 'tons': 'Emissions (thousand metric tons)', - 'md': 'Marginal damage ($/metric ton)', - 'damage_$': 'Health damages (billion $)', - 'mortality': 'Health damages (lives)', - }, inplace=True) - - if 'st' not in df.columns: - # Current health-damage outputs do not include state. Keep a placeholder - # for older bokehpivot paths; derive this from hierarchy if it is used. - df['st'] = df['rb'] if 'rb' in df.columns else '' - - required = HEALTH_DAMAGE_SOURCE_COLUMNS + ['st'] - missing = [col for col in required if col not in df.columns] - if missing: - raise KeyError('health_damages_caused_r.csv missing columns: {}'.format(missing)) - - return df[required] - # function to process health damage estimates def process_health_damage(df, **kw): - df = normalize_health_damage_schema(df) - # convert to billion $ and inflate series df['Health damages (billion $)'] = inflate_series(df['Health damages (billion $)']) * 1e-9 @@ -1176,27 +1135,24 @@ def process_health_damage(df, **kw): rows = product(*allRows.values()) df_all = pd.DataFrame.from_records(rows, columns=allRows.keys()) df_new = df.merge(df_all, how='outer', on=['model', 'cr', 'e', 'rb', 'year']) - df_new['st'] = df_new['st'].ffill() + df_new['st'] = df_new['st'].interpolate(method="ffill") # sort by category and year df_new = df_new.sort_values(['model', 'cr', 'e', 'rb', 'year']) # interpolate any missing values - df_new = df_new.groupby( - ['model', 'cr', 'e', 'rb'], group_keys=False - ).apply(lambda group: group.interpolate(method='ffill')) + df_new = df_new.groupby(['model', 'cr', 'e', 'rb']).apply(lambda group: group.interpolate(method='ffill')) # sum over rb - df_out = df_new.groupby(['model', 'cr', 'e', 'year'])[[ - 'Emissions (thousand metric tons)', 'Health damages (billion $)', - 'Health damages (lives)', 'Discounted health damages (billion $)' - ]].sum().reset_index() + df_out = df_new.groupby(['model', 'cr', 'e', 'year'])[ + 'Emissions (thousand metric tons)', 'Health damages (billion $)', + 'Health damages (lives)', 'Discounted health damages (billion $)' + ].sum().reset_index() # also sum over pollutant - df_poll_agg = df_new.groupby(['model', 'cr', 'year'])[[ - 'Health damages (billion $)', 'Health damages (lives)', - 'Discounted health damages (billion $)' - ]].sum().reset_index() + df_poll_agg = df_new.groupby(['model', 'cr', 'year'])[ + 'Health damages (billion $)', 'Health damages (lives)', 'Discounted health damages (billion $)' + ].sum().reset_index() df_poll_agg.rename(columns={'Health damages (billion $)' : 'Total health damages (billion $)', 'Health damages (lives)' : 'Total health damages (lives)', @@ -1218,9 +1174,7 @@ def process_social_costs(dfs, **kw): system_costs_agg.rename(columns={'Cost (Bil $)' : 'Cost (Bil $)-system', 'Discounted Cost (Bil $)' : 'Discounted Cost (Bil $)-system'}, inplace=True) - health_costs_agg = health_costs.groupby(['year', 'model', 'cr'])[[ - 'Health damages (billion $)', 'Discounted health damages (billion $)' - ]].sum().reset_index() + health_costs_agg = health_costs.groupby(['year', 'model', 'cr'])['Health damages (billion $)', 'Discounted health damages (billion $)'].sum().reset_index() health_costs_agg.rename(columns={'Health damages (billion $)' : 'Cost (Bil $)-health', 'Discounted health damages (billion $)' : 'Discounted Cost (Bil $)-health'}, inplace=True) @@ -2113,10 +2067,7 @@ def pre_spur(dfs, **kw): ('Health Damages from Emissions', {'file':'health_damages_caused_r.csv', - 'columns': HEALTH_DAMAGE_LEGACY_COLUMNS, - # Preserve the CSV's real headers when the current 9-column output is - # present; process_health_damage normalizes the schema before plotting. - 'allow_mismatched_columns': True, + 'columns': ['rb', 'st', 'year', 'e', 'Emissions (thousand metric tons)', 'model', 'cr', 'Marginal damage ($/metric ton)', 'Health damages (billion $)', 'Health damages (lives)'], 'preprocess': [ {'func': process_health_damage, 'args':{}}, ], @@ -2139,9 +2090,7 @@ def pre_spur(dfs, **kw): {'name': 'df_capex_init', 'file': '../inputs_case/df_capex_init.csv'}, {'name': 'sw', 'file': '../inputs_case/switches.csv', 'header':None, 'columns': ['switch', 'value']}, {'name': 'scalars', 'file': '../inputs_case/scalars.csv', 'header':None, 'columns': ['scalar', 'value', 'comment']}, - # See the Health Damages source above: keep current headers intact - # and normalize them inside process_social_costs/process_health_damage. - {'name': 'health_damages', 'file': 'health_damages_caused_r.csv', 'columns': HEALTH_DAMAGE_LEGACY_COLUMNS, 'allow_mismatched_columns': True}, + {'name': 'health_damages', 'file': 'health_damages_caused_r.csv', 'columns': ['rb', 'st', 'year', 'e', 'Emissions (thousand metric tons)', 'model', 'cr', 'Marginal damage ($/metric ton)', 'Health damages (billion $)', 'Health damages (lives)']}, ], 'preprocess': [ {'func': process_social_costs, 'args': {}}, diff --git a/postprocessing/bokehpivot/reeds_bokeh.py b/postprocessing/bokehpivot/reeds_bokeh.py index c4793f34b..105128d2f 100644 --- a/postprocessing/bokehpivot/reeds_bokeh.py +++ b/postprocessing/bokehpivot/reeds_bokeh.py @@ -359,15 +359,7 @@ def get_src(scen, src): if 'transpose' in src and src['transpose'] is True: df_src = df_src.T if 'columns' in src: - if len(df_src.columns) == len(src['columns']): - df_src.columns = src['columns'] - elif not src.get('allow_mismatched_columns', False): - df_src.columns = src['columns'] - else: - # Some newer outputs are normalized in their preprocess functions. - # For those opt-in sources, preserve CSV headers when legacy report - # columns no longer match the generated file width. - pass + df_src.columns = src['columns'] df_src.replace('Eps',0, inplace=True) df_src.replace('Undf',0, inplace=True) df_src = df_src.apply(pd.to_numeric, errors='ignore') @@ -627,4 +619,4 @@ def df_to_lowercase(df): for col in df: if df[col].dtype == object: df[col] = df[col].str.lower() - return df + return df \ No newline at end of file From fc66fd8351881347ea552afff9ecdb4509e9de1d Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Thu, 25 Jun 2026 14:54:08 +0000 Subject: [PATCH 19/46] Add PowerShell bootstrap script and docs Add bootstrap_reeds.ps1 and document its usage in README. The script validates GAMS and Julia (requires Julia 1.12.1), sets ReEDS CONDA-style env vars for the session, ensures Python is pinned to 3.11, runs `uv sync --extra dev` and `julia --project=. instantiate.jl` (unless bypassed), and forwards arguments to `runbatch.py`. README includes a new "Optional PowerShell bootstrap command" section with examples and notes about the `-y/--bypass` option. --- README.md | 34 ++++++++ bootstrap_reeds.ps1 | 190 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 224 insertions(+) create mode 100644 bootstrap_reeds.ps1 diff --git a/README.md b/README.md index 375ba2d9e..3adab77b4 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,7 @@ Instantiate the Julia environment: julia --project=. instantiate.jl ``` + Link large data files from shared folder, so we each don't store separate instances of this ~95GB of input data. Note you cannot do this in git bash as there are some type of strange permission issues, so use powershell: @@ -132,6 +133,32 @@ Several large data files are hosted remotely. These files are downloaded automat Additional details on remote files and other topics can be found in the [user guide](https://reeds-model.github.io/ReEDS/user_guide.html#large-input-files). +### 4.5 Optional PowerShell bootstrap command + +Once you've cloned the repository, you can use an optional PowerShell bootstrap helper to +ensure supporting software is up to date and then immediately run runbatch.py: + +```powershell +.\bootstrap_reeds.ps1 +``` + +This script performs the following steps in order: +1. Verifies GAMS is on PATH, checks GAMS license status, and prints a detected version string. +2. Verifies Julia is on PATH and checks that the version is `1.12.1`. +3. Sets ReEDS environment variables for the current PowerShell session. +4. Checks that Python is pinned to 3.11 and runs `uv python pin 3.11` if needed. +5. Runs `uv sync --extra dev`. +6. Runs `julia --project=. instantiate.jl`. +7. Forwards all arguments to `runbatch.py`. + +Passing `-y` / `--bypass` skips Step 5 (`uv sync --extra dev`) and Step 6 (`julia --project=. instantiate.jl`). +All other checks and setup steps still run, and remaining arguments are still passed to `runbatch.py` + +```powershell +.\bootstrap_reeds.ps1 -y -b v20250314_main -c test +.\bootstrap_reeds.ps1 --bypass -b v20250314_main -c test +``` + ### 5. Run ReEDS ReEDS currently expects Conda-style environment variables. When using UV, set these variables before running ReEDS or ideally in your dotenv file, so you don't ahve to do this before every run. @@ -161,6 +188,13 @@ Run the following for information on other optional command-line arguments: uv run python runbatch.py -h ``` + +PowerShell users can run setup + launch in one command with the bootstrap helper: + +```powershell +.\bootstrap_reeds.ps1 -b v20250314_main -c test +``` + ## Troubleshooting ### GAMS is not found diff --git a/bootstrap_reeds.ps1 b/bootstrap_reeds.ps1 new file mode 100644 index 000000000..dbc70e7ab --- /dev/null +++ b/bootstrap_reeds.ps1 @@ -0,0 +1,190 @@ +<# +Bootstrap script for ReEDS run setup. + +What this script does: +1) Verifies GAMS is on PATH, checks GAMS license status, and prints a detected version string. +2) Verifies Julia is on PATH and exactly version 1.12.1. +3) Sets ReEDS-required CONDA-style environment variables in the current PowerShell session. +4) Checks the project Python pin and runs `uv python pin 3.11` when not pinned to 3.11. +5) Runs `uv sync --extra dev` to ensure the Python environment matches project dependencies (unless bypass mode is enabled). +6) Runs `julia --project=. instantiate.jl` to ensure Julia dependencies are installed (unless bypass mode is enabled). +7) Starts runbatch.py and forwards any arguments passed to this script. + + +Bypass option: + -y, -Bypass, or --bypass + Skips Step 5 (`uv sync --extra dev`) and Step 6 (`julia --project=. instantiate.jl`). + Other checks and setup steps still run, and remaining args are forwarded to runbatch.py. + +Usage examples: + .\bootstrap_reeds.ps1 + .\bootstrap_reeds.ps1 -b v20260625_test -c test + .\bootstrap_reeds.ps1 -y -b v20260625_test -c test + .\bootstrap_reeds.ps1 --bypass -b v20260625_test -c test +#> + +# Accept and forward all remaining command-line args to runbatch.py. +param( + [Alias('y')] + [switch]$Bypass, + + [Parameter(ValueFromRemainingArguments = $true)] + [string[]]$RunbatchArgs +) + +# Copy forwarded args and handle explicit --bypass token if provided. +$ForwardArgs = @($RunbatchArgs) +if ($ForwardArgs -contains '--bypass') { + $Bypass = $true + $ForwardArgs = @($ForwardArgs | Where-Object { $_ -ne '--bypass' }) +} + +# Fail immediately on PowerShell errors so setup issues do not get masked. +$ErrorActionPreference = 'Stop' + +# Run a named step, print progress, and throw on non-zero process exit code. +function Invoke-Step { + param( + [Parameter(Mandatory = $true)] + [scriptblock]$Action, + [Parameter(Mandatory = $true)] + [string]$Description + ) + + Write-Host "[run] $Description" + & $Action + if ($LASTEXITCODE -ne 0) { + throw "Step failed: $Description" + } +} + +# Script is located at repository root, so use script directory as repo root. +$repoRoot = (Resolve-Path $PSScriptRoot).Path + +Write-Host "Using repository root: $repoRoot" + +# Step 1: Verify GAMS is available on PATH, check license status, and print version. +$gamsCmd = Get-Command gams -ErrorAction SilentlyContinue +if (-not $gamsCmd) { + throw 'GAMS executable was not found on PATH. Install GAMS and add it to PATH before running ReEDS.' +} + +$gamsVersionOutput = (& gams 2>&1 | Out-String).Trim() +if ($LASTEXITCODE -ne 0) { + throw "GAMS command failed while checking version. Output:`n$gamsVersionOutput" +} + +$gamsVersion = $null +if ($gamsVersionOutput -match '(?im)\bGAMS\b[^0-9]*([0-9]+(?:\.[0-9]+)+)') { + $gamsVersion = $matches[1] +} + +# Check for the standard GAMS success message that confirms installed license validity. +$gamsLicenseValid = ($gamsVersionOutput -match '(?im)The installed license is valid\.') +if (-not $gamsLicenseValid) { + Write-Warning "GAMS is on PATH, but license validity was not confirmed. Output:`n$gamsVersionOutput" +} + +if ($gamsVersion) { + if ($gamsLicenseValid) { + Write-Host "[ok] GAMS detected on PATH, license valid. Version: $gamsVersion" + } else { + Write-Warning "GAMS detected on PATH. License validity could not be confirmed. Version: $gamsVersion" + } +} else { + $gamsVersionFirstLine = ($gamsVersionOutput -split "`r?`n")[0] + if ($gamsLicenseValid) { + Write-Warning "GAMS detected on PATH with valid license, but version could not be parsed. Output: $gamsVersionFirstLine" + } else { + Write-Warning "GAMS detected on PATH, but license validity and version parsing were not confirmed. Output: $gamsVersionFirstLine" + } +} + +# Step 2: Verify Julia is available on PATH and exactly version 1.12.1. +$expectedJuliaVersion = '1.12.1' +$juliaCmd = Get-Command julia -ErrorAction SilentlyContinue +if (-not $juliaCmd) { + throw 'Julia executable was not found on PATH. Install Julia 1.12.1 and add it to PATH before running ReEDS.' +} + +$juliaVersionOutput = (& julia --version 2>&1 | Out-String).Trim() +if ($LASTEXITCODE -ne 0) { + throw "Julia command failed while checking version. Output:`n$juliaVersionOutput" +} + +if (-not ($juliaVersionOutput -match '(?i)julia version\s+([0-9]+(?:\.[0-9]+){2})')) { + throw "Unable to parse Julia version from output: $juliaVersionOutput" +} + +$juliaVersion = $matches[1] +if ($juliaVersion -ne $expectedJuliaVersion) { + throw "Julia version $juliaVersion detected, but ReEDS expects $expectedJuliaVersion." +} + +Write-Host "[ok] Julia detected on PATH. Version: $juliaVersion" + +# Step 3: Set expected ReEDS env vars in the current shell session. +# These values persist for this shell after script completion. + +# Use the expected top-level virtual environment path. +# On a fresh clone this folder may not exist yet; `uv sync` below will create it. +$venvPath = Join-Path $repoRoot '.venv' +$env:CONDA_DEFAULT_ENV = 'reeds2' +$env:CONDA_PREFIX = $venvPath +Write-Host "[ok] Set CONDA_DEFAULT_ENV=$($env:CONDA_DEFAULT_ENV)" +Write-Host "[ok] Set CONDA_PREFIX=$($env:CONDA_PREFIX)" + +# Step 4: Check whether this repo is pinned to Python 3.11 via .python-version. +$pythonVersionFile = Join-Path $repoRoot '.python-version' +$hasPinned311 = $false +$pinnedPython = $null +if (Test-Path $pythonVersionFile) { + $pinnedPython = (Get-Content $pythonVersionFile -TotalCount 1).Trim() + if ($pinnedPython -match '^3\.11(\.|$)') { + $hasPinned311 = $true + } +} + +# If not already pinned to 3.11, pin it now. +if (-not $hasPinned311) { + if ([string]::IsNullOrWhiteSpace($pinnedPython)) { + Write-Warning 'Python was not already pinned to 3.11 (no .python-version pin found). Pinning now.' + } else { + Write-Warning "Python was pinned to '$pinnedPython' instead of 3.11. Re-pinning now." + } + Invoke-Step -Description 'uv python pin 3.11' -Action { + Set-Location $repoRoot + uv python pin 3.11 + } +} else { + Write-Host '[ok] Python is already pinned to 3.11 in .python-version.' +} + +# Step 5: Run uv sync unless bypass mode is enabled. +if ($Bypass) { + Write-Warning 'Bypass mode enabled: skipping uv sync --extra dev and julia --project=. instantiate.jl.' +} else { + # This is safe and ensures Python deps match lock/project files. + Invoke-Step -Description 'uv sync --extra dev' -Action { + # Run from repo root so uv uses the intended project files. + Set-Location $repoRoot + uv sync --extra dev + } + + # Step 6: Run Julia instantiate every time. + # This is safe and ensures deps match project files. + Invoke-Step -Description 'julia --project=. instantiate.jl' -Action { + Set-Location $repoRoot + julia --project=. instantiate.jl + } +} + +# Step 7: Start ReEDS with any arguments passed to this bootstrap script. +Write-Host '[run] uv run python runbatch.py ...' +Set-Location $repoRoot +uv run python runbatch.py @ForwardArgs +if ($LASTEXITCODE -ne 0) { + throw 'runbatch.py failed.' +} + +Write-Host 'Bootstrap complete.' From 8e0d1887f810e43d9faccafb59e37edd5b6cfc57 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Thu, 25 Jun 2026 15:36:24 +0000 Subject: [PATCH 20/46] Support --skip-setup and streamline bypass Update README and bootstrap_reeds.ps1 to add a --skip-setup alias for the bypass behavior and clarify docs. The PowerShell script now uses a -y switch ($y) to represent bypass mode (avoiding collisions with runbatch options), recognizes both --bypass and --skip-setup tokens, removes them from forwarded args, and adjusts logic to check $y when skipping uv sync and Julia instantiate. Minor wording updates were made to the README to document the new alias. --- README.md | 2 +- bootstrap_reeds.ps1 | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 3adab77b4..b0dcee494 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,7 @@ This script performs the following steps in order: 6. Runs `julia --project=. instantiate.jl`. 7. Forwards all arguments to `runbatch.py`. -Passing `-y` / `--bypass` skips Step 5 (`uv sync --extra dev`) and Step 6 (`julia --project=. instantiate.jl`). +Passing `-y` (or `--skip-setup` / `--bypass`) skips Step 5 (`uv sync --extra dev`) and Step 6 (`julia --project=. instantiate.jl`). All other checks and setup steps still run, and remaining arguments are still passed to `runbatch.py` ```powershell diff --git a/bootstrap_reeds.ps1 b/bootstrap_reeds.ps1 index dbc70e7ab..93ce26086 100644 --- a/bootstrap_reeds.ps1 +++ b/bootstrap_reeds.ps1 @@ -11,8 +11,8 @@ What this script does: 7) Starts runbatch.py and forwards any arguments passed to this script. -Bypass option: - -y, -Bypass, or --bypass +BYPASS option: + -y, --skip-setup, or --bypass Skips Step 5 (`uv sync --extra dev`) and Step 6 (`julia --project=. instantiate.jl`). Other checks and setup steps still run, and remaining args are forwarded to runbatch.py. @@ -25,19 +25,22 @@ Usage examples: # Accept and forward all remaining command-line args to runbatch.py. param( - [Alias('y')] - [switch]$Bypass, + [switch]$y, # Bypass mode for skipping uv sync and Julia instantiate. We use y to prevent collision with runbatch options. [Parameter(ValueFromRemainingArguments = $true)] [string[]]$RunbatchArgs ) -# Copy forwarded args and handle explicit --bypass token if provided. +# Copy forwarded args and handle explicit bypass tokens if provided. $ForwardArgs = @($RunbatchArgs) if ($ForwardArgs -contains '--bypass') { - $Bypass = $true + $y = $true $ForwardArgs = @($ForwardArgs | Where-Object { $_ -ne '--bypass' }) } +if ($ForwardArgs -contains '--skip-setup') { + $y = $true + $ForwardArgs = @($ForwardArgs | Where-Object { $_ -ne '--skip-setup' }) +} # Fail immediately on PowerShell errors so setup issues do not get masked. $ErrorActionPreference = 'Stop' @@ -161,7 +164,7 @@ if (-not $hasPinned311) { } # Step 5: Run uv sync unless bypass mode is enabled. -if ($Bypass) { +if ($y) { Write-Warning 'Bypass mode enabled: skipping uv sync --extra dev and julia --project=. instantiate.jl.' } else { # This is safe and ensures Python deps match lock/project files. From 839952951597f4b1c52bfda4edf1df6d12c664a4 Mon Sep 17 00:00:00 2001 From: ty-fi <95767834+ty-fi@users.noreply.github.com> Date: Thu, 25 Jun 2026 12:09:39 -0400 Subject: [PATCH 21/46] Minor readability edits to readme and bootstrap Added some clarifying comments to bootstrap, trimmed some whitespace from readme --- README.md | 2 -- bootstrap_reeds.ps1 | 6 +++++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b0dcee494..e6ad451fe 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,6 @@ Instantiate the Julia environment: julia --project=. instantiate.jl ``` - Link large data files from shared folder, so we each don't store separate instances of this ~95GB of input data. Note you cannot do this in git bash as there are some type of strange permission issues, so use powershell: @@ -188,7 +187,6 @@ Run the following for information on other optional command-line arguments: uv run python runbatch.py -h ``` - PowerShell users can run setup + launch in one command with the bootstrap helper: ```powershell diff --git a/bootstrap_reeds.ps1 b/bootstrap_reeds.ps1 index 93ce26086..2652bfaae 100644 --- a/bootstrap_reeds.ps1 +++ b/bootstrap_reeds.ps1 @@ -23,6 +23,8 @@ Usage examples: .\bootstrap_reeds.ps1 --bypass -b v20260625_test -c test #> +# Initializing functions and variables for this script. + # Accept and forward all remaining command-line args to runbatch.py. param( [switch]$y, # Bypass mode for skipping uv sync and Julia instantiate. We use y to prevent collision with runbatch options. @@ -182,6 +184,8 @@ if ($y) { } } +Write-Host 'Bootstrap complete. Starting ReEDS runbatch.py with forwarded arguments...' + # Step 7: Start ReEDS with any arguments passed to this bootstrap script. Write-Host '[run] uv run python runbatch.py ...' Set-Location $repoRoot @@ -190,4 +194,4 @@ if ($LASTEXITCODE -ne 0) { throw 'runbatch.py failed.' } -Write-Host 'Bootstrap complete.' + From 1d0575088992c90d79e6d91d869949afaf622e81 Mon Sep 17 00:00:00 2001 From: Jeffrey Sward Date: Mon, 6 Jul 2026 17:10:55 +0000 Subject: [PATCH 22/46] Minor updates to readme and cases file --- README.md | 6 +++--- cases_cepm.csv | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 2c0909058..bf7c78908 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,7 @@ Link large data files from shared folder, so we each don't store separate instan there are some type of strange permission issues, so use powershell: ```powershell -New-Item -ItemType Junction -Path ".inputs\remote" -Target "C:\Users\Public\Documents\reeds_data\remote" +New-Item -ItemType Junction -Path ".\inputs\remote" -Target "C:\Users\Public\Documents\reeds_data\remote" ``` Several large data files are hosted remotely. These files are downloaded automatically as needed during a ReEDS run, but the command above finishes all internet-requiring steps up front. @@ -142,10 +142,10 @@ uv run python runbatch.py For one-line operation: ```bash -uv run python runbatch.py -b v20250314_main -c test +uv run python runbatch.py -b v20260605 -c cepm ``` -In this example, `v20250314_main` is the prefix for this batch of cases, and `test` is the suffix of the cases file, in this case `cases_test.csv`, located in the root of the repository. For the batch prefix, we should follow the convention `vYYYYMMDD_`, and note that the case ID from the cases file will be appended to the batch prefix for file naming purposes. Our cases are stored in the `cases_cepm.csv` file. +In this example, `v20260605` is the prefix for this batch of cases, and `cepm` is the suffix of the cases file, in this case `cases_cepm.csv`, located in the root of the repository. For the batch prefix, we should follow the convention `vYYYYMMDD`, and note that the case ID from the cases file will be appended to the batch prefix for file naming purposes (e.g., `WECC_county_100by2050`). Run the following for information on other optional command-line arguments: diff --git a/cases_cepm.csv b/cases_cepm.csv index fbf431203..f181f1023 100644 --- a/cases_cepm.csv +++ b/cases_cepm.csv @@ -1,7 +1,7 @@ -,Default Value,github_MA_county_CC,CO_county_IRAlow,CO_county_100by2050,WECC_county,WECC_county_100by2050,PJM_county_CC,NYVT_mixed +,Default Value,github_MA_county_CC,CO_county_IRAlow,CO_county_100by2050,WECC_county,East_134,PJM_county_CC,NYVT_mixed ignore,1,1,1,1,1,0,1,1 -GSw_Region,cendiv/Pacific,st/MA,st/CO,st/CO,interconnect/western,interconnect/western,transreg/PJM,st/NY.VT -GSw_ZoneSet,,z3109,z3109,z3109,z3109,z3109,z3109,PJMcounty +GSw_Region,cendiv/Pacific,st/MA,st/CO,st/CO,interconnect/western,interconnect/eastern,transreg/PJM,st/NY.VT +GSw_ZoneSet,,z3109,z3109,z3109,z3109,z134,z3109,PJMcounty endyear,2032,2026,,,,,, yearset,,,,,,,, GSw_GasCurve,2,,,,,,, @@ -12,7 +12,7 @@ GSw_TransHurdleRate,,,,,,,, distpvscen,,,,,,,, GSw_AnnualCap,,,,,,,, GSw_AnnualCapScen,,,,,,,, -GSw_LoadProfiles,,EER2025_IRAlow,,EER2025_100by2050,,EER2025_100by2050,, +GSw_LoadProfiles,,EER2025_IRAlow,,EER2025_100by2050,,,, GSw_NG_CRF_penalty,,,,,,,, GSw_PRM_NetImportLimit,,,,,,,, GSw_RetirePenalty,,,,,,,, From c281ac661836a5168009a2e7f21e23d216caf689 Mon Sep 17 00:00:00 2001 From: Jeff Sward <36770942+jeffreysward@users.noreply.github.com> Date: Mon, 6 Jul 2026 11:39:33 -0600 Subject: [PATCH 23/46] Add review notice for README updates Added a note indicating that the README needs review due to recent changes in the upstream ReEDS base. --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 8d3356454..b14ad5e5c 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,12 @@ ![GitHub License](https://img.shields.io/github/license/ReEDS-Model/ReEDS) [![DOI](https://zenodo.org/badge/189060033.svg)](https://doi.org/10.5281/zenodo.16943302) +**Needs review:** this repo was recently rebased onto a restructured upstream +ReEDS base, and this README has not yet been fully verified against it. Known +stale reference: instructions below say `runbatch.py`, which has been renamed +to `runreeds.py` upstream. Treat setup/run instructions as unverified pending +review. Flagging for follow-up via issue/comment. + This GitHub repository contains the source code for NLR's ReEDS model. The ReEDS model source code is available at no cost from the National Laboratory of the Rockies. From 5cf398114060fb05c5f798f496bae7b29bc60d99 Mon Sep 17 00:00:00 2001 From: Jeff Sward <36770942+jeffreysward@users.noreply.github.com> Date: Mon, 6 Jul 2026 11:40:12 -0600 Subject: [PATCH 24/46] Add review note and highlight stale references in AGENTS.md Added a review note regarding the recent rebase and the need for verification against the new package layout. Highlighted known stale references and flagged for follow-up. --- AGENTS.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index a540433a6..665c0eca1 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,5 +1,14 @@ # ReEDS Agent Guide +**Needs review:** this repo was recently rebased onto a restructured upstream +ReEDS base (see git history around 2026-06). This file was written against the +pre-restructure layout and has not yet been fully verified against the new +`reeds/` package layout. Known stale references: `runbatch.py` throughout this +file should be `runreeds.py`; `Augur.py` is now `reeds/resource_adequacy/ra_calcs.py`; +`e_report.gms` is now `reeds/core/terminus/report.gms`; `input_processing/` now +lives under `reeds/input_processing/`. Treat the rest of this file as unverified +pending a full pass. Flagging for follow-up via issue/comment. + ReEDS is a capacity planning and dispatch model for the U.S. electricity system. The repository is a mixed Python, GAMS, and Julia codebase: Python prepares inputs, orchestrates runs, and postprocesses outputs; GAMS contains the optimization model; From 5e680c361b162079d82bcf6848b4cfd3ddd9dee4 Mon Sep 17 00:00:00 2001 From: Jeff Sward <36770942+jeffreysward@users.noreply.github.com> Date: Mon, 6 Jul 2026 11:41:49 -0600 Subject: [PATCH 25/46] Document known issues and review status in script Add review notes and known issues for script verification. --- bootstrap_reeds.ps1 | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/bootstrap_reeds.ps1 b/bootstrap_reeds.ps1 index 2652bfaae..2851e90a5 100644 --- a/bootstrap_reeds.ps1 +++ b/bootstrap_reeds.ps1 @@ -21,6 +21,15 @@ Usage examples: .\bootstrap_reeds.ps1 -b v20260625_test -c test .\bootstrap_reeds.ps1 -y -b v20260625_test -c test .\bootstrap_reeds.ps1 --bypass -b v20260625_test -c test + + +NEEDS REVIEW: this script was written against the pre-restructure repo layout +and has not yet been fully verified against the current upstream base. Known +issues: (1) Step 7 below calls `runbatch.py`, which has been renamed to +`runreeds.py` upstream; (2) `uv sync --extra dev` in Step 5 currently has no +root pyproject.toml to sync against (see version-control/package-management +cleanup). Do not rely on this script until those are fixed. Flagging for +follow-up via issue/comment. #> # Initializing functions and variables for this script. From a478e1f2afda40c9c1f4d605de80fabc0c5c9744 Mon Sep 17 00:00:00 2001 From: Jeff Sward <36770942+jeffreysward@users.noreply.github.com> Date: Mon, 6 Jul 2026 11:45:27 -0600 Subject: [PATCH 26/46] Refactor pyproject.toml to simplify dependencies Updated optional dependencies to include only 'docs' with sphinx and myst-parser. --- hourlize/pyproject.toml | 102 ++++------------------------------------ 1 file changed, 9 insertions(+), 93 deletions(-) diff --git a/hourlize/pyproject.toml b/hourlize/pyproject.toml index 01c092d68..cf7df7763 100644 --- a/hourlize/pyproject.toml +++ b/hourlize/pyproject.toml @@ -1,101 +1,17 @@ -[build-system] -requires = ["setuptools>=68", "wheel"] -build-backend = "setuptools.build_meta" +[tool.black] +include = ''' +( + hourlize/tests/.*\.py?$ + | hourlize/reeds_to_rev\.py?$ +) +''' [project] name = "ReEDS" version = "2024.0.0" -requires-python = "==3.11.*" -description = "ReEDS-2.0 Python environment managed with uv" -readme = "README.md" -dependencies = [ - "bokeh==3.2.*", - "click==8.0.*", - "gitpython==3.1.*", - "h5py==3.9.*", - "matplotlib==3.7.*", - "numpy==1.26.*", - "openpyxl==3.0.*", - "pandas==2.0.*", - "tables==3.11.1", - "pytest==7.4.*", - "requests==2.31.*", - "scikit-learn==1.2.*", - "scipy==1.11.*", - "tqdm==4.65.*", - "cmocean==3.0.3", - "gdxpds==1.4.0", - "geopandas==0.14.0", - "pulp==2.7.0", - "shapely==2.0.1", - # etoolbox provides a number of useful tools for working with data. It also includes - # functions and infrastructure for accessing PUDL data stored on GCS so the sqlite - # database is not requried - "rmi.etoolbox @ git+https://github.com/rmi/etoolbox.git", -] [project.optional-dependencies] -interactive = [ - "ipykernel==6.25.*", - "ipywidgets==8.0.*", - "notebook==6.5.*", -] - -maps = [ - "fiona==1.9.5", - "folium==0.14.0", - "mapclassify==2.5.*", - "pyproj==3.6.1", -] - docs = [ - "sphinx==7.2.6", - "myst-parser==2.0.0", - "sphinx-rtd-theme==2.0.0", - "sphinxcontrib-bibtex==2.6.2", -] - -reporting = [ - "python-pptx==0.6.22", -] - -network = [ - "networkx==3.1.*", -] - -testing = [ - "gamspy-base==50.5.0", -] - -dev = [ - "ipykernel==6.25.*", - "ipywidgets==8.0.*", - "notebook==6.5.*", - "fiona==1.9.5", - "folium==0.14.0", - "mapclassify==2.5.*", - "pyproj==3.6.1", - "sphinx==7.2.6", - "myst-parser==2.0.0", - "sphinx-rtd-theme==2.0.0", - "sphinxcontrib-bibtex==2.6.2", - "python-pptx==0.6.22", - "networkx==3.1.*", - "gamspy-base==50.5.0", + "sphinx", + "myst-parser", ] - -[tool.setuptools] -include-package-data = true - -[tool.setuptools.packages.find] -where = ["."] -include = ["hourlize*", "ReEDS_Augur*", "input_processing*"] -exclude = ["inputs*"] - -[tool.black] -include = ''' -( - hourlize/tests/.*\.py?$ - | hourlize/reeds_to_rev\.py?$ -) -''' From 4426d9a1bd3214e31f0a08faf957a5d34da176cf Mon Sep 17 00:00:00 2001 From: Jeff Sward <36770942+jeffreysward@users.noreply.github.com> Date: Mon, 6 Jul 2026 11:47:23 -0600 Subject: [PATCH 27/46] Add pyproject.toml for project configuration --- pyproject.toml | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..b8fac1ad2 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,94 @@ +[build-system] +requires = ["setuptools>=68", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "ReEDS" +version = "2024.0.0" +requires-python = "==3.11.*" +description = "ReEDS-2.0 Python environment managed with uv" +readme = "README.md" +dependencies = [ + "bokeh==3.2.*", + "click==8.0.*", + "gitpython==3.1.*", + "h5py==3.9.*", + "matplotlib==3.7.*", + "numpy==1.26.*", + "openpyxl==3.0.*", + "pandas==2.0.*", + "tables==3.11.1", + "pytest==7.4.*", + "requests==2.31.*", + "scikit-learn==1.2.*", + "scipy==1.11.*", + "tqdm==4.65.*", + "cmocean==3.0.3", + "gdxpds==1.4.0", + "geopandas==0.14.0", + "pulp==2.7.0", + "shapely==2.0.1", + "pyyaml==6.0.*", + # etoolbox provides a number of useful tools for working with data. It also includes + # functions and infrastructure for accessing PUDL data stored on GCS so the sqlite + # database is not requried + "rmi.etoolbox @ git+https://github.com/rmi/etoolbox.git", +] + +[project.optional-dependencies] +interactive = [ + "ipykernel==6.25.*", + "ipywidgets==8.0.*", + "notebook==6.5.*", +] + +maps = [ + "fiona==1.9.5", + "folium==0.14.0", + "mapclassify==2.5.*", + "pyproj==3.6.1", +] + +docs = [ + "sphinx==7.2.6", + "myst-parser==2.0.0", + "sphinx-rtd-theme==2.0.0", + "sphinxcontrib-bibtex==2.6.2", +] + +reporting = [ + "python-pptx==0.6.22", +] + +network = [ + "networkx==3.1.*", +] + +testing = [ + "gamspy-base==50.5.0", +] + +dev = [ + "ipykernel==6.25.*", + "ipywidgets==8.0.*", + "notebook==6.5.*", + "fiona==1.9.5", + "folium==0.14.0", + "mapclassify==2.5.*", + "pyproj==3.6.1", + "sphinx==7.2.6", + "myst-parser==2.0.0", + "sphinx-rtd-theme==2.0.0", + "sphinxcontrib-bibtex==2.6.2", + "python-pptx==0.6.22", + "networkx==3.1.*", + "gamspy-base==50.5.0", +] + +[tool.setuptools] +include-package-data = true + +[tool.setuptools.packages.find] +where = ["."] +include = ["hourlize*", "reeds*"] +exclude = ["inputs*"] From aeb62874c2b9d15206ed1ba62fa313173ab0f1c7 Mon Sep 17 00:00:00 2001 From: Jeff Sward <36770942+jeffreysward@users.noreply.github.com> Date: Mon, 6 Jul 2026 11:49:21 -0600 Subject: [PATCH 28/46] Add pyyaml to dependencies in uv.lock --- uv.lock | 2 ++ 1 file changed, 2 insertions(+) diff --git a/uv.lock b/uv.lock index 03e4691e5..7f775e22a 100644 --- a/uv.lock +++ b/uv.lock @@ -2120,6 +2120,7 @@ dependencies = [ { name = "pandas" }, { name = "pulp" }, { name = "pytest" }, + { name = "pyyaml" }, { name = "requests" }, { name = "rmi-etoolbox" }, { name = "scikit-learn" }, @@ -2210,6 +2211,7 @@ requires-dist = [ { name = "pytest", specifier = "==7.4.*" }, { name = "python-pptx", marker = "extra == 'dev'", specifier = "==0.6.22" }, { name = "python-pptx", marker = "extra == 'reporting'", specifier = "==0.6.22" }, + { name = "pyyaml", specifier = "==6.0.*" }, { name = "requests", specifier = "==2.31.*" }, { name = "rmi-etoolbox", git = "https://github.com/rmi/etoolbox.git" }, { name = "scikit-learn", specifier = "==1.2.*" }, From 19fa4c5c1ea299a8f030ca00eccd11b115860662 Mon Sep 17 00:00:00 2001 From: Jeff Sward <36770942+jeffreysward@users.noreply.github.com> Date: Mon, 6 Jul 2026 11:52:51 -0600 Subject: [PATCH 29/46] Restore old environment.yml From 038178115835f72ed7fc59a4673bed9b9a1a82b2 Mon Sep 17 00:00:00 2001 From: Jeff Sward <36770942+jeffreysward@users.noreply.github.com> Date: Mon, 6 Jul 2026 11:55:50 -0600 Subject: [PATCH 30/46] Create environment.yml for project dependencies --- environment.yml | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 environment.yml diff --git a/environment.yml b/environment.yml new file mode 100644 index 000000000..c0161fcbe --- /dev/null +++ b/environment.yml @@ -0,0 +1,50 @@ +name: reeds2 +channels: + - defaults + - conda-forge +dependencies: + - python=3.11 + - bokeh=3.2 + - click=8.0 + - git-lfs=2.13 + - gitpython=3.1 + - h5py=3.9 + - matplotlib=3.7 + - numpy=1.26 + - openpyxl=3.0 + - pandas=2.0 + - pip=23.2 + - pytables=3.8 + - pytest=7.4 + - requests=2.31 + - scikit-learn=1.2 + - scipy=1.11 + - tqdm=4.65 + ## vvv The next packages are optional for default settings and may + ## vvv be excluded if you're having trouble building the environment. + - ipykernel=6.25 # for interactive python in VS Code + - ipywidgets=8.0 # for jupyter notebooks + - mapclassify=2.5 # more mapping tools + - mscorefonts=0.0 # extra fonts for plotting (only relevant on linux/HPC) + - networkx=3.1 # for uncommonly-used network analysis postprocessing + - notebook=6.5 # for jupyter notebooks + ## ^^^ + - pip: + - cmocean==3.0.3 + - gdxpds==1.4.0 + - geopandas==0.14.0 + - pulp==2.7.0 + - shapely==2.0.1 + ## vvv The next packages are optional for default settings and may + ## vvv be excluded if they cause trouble building the environment. + - fiona==1.9.5 # for interactive maps + - folium==0.14.0 # for interactive maps + - gamspy_base==50.5.0 # for tests on the github runner + - myst-parser==2.0.0 # for building documentation + - proj==0.2.0 # for plotting maps + - pyproj==3.6.1 # for plotting maps + - python-pptx==0.6.22 # for postprocessing/compare_cases.py + - sphinx_rtd_theme==2.0.0 # for documentation + - sphinx==7.2.6 # for building documentation + - sphinxcontrib-bibtex==2.6.2 # for documentation + ## ^^^ From b8341d5e53683cfa3d08d5bda481b066551cd333 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Tue, 7 Jul 2026 17:28:04 +0000 Subject: [PATCH 31/46] Add uv/conda dependency mapping guide Add `UV_MAMBA_GUIDE.md` documenting how to manually keep `environment.yml` and `pyproject.toml`/`uv.lock` aligned. The guide covers field-by-field mapping, add/remove dependency workflow, lockfile regeneration, and known non-1:1 cases (non-Python packages, pin semantics, git-based deps). It also flags current repo caveats, including stale path references from the recent restructure and that `environment.yml` is currently missing on this branch. --- UV_MAMBA_GUIDE.md | 67 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 UV_MAMBA_GUIDE.md diff --git a/UV_MAMBA_GUIDE.md b/UV_MAMBA_GUIDE.md new file mode 100644 index 000000000..cc71684fd --- /dev/null +++ b/UV_MAMBA_GUIDE.md @@ -0,0 +1,67 @@ +**Needs review:** this repo was recently rebased onto a restructured upstream +ReEDS base (see git history around 2026-06). This file was written against the +pre-restructure layout and has not yet been fully verified against the new +`reeds/` package layout. Known stale references: `runbatch.py` throughout this +file should be `runreeds.py`; `Augur.py` is now `reeds/resource_adequacy/ra_calcs.py`; +`e_report.gms` is now `reeds/core/terminus/report.gms`; `input_processing/` now +lives under `reeds/input_processing/`. Treat the rest of this file as unverified +pending a full pass. Flagging for follow-up via issue/comment. + +# Translating between `environment.yml` (mamba/conda) and `pyproject.toml`/`uv.lock` (uv) + +This repo keeps both, per the decision to keep `environment.yml` as the +upstream-compatible fallback and `pyproject.toml`/`uv.lock` as RMI's primary +path (see `pyproject.toml` at repo root and `dev`'s `environment.yml`). +Whenever one changes, the other should be updated by hand — there's no +automatic converter, so this is a manual mapping. + +## Structural mapping + +| environment.yml | pyproject.toml | Notes | +|---|---|---| +| `name: reeds2` | `[project] name = "ReEDS"` | Names don't have to match; conda's is the env name, uv's is the package/distribution name. | +| `dependencies: - python=3.11` | `[project] requires-python = "==3.11.*"` | Also mirrored in `.python-version` (`3.11`). | +| `dependencies:` (conda channel packages, no `pip:` block) | `[project] dependencies = [...]` | Top-level conda deps → top-level uv deps. | +| `dependencies: - pip: - ...` (the nested pip list) | `[project] dependencies = [...]` | Conda draws a line between conda-channel and pip-installed packages; uv doesn't — everything just goes in one `dependencies` list. | +| Comment-delimited "optional" blocks (`## vvv ... ## ^^^`) | `[project.optional-dependencies]` groups (`interactive`, `maps`, `docs`, `reporting`, `network`, `testing`, `dev`) | conda has no native optional-group syntax, so mvp used a comment convention. uv has real extras — prefer putting new optional packages in the right extras group instead of a top-level comment block. | +| version pins like `bokeh=3.2` | `"bokeh==3.2.*"` | conda's single `=` is a "starts with" match; uv/pip needs `==` plus an explicit `.*` to get the same "any patch version" behavior. | +| N/A | `dev = [...]` group | uv's `dev` extra is just a bundle of the others (currently duplicates `interactive` + `maps` + `docs` + `reporting` + `network` + `testing`). Keep it in sync manually — there's no "include another extra" syntax in this pyproject's toml version. | + +## Adding a new dependency + +1. **Figure out where it's used.** Is it a hard runtime dependency (imported directly in `reeds/`, `hourlize/`, or `runreeds.py`) or something only needed for docs/interactive/testing? +2. **Add it to `environment.yml`:** + - If it's on conda-forge/defaults, add it as a top-level line under `dependencies:` with a conda-style pin (`package=X.Y`). + - If it's pip-only, add it under the nested `pip:` list with a `==X.Y.Z` pin. + - If it's optional, put it inside the commented `## vvv ... ## ^^^` block (top-level optional) or the nested pip optional block. +3. **Add it to `pyproject.toml`:** + - Hard dependency → `[project.dependencies]`, using `==X.Y.*` (or an exact pin if you want to match conda's pin precisely). + - Optional → the matching `[project.optional-dependencies]` group, **and** add it to the `dev` group too if `dev` is supposed to be "everything." +4. **Regenerate the lockfile:** `uv lock` (or `uv sync --extra dev` if you also want your local venv updated). Don't hand-edit `uv.lock`. +5. **Sanity-check both paths still work:** + - `uv sync --extra dev && uv run python runreeds.py -h` + - `mamba env update -f environment.yml` (or recreate the env) if you're validating the conda side too. + +## Removing a dependency + +Same as above in reverse — pull it from both files, then `uv lock` to drop it (and anything only it depended on) from `uv.lock`. + +## Things that don't map 1:1 + +- **Non-Python packages.** `environment.yml` has `git-lfs=2.13` and `mscorefonts=0.0` — these aren't pip-installable and have no uv equivalent. They just don't appear in `pyproject.toml`; document them in setup docs instead. +- **`pip` itself and its version.** conda pins `pip=23.2` as a bootstrap tool; uv manages its own resolver, so this has no uv equivalent either. +- **Exact vs. fuzzy pins.** conda's `package=X.Y` conventionally means "X.Y.* is fine"; the uv side in this repo mostly uses explicit `==X.Y.*` to match that intent, but a few packages (`tables`, `gdxpds`, `geopandas`, `pulp`, `shapely`, `cmocean`) are pinned to an exact patch version in `pyproject.toml` where conda only pins minor. If you tighten/loosen a pin on one side, consider whether the other side should match. +- **Git-sourced packages.** `rmi.etoolbox @ git+https://github.com/rmi/etoolbox.git` in `pyproject.toml` has no equivalent line in `environment.yml` yet — conda's `pip:` block *can* take a `git+https://...` URL the same way, so if `environment.yml` needs to stay fully equivalent, add a matching line there. + +## Known pre-existing gaps (not introduced by this cleanup, not yet fixed) + +A few packages are imported directly in `postprocessing/` (`jinja2`, `loguru`, `lxml`, `seaborn`, `six`) but aren't declared as explicit dependencies in *either* file — they currently work only because something else pulls them in transitively. This gap already exists on the `dev`/upstream base itself, independent of the RMI rebase, so it wasn't in scope for the pyproject.toml restoration. Worth its own follow-up if these ever stop being transitively satisfied. + +## Note: `environment.yml` is currently missing from this branch + +The "keep both" decision assumes `environment.yml` exists alongside +`pyproject.toml`, but it was deleted by the mvp-branch commit that introduced +uv (`801ae3eb`, "changes to pyproject toml for UV, removed environment.yml +and added python version") and that deletion is still in effect on this +branch. `dev` still has it. Until it's restored from `dev`, this guide +describes a mapping that only exists on one side. From 1f6da860d94de664e92ec75c024eb928471568c3 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Tue, 7 Jul 2026 18:28:58 +0000 Subject: [PATCH 32/46] Align CEPM docs and bootstrap with runreeds Updates repository guidance after the upstream restructure by replacing stale `runbatch.py` and old path references with current `runreeds.py`/`reeds/...` locations across AGENTS and README content. Moves CEPM-specific docs into `CEPM/` and updates references accordingly. Renames the PowerShell bootstrap script to `bootstrap_CEPM.ps1`, updates its usage/help text, and adds a native-command wrapper so stderr noise from tools like `uv`/`julia`/`gams` does not cause false failures under Windows PowerShell with `$ErrorActionPreference='Stop'`. --- AGENTS.md | 166 ++++++++++++-------- UV_MAMBA_GUIDE.md => CEPM/UV_MAMBA_GUIDE.md | 25 ++- {docs => CEPM}/internal-ci-testing.md | 10 +- README.md | 26 ++- bootstrap_reeds.ps1 => bootstrap_CEPM.ps1 | 64 +++++--- 5 files changed, 164 insertions(+), 127 deletions(-) rename UV_MAMBA_GUIDE.md => CEPM/UV_MAMBA_GUIDE.md (82%) rename {docs => CEPM}/internal-ci-testing.md (91%) rename bootstrap_reeds.ps1 => bootstrap_CEPM.ps1 (79%) diff --git a/AGENTS.md b/AGENTS.md index 665c0eca1..2c0986231 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,19 +1,14 @@ # ReEDS Agent Guide -**Needs review:** this repo was recently rebased onto a restructured upstream -ReEDS base (see git history around 2026-06). This file was written against the -pre-restructure layout and has not yet been fully verified against the new -`reeds/` package layout. Known stale references: `runbatch.py` throughout this -file should be `runreeds.py`; `Augur.py` is now `reeds/resource_adequacy/ra_calcs.py`; -`e_report.gms` is now `reeds/core/terminus/report.gms`; `input_processing/` now -lives under `reeds/input_processing/`. Treat the rest of this file as unverified -pending a full pass. Flagging for follow-up via issue/comment. - ReEDS is a capacity planning and dispatch model for the U.S. electricity system. The repository is a mixed Python, GAMS, and Julia codebase: Python prepares inputs, orchestrates runs, and postprocesses outputs; GAMS contains the optimization model; Julia translates solved ReEDS systems into PRAS resource adequacy systems. +This repo was restructured upstream so that most Python and GAMS source now lives +inside the `reeds/` package (the old flat repo-root layout is gone). The main +orchestrator is `runreeds.py` (formerly `runbatch.py`). + Use this file as the first stop for agent orientation. Deeper references: - @README.md: repository overview, installation entry points, and basic run @@ -29,47 +24,75 @@ Use this file as the first stop for agent orientation. Deeper references: ## Project Structure -- `runbatch.py`: main run orchestrator. Reads `cases*.csv`, creates - `runs/{BatchName}_{case}/`, writes scripts, copies needed code/data into the - case folder, and launches local, HPC, or AWS runs. +- `runreeds.py`: main run orchestrator (repo root). Reads `cases*.csv`, creates + `runs/{BatchName}_{case}/`, writes per-case run scripts, copies needed + code/data into the case folder, and launches local or HPC (SLURM) runs. - `cases.csv`: canonical case/switch catalog, with descriptions, allowed values, - and defaults. Scenario files such as `cases_test.csv`, `cases_small.csv`, and - study-specific `cases_{suffix}.csv` override defaults by case column. -- `runfiles.csv`: inventory of input files and how they should be copied, - filtered, aggregated, or transformed into each run's `inputs_case/`. -- Root `*.gms`: core GAMS model files. Important stages include `b_inputs.gms` - for GAMS-readable inputs, `c_supplymodel.gms` and `c_supplyobjective.gms` for - model equations/objective, `d_solveprep.gms`, `d_solveoneyear.gms`, - `d_solveallyears.gms`, `d_solvewindow.gms`, and `e_report.gms`. -- `input_processing/`: scripts run during case setup to create files under + and defaults. Scenario files such as `cases_test.csv`, `cases_small.csv`, + `cases_cepm.csv`, and study-specific `cases_{suffix}.csv` override defaults by + case column. +- `reeds/`: the main Python package. Top-level modules include `reeds.io`, + `reeds.inputs`, `reeds.spatial`, `reeds.techs`, `reeds.log`, `reeds.checks`, + `reeds.financials`, `reeds.results`, `reeds.timeseries`, `reeds.units`, + `reeds.remote`, and plotting modules (`reeds.plots`, `reeds.reedsplots`, + `reeds.prasplots`). +- `reeds/core/`: the GAMS model and its solve orchestration, grouped by stage: + - `reeds/core/setup/`: model assembly. `a_createmodel.gms` is the top-level + assembler and `$include`s, in order, `b_inputs.gms` (GAMS-readable inputs) → + `c_model.gms` (variables/equations) → `d_objective.gms` (objective) → + `d_mga.gms` → `e_solveprep.gms`. + - `reeds/core/solve/`: solve drivers. `solve.py` is the Python solve wrapper; + `3_solve_oneyear.gms`, `3_solve_allyears.gms`, and `3_solve_window.gms` + correspond to `timetype` `seq`, `int`, and `win`. Also `1_tc_phaseout.py`, + `2_financials.gms`, `2_temporal_params.gms`, `4_post_solve_adjustments.gms`, + `5_varfix.gms`, `6_data_dump.gms`. + - `reeds/core/solve_pcm/`: production-cost-model solve (`solve_pcm.gms`, + `unfix_op.gms`). + - `reeds/core/terminus/`: reporting. `report.gms` is the main report, + `report_dump.py` dumps report parameters, `report_params.csv` lists the + reported parameters, plus `dump_alldata.gms`, `powfrac_calc.gms`, + `get_last_iter.py`. +- `reeds/input_processing/`: scripts run during case setup to create files under `runs/{case}/inputs_case/`. `copy_files.py` is the broad data copier/filter; scripts such as `recf.py`, `hourly_repperiods.py`, `hourly_load.py`, - `writecapdat.py`, `plantcostprep.py`, and `transmission.py` derive key inputs. -- `reeds/`: shared Python utilities. Common entry points are `reeds.io`, - `reeds.inputs`, `reeds.spatial`, `reeds.techs`, `reeds.log`, - `reeds.output_calc`, and plotting modules. -- `ReEDS_Augur/` and `Augur.py`: capacity credit, PRAS, and stress-period logic - that runs between solve years when enabled. -- `reeds2pras/`: Julia package for translating ReEDS outputs to PRAS systems. + `writecapdat.py`, `plantcostprep.py`, `transmission.py`, and `check_inputs.py` + derive key inputs. `runfiles.csv` (the input-file inventory: how each file is + copied, filtered, aggregated, or transformed into `inputs_case/`) lives here. +- `reeds/resource_adequacy/`: capacity credit, PRAS, and stress-period logic that + runs between solve years when enabled. `ra_calcs.py` (formerly `Augur.py`) is + the entry point; also `capacity_credit.py`, `stress_periods.py`, `prep_data.py`, + `diagnostic_plots.py`, `run_pras.jl`, and `ra_switches.csv`. The Julia + translation package lives at `reeds/resource_adequacy/reeds2pras/`. +- `reeds/hpc/`: HPC helpers (`aws_setup.sh`, `srun_template.sh`). +- `reeds/solver/`: solver option files (`cplex.opt`, `cplex.op2`, `cbc.opt`, + `gurobi.opt`). - `hourlize/`: preprocessing for resource and load profiles. Main wrapper is `hourlize/run_hourlize.py`; `hourlize/reeds_to_rev.py` disaggregates ReEDS investments back to reV supply curve sites. - `postprocessing/`: reports, diagnostics, plots, run comparison, retail rates, - reValue, bokehpivot, Tableau, combine-runs, and output cleanup. + reValue, bokehpivot, Tableau, air-quality, land-use, R2X (`run_r2x.py`), and + output cleanup. - `preprocessing/`: tools for preparing repository inputs before ReEDS runs. +- `helpers/`: operational helpers — `runstatus.py`, `restart_runs.py`, + `interim_report.py`, `interim_report_batch.py`. - `inputs/`: checked-in model inputs plus pointers to large remote inputs. - Large files are normally downloaded into `inputs/remote/` and linked or copied - as needed. + `inputs/remote_files.csv` catalogs remote data; large files are normally + downloaded into `inputs/remote/` and linked or copied as needed. - `runs/`: generated run folders. Treat contents as user/generated artifacts and do not edit or delete them unless the task explicitly targets a run. - `tests/` and `hourlize/tests/`: pytest tests. Some tests are lightweight unit tests; `tests/test_outputs.py` requires a completed ReEDS case. - `.github/workflows/`: CI, docs, and workflow-quality automation. +- `CEPM/`: RMI/CEPM-specific docs kept separate from upstream docs — + `UV_MAMBA_GUIDE.md` (uv/mamba dependency mapping) and `internal-ci-testing.md` + (on-prem CI runbook). The CEPM run bootstrap is `bootstrap_CEPM.ps1` at repo root. ## Environment - Python is pinned to `3.11` via `.python-version` and `pyproject.toml`. - Python dependencies are managed with `uv` and locked in `uv.lock`. + `environment.yml` is kept as an upstream-compatible conda/mamba fallback; see + @CEPM/UV_MAMBA_GUIDE.md for keeping the two in sync. - Julia `1.12.1` is the tested version for ReEDS2PRAS and stress-period flows. - GAMS is required for model solves. CPLEX is the normal solver; small cases may work with other solvers, but CPLEX-oriented settings are the maintained path. @@ -94,19 +117,24 @@ uv run python reeds/remote.py ## Build And Run Commands -- Show runbatch options: `uv run python runbatch.py -h` -- Interactive run setup: `uv run python runbatch.py` -- Typical test batch: `uv run python runbatch.py -b vYYYYMMDD_label -c test` +- Show runreeds options: `uv run python runreeds.py -h` +- Interactive run setup: `uv run python runreeds.py` +- Typical test batch: `uv run python runreeds.py -b vYYYYMMDD_label -c test` - One or more named cases from a cases file: - `uv run python runbatch.py -b vYYYYMMDD_label -c test -s caseA,caseB` -- Dry run case setup without launch: `uv run python runbatch.py -b label -c test -t` -- Check run status: `uv run python runstatus.py ` -- Restart failed HPC runs: `uv run python restart_runs.py ` + `uv run python runreeds.py -b vYYYYMMDD_label -c test -s caseA,caseB` +- Dry run case setup without launch: `uv run python runreeds.py -b label -c test -t` +- Check run status: `uv run python helpers/runstatus.py ` +- Restart failed HPC runs: `uv run python helpers/restart_runs.py ` - Run a completed-case output check: `uv run python -m pytest tests/test_outputs.py --casepath runs/` - Build docs when docs dependencies are installed: `uv run sphinx-build docs/source docs/build/` +`runreeds.py` command-line arguments (from its argparse): `-b/--BatchName`, +`-c/--cases_suffix`, `-s/--single` (a single case or comma-delimited list), +`-r/--simult_runs`, `-l/--forcelocal`, `-f/--skip_checks`, `-d/--debug`, +`-n/--debugnode`, `-p/--cases_per_node`, `-t/--dryrun`. + Be conservative with full model runs. They can be long, need licensed GAMS, may download large files, and write substantial data under `runs/`. @@ -118,10 +146,12 @@ download large files, and write substantial data under `runs/`. `uv run python -m pytest hourlize/tests` - Completed-run output validation: `uv run python -m pytest tests/test_outputs.py --casepath runs/` -- Julia ReEDS2PRAS tests from `reeds2pras/test/`: +- Julia ReEDS2PRAS tests from `reeds/resource_adequacy/reeds2pras/test/`: `julia --project runtests.jl` -- CI runs a test ReEDS scenario with `python runbatch.py -b "$batch" -c test -s "$SCENARIO"` - and then validates outputs with `tests/test_outputs.py`. +- CI runs a test ReEDS scenario with `python runreeds.py -b "$batch" -c test -s "$SCENARIO"` + (scenarios `github_Pacific`, `github_Everything`, `github_MA_county_CC`) and + then validates outputs with `tests/test_outputs.py`. A later CI job exercises + R2X translation via `postprocessing/run_r2x.py`. `tests/test_outputs.py` is a completed-case artifact check, not a guarantee that every bokehpivot report section rendered cleanly. For report health, inspect @@ -129,24 +159,28 @@ every bokehpivot report section rendered cleanly. For report health, inspect When changing GAMS objective-function inputs, check `tests/objective_function_params.yaml`; it documents parameters that -`input_processing/check_inputs.py` validates for missing values. +`reeds/input_processing/check_inputs.py` validates for missing values. ## Architecture And Run Flow 1. A cases file is parsed by `reeds.inputs.parse_cases()`. -2. `runbatch.py` expands cases, checks switch consistency, and creates +2. `runreeds.py` expands cases, checks switch consistency, and creates `runs/{BatchName}_{case}/`. 3. Case setup writes `inputs_case/`, `switches.csv`, `gswitches.csv`, `modeledyears.csv`, run metadata, and generated shell/batch scripts. -4. `input_processing/copy_files.py` and related scripts copy, filter, aggregate, - and derive inputs. Many output CSV names intentionally match GAMS parameter - names read by `b_inputs.gms`. -5. GAMS reads `b_inputs.gms`, creates `inputs.gdx`, solves according to the - chosen `timetype` (`seq`, `int`, or `win`), and writes GDX/CSV outputs. -6. `Augur.py` may run between solve years to prepare PRAS data, run Julia PRAS, - calculate capacity credit, and add stress periods. -7. `e_report.gms`, `e_report_dump.py`, bokehpivot, retail-rate, plots, Vizit, - R2X, and other postprocessors write to `runs/{case}/outputs/`. +4. `reeds/input_processing/copy_files.py` and related scripts copy, filter, + aggregate, and derive inputs. Many output CSV names intentionally match GAMS + parameter names read by `reeds/core/setup/b_inputs.gms`. +5. GAMS assembles the model via `reeds/core/setup/a_createmodel.gms`, creates + `inputs.gdx`, solves according to the chosen `timetype` (`seq` → + `3_solve_oneyear.gms`, `int` → `3_solve_allyears.gms`, `win` → + `3_solve_window.gms`, all under `reeds/core/solve/`), and writes GDX/CSV + outputs. +6. `reeds/resource_adequacy/ra_calcs.py` may run between solve years to prepare + PRAS data, run Julia PRAS (`run_pras.jl` + `reeds2pras/`), calculate capacity + credit, and add stress periods. +7. `reeds/core/terminus/report.gms`, `report_dump.py`, bokehpivot, retail-rate, + plots, Vizit, R2X, and other postprocessors write to `runs/{case}/outputs/`. Useful run-folder files: @@ -158,7 +192,8 @@ Useful run-folder files: - `inputs_case/`: exact inputs seen by a case. This is usually better than guessing from repository defaults when debugging a completed run. - `outputs/`: reported CSVs, figures, bokehpivot reports, retail outputs, etc. -- `ReEDS_Augur/augur_data/`: PRAS and capacity-credit intermediate data. +- `handoff/reeds_data/`: resource-adequacy / capacity-credit intermediate data + (GDX and CSV) passed between solve years. ## Code Style @@ -207,9 +242,9 @@ Inputs and CSVs: - Raw inputs belong under topical `inputs/` subdirectories. - Large or optional data should not be committed casually; use the remote-file mechanism and document sources in `sources.csv` / `sources_documentation.md`. -- Costs read into `b_inputs.gms` should already be in 2004 dollars unless the - surrounding code clearly says otherwise; use `deflator.csv` rather than - hard-coded conversions. +- Costs read into `reeds/core/setup/b_inputs.gms` should already be in 2004 + dollars unless the surrounding code clearly says otherwise; use `deflator.csv` + rather than hard-coded conversions. ## Debugging Notes @@ -217,7 +252,7 @@ Inputs and CSVs: in `runs//lstfiles/`. - For input-processing failures, inspect `inputs_case/`, `1_Inputs.lst`, and the script call generated in `call_.bat` or `call_.sh`. -- For output/report failures, compare `outputs/`, `e_report_params.csv`, and +- For output/report failures, compare `outputs/`, `report_params.csv`, and `postprocessing/bokehpivot` report logs. - When an expected output is missing, first check the effective run switches in `runs//inputs_case/switches.csv`; repository defaults in `cases.csv` @@ -232,7 +267,7 @@ Inputs and CSVs: - Current `health_damages_caused_r.csv` files use the air-quality postprocessor schema (`ba`, `pollutant`, `tons`, `md`, `damage_$`, `mortality`); bokehpivot normalizes this to legacy report display columns in `postprocessing/bokehpivot/reeds2.py`. -- `runstatus.py` summarizes running/failed/finished cases for a batch prefix. +- `helpers/runstatus.py` summarizes running/failed/finished cases for a batch prefix. - `postprocessing/check_error.py` reads the `error_check` output for solved cases. - For GAMS data comparison, developer docs recommend targeted `execute unload` @@ -244,20 +279,21 @@ Inputs and CSVs: - Remote data: `reeds.remote` reads `inputs/remote_files.csv` and manages downloads under `inputs/remote/`. -- Monte Carlo sampling: `input_processing/mcs_sampler.py` plus YAML +- Monte Carlo sampling: `reeds/input_processing/mcs_sampler.py` plus YAML distribution files described in the user guide. -- Temporal clustering and hourly data: `input_processing/hourly_repperiods.py`, +- Temporal clustering and hourly data: `reeds/input_processing/hourly_repperiods.py`, `hourly_writetimeseries.py`, `hourly_load.py`, and `inputs_case/rep/`. -- Renewable capacity factors and resources: `input_processing/recf.py`, +- Renewable capacity factors and resources: `reeds/input_processing/recf.py`, `writesupplycurves.py`, `hourlize/`, and `inputs_case/recf.h5`. -- Resource adequacy/stress periods: `Augur.py`, `ReEDS_Augur/`, - `reeds2pras/`, and `GSw_PRM_*` switches. -- Standard reports: `e_report.gms`, `e_report_dump.py`, +- Resource adequacy/stress periods: `reeds/resource_adequacy/` (`ra_calcs.py`, + `capacity_credit.py`, `stress_periods.py`, `run_pras.jl`, `reeds2pras/`) and + `GSw_PRM_*` switches. +- Standard reports: `reeds/core/terminus/report.gms`, `report_dump.py`, `postprocessing/bokehpivot/`, and `postprocessing/single_case_plots.py`. - Run comparisons: `postprocessing/compare_cases.py`, `postprocessing/combine_runs/`, and `postprocessing/uncertainty_plots.py`. - Retail rates: `postprocessing/retail_rate_module/`. -- R2X translation: `scripts/run_r2x.py` and CI's `r2x-reeds` invocation. +- R2X translation: `postprocessing/run_r2x.py` and CI's `r2x-reeds` invocation. ## Security And Data Handling diff --git a/UV_MAMBA_GUIDE.md b/CEPM/UV_MAMBA_GUIDE.md similarity index 82% rename from UV_MAMBA_GUIDE.md rename to CEPM/UV_MAMBA_GUIDE.md index cc71684fd..29bdf771a 100644 --- a/UV_MAMBA_GUIDE.md +++ b/CEPM/UV_MAMBA_GUIDE.md @@ -1,12 +1,3 @@ -**Needs review:** this repo was recently rebased onto a restructured upstream -ReEDS base (see git history around 2026-06). This file was written against the -pre-restructure layout and has not yet been fully verified against the new -`reeds/` package layout. Known stale references: `runbatch.py` throughout this -file should be `runreeds.py`; `Augur.py` is now `reeds/resource_adequacy/ra_calcs.py`; -`e_report.gms` is now `reeds/core/terminus/report.gms`; `input_processing/` now -lives under `reeds/input_processing/`. Treat the rest of this file as unverified -pending a full pass. Flagging for follow-up via issue/comment. - # Translating between `environment.yml` (mamba/conda) and `pyproject.toml`/`uv.lock` (uv) This repo keeps both, per the decision to keep `environment.yml` as the @@ -51,17 +42,19 @@ Same as above in reverse — pull it from both files, then `uv lock` to drop it - **Non-Python packages.** `environment.yml` has `git-lfs=2.13` and `mscorefonts=0.0` — these aren't pip-installable and have no uv equivalent. They just don't appear in `pyproject.toml`; document them in setup docs instead. - **`pip` itself and its version.** conda pins `pip=23.2` as a bootstrap tool; uv manages its own resolver, so this has no uv equivalent either. - **Exact vs. fuzzy pins.** conda's `package=X.Y` conventionally means "X.Y.* is fine"; the uv side in this repo mostly uses explicit `==X.Y.*` to match that intent, but a few packages (`tables`, `gdxpds`, `geopandas`, `pulp`, `shapely`, `cmocean`) are pinned to an exact patch version in `pyproject.toml` where conda only pins minor. If you tighten/loosen a pin on one side, consider whether the other side should match. +- **PyTables naming and version drift.** conda's package is `pytables`, but its importable/pip name is `tables`, so it appears as `pytables=3.8` in `environment.yml` and `tables==3.11.1` in `pyproject.toml`. These are currently different minor versions — a real drift, not just a naming difference. Reconcile the version if the two paths are meant to match. - **Git-sourced packages.** `rmi.etoolbox @ git+https://github.com/rmi/etoolbox.git` in `pyproject.toml` has no equivalent line in `environment.yml` yet — conda's `pip:` block *can* take a `git+https://...` URL the same way, so if `environment.yml` needs to stay fully equivalent, add a matching line there. ## Known pre-existing gaps (not introduced by this cleanup, not yet fixed) A few packages are imported directly in `postprocessing/` (`jinja2`, `loguru`, `lxml`, `seaborn`, `six`) but aren't declared as explicit dependencies in *either* file — they currently work only because something else pulls them in transitively. This gap already exists on the `dev`/upstream base itself, independent of the RMI rebase, so it wasn't in scope for the pyproject.toml restoration. Worth its own follow-up if these ever stop being transitively satisfied. -## Note: `environment.yml` is currently missing from this branch +## Known current drift between the two files + +Both files now exist at the repo root, and a few packages are out of sync +(worth reconciling next time either file is touched): -The "keep both" decision assumes `environment.yml` exists alongside -`pyproject.toml`, but it was deleted by the mvp-branch commit that introduced -uv (`801ae3eb`, "changes to pyproject toml for UV, removed environment.yml -and added python version") and that deletion is still in effect on this -branch. `dev` still has it. Until it's restored from `dev`, this guide -describes a mapping that only exists on one side. +- `pyyaml` is declared in `pyproject.toml` but missing from `environment.yml`. +- `proj==0.2.0` is in `environment.yml`'s `pip:` block but has no entry in + `pyproject.toml`. +- `pytables=3.8` (conda) vs `tables==3.11.1` (uv) — see the PyTables note above. diff --git a/docs/internal-ci-testing.md b/CEPM/internal-ci-testing.md similarity index 91% rename from docs/internal-ci-testing.md rename to CEPM/internal-ci-testing.md index 8ca7f74c7..86c3002fe 100644 --- a/docs/internal-ci-testing.md +++ b/CEPM/internal-ci-testing.md @@ -76,9 +76,9 @@ Expected directories include: Run each scenario exactly as CI does: ```bash -python runbatch.py -b test -c test -s github_Pacific -python runbatch.py -b test -c test -s github_Everything -python runbatch.py -b test -c test -s github_MA_county_CC +python runreeds.py -b test -c test -s github_Pacific +python runreeds.py -b test -c test -s github_Everything +python runreeds.py -b test -c test -s github_MA_county_CC ``` Run folders should be created at: @@ -115,12 +115,12 @@ Also inspect diagnostics if needed: ## 7) Run R2X compatibility checks (optional but recommended parity) -CI executes `scripts/run_r2x.py` for each scenario. Reproduce locally after successful ReEDS runs. +CI executes `postprocessing/run_r2x.py` for each scenario. Reproduce locally after successful ReEDS runs. If using `uvx` as in CI: ```bash -uvx --from "r2x-reeds>=0.3.5" python scripts/run_r2x.py \ +uvx --from "r2x-reeds>=0.3.5" python postprocessing/run_r2x.py \ --reeds-run-path "github_Pacific-2029" \ --scenario "github_Pacific" \ --solve-year "2029" \ diff --git a/README.md b/README.md index b14ad5e5c..22d7c1343 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,6 @@ ![GitHub License](https://img.shields.io/github/license/ReEDS-Model/ReEDS) [![DOI](https://zenodo.org/badge/189060033.svg)](https://doi.org/10.5281/zenodo.16943302) -**Needs review:** this repo was recently rebased onto a restructured upstream -ReEDS base, and this README has not yet been fully verified against it. Known -stale reference: instructions below say `runbatch.py`, which has been renamed -to `runreeds.py` upstream. Treat setup/run instructions as unverified pending -review. Flagging for follow-up via issue/comment. - This GitHub repository contains the source code for NLR's ReEDS model. The ReEDS model source code is available at no cost from the National Laboratory of the Rockies. @@ -143,10 +137,10 @@ Additional details on remote files and other topics can be found in the [user gu ### 4.5 Optional PowerShell bootstrap command Once you've cloned the repository, you can use an optional PowerShell bootstrap helper to -ensure supporting software is up to date and then immediately run runbatch.py: +ensure supporting software is up to date and then immediately run runreeds.py: ```powershell -.\bootstrap_reeds.ps1 +.\bootstrap_CEPM.ps1 ``` This script performs the following steps in order: @@ -156,14 +150,14 @@ This script performs the following steps in order: 4. Checks that Python is pinned to 3.11 and runs `uv python pin 3.11` if needed. 5. Runs `uv sync --extra dev`. 6. Runs `julia --project=. instantiate.jl`. -7. Forwards all arguments to `runbatch.py`. +7. Forwards all arguments to `runreeds.py`. Passing `-y` (or `--skip-setup` / `--bypass`) skips Step 5 (`uv sync --extra dev`) and Step 6 (`julia --project=. instantiate.jl`). -All other checks and setup steps still run, and remaining arguments are still passed to `runbatch.py` +All other checks and setup steps still run, and remaining arguments are still passed to `runreeds.py` ```powershell -.\bootstrap_reeds.ps1 -y -b v20250314_main -c test -.\bootstrap_reeds.ps1 --bypass -b v20250314_main -c test +.\bootstrap_CEPM.ps1 -y -b v20250314_main -c test +.\bootstrap_CEPM.ps1 --bypass -b v20250314_main -c test ``` ### 5. Run ReEDS @@ -178,13 +172,13 @@ export CONDA_PREFIX="$PWD/.venv" For interactive setup: ```bash -uv run python runbatch.py +uv run python runreeds.py ``` For one-line operation: ```bash -uv run python runbatch.py -b v20260605 -c cepm +uv run python runreeds.py -b v20260605 -c cepm ``` In this example, `v20260605` is the prefix for this batch of cases, and `cepm` is the suffix of the cases file, in this case `cases_cepm.csv`, located in the root of the repository. For the batch prefix, we should follow the convention `vYYYYMMDD`, and note that the case ID from the cases file will be appended to the batch prefix for file naming purposes (e.g., `WECC_county_100by2050`). @@ -192,13 +186,13 @@ In this example, `v20260605` is the prefix for this batch of cases, and `cepm` i Run the following for information on other optional command-line arguments: ```bash -uv run python runbatch.py -h +uv run python runreeds.py -h ``` PowerShell users can run setup + launch in one command with the bootstrap helper: ```powershell -.\bootstrap_reeds.ps1 -b v20250314_main -c test +.\bootstrap_CEPM.ps1 -b v20250314_main -c test ``` ## Troubleshooting diff --git a/bootstrap_reeds.ps1 b/bootstrap_CEPM.ps1 similarity index 79% rename from bootstrap_reeds.ps1 rename to bootstrap_CEPM.ps1 index 2851e90a5..7e5246178 100644 --- a/bootstrap_reeds.ps1 +++ b/bootstrap_CEPM.ps1 @@ -8,35 +8,26 @@ What this script does: 4) Checks the project Python pin and runs `uv python pin 3.11` when not pinned to 3.11. 5) Runs `uv sync --extra dev` to ensure the Python environment matches project dependencies (unless bypass mode is enabled). 6) Runs `julia --project=. instantiate.jl` to ensure Julia dependencies are installed (unless bypass mode is enabled). -7) Starts runbatch.py and forwards any arguments passed to this script. +7) Starts runreeds.py and forwards any arguments passed to this script. BYPASS option: -y, --skip-setup, or --bypass Skips Step 5 (`uv sync --extra dev`) and Step 6 (`julia --project=. instantiate.jl`). - Other checks and setup steps still run, and remaining args are forwarded to runbatch.py. + Other checks and setup steps still run, and remaining args are forwarded to runreeds.py. Usage examples: - .\bootstrap_reeds.ps1 - .\bootstrap_reeds.ps1 -b v20260625_test -c test - .\bootstrap_reeds.ps1 -y -b v20260625_test -c test - .\bootstrap_reeds.ps1 --bypass -b v20260625_test -c test - - -NEEDS REVIEW: this script was written against the pre-restructure repo layout -and has not yet been fully verified against the current upstream base. Known -issues: (1) Step 7 below calls `runbatch.py`, which has been renamed to -`runreeds.py` upstream; (2) `uv sync --extra dev` in Step 5 currently has no -root pyproject.toml to sync against (see version-control/package-management -cleanup). Do not rely on this script until those are fixed. Flagging for -follow-up via issue/comment. + .\bootstrap_CEPM.ps1 + .\bootstrap_CEPM.ps1 -b v20260625_test -c test + .\bootstrap_CEPM.ps1 -y -b v20260625_test -c test + .\bootstrap_CEPM.ps1 --bypass -b v20260625_test -c test #> # Initializing functions and variables for this script. -# Accept and forward all remaining command-line args to runbatch.py. +# Accept and forward all remaining command-line args to runreeds.py. param( - [switch]$y, # Bypass mode for skipping uv sync and Julia instantiate. We use y to prevent collision with runbatch options. + [switch]$y, # Bypass mode for skipping uv sync and Julia instantiate. We use y to prevent collision with runreeds options. [Parameter(ValueFromRemainingArguments = $true)] [string[]]$RunbatchArgs @@ -53,9 +44,32 @@ if ($ForwardArgs -contains '--skip-setup') { $ForwardArgs = @($ForwardArgs | Where-Object { $_ -ne '--skip-setup' }) } -# Fail immediately on PowerShell errors so setup issues do not get masked. +# Fail immediately on PowerShell (cmdlet) errors so setup issues do not get masked. $ErrorActionPreference = 'Stop' +# Run a native command with stderr-as-error suppressed. Tools like uv and julia +# write normal progress to stderr; when that stderr is merged into the pipeline +# (e.g. a caller wraps this script with 2>&1, or a CI/host captures combined +# output), Windows PowerShell 5.1 turns each stderr line into a terminating +# NativeCommandError under $ErrorActionPreference='Stop' -- aborting the script +# even though the command actually succeeded (exit code 0). We relax the +# preference only around the native call; real failures are still detected by +# the caller via $LASTEXITCODE. +function Invoke-Native { + param( + [Parameter(Mandatory = $true)] + [scriptblock]$Action + ) + + $previousPreference = $ErrorActionPreference + $ErrorActionPreference = 'Continue' + try { + & $Action + } finally { + $ErrorActionPreference = $previousPreference + } +} + # Run a named step, print progress, and throw on non-zero process exit code. function Invoke-Step { param( @@ -66,7 +80,7 @@ function Invoke-Step { ) Write-Host "[run] $Description" - & $Action + Invoke-Native $Action if ($LASTEXITCODE -ne 0) { throw "Step failed: $Description" } @@ -83,7 +97,7 @@ if (-not $gamsCmd) { throw 'GAMS executable was not found on PATH. Install GAMS and add it to PATH before running ReEDS.' } -$gamsVersionOutput = (& gams 2>&1 | Out-String).Trim() +$gamsVersionOutput = (Invoke-Native { & gams 2>&1 | Out-String }).Trim() if ($LASTEXITCODE -ne 0) { throw "GAMS command failed while checking version. Output:`n$gamsVersionOutput" } @@ -121,7 +135,7 @@ if (-not $juliaCmd) { throw 'Julia executable was not found on PATH. Install Julia 1.12.1 and add it to PATH before running ReEDS.' } -$juliaVersionOutput = (& julia --version 2>&1 | Out-String).Trim() +$juliaVersionOutput = (Invoke-Native { & julia --version 2>&1 | Out-String }).Trim() if ($LASTEXITCODE -ne 0) { throw "Julia command failed while checking version. Output:`n$juliaVersionOutput" } @@ -193,14 +207,14 @@ if ($y) { } } -Write-Host 'Bootstrap complete. Starting ReEDS runbatch.py with forwarded arguments...' +Write-Host 'Bootstrap complete. Starting ReEDS runreeds.py with forwarded arguments...' # Step 7: Start ReEDS with any arguments passed to this bootstrap script. -Write-Host '[run] uv run python runbatch.py ...' +Write-Host '[run] uv run python runreeds.py ...' Set-Location $repoRoot -uv run python runbatch.py @ForwardArgs +Invoke-Native { uv run python runreeds.py @ForwardArgs } if ($LASTEXITCODE -ne 0) { - throw 'runbatch.py failed.' + throw 'runreeds.py failed.' } From 91e12eb59bcc7a4a59192c0f09a99d2d5fc82f35 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Tue, 7 Jul 2026 21:13:46 +0000 Subject: [PATCH 33/46] Add environment.yml / pyproject.toml drift check to bootstrap Add CEPM/check_env_sync.py, a stdlib-only checker that compares environment.yml (mamba/conda) against pyproject.toml (uv) and reports packages present in only one file or pinned to incompatible versions, ignoring an allowlist of intentional exceptions documented in CEPM/UV_MAMBA_GUIDE.md. Wire it into bootstrap_CEPM.ps1 as a new non-fatal step (7) that warns on unexpected drift but never aborts setup, and document the checker in the guide. Co-Authored-By: Claude Opus 4.8 (1M context) --- CEPM/UV_MAMBA_GUIDE.md | 17 ++++ CEPM/check_env_sync.py | 218 +++++++++++++++++++++++++++++++++++++++++ bootstrap_CEPM.ps1 | 18 +++- 3 files changed, 251 insertions(+), 2 deletions(-) create mode 100644 CEPM/check_env_sync.py diff --git a/CEPM/UV_MAMBA_GUIDE.md b/CEPM/UV_MAMBA_GUIDE.md index 29bdf771a..c4946d238 100644 --- a/CEPM/UV_MAMBA_GUIDE.md +++ b/CEPM/UV_MAMBA_GUIDE.md @@ -6,6 +6,23 @@ path (see `pyproject.toml` at repo root and `dev`'s `environment.yml`). Whenever one changes, the other should be updated by hand — there's no automatic converter, so this is a manual mapping. +## Automated drift check + +`CEPM/check_env_sync.py` compares the two files and warns when they drift beyond +a hard-coded allowlist of intentional exceptions (the "known-accepted" cases +below). `bootstrap_CEPM.ps1` runs it as a non-fatal step, or run it directly: + +```bash +uv run python CEPM/check_env_sync.py +``` + +It reports three things: packages only in one file and packages pinned to +incompatible versions. Exit code `0` means aligned (all differences are on the +allowlist); `1` means new/unexpected drift. When you intentionally add an +exception, update both the allowlist in `CEPM/check_env_sync.py` and the +"Known current drift" / "Things that don't map 1:1" sections below so the two +stay in agreement. + ## Structural mapping | environment.yml | pyproject.toml | Notes | diff --git a/CEPM/check_env_sync.py b/CEPM/check_env_sync.py new file mode 100644 index 000000000..a61abf785 --- /dev/null +++ b/CEPM/check_env_sync.py @@ -0,0 +1,218 @@ +"""Check that environment.yml (mamba/conda) and pyproject.toml (uv) stay aligned. + +RMI/CEPM keeps `environment.yml` as an upstream-compatible conda/mamba fallback +and `pyproject.toml`/`uv.lock` as the primary uv path (see +CEPM/UV_MAMBA_GUIDE.md). There is no automatic converter, so the two are kept in +sync by hand and drift easily. This script reports drift and warns only when it +finds a difference that is NOT already on the known-accepted allowlist below. + +It is intentionally stdlib-only (tomllib is in Python 3.11) so it can run as a +bootstrap step without depending on a fully synced environment. + +Exit codes: + 0 aligned (all differences are on the allowlist) + 1 unexpected drift found (bootstrap turns this into a warning, not a failure) + 2 could not run the check (e.g. a file is missing or unparseable) + +Keeping the allowlist current: as drift is reconciled, remove entries here. The +script also notes allowlist entries that no longer apply, so the list does not +silently rot. +""" + +import os +import re +import sys +import tomllib + +# --- Known-accepted exceptions (see CEPM/UV_MAMBA_GUIDE.md) ------------------ + +# Packages expected to live ONLY in environment.yml -- no uv/pip equivalent by +# nature (non-Python packages, conda bootstrap tooling, the interpreter itself). +CONDA_ONLY_OK = {"git-lfs", "mscorefonts", "pip", "python"} + +# Packages expected to live ONLY in pyproject.toml (e.g. git-sourced deps that +# have no conda-channel equivalent line yet). +UV_ONLY_OK = {"rmi-etoolbox"} + +# Currently-accepted drift, documented in CEPM/UV_MAMBA_GUIDE.md. Trim as fixed. +KNOWN_DRIFT_CONDA_ONLY = {"proj"} # in environment.yml, not in pyproject +KNOWN_DRIFT_UV_ONLY = {"pyyaml"} # in pyproject, not in environment.yml +KNOWN_VERSION_MISMATCH = {"tables"} # pytables 3.8 (conda) vs tables 3.11.1 (uv) + +# conda package name -> pip/import name, so the same package matches across files. +NAME_ALIASES = {"pytables": "tables"} + + +def normalize(name): + """PEP 503-style normalization (collapse runs of . _ - to a single -) plus + conda->pip aliasing.""" + n = re.sub(r"[-_.]+", "-", name.strip().lower()) + return NAME_ALIASES.get(n, n) + + +def _clean_version(ver): + """Strip a trailing '.*' / '*' wildcard and surrounding dots/space.""" + ver = ver.strip().rstrip("*").rstrip(".").strip() + return ver or None + + +def split_conda_spec(item): + """Parse a conda/pip dependency line ('bokeh=3.2', 'pulp==2.7.0', 'python').""" + for sep in ("==", "="): + if sep in item: + name, _, ver = item.partition(sep) + return name.strip(), _clean_version(ver) + return item.strip(), None + + +def parse_requirement(spec): + """Parse a PEP 508 requirement from pyproject ('bokeh==3.2.*', 'x @ git+...').""" + spec = spec.strip() + if " @ " in spec: # url/git form: 'name @ https://...' + return spec.split(" @ ", 1)[0].strip(), None + match = re.match(r"^([A-Za-z0-9_.\-]+)\s*(.*)$", spec) + if not match: + return spec, None + name, rest = match.group(1), match.group(2) + ver_match = re.search(r"==\s*([0-9][0-9A-Za-z.\-]*)", rest) + ver = _clean_version(ver_match.group(1)) if ver_match else None + return name, ver + + +def parse_environment_yml(path): + """Minimal parser for our environment.yml -> {normalized_name: version|None}. + + Tailored to this file's shape (a top-level `dependencies:` list plus a nested + `- pip:` list); not a general YAML parser. Both conda-channel and pip entries + are collected into one map since the comparison is by package, not channel. + """ + deps = {} + in_deps = False + with open(path, encoding="utf-8") as handle: + for raw in handle: + line = raw.rstrip("\n") + if "#" in line: # drop inline/full-line comments (incl. '## vvv' blocks) + line = line[: line.index("#")] + stripped = line.strip() + if not stripped: + continue + if stripped == "dependencies:": + in_deps = True + continue + if not in_deps: + continue + indent = len(line) - len(line.lstrip(" ")) + # A new top-level key (e.g. `channels:`) ends the dependencies block. + if indent == 0 and not stripped.startswith("-"): + in_deps = False + continue + if not stripped.startswith("-"): + continue + item = stripped[1:].strip() # drop the leading '- ' + if not item or item.rstrip(":") == "pip": # the '- pip:' sub-list header + continue + name, version = split_conda_spec(item) + if name: + deps[normalize(name)] = version + return deps + + +def parse_pyproject(path): + """Return {normalized_name: version|None} across dependencies + all extras.""" + with open(path, "rb") as handle: + data = tomllib.load(handle) + project = data.get("project", {}) + specs = list(project.get("dependencies", [])) + for group in project.get("optional-dependencies", {}).values(): + specs.extend(group) + deps = {} + for spec in specs: + name, version = parse_requirement(spec) + if name: + deps[normalize(name)] = version + return deps + + +def versions_align(conda_ver, uv_ver): + """True if versions are compatible. conda's 'X.Y' means 'X.Y.*', so treat a + shorter version as a prefix match of the longer one (e.g. 3.2 ~ 3.2.*).""" + if conda_ver is None or uv_ver is None: + return True # nothing to compare (e.g. a git dep with no pinned version) + left = conda_ver.split(".") + right = uv_ver.split(".") + shared = min(len(left), len(right)) + return left[:shared] == right[:shared] + + +def main(): + repo_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + if len(sys.argv) == 3: # optional explicit paths, mostly for testing + env_path, pyproject_path = sys.argv[1], sys.argv[2] + else: + env_path = os.path.join(repo_root, "environment.yml") + pyproject_path = os.path.join(repo_root, "pyproject.toml") + + try: + env_deps = parse_environment_yml(env_path) + uv_deps = parse_pyproject(pyproject_path) + except FileNotFoundError as exc: + print(f"[check_env_sync] could not read a dependency file: {exc}") + return 2 + except Exception as exc: # never let this check crash the bootstrap + print(f"[check_env_sync] failed to parse dependency files: {exc}") + return 2 + + env_names = set(env_deps) + uv_names = set(uv_deps) + + conda_only = env_names - uv_names + uv_only = uv_names - env_names + mismatches = { + name + for name in (env_names & uv_names) + if not versions_align(env_deps[name], uv_deps[name]) + } + + unexpected_conda_only = sorted(conda_only - CONDA_ONLY_OK - KNOWN_DRIFT_CONDA_ONLY) + unexpected_uv_only = sorted(uv_only - UV_ONLY_OK - KNOWN_DRIFT_UV_ONLY) + unexpected_mismatch = sorted(mismatches - KNOWN_VERSION_MISMATCH) + + # Note allowlist entries that no longer apply, so the list does not rot. + stale_allowlist = sorted( + (KNOWN_DRIFT_CONDA_ONLY - conda_only) + | (KNOWN_DRIFT_UV_ONLY - uv_only) + | (KNOWN_VERSION_MISMATCH - mismatches) + ) + + has_drift = bool(unexpected_conda_only or unexpected_uv_only or unexpected_mismatch) + + if has_drift: + print("[check_env_sync] Unexpected drift between environment.yml and pyproject.toml:") + for name in unexpected_conda_only: + print(f" - only in environment.yml: {name} ({env_deps[name] or 'no pin'})") + for name in unexpected_uv_only: + print(f" - only in pyproject.toml: {name} ({uv_deps[name] or 'no pin'})") + for name in unexpected_mismatch: + print( + f" - version mismatch: {name} " + f"(environment.yml={env_deps[name]} vs pyproject.toml={uv_deps[name]})" + ) + print( + " Update both files, or add an intentional exception to the allowlist " + "in CEPM/check_env_sync.py (and note it in CEPM/UV_MAMBA_GUIDE.md)." + ) + else: + print("[check_env_sync] environment.yml and pyproject.toml are aligned " + "(all differences are on the known-accepted allowlist).") + + if stale_allowlist: + print( + "[check_env_sync] note: these allowlist entries no longer drift and can " + f"be removed from CEPM/check_env_sync.py: {', '.join(stale_allowlist)}" + ) + + return 1 if has_drift else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/bootstrap_CEPM.ps1 b/bootstrap_CEPM.ps1 index 7e5246178..380285313 100644 --- a/bootstrap_CEPM.ps1 +++ b/bootstrap_CEPM.ps1 @@ -8,7 +8,8 @@ What this script does: 4) Checks the project Python pin and runs `uv python pin 3.11` when not pinned to 3.11. 5) Runs `uv sync --extra dev` to ensure the Python environment matches project dependencies (unless bypass mode is enabled). 6) Runs `julia --project=. instantiate.jl` to ensure Julia dependencies are installed (unless bypass mode is enabled). -7) Starts runreeds.py and forwards any arguments passed to this script. +7) Checks environment.yml against pyproject.toml and warns (non-fatal) on dependency drift beyond the known-accepted allowlist in CEPM/check_env_sync.py. +8) Starts runreeds.py and forwards any arguments passed to this script. BYPASS option: @@ -207,9 +208,22 @@ if ($y) { } } +# Step 7: Warn (non-fatal) if environment.yml and pyproject.toml have drifted +# beyond the known-accepted exceptions. This always runs -- it only reads two +# text files -- so it is not gated by bypass mode. It must never abort the +# bootstrap, so a non-zero result becomes a warning rather than a throw. +Write-Host '[run] CEPM/check_env_sync.py (environment.yml vs pyproject.toml)' +Set-Location $repoRoot +Invoke-Native { uv run python CEPM/check_env_sync.py } +if ($LASTEXITCODE -ne 0) { + Write-Warning 'environment.yml and pyproject.toml have drifted (see output above). Update both files, or adjust the allowlist in CEPM/check_env_sync.py. Continuing.' +} else { + Write-Host '[ok] environment.yml and pyproject.toml are aligned (within known exceptions).' +} + Write-Host 'Bootstrap complete. Starting ReEDS runreeds.py with forwarded arguments...' -# Step 7: Start ReEDS with any arguments passed to this bootstrap script. +# Step 8: Start ReEDS with any arguments passed to this bootstrap script. Write-Host '[run] uv run python runreeds.py ...' Set-Location $repoRoot Invoke-Native { uv run python runreeds.py @ForwardArgs } From 4d74f94b507ab9a684a65741ff4a23f41718555d Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Tue, 7 Jul 2026 21:44:43 +0000 Subject: [PATCH 34/46] Handle disabled offshore wind in recf input build Add an explicit fallback in `reeds/input_processing/recf.py` to create an empty offshore-wind dataframe (aligned to onshore wind index) when `GSw_OfsWind` is disabled. This keeps downstream dataframe concatenation shape-consistent and avoids errors when offshore wind inputs are not generated. --- reeds/input_processing/recf.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reeds/input_processing/recf.py b/reeds/input_processing/recf.py index 40204f8d9..277f40705 100644 --- a/reeds/input_processing/recf.py +++ b/reeds/input_processing/recf.py @@ -369,6 +369,9 @@ def main(reeds_path, inputs_case): resource_adequacy_years ) df_windofs.columns = ['wind-ofs_' + col for col in df_windofs] + else: + # Keep concat inputs consistent when offshore wind is disabled. + df_windofs = pd.DataFrame(index=df_windons.index) ### UPV df_upv = calculate_class_region_cf_hourly( From 4938c8a5aa7cb1420f3045d96cb547825c984408 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Wed, 8 Jul 2026 14:58:28 +0000 Subject: [PATCH 35/46] Bootstrap: instantiate Julia only when needed; re-add ntfy notification Step 6 now runs a fast offline `Pkg.instantiate` (no registry update) as a check that also cheaply self-heals, and only falls back to the full `julia --project=. instantiate.jl` (which updates the registry) when the project can't be satisfied. Avoids the slow registry update on every run. Re-add the best-effort ntfy.sh notification (topic rmi-cepm-run-batch-finished) after runreeds.py returns, wrapped in try/catch so an offline/failed notification never affects the run. Update the README step list to match (Julia instantiate wording, the environment.yml/pyproject drift check, and the ntfy notification). Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 8 +++++--- bootstrap_CEPM.ps1 | 34 ++++++++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 22d7c1343..46c8734bb 100644 --- a/README.md +++ b/README.md @@ -149,10 +149,12 @@ This script performs the following steps in order: 3. Sets ReEDS environment variables for the current PowerShell session. 4. Checks that Python is pinned to 3.11 and runs `uv python pin 3.11` if needed. 5. Runs `uv sync --extra dev`. -6. Runs `julia --project=. instantiate.jl`. -7. Forwards all arguments to `runreeds.py`. +6. Instantiates Julia dependencies only when needed: a fast offline check (`Pkg.instantiate` without a registry update) skips the work when the environment is already current, and only falls back to the full `julia --project=. instantiate.jl` (which updates the registry) if dependencies changed or are missing. +7. Checks `environment.yml` against `pyproject.toml` and prints a non-fatal warning if they have drifted beyond the known-accepted allowlist (see `CEPM/UV_MAMBA_GUIDE.md`). +8. Forwards all arguments to `runreeds.py`. +9. Sends a best-effort [ntfy.sh](https://ntfy.sh) notification (topic `rmi-cepm-run-batch-finished`) once `runreeds.py` returns, so you can be alerted when a long-running batch finishes. Subscribe to the topic in the ntfy app or at . A failed or offline notification is ignored. -Passing `-y` (or `--skip-setup` / `--bypass`) skips Step 5 (`uv sync --extra dev`) and Step 6 (`julia --project=. instantiate.jl`). +Passing `-y` (or `--skip-setup` / `--bypass`) skips Step 5 (`uv sync --extra dev`) and Step 6 (Julia instantiation). All other checks and setup steps still run, and remaining arguments are still passed to `runreeds.py` ```powershell diff --git a/bootstrap_CEPM.ps1 b/bootstrap_CEPM.ps1 index 380285313..f109c2376 100644 --- a/bootstrap_CEPM.ps1 +++ b/bootstrap_CEPM.ps1 @@ -7,9 +7,10 @@ What this script does: 3) Sets ReEDS-required CONDA-style environment variables in the current PowerShell session. 4) Checks the project Python pin and runs `uv python pin 3.11` when not pinned to 3.11. 5) Runs `uv sync --extra dev` to ensure the Python environment matches project dependencies (unless bypass mode is enabled). -6) Runs `julia --project=. instantiate.jl` to ensure Julia dependencies are installed (unless bypass mode is enabled). +6) Instantiates Julia dependencies only when needed: a fast offline instantiate checks/heals the environment, falling back to the full `julia --project=. instantiate.jl` (which updates the registry) only if that can't satisfy the project (unless bypass mode is enabled). 7) Checks environment.yml against pyproject.toml and warns (non-fatal) on dependency drift beyond the known-accepted allowlist in CEPM/check_env_sync.py. 8) Starts runreeds.py and forwards any arguments passed to this script. +9) Sends an ntfy.sh notification (topic: rmi-cepm-run-batch-finished) once runreeds.py returns. Best-effort: a failed or offline notification is ignored. BYPASS option: @@ -200,11 +201,24 @@ if ($y) { uv sync --extra dev } - # Step 6: Run Julia instantiate every time. - # This is safe and ensures deps match project files. - Invoke-Step -Description 'julia --project=. instantiate.jl' -Action { - Set-Location $repoRoot - julia --project=. instantiate.jl + # Step 6: Instantiate Julia deps only when needed. A fast, offline instantiate + # (no registry update) both checks and cheaply self-heals the environment. If + # it can't satisfy the project from the local registry cache (e.g. the Manifest + # changed to a version not cached, or a fresh Julia depot), fall back to the + # full instantiate.jl, which updates the registry. Every Project.toml dependency + # (including Random123, PRAS, TimeZones) is covered by instantiate, so the fast + # path loses nothing when the environment is already current. + Write-Host '[run] checking whether Julia dependencies need instantiation' + Set-Location $repoRoot + Invoke-Native { julia --project=. -e "using Pkg; try; Pkg.instantiate(; update_registry=false); exit(0); catch; exit(1); end" } + if ($LASTEXITCODE -eq 0) { + Write-Host '[ok] Julia dependencies already instantiated (skipping full instantiate.jl).' + } else { + Write-Warning 'Julia dependencies changed or missing; running full instantiate.jl (updates registry).' + Invoke-Step -Description 'julia --project=. instantiate.jl' -Action { + Set-Location $repoRoot + julia --project=. instantiate.jl + } } } @@ -231,4 +245,12 @@ if ($LASTEXITCODE -ne 0) { throw 'runreeds.py failed.' } +# Step 9: Notify ntfy.sh that the run has finished. Useful for long-running runs. +# Best-effort only -- wrapped so a failed or offline notification never affects +# the run outcome. +try { + Invoke-RestMethod -Method Post -Uri "https://ntfy.sh/rmi-cepm-run-batch-finished" ` + -Body "ReEDS run finished on $(hostname) at $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Out-Null +} catch {} + From b059913c11eb20d57d801c3f4c072dcd7b77cfe0 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Wed, 8 Jul 2026 17:05:44 +0000 Subject: [PATCH 36/46] Update bootstrap_CEPM.ps1 --- bootstrap_CEPM.ps1 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bootstrap_CEPM.ps1 b/bootstrap_CEPM.ps1 index f109c2376..6acd790d4 100644 --- a/bootstrap_CEPM.ps1 +++ b/bootstrap_CEPM.ps1 @@ -237,6 +237,11 @@ if ($LASTEXITCODE -ne 0) { Write-Host 'Bootstrap complete. Starting ReEDS runreeds.py with forwarded arguments...' +try { + Invoke-RestMethod -Method Post -Uri "https://ntfy.sh/rmi-cepm-run-batch-finished" ` + -Body "ReEDS run batch started on $(hostname) by $($env:USERNAME) at $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Out-Null +} catch {} + # Step 8: Start ReEDS with any arguments passed to this bootstrap script. Write-Host '[run] uv run python runreeds.py ...' Set-Location $repoRoot @@ -250,7 +255,7 @@ if ($LASTEXITCODE -ne 0) { # the run outcome. try { Invoke-RestMethod -Method Post -Uri "https://ntfy.sh/rmi-cepm-run-batch-finished" ` - -Body "ReEDS run finished on $(hostname) at $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Out-Null + -Body "ReEDS run batch finished on $(hostname) by $($env:USERNAME) at $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Out-Null } catch {} From 28c132200a424c963b3660f39343a4e759bf418f Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Wed, 8 Jul 2026 17:10:29 +0000 Subject: [PATCH 37/46] Fix stale test path in reeds2pras README The reeds2pras package was nested under reeds/resource_adequacy/ in the restructure, but its README still pointed `cd` at the old top-level ReEDS/reeds2pras/test location. Update both occurrences to the current ReEDS/reeds/resource_adequacy/reeds2pras/test path. Closes #21 Co-Authored-By: Claude Opus 4.8 (1M context) --- reeds/resource_adequacy/reeds2pras/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reeds/resource_adequacy/reeds2pras/README.md b/reeds/resource_adequacy/reeds2pras/README.md index 4662cb6f2..e9d6496c0 100644 --- a/reeds/resource_adequacy/reeds2pras/README.md +++ b/reeds/resource_adequacy/reeds2pras/README.md @@ -69,14 +69,14 @@ It is always good practice to include new tests if the current tests don't cover You can run ReEDS2PRAS tests by running: ```shell -cd ReEDS/reeds2pras/test +cd ReEDS/reeds/resource_adequacy/reeds2pras/test julia --project runtests.jl ``` or ```shell -cd ReEDS/reeds2pras/test +cd ReEDS/reeds/resource_adequacy/reeds2pras/test julia --project ``` From 8d65dd5047d8642c6a0291d8197c5e6d8002f8b6 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Wed, 8 Jul 2026 17:17:26 +0000 Subject: [PATCH 38/46] Modify ntfy.sh notification timing in bootstrap_CEPM.ps1 Updated notification logic to send a message before and after launching runreeds.py. --- bootstrap_CEPM.ps1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bootstrap_CEPM.ps1 b/bootstrap_CEPM.ps1 index 6acd790d4..24dda8c02 100644 --- a/bootstrap_CEPM.ps1 +++ b/bootstrap_CEPM.ps1 @@ -10,7 +10,7 @@ What this script does: 6) Instantiates Julia dependencies only when needed: a fast offline instantiate checks/heals the environment, falling back to the full `julia --project=. instantiate.jl` (which updates the registry) only if that can't satisfy the project (unless bypass mode is enabled). 7) Checks environment.yml against pyproject.toml and warns (non-fatal) on dependency drift beyond the known-accepted allowlist in CEPM/check_env_sync.py. 8) Starts runreeds.py and forwards any arguments passed to this script. -9) Sends an ntfy.sh notification (topic: rmi-cepm-run-batch-finished) once runreeds.py returns. Best-effort: a failed or offline notification is ignored. +9) Sends an ntfy.sh notification (topic: rmi-cepm-run-batch-finished) before runreeds.py is launched and once runreeds.py returns. Best-effort: a failed or offline notification is ignored. BYPASS option: @@ -237,6 +237,7 @@ if ($LASTEXITCODE -ne 0) { Write-Host 'Bootstrap complete. Starting ReEDS runreeds.py with forwarded arguments...' +#Pre-step 8: Notify ntfy.sh that a run batch has started. try { Invoke-RestMethod -Method Post -Uri "https://ntfy.sh/rmi-cepm-run-batch-finished" ` -Body "ReEDS run batch started on $(hostname) by $($env:USERNAME) at $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Out-Null From bbcc5ac3437714a303df8fd777ba9befabada0e1 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Wed, 8 Jul 2026 17:18:20 +0000 Subject: [PATCH 39/46] Update ntfy.sh notification description in README Clarified notification timing for ntfy.sh in README. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 46c8734bb..07e4c085e 100644 --- a/README.md +++ b/README.md @@ -152,7 +152,7 @@ This script performs the following steps in order: 6. Instantiates Julia dependencies only when needed: a fast offline check (`Pkg.instantiate` without a registry update) skips the work when the environment is already current, and only falls back to the full `julia --project=. instantiate.jl` (which updates the registry) if dependencies changed or are missing. 7. Checks `environment.yml` against `pyproject.toml` and prints a non-fatal warning if they have drifted beyond the known-accepted allowlist (see `CEPM/UV_MAMBA_GUIDE.md`). 8. Forwards all arguments to `runreeds.py`. -9. Sends a best-effort [ntfy.sh](https://ntfy.sh) notification (topic `rmi-cepm-run-batch-finished`) once `runreeds.py` returns, so you can be alerted when a long-running batch finishes. Subscribe to the topic in the ntfy app or at . A failed or offline notification is ignored. +9. Sends a best-effort [ntfy.sh](https://ntfy.sh) notification (topic `rmi-cepm-run-batch-finished`) before `runreeds.py` is launched and once it returns, so you can be alerted when a long-running batch finishes. Subscribe to the topic in the ntfy app or at . A failed or offline notification is ignored. Passing `-y` (or `--skip-setup` / `--bypass`) skips Step 5 (`uv sync --extra dev`) and Step 6 (Julia instantiation). All other checks and setup steps still run, and remaining arguments are still passed to `runreeds.py` From 255a86b93edf9929eea5427df6c8c7055eea90fd Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Wed, 8 Jul 2026 18:33:46 +0000 Subject: [PATCH 40/46] Rename CEPM bootstrap script, add notify flags Renames `bootstrap_CEPM.ps1` to `run_cepm.ps1` and updates docs/references in `README.md`, `AGENTS.md`, and `CEPM/UV_MAMBA_GUIDE.md` to match. The script now supports bootstrap-only `-q/--quiet` (disable ntfy notifications) and `-u/--user` (custom username in ntfy messages), strips long-form tokens before forwarding args to `runreeds.py`, and sends best-effort start/finish notifications with a short timeout. --- AGENTS.md | 2 +- CEPM/UV_MAMBA_GUIDE.md | 2 +- README.md | 16 ++--- bootstrap_CEPM.ps1 => run_cepm.ps1 | 93 +++++++++++++++++++++++------- 4 files changed, 82 insertions(+), 31 deletions(-) rename bootstrap_CEPM.ps1 => run_cepm.ps1 (73%) diff --git a/AGENTS.md b/AGENTS.md index 2c0986231..29a2f86fc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -85,7 +85,7 @@ Use this file as the first stop for agent orientation. Deeper references: - `.github/workflows/`: CI, docs, and workflow-quality automation. - `CEPM/`: RMI/CEPM-specific docs kept separate from upstream docs — `UV_MAMBA_GUIDE.md` (uv/mamba dependency mapping) and `internal-ci-testing.md` - (on-prem CI runbook). The CEPM run bootstrap is `bootstrap_CEPM.ps1` at repo root. + (on-prem CI runbook). The CEPM setup-and-run helper is `run_cepm.ps1` at repo root. ## Environment diff --git a/CEPM/UV_MAMBA_GUIDE.md b/CEPM/UV_MAMBA_GUIDE.md index c4946d238..7a5d809f0 100644 --- a/CEPM/UV_MAMBA_GUIDE.md +++ b/CEPM/UV_MAMBA_GUIDE.md @@ -10,7 +10,7 @@ automatic converter, so this is a manual mapping. `CEPM/check_env_sync.py` compares the two files and warns when they drift beyond a hard-coded allowlist of intentional exceptions (the "known-accepted" cases -below). `bootstrap_CEPM.ps1` runs it as a non-fatal step, or run it directly: +below). `run_cepm.ps1` runs it as a non-fatal step, or run it directly: ```bash uv run python CEPM/check_env_sync.py diff --git a/README.md b/README.md index 46c8734bb..3b47b2c68 100644 --- a/README.md +++ b/README.md @@ -134,13 +134,13 @@ Several large data files are hosted remotely. These files are downloaded automat Additional details on remote files and other topics can be found in the [user guide](https://reeds-model.github.io/ReEDS/user_guide.html#large-input-files). -### 4.5 Optional PowerShell bootstrap command +### 4.5 Optional PowerShell setup-and-run command (`run_cepm.ps1`) -Once you've cloned the repository, you can use an optional PowerShell bootstrap helper to +Once you've cloned the repository, you can use the optional PowerShell helper `run_cepm.ps1` to ensure supporting software is up to date and then immediately run runreeds.py: ```powershell -.\bootstrap_CEPM.ps1 +.\run_cepm.ps1 ``` This script performs the following steps in order: @@ -157,9 +157,11 @@ This script performs the following steps in order: Passing `-y` (or `--skip-setup` / `--bypass`) skips Step 5 (`uv sync --extra dev`) and Step 6 (Julia instantiation). All other checks and setup steps still run, and remaining arguments are still passed to `runreeds.py` +Two more bootstrap-only options: `-q` (or `--quiet`) disables the ntfy.sh notifications, and `-u ` (or `--user `) includes `` as the username in the notification messages (omitted when not given). All other arguments are forwarded to `runreeds.py`. + ```powershell -.\bootstrap_CEPM.ps1 -y -b v20250314_main -c test -.\bootstrap_CEPM.ps1 --bypass -b v20250314_main -c test +.\run_cepm.ps1 -y -b v20250314_main -c test +.\run_cepm.ps1 --bypass -b v20250314_main -c test ``` ### 5. Run ReEDS @@ -191,10 +193,10 @@ Run the following for information on other optional command-line arguments: uv run python runreeds.py -h ``` -PowerShell users can run setup + launch in one command with the bootstrap helper: +PowerShell users can run setup + launch in one command with `run_cepm.ps1`: ```powershell -.\bootstrap_CEPM.ps1 -b v20250314_main -c test +.\run_cepm.ps1 -b v20250314_main -c test ``` ## Troubleshooting diff --git a/bootstrap_CEPM.ps1 b/run_cepm.ps1 similarity index 73% rename from bootstrap_CEPM.ps1 rename to run_cepm.ps1 index 6acd790d4..b0b438652 100644 --- a/bootstrap_CEPM.ps1 +++ b/run_cepm.ps1 @@ -1,5 +1,5 @@ <# -Bootstrap script for ReEDS run setup. +run_cepm.ps1 -- set up the ReEDS environment and launch a ReEDS run (RMI/CEPM). What this script does: 1) Verifies GAMS is on PATH, checks GAMS license status, and prints a detected version string. @@ -10,19 +10,37 @@ What this script does: 6) Instantiates Julia dependencies only when needed: a fast offline instantiate checks/heals the environment, falling back to the full `julia --project=. instantiate.jl` (which updates the registry) only if that can't satisfy the project (unless bypass mode is enabled). 7) Checks environment.yml against pyproject.toml and warns (non-fatal) on dependency drift beyond the known-accepted allowlist in CEPM/check_env_sync.py. 8) Starts runreeds.py and forwards any arguments passed to this script. -9) Sends an ntfy.sh notification (topic: rmi-cepm-run-batch-finished) once runreeds.py returns. Best-effort: a failed or offline notification is ignored. - - -BYPASS option: - -y, --skip-setup, or --bypass - Skips Step 5 (`uv sync --extra dev`) and Step 6 (`julia --project=. instantiate.jl`). - Other checks and setup steps still run, and remaining args are forwarded to runreeds.py. +9) Sends an ntfy.sh notification (topic: rmi-cepm-run-batch-finished) before runreeds.py launches and once it returns. Best-effort: a failed or offline notification is ignored. Disabled with -q/--quiet; -u/--user adds a username to the message. + + +BOOTSTRAP-ONLY OPTIONS (consumed here; everything else is forwarded to runreeds.py): + -y, --bypass, --skip-setup + Bypass mode: skip Step 5 (`uv sync --extra dev`) and Step 6 (Julia + instantiation). Other checks/setup steps still run. + -q, --quiet + Disable the ntfy.sh notifications (both the pre-launch ping and Step 9). + -u, --user (also --user=) + Include as the username in the ntfy messages. When omitted, no + username is shown. + +RESERVED OPTIONS (do NOT add a bootstrap-only flag that reuses these): + All args other than the bootstrap-only options above are forwarded verbatim to + runreeds.py, so any short/long option runreeds.py defines is off-limits for this + script to claim for itself. As of this writing runreeds.py uses: + -b/--BatchName -c/--cases_suffix -s/--single -r/--simult_runs + -l/--forcelocal -f/--skip_checks -d/--debug -n/--debugnode + -p/--cases_per_node -t/--dryrun + (plus -h/--help from argparse). The bootstrap-only options above (-y, -q, -u) + were chosen to avoid these. If you add a new bootstrap-only switch, pick a + letter outside that set (and re-check against runreeds.py, which may change). Usage examples: - .\bootstrap_CEPM.ps1 - .\bootstrap_CEPM.ps1 -b v20260625_test -c test - .\bootstrap_CEPM.ps1 -y -b v20260625_test -c test - .\bootstrap_CEPM.ps1 --bypass -b v20260625_test -c test + .\run_cepm.ps1 + .\run_cepm.ps1 -b v20260625_test -c test + .\run_cepm.ps1 -y -b v20260625_test -c test + .\run_cepm.ps1 --bypass -b v20260625_test -c test + .\run_cepm.ps1 -q -b v20260625_test -c test + .\run_cepm.ps1 -u "Tyler Fitch" -b v20260625_test -c test #> # Initializing functions and variables for this script. @@ -30,12 +48,17 @@ Usage examples: # Accept and forward all remaining command-line args to runreeds.py. param( [switch]$y, # Bypass mode for skipping uv sync and Julia instantiate. We use y to prevent collision with runreeds options. + [switch]$q, # Quiet: disable the ntfy.sh notifications. -q is free of runreeds options. + [string]$u = '', # Username string to include in ntfy messages. -u is free of runreeds options. [Parameter(ValueFromRemainingArguments = $true)] [string[]]$RunbatchArgs ) -# Copy forwarded args and handle explicit bypass tokens if provided. +# Copy forwarded args and pull out our long-form tokens. PowerShell binds the short +# switches (-y/-q/-u) natively; the double-dash long forms are not real PowerShell +# parameters, so we strip them from the forwarded args by hand. Everything left is +# forwarded verbatim to runreeds.py. $ForwardArgs = @($RunbatchArgs) if ($ForwardArgs -contains '--bypass') { $y = $true @@ -45,6 +68,28 @@ if ($ForwardArgs -contains '--skip-setup') { $y = $true $ForwardArgs = @($ForwardArgs | Where-Object { $_ -ne '--skip-setup' }) } +if ($ForwardArgs -contains '--quiet') { + $q = $true + $ForwardArgs = @($ForwardArgs | Where-Object { $_ -ne '--quiet' }) +} +# --user NAME and --user=NAME take a value; pull them (and the value) out by hand. +$remainingArgs = @() +for ($i = 0; $i -lt $ForwardArgs.Count; $i++) { + $arg = $ForwardArgs[$i] + if ($arg -eq '--user') { + if ($i + 1 -lt $ForwardArgs.Count) { $u = $ForwardArgs[$i + 1]; $i++ } + continue + } + if ($arg -like '--user=*') { + $u = $arg.Substring('--user='.Length) + continue + } + $remainingArgs += $arg +} +$ForwardArgs = @($remainingArgs) + +# Optional ntfy username fragment: empty unless -u/--user was given. +$ntfyUser = if ([string]::IsNullOrWhiteSpace($u)) { '' } else { " by $u" } # Fail immediately on PowerShell (cmdlet) errors so setup issues do not get masked. $ErrorActionPreference = 'Stop' @@ -237,10 +282,12 @@ if ($LASTEXITCODE -ne 0) { Write-Host 'Bootstrap complete. Starting ReEDS runreeds.py with forwarded arguments...' -try { - Invoke-RestMethod -Method Post -Uri "https://ntfy.sh/rmi-cepm-run-batch-finished" ` - -Body "ReEDS run batch started on $(hostname) by $($env:USERNAME) at $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Out-Null -} catch {} +if (-not $q) { + try { + Invoke-RestMethod -Method Post -Uri "https://ntfy.sh/rmi-cepm-run-batch-finished" -TimeoutSec 5 ` + -Body "ReEDS run batch started on $(hostname)$ntfyUser at $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Out-Null + } catch {} +} # Step 8: Start ReEDS with any arguments passed to this bootstrap script. Write-Host '[run] uv run python runreeds.py ...' @@ -252,10 +299,12 @@ if ($LASTEXITCODE -ne 0) { # Step 9: Notify ntfy.sh that the run has finished. Useful for long-running runs. # Best-effort only -- wrapped so a failed or offline notification never affects -# the run outcome. -try { - Invoke-RestMethod -Method Post -Uri "https://ntfy.sh/rmi-cepm-run-batch-finished" ` - -Body "ReEDS run batch finished on $(hostname) by $($env:USERNAME) at $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Out-Null -} catch {} +# the run outcome; skipped entirely with -q/--quiet. +if (-not $q) { + try { + Invoke-RestMethod -Method Post -Uri "https://ntfy.sh/rmi-cepm-run-batch-finished" -TimeoutSec 5 ` + -Body "ReEDS run batch finished on $(hostname)$ntfyUser at $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Out-Null + } catch {} +} From c6c912e495d173ca2c82d80acfbea7790c113be2 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Thu, 9 Jul 2026 12:09:05 +0000 Subject: [PATCH 41/46] Notify on ReEDS run failure Add notification for failed ReEDS run using ntfy.sh. --- run_cepm.ps1 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/run_cepm.ps1 b/run_cepm.ps1 index b0b438652..cf8eaf14e 100644 --- a/run_cepm.ps1 +++ b/run_cepm.ps1 @@ -294,6 +294,12 @@ Write-Host '[run] uv run python runreeds.py ...' Set-Location $repoRoot Invoke-Native { uv run python runreeds.py @ForwardArgs } if ($LASTEXITCODE -ne 0) { + if (-not $q) { + try { + Invoke-RestMethod -Method Post -Uri "https://ntfy.sh/rmi-cepm-run-batch-finished" -TimeoutSec 5 ` + -Body "ReEDS run batch failed to finish on $(hostname)$ntfyUser at $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Out-Null + } catch {} + } throw 'runreeds.py failed.' } From 356edcd5d0327edf2af4095ba9335d2bcb20a551 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Thu, 9 Jul 2026 12:10:27 +0000 Subject: [PATCH 42/46] Implement failure notification for runreeds Add NTFY message notification on runreeds failure. --- run_cepm.ps1 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/run_cepm.ps1 b/run_cepm.ps1 index cf8eaf14e..29153625b 100644 --- a/run_cepm.ps1 +++ b/run_cepm.ps1 @@ -293,6 +293,8 @@ if (-not $q) { Write-Host '[run] uv run python runreeds.py ...' Set-Location $repoRoot Invoke-Native { uv run python runreeds.py @ForwardArgs } + +# Send a NTFY message on failure and exit if runreeds fails. if ($LASTEXITCODE -ne 0) { if (-not $q) { try { From 1b65ca75121874c0c5b6b2c7b513fb8ef09a0528 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Thu, 9 Jul 2026 12:19:51 +0000 Subject: [PATCH 43/46] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 190ba07ad..4fe94d8a7 100644 --- a/README.md +++ b/README.md @@ -152,7 +152,7 @@ This script performs the following steps in order: 6. Instantiates Julia dependencies only when needed: a fast offline check (`Pkg.instantiate` without a registry update) skips the work when the environment is already current, and only falls back to the full `julia --project=. instantiate.jl` (which updates the registry) if dependencies changed or are missing. 7. Checks `environment.yml` against `pyproject.toml` and prints a non-fatal warning if they have drifted beyond the known-accepted allowlist (see `CEPM/UV_MAMBA_GUIDE.md`). 8. Forwards all arguments to `runreeds.py`. -9. Sends a best-effort [ntfy.sh](https://ntfy.sh) notification (topic `rmi-cepm-run-batch-finished`) before `runreeds.py` is launched and once it returns, so you can be alerted when a long-running batch finishes. Subscribe to the topic in the ntfy app or at . A failed or offline notification is ignored. +9. Sends a best-effort [ntfy.sh](https://ntfy.sh) notification (topic `rmi-cepm-run-batch-finished`) before `runreeds.py` is launched and once it returns (on fail or success), so you can be alerted when a long-running batch finishes. Subscribe to the topic in the ntfy app or at . A failed or offline notification is ignored. A failed or offline notification is ignored. Note: ntfy.sh topics are public; avoid including sensitive information in notifications. Passing `-y` (or `--skip-setup` / `--bypass`) skips Step 5 (`uv sync --extra dev`) and Step 6 (Julia instantiation). All other checks and setup steps still run, and remaining arguments are still passed to `runreeds.py` From 90c3456eaa5bbc2e6de05f06a5f2a2a407f46f3a Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Thu, 9 Jul 2026 12:51:22 +0000 Subject: [PATCH 44/46] Revert endyear in cases_small.csv to 2030 --- cases_small.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cases_small.csv b/cases_small.csv index f5cfe7077..c4812e970 100644 --- a/cases_small.csv +++ b/cases_small.csv @@ -1,6 +1,6 @@ ,ND_small timetype,seq -endyear,2029 +endyear,2030 GSw_Region,st/ND GSw_BatteryMandate,0 GSw_Biopower,0 From 0bc9fc7e1ddf4c59074cb9ea3f818d7065bdcd7e Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Thu, 9 Jul 2026 12:51:59 +0000 Subject: [PATCH 45/46] Delete cepm_scenarios_changelog.md I think we decided to track this somewhere else --- cepm_scenarios_changelog.md | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 cepm_scenarios_changelog.md diff --git a/cepm_scenarios_changelog.md b/cepm_scenarios_changelog.md deleted file mode 100644 index 3be999378..000000000 --- a/cepm_scenarios_changelog.md +++ /dev/null @@ -1,3 +0,0 @@ -# CEPM Scenarios Changelog - -Put notes on CEPM scenarios and their changes here. From 64637bd6e13b6f2ea19ff8cf4dba262234fdd2f5 Mon Sep 17 00:00:00 2001 From: Tyler Fitch <95767834+ty-fi@users.noreply.github.com> Date: Thu, 9 Jul 2026 12:52:49 +0000 Subject: [PATCH 46/46] Delete Testing.ipynb - no longer supported We're not using this any more -- makes sense to delete --- Testing.ipynb | 44 -------------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 Testing.ipynb diff --git a/Testing.ipynb b/Testing.ipynb deleted file mode 100644 index 4387aaf4d..000000000 --- a/Testing.ipynb +++ /dev/null @@ -1,44 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 3, - "id": "1145f4d2", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4f4b8e3f", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "reeds (3.11.15)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -}